MySL考什么 + 高频题汇总

由于内容较多,我分类出来汇总了,全部面试题汇总的看这里:八股文题库(必看)

关于 MySQL 我先说下面试考察形式:基本必问了,一般就问理论了,索引问的最多,并且个人认为 mysql 不会问的很难,不过细节很多,有时候被问到不懂的细节,就认栽吧,另外有时候还会让你写下简单的 sql 语句。

最稳的准备方式:

理论:索引,锁,事务,日志这些。

手写sql语句:简单的语句,牛客网有一些练习,可以刷一刷,怎么着也要刷 10+ 道:SQL练习

实战:会分析 sql 的性能,就是要会用一些命令去分析,一般就这几个(我秋招总结的,explain最重要):

image-20220224135819505

考察难度:根据我的观察,大部分情况下,考察都比较中规中矩,不怎么难,可能事务日志相关的会难一点,但是更多的还是问索引

关于学习资料:有基础直接看 MySQL原理剖析课程,不过单独看这个还不够完整(另外主从备份那里随便了解下就行,被问到就认栽吧),毕竟一个专栏不可能面面俱到,那对于一些重点且专栏没有的,我下面给你们找文章总结了,另外零基础入门的可以看咱们课程的视频:MySQL入门课程

不过无论你看了哪些,我都希望你可以来看下我总结的这些面试题,并且每道题我都会说下大致怎么回答这些,当然,我不可能面面俱到哈,只能说给你们总结高频的题。

当然,如果你觉得懂,可以不看,但是没有把握的,都得看哈,面试题训练,这是训练营最重点的一个环节,大家认真看下,这块我花了很多时间弄的,每个视频和文章,都自己看过很多之后,筛选出来,无论你看不看,都要重视下我说的那些知识点。

另外,大家可以做一下笔记,帅地个人是推荐自己做笔记哈,不是直接 copy 别人的笔记。如果你想参考我做的,我当时是这样做

image-20220224141119488

注意注意注意:以下必看,即使不看,也要看我提到的点,整明白我提到的点,如果你整明白了,那么大部分都可以应付了。

以下很多文章来自咱们的 Mysql 专栏:MySQL原理剖析课程,不过我强调了需要注意的点,其实 mysql 会考的内容也不是很多,下面总结的是比较高频的考点,不会面面俱到哈,不然就不适合快速复习了

索引模块(最最重要)

泛问题:说一说索引:这里强调下,很多面试官会让你说一说索引,这是属于泛问题,按照我说的,把你懂的,流畅给我扯出来,你先去给我准备一个模版扯,我之前录制过如何回答视频:如何回答面试官问题

一、为什么MySQL数据库要用B+树存储索引?(必看):看完明白为啥用B+树,为啥不用B树,红黑树,哈希表这些,下面是两个重点且容易没说到的点:

1、减少磁盘操作:B+树非叶子不存 Value,指存放 key,所以一次更可以加载更多节点,减少磁盘加载到内存的次数

2、范围查找更多优势:mysql经常有范围查找,B+树的叶子结点之间是一个双向链表,很好支持范围查找

3、查找速度快:B+树类似一个多路的树了,所以同样节点,树的高度更低,查找速度更快(当然,更重要的点依然是减少)

其他的不做强调。

补充:不懂 B 树的,学一下 B 树,有时候可以扯到为啥用 B+ 而不用 B,并且顺便问你 B 树的应用,比如问啥文件系统用 B 树,看这篇(不懂的一定要看):高频面试题:什么是B树?为啥文件索引要用B树而不用二叉查找树?

二、

深入浅出索引(上)

深入浅出索引(下)

目标:

1、不多说,基础概念的普及,普通索引,主键索引以及他们的区别,核心区别就是叶子结点一个存放主键,一个存放一整行内容

2、覆盖索引,回表你得懂,最左匹配原创,索引下堆都得懂,里面也有对应的例子

