10、数据库索引:为什么MySQL用B+树而不用B树

你好,我是大明。 从这节课开始,我们将进入数据库这一章。在实际工作中,数据库设计得好不好、SQL 写得好不好将极大程度影响系统性能。而且,即便是再小的公司,也不可能说没有数据库,所以如果你担忧自己因为没有微服务架构经验难以通过面试,那么数据库就可以成...

后端工程师的高阶面经

11、SQL优化:如何发现SQL中的问题

你好,我是大明。今天我们来聊一聊数据库中的 SQL 优化。 一般而言,在面试过程中,我都是鼓励你尽可能为自己打造熟练掌握性能优化技巧的人设。高并发项目经验可遇不可求,但是高性能是可以勉强追求的,性能优化就是追求高性能的方法。和我在微服务里面讲到的高可...

后端工程师的高阶面经

12、数据库锁:明明有行锁,怎么突然就加了表锁

你好,我是大明。今天我们来聊一聊 MySQL 中锁的问题。 锁在整个数据库面试中都是属于偏难,而且偏琐碎的一类问题。但是偏偏锁又很重要,比如说实践中遇到死锁影响了性能,这都要求我们必须对锁有一定的了解。并且锁的原理和索引、隔离级别都有关,所以很容易从...

后端工程师的高阶面经

13、MVCC协议:MySQL 在修改数据的时候,还能不能读到这条数据

你好,我是大明。今天我们来学习 MySQL 面试中非常重要的一个内容—— MVCC 协议。 MVCC(Multi-Version Concurrency Control)中文叫做多版本并发控制协议,是 MySQL InnoDB 引擎用于控制数据并发访...

后端工程师的高阶面经

14、数据库事务:事务提交了,你的数据就一定不会丢吗

你好,我是邓明。今天我们来学习数据库中非常重要的一部分——数据库事务。这节课的内容和前面 MVCC 的内容联系很紧密,你要结合在一起学习。 数据库事务在面试中占据了比较重的分量。如果你面的是非常初级的岗位,那么可能就是问问事务的 ACID 特性。不然...

后端工程师的高阶面经

15、数据迁移:如何在不停机的情况下保证迁移数据的一致性

你好,我是大明。今天我们来聊聊数据迁移的问题。 我之前就注意到很多人的简历里面都会提到数据迁移方面的内容。比如: 重构老系统:使用新的表结构来存储数据; 单库拆分分库分表、分库分表扩容; 大表修改表结构定义。 但是在面试的时候,他们就是说不清楚数...

后端工程师的高阶面经

16、分库分表主键生成:如何设计一个主键生成算法

你好,我是大明。今天我们来聊一聊分库分表——主键生成。 分库分表在面试里是一个非常热门,而且偏难的一个话题。这节课我就带你来攻克这个难题,带你了解UUID、自增主键和雪花算法的特点,并且教你在面试的时候刷出亮点。在这些基础上,我会进一步给出一个微创新...

后端工程师的高阶面经

17、分库分表分页查询:为什么你的分页查询又慢又耗费内存

你好,我是大明。今天我们来聊一聊分库分表分页查询。 在实践中,分页是分库分表之后肯定要解决的问题,如果解决方案没选好,那么很容易出现性能问题。分页的解决方案很多,不过能够在面试中系统地将所有的方案都说出来的候选人可以说是少之又少。所以你只需要记住这节...

后端工程师的高阶面经

18、分布式事务:如何同时保证分库分表、ACID和高性能

你好,我是大明。 我们在把单库拆分成为分库分表之后,一个巨大的挑战就是本地事务变成了分布式事务。事实上,即便没有分库分表,在微服务架构之下我们也还是会面临分布式事务的问题。所以,在学习了微服务架构又学习了分库分表之后,是时候深入讨论一下分布式事务了。...

后端工程师的高阶面经

19、分库分表无分库分表键查询:你按照买家分库分表,那我卖家怎么查

你好,我是大明,今天我和你来聊一聊分库分表下的一种特殊的查询——无分库分表键查询。 在很多业务里面,分库分表键都是根据主要查询筛选出来的。那么就会有这样一个问题,那些不怎么重要的查询怎么解决呢? 比如说大多数电商的订单都是按照买家 ID 来进行分库分...

后端工程师的高阶面经