碧血丹心网

简历上写着“精通 MySQL”,阿里面试官非要跟我死磕,最后还是给我发了 offer

简历上写着“精通 MySQL”,阿里面试官非要跟我死磕,最后还是给我发了 offer

事情是简历这样的

前段时间因为想要跳槽就去面试了下阿里,大家也都清楚,上写精通这个词在简历上属于很难把握住的着精一个词,如果你在你的阿里简历上面写着你精通 XX 技术,那面试官就会默认你是面试真的很会,刨根问底问到你崩溃。官非跟死

我之前就是磕最在自己的简历上写了一项精通 MySQL,然后就开启了和阿里面试官的后还 battle 之路,当然最终结果不差,简历拿到了一份我很满意的上写高薪 offer。

我自己有一个习惯,着精我也建议大家也养成这个习惯。阿里就是面试每次面试后我都会对这次面试进行复盘总结,一来能让我清楚自己对哪方面掌握得还不够,官非跟死及时查漏补缺;二来也大概清楚了面试的磕最方向,让自己在面试前有侧重点地去复习准备,未雨绸缪。这样一套下来,面试成功并且拿到高薪 offer 的几率一定会高很多。

当然,这次死磕到底的 MySQL 知识点我自然也有整理好,这些知识不仅可以用于面试,在日常的工作学习中也都非常有帮助。

Link Start

闲话不多说,直接上干货吧,大概有 40 多个关于 MySQL 的问题,我都整理起来了

01. 基础架构:一条 SQL 查询语句是如何执行的?

MySQL 的逻辑架构图

 

02. 日志系统:一条 SQL 更新语句是如何执行的?

之前你可能经常听 DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时,你是不是心中也会不免会好奇,这是怎样做到的呢?

03. 事务隔离:为什么你改了我还看不见?

 

提到事务,你肯定不陌生,和数据库打交道的时候,我们总是会用到事务。最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱。

转账过程具体到程序里会有一系列的操作,比如查询余额、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没做减法之前,你这 100 块钱,完全可以借着这个时间差再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这时就要用到“事务”这个概念了。

 

04. 说说索引(上)

提到数据库索引,我想你并不陌生,在日常工作中会经常接触到。比如某一个 SQL 查询比较慢,分析完原因之后,你可能就会说“给某个字段加个索引吧”之类的解决方案。但到底什么是索引,索引又是如何工作的呢?

 

05. 说说索引(下)

06. 全局锁和表锁 :给表加个字段怎么有这么多阻碍?

数据库锁设计的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。

 

07. 行锁功过:怎么减少行锁对性能的影响?

MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB 是支持行锁的,这也是 MyISAM 被 InnoDB 替代的重要原因之一。

 

 

08. 事务到底是隔离的还是不隔离的?

 

09. 普通索引和唯一索引,应该怎么选择?

 

10. MySQL 为什么有时候会选错索引?

不知道你有没有碰到过这种情况,一条本来可以执行得很快的语句,却由于 MySQL 选错了索引,而导致执行速度变得很慢?

 

11. 怎么给字符串字段加索引?

现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是要讨论的问题。

 

12. 为什么你的 MySQL 会“抖”一下?

平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,这就像是数据库“抖”了一下。今天,我们就一起来看一看这是什么原因。

 

13. 为什么表数据删掉一半,表文件大小不变?

我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?

 

14. count(*)这么慢,你该怎么办?

在开发系统的时候,你可能经常需要计算一个表的行数,比如一个交易系统的所有变更记录总数。这时候你可能会想,一条 select count(*) from t 语句不就解决了吗?

但是,你会发现随着系统中记录数越来越多,这条语句执行得也会越来越慢。然后你可能就想了,MySQL 怎么这么笨啊,记个总数,每次要查的时候直接读出来,不就好了吗。

 

15. 日志和索引相关问题

16. “order by”是怎么工作的?

17. 如何正确地显示随机消息?

 

 

18. 为什么这些 SQL 语句逻辑相同,性能却差异巨大?

在 MySQL 中,有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。

我今天挑选了三个这样的案例和你分享。希望再遇到相似的问题时,你可以做到举一反三、快速解决问题。

19. 为什么我只查一行的语句,也执行这么慢?

20. 幻读是什么,幻读有什么问题?

21. 为什么只改一行的语句,锁这么多?

22. MySQL 有哪些“饮鸩止渴”提高性能的方法?

不知道你在实际运维过程中有没有碰到这样的情景:业务高峰期,生产环境的 MySQL 压力太大,没法正常响应,需要短期内、临时性地提升一些性能。

23. MySQL 是怎么保证数据不丢的?

24. MySQL 是怎么保证主备一致的?

大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?咱们就好好唠唠这个问题。

25. MySQL 是怎么保证高可用的?

Ending

限于文章篇幅原因,就展示到这里了,有需要的小伙伴+文末wx名片免费领取 

吃透后这份 pdf,你同样可以跟面试官侃侃而谈 MySQL。其实像阿里 p7 岗位的需求也没那么难(当然也不简单),扎实的 Java 基础+无短板知识面+对某几个开源技术有深度学习+阅读过源码+算法刷题,这一套下来 差不多没什么问题,最后希望大家都能拿到高薪 offer 吧。

未经允许不得转载:碧血丹心网 » 简历上写着“精通 MySQL”,阿里面试官非要跟我死磕,最后还是给我发了 offer