当前位置:网站首页>想进阿里必须啃透的12道MySQL面试题
想进阿里必须啃透的12道MySQL面试题
2022-07-05 14:29:00 【InfoQ】
1. 能说下myisam 和 innodb的区别吗?
2. 说下mysql的索引有哪些吧,聚簇和非聚簇索引又是什么?
create table user(
id int(11) not null,
age int(11) not null,
primary key(id),
key(age)
);
3. 那你知道什么是覆盖索引和回表吗?
explain select * from user where age=1; //查询的name无法从索引数据获取
explain select id,age from user where age=1; //可以直接从索引获取
4. 锁的类型有哪些呢
5. 你能说下事务的基本特性和隔离级别吗?
6. 那你说说什么是幻读,什么是MVCC?
select * from user where id<=3;
update user set name='张三三' where id=1;
select * from user where id<=3 and create_version<=3 and (delete_version>3 or delete_version is null);
- 小明开启事务current_version=6查询名字为'王五'的记录,发现不存在。
- 小红开启事务current_version=7插入一条数据,结果是这样:
- 小明执行插入名字'王五'的记录,发现唯一索引冲突,无法插入,这就是幻读。
7. 那ACID靠什么保证的呢?
8. 那你知道什么是间隙锁吗?
begin;
select * from user where age=20 for update;
begin;
insert into user(age) values(10); #成功
insert into user(age) values(11); #失败
insert into user(age) values(20); #失败
insert into user(age) values(21); #失败
insert into user(age) values(30); #失败
(negative infinity,10],(10,20],(20,30],(30,positive infinity)
9. 那分表后的ID怎么保证唯一性的呢?
- 设定步长,比如1-1024张表我们设定1024的基础步长,这样主键落到不同的表就不会冲突了。
- 分布式ID,自己实现一套分布式ID生成算法或者使用开源的比如雪花算法这种
- 分表后不使用主键作为查询依据,而是每张表单独新增一个字段作为唯一主键使用,比如订单表订单号是唯一的,不管最终落在哪张表都基于订单号作为查询依据,更新也一样。
10. 你们数据量级多大?分库分表怎么做的?
11. 分表后非sharding_key的查询怎么处理呢?
- 可以做一个mapping表,比如这时候商家要查询订单列表怎么办呢?不带user_id查询的话你总不能扫全表吧?所以我们可以做一个映射关系表,保存商家和用户的关系,查询的时候先通过商家查询到用户列表,再通过user_id去查询。
- 打宽表,一般而言,商户端对数据实时性要求并不是很高,比如查询订单列表,可以把订单表同步到离线(实时)数仓,再基于数仓去做成一张宽表,再基于其他如es提供查询服务。
- 数据量不是很大的话,比如后台的一些查询之类的,也可以通过多线程扫表,然后再聚合结果的方式来做。或者异步的形式也是可以的。
List<Callable<List<User>>> taskList = Lists.newArrayList();
for (int shardingIndex = 0; shardingIndex < 1024; shardingIndex++) {
taskList.add(() -> (userMapper.getProcessingAccountList(shardingIndex)));
}
List<ThirdAccountInfo> list = null;
try {
list = taskExecutor.executeTask(taskList);
} catch (Exception e) {
//do something
}
public class TaskExecutor {
public <T> List<T> executeTask(Collection<? extends Callable<T>> tasks) throws Exception {
List<T> result = Lists.newArrayList();
List<Future<T>> futures = ExecutorUtil.invokeAll(tasks);
for (Future<T> future : futures) {
result.add(future.get());
}
return result;
}
}
12. 说说mysql主从同步怎么做的吧?
- master提交完事务后,写入binlog
- slave连接到master,获取binlog
- master创建dump线程,推送binglog到slave
- slave启动一个IO线程读取同步过来的master的binlog,记录到relay log中继日志中
- slave再开启一个sql线程读取relay log事件并在slave执行,完成同步
- slave记录自己的binglog
13. 那主从的延迟怎么解决呢?
- 针对特定的业务场景,读写请求都强制走主库
- 读请求走从库,如果没有数据,去主库做二次查询
边栏推荐
- Oneconnect listed in Hong Kong: with a market value of HK $6.3 billion, ye Wangchun said that he was honest and trustworthy, and long-term success
- mysql 自定义函数 身份证号转年龄(支持15/18位身份证)
- Why do mechanical engineers I know complain about low wages?
- MySQL user-defined function ID number to age (supports 15 / 18 digit ID card)
- Make the seckill Carnival more leisurely: the database behind the promotion (Part 2)
- LeetCode_ 2 (add two numbers)
- Scenario based technology architecture process based on tidb - Theory
- 非技术部门,如何参与 DevOps?
- CyCa children's physical etiquette Ningbo training results assessment came to a successful conclusion
- Thymeleaf 模板的创建与使用
猜你喜欢
区间 - 左闭右开
The IPO of Ruineng industry was terminated: the annual revenue was 447million and it was planned to raise 376million
PHP - fatal error: allowed memory size of 314572800 bytes exhausted
Tiflash compiler oriented automatic vectorization acceleration
Mingfeng medical sprint technology innovation board: annual revenue of 350million yuan, proposed to raise 624million yuan
Share 20 strange JS expressions and see how many correct answers you can get
How to introduce devsecops into enterprises?
How can non-technical departments participate in Devops?
Tidb DM alarm DM_ sync_ process_ exists_ with_ Error troubleshooting
Chow Tai Fook fulfills the "centenary commitment" and sincerely serves to promote green environmental protection
随机推荐
Chow Tai Fook fulfills the "centenary commitment" and sincerely serves to promote green environmental protection
R语言使用ggplot2包的geom_histogram函数可视化直方图(histogram plot)
Time to calculate cron expression based on cronsequencegenerator
What are the advantages and characteristics of SAS interface
Sharing the 12 most commonly used regular expressions can solve most of your problems
网上电子元器件采购商城:打破采购环节信息不对称难题,赋能企业高效协同管理
Structure - C language
Topology可视化绘图引擎
循环不变式
LeetCode_ 67 (binary sum)
矩阵链乘 - 动态规划实例
Strong connection component
mysql8.0JSON_ Instructions for using contains
PHP - fatal error: allowed memory size of 314572800 bytes exhausted
【leetcode周赛总结】LeetCode第 81 场双周赛(6.25)
总量分析 核算方法和势方法 - 分摊分析
Thymeleaf 使用后台自定义工具类处理文本
mysql 自定义函数 身份证号转年龄(支持15/18位身份证)
世界环境日 | 周大福用心服务推动减碳环保
Show strength. In this way, the mobile phone will not be difficult to move forward