思考并回答以下问题:
你在回答的时候,最好是能够写成一个个文档,至少也要口头上说一遍。千万不要仅仅在脑海里面回忆一遍。因为在真正面试的时候,脑海中的记忆到嘴里说出的话,还需要一个转换。
10|数据库索引:为什么MySQL用B+树而不用B树?
1,什么是覆盖索引?
2,什么是聚簇索引/非聚簇索引?
3,什么是哈希索引?MySQL InnoDB引擎怎么创建一个哈希索引?
4,什么回表?如何避免回表?
5,树的高度和查询性能是什么关系?
6,什么是索引最左匹配原则?
7,范围查询、Like之类的查询怎么影响数据库使用索引?
8,索引是不是越多越好?
9,使用索引有什么代价?
10,如何选择合适的索引列?组合索引里面怎么确定列的顺序?状态类的列是否适合作为索引的列?
11,为什么MySQL使用B+树作为索引的数据结构?为什么不用B树?为什么不用红黑树?为什么不用二叉平衡树?为什么不用跳表?
12,NULL对索引有什么影响?
13,唯一索引是否允许多个NULL值?
11|SQL优化:如何发现SQL中的问题?
1,请你解释一下EXPALIN命令。
2,你有优化过SQL吗?具体是怎么优化的?
3,你有没有优化过索引?怎么优化的?
4,怎么优化COUNT查询?
5,怎么优化ORDER BY?
6,怎么优化LIMIT OFFSET查询?
7,为什么要尽量把条件写到WHERE而不是写到HAVING里面?
8,怎么给一张表添加新的索引/修改表结构?如果我的数据量很大呢?
9,USE INDEX/FORCE INDEX/IGNORE INDEX有什么效果?
12|数据库锁:明明有行锁,怎么突然就加了表锁?
1,什么是行锁、表锁?什么时候加表锁?怎么避免?
2,什么是乐观锁?怎么在MySQL里面实现一个乐观锁?
3,什么是意向锁?可以举一个例子吗?
4,什么是共享锁和排它锁?它们有什么特性?
5,什么是两阶段加锁?
6,什么是记录锁、间隙锁和临键锁?
7,RC级别有间隙锁和临键锁吗?
8,MySQL是怎么在RR级别下解决幻读的?
9,什么情况下会加临键锁?什么情况下会加间隙锁?什么时候加记录锁?
10,唯一索引和普通索引会怎么影响锁?
11,你遇到过什么死锁问题吗?怎么排查的?最终又是怎么解决的?
12,你有没有优化过锁?怎么优化的?
13|MVCC协议:MySQL修改数据时,还能不能读到这条数据?
1,什么是MVCC?为什么需要MVCC?
2,什么是隔离级别?隔离级别有哪几种?
3,什么是脏读、不可重复读、幻读?它们与隔离级别的关系是怎样的?
4,隔离级别是不是越高越好?
5,你们公司用的是什么隔离级别?为什么使用这个隔离级别?能不能使用别的隔离级别?
6,你有没有改过隔离级别?为什么改?
14|数据库事务:事务提交了,你的数据就一定不会丢吗?
1,什么是undo log?为什么需要undo log?
2,什么是redo log?为什么需要redo log?
3,什么是binlog?它有几种模式?用来做什么?
4,事务是如何执行的?
5,什么是ACID?隔离性和隔离级别是什么关系?你觉得哪个隔离级别满足这里的隔离性要求?
6,redo log的刷盘时机有哪些?该如何选择?你们公司用的是哪个配置?为什么用这个配置?
7,binlog的刷盘时机有哪些?该如何选择?你们公司用的是哪个配置?为什么用这个配置?
8,我的事务提交了,就一定不会丢吗?怎么确保一定不会丢?
9,什么是page cache?为什么不直接写到磁盘?
10,在分布式环境下,当服务器告诉我写入成功的时候,一定写入成功了吗?如果服务器宕机了了可能发生什么?
15|数据迁移:如何在不停机的情况下保证迁移数据的一致性?
1,你们单库拆分的时候是如何做数据迁移的/你们修改大表结构的时候是怎么做数据迁移的?怎么在保持应用不停机的情况下做数据迁移?
2,什么是双写?为什么要引入双写?
3,如果双写的过程中,有一边写失败了,怎么办?
4,你可以用本地事务来保证双写要么都成功,要么都失败吗?分布式事务呢?
5,为什么有一个阶段是双写,但是以目标表为准?干嘛不直接切换到单写目标表?
6,你们有什么容错方案?比如说如果在迁移过程中出错了,你们的应用会怎么办?
7,你们是怎么校验数据的?
8,增量数据校验你们是怎么做的?
9,数据迁移你能够做到数据绝对不出错吗?
10,如果数据出错了你们怎么修复?怎么避免并发问题?
11,让你迁移一个2000万行的表,你的方案大概要多久?
12,你用过mysqldump/XtraBackup吗?它有什么缺点?
16|分库分表主键生成:如何设计一个主键生成算法?
1,你们分库分表怎么生成主键的?
2,使用UUID/数据库自增/雪花算法有什么优缺点?
3,雪花算法是如何实现的?
4,雪花算法是怎么做到全局唯一的?
5,怎么解决雪花算法的序列号耗尽问题?
6,怎么解决雪花算法的数据堆积问题?
7,你有没有优化过主键生成的性能?怎么优化的?效果如何?
8,你的主键生成的ID是严格递增的吗?不是递增有什么问题?
9,为什么我们一般使用自增主键?
10,什么是页分裂?有什么缺点?
17|分库分表分页查询:为什么你的分页查询又慢又耗费内存?
1,你们公司是怎么解决分页查询的?平均查询性能如何?
2,为什么分页查询那么慢?
3,全局查询有什么优缺点?对于一个查询LIMITXOFFSETY来说,如果我命中了三张表,会取来多少数据?
4,怎么提高分页查询的速度?
5,什么是二次查询?它的步骤是什么样的?
6,怎么在二次查询里面计算全局的偏移量?
7,二次查询有什么优缺点?
8,代理形态的分库分表中间件有什么优缺点?怎么解决或者改进它的缺点?
9,使用中间表来进行分库分表,有什么优缺点?怎么设计中间表?
10,在使用中间表的时候,你怎么保证数据一致性?你能保证强一致吗?如果不能,不一致的时间最差是多久?
11,你们公司有没有考虑使用别的中间件来解决分页查询?你选择哪一个?为什么?
18|分库分表事务:如何同时保证分库分表、ACID及高性能?
1,你们公司在分库分表之后,如何解决事务问题?
2,什么是两阶段提交协议?有什么缺点?
3,什么是三阶段提交协议?相比两阶段,改进点在哪里?
4,什么是XA事务?
5,你觉得XA事务是否满足ACID?为什么?
6,什么是TCC?
7,什么是SAGA?
8,什么是AT事务?
9,什么是延迟事务?延迟事务失败了怎么办?为什么分库分表中间件喜欢用延迟事务?
10,你们公司是否允许跨库事务?为什么?有什么场景是必须要使用跨库事务的?
19|分库分表无分库分表键查询:按买家分库分表,卖家怎么查?
1,你们公司的分库分表是怎么分的?一般情况下怎么选择分库分表键?
2,假设说现在我的订单表是按照买家ID来分库分表的,现在我卖家要查询,怎么办?
3,利用中间表来支持无分库分表键查询的时候,怎么设计中间表?
4,为什么在买家分库分表的时候,按照4832,但是同样的数据,按照卖家分库分表的时候,就只需要按照2816?
5,广播有什么缺点?
6,可以使用什么中间件来支持复杂查询?你们公司用了什么?
20|分库分表容量预估:分库分表时怎么计算所需库、表的数量?
1,你是怎么估计容量的?考虑了什么因素?
2,你怎么知道数据未来增长会有多快?
3,你这容量是预估了几年的数据量?为什么?
4,你是怎么利用流量录制和重放来验证数据的?
5,在流量录制之后,重放之前,如果数据修改了,你的数据校验还能正常运行吗?
6,你公司用的是HTTPS协议吗?使用HTTPS协议你怎么录制流量?
7,为什么大家都喜欢用2的幂来作为容量?
8,怎么扩容?有哪些步骤?
9,如果你发现之前分库分表分太多了,能不能缩容?假如要你缩容,你怎么办?
21|数据库综合应用:怎么保证数据库高可用、高性能?
1,你们有没有做过数据库优化?有没有做过InnoDB引擎优化?
2,你调过什么数据库相关的参数?为什么要调?
3,InnoDB引擎的buffer pool是拿来做什么的?怎么优化它的性能?
4,buffer pool是不是越大越好?过大或者过小都有什么问题?怎么确定合适的大小?
5,数据库里面有很多刷盘相关的参数,你都了解吗?调过吗?根据什么来调?
6,你有没有做过主从分离?主从延迟是什么?怎么解决主从延迟?
7,你们公司的数据库主节点宕机了会发生什么?
8,什么是查询缓存?你们公司有没有用查询缓存?