三、MyISAM与InnoDB的索引,究竟有什么差异?:掌握他们的索引底层实现的差异,另外,InnoDB与MyISAM的差别也要掌握啊,比较关键的就是 InnoDB 支持行锁和事务,而MyISAM不支持。

一、行锁、表锁和全局锁两这篇全局锁和表锁 + 行锁功过:怎么减少行锁对性能的影响?,如果面试官问你有哪些,你在介绍的时候,顺便举一下例子,比如什么时候会牵扯到行锁。

注意点:另外记得 MyISAM 不支持行锁,并且要注意,行锁是锁在索引上,具体可以看这篇:行锁到底锁住的是什么?记录?字段?索引?,回答行锁的时候,可以强调一下,不过你得懂哈,如果面试官问你细节,你懂,那么加分,不然就是踩坑。

二、InnoDB七种锁:上面那篇只说了三种,其实细分到话有很多种,这篇作为一个补充了,比较重要的是间隙锁,如果面试被问到有哪些锁,你记的住的话,也可以说着七种了,当然也可以不说其中了,简单列几个你觉得自己掌握了的就行,并且最好的给出例子。

三、一条sql执行的很慢的原因有哪些:看完能够回答 sql执行的慢的原因,一般就是等锁,等 flush,没走索引,没走所以又分为 sql 本身问题 + 系统统计出错,可以按照玩文章的思路回答,另外,要自己会用 show processlist 命令查状态 + 用 EXPLAIN 查看 sql 语句的执行计划,有时候面试官会问这些命令

四、为什么我只改一行的语句,锁这么多?:有时候面试官会问你执行 sql 语句会加哪些锁,一般不会问很难,就问一些简单的 sql,希望你看了这篇文章,可以掌握一些基本的。。

五、幻读是什么,幻读有什么问题?:能够解释什么是幻读 + 如何避免幻读

日志与事务

日志:一条SQL更新语句是如何执行的?:目标

1、看完知道 redo log 和 binlog 的区别,另外 redo 是 InnoDB 引擎特有的,而 bingo 是所有引擎共有

2、掌握为啥需要两阶段提交,这个其实有点难,这个还和事务有关,关于这个两阶段提交,可以问的很深,大家一定要想通一个问题:那就是事务是如何保证一致性的

事务隔离:为什么你改了我还看不见?:记住几个事务不难,难的是掌握它的实现原理,大家可以多看两次,如果能掌握就尽量掌握,就掌握文中可重复读的原理就行,掌握不了也没事了

其他

如何用 explain 来分析 sql 的性能:目标
1、掌握学会用 explain 来分析 sql 的执行计划

2、居然要分析,那就是掌握 type 参数的含义,所以掌握常见 type 参数含义,自己在命令行玩一玩哈,这个explain在工作上也经常用

补充分析 sql 又一关键字段:Extra,这篇也看看,那么分析 sql 基本搞定

技巧:反正有机会你就扯这两个,说一说自己是如何用这个命令 + 这两个关键字来分析 sql 语句的,比如在项目中的数据库要执行一个 sql 语句时,对于不确定的 sql 都会先用 explain 分析下。

数据库允许空值(null),往往是悲剧的开始:null 在数据库是个特殊的值,得好好了解一下,比如能 =null,而是用 is null,比如 null 有没有建立索引啥的

常用命令总结:得掌握这几个

image-20220224135819505

这两篇也掌握下:

count( * )这么慢,我该怎么办

进阶

有条件的同学,主从复制 + 分库分表也看下,主从复制的话,咱们那个 mysql原理剖析有,分库分表则没有,看这几个视频就行:
1. 体验一波分库分表连环炮

2. 聊一聊你们公司是如何玩分库分表

3. 你们当时是如何把系统不停机迁移到分库分表的?

4. 那如何设计可以动态扩容缩容的分库分表方案?

5. 分库分表之后全局id咋生成

6. 说说MySQL读写分离的原理?主从同步延时咋解决?

发表评论

后才能评论