MySQL考点分析与总结

我发现在 mysql 问的是真的多,比 redis 这些多太多了,不过问的内容比较集中,可以说,在所有的八股文中, mysql 和 计算机网络 和 Java 语言,这三者可以说是占据了绝大部分,也是所有八股文中,占比最多的三门知识

下面我先给大家分析一下 mysql 各个知识点的考点以及大公司和小公司在 mysql 上的考点,并且会按照出现的频率来给大家弄清楚考点,最后还有给出面试中都是怎么询问的。

希望大家可以认真看一下,看完你内心也有一个大概了。

一、考点比例分布

我在统计的时候,分成了多个个模块:索引 + 事务 + 锁 + 分库分表 + 其他。总的来说就是,索引和事务考的非常多,这两个占据了 80% 吧,然后索引会比事务多一点点,但是我觉得事务考的更难,其他的话,就是 锁 》其他〉分库分表。除了索引和事务考的比较多样性,其他的还是考的比较单调,主要索引和事务涉及比较多,特别是索引,种类多也多。

所以我觉得,如果要把握好索引,必须要知道原理,死死咬住原理,你才能能说会道,并且不需要去记忆。而要掌握事务,则需要理解,对事务的理解比较重要。

二、大公司与小公司

看了很多份面经,小公司的考察比较简单,问的比较常规,不会问一连串,比如问你索引的创建方式,或者问你索引的底层原理,但并不会问你 B+ 树与 B 树的比较。并且还会让你写一写 sql 语句,证明你是可以干活的。

总的来说就是,小公司对原理的考察比较简单,但是会考查细节,注重实用性,不会给你上升到很难的理论上,对于这些nion /union all 的区别

union和join区别这些实用性的要注意,小公司考察也比较多。

三、超详细考点总结(按照出现频率排序)

1.1 索引知识点总结

1、索引底层结构:选 B+ 树的原因,主要和哈希表,红黑树,B树对比一下。(另外 LSM 树也了解下,也有问到)

2、理解索引的种类(有些其实是同一种索引,但名字不一样):主键索引,非主键索引

3、掌握常见索引失效的情况

4、理解索引下推,覆盖索引,并且可以举例子。

5、创建索引的几种方式

6、掌握下 B 树和 B+ 树存储结构的不同就可以了,B+ 树怎么分裂的也了解下

7、另外还要区分下 innodb 和memory 不同引擎下索引的不同。

8、可以研究下,如果给你一个表,在什么情况下你会加索引,自己思考一套逻辑,有时候会问

9、复合索引的使用场景

10、自增ID也了解一下,就是在数据量大的时候,怎么生成 ID 好。

1.2 索引提问方式

1、什么是索引?

2、为什么索引会加快查询的速度?

3、mysql索引的底层实现?

4、为什么数据库索引用B+树,而不用list、map、二叉树或红黑树?

5、为什么不用B树?主要原因是什么?B+ 树,B 树的区别?

6、B+树的数据结构 ,B+树是怎么分裂的

7、索引的分类有哪些

8、加了索引一定会走索引吗?索引失效的情况有哪些?

9、如果我想要强制走某个索引,能实现吗

10、讲一下索引及其底层,非叶子节点存储的是什么,只有b+树索引吗?(MEMORY是hash索引)

11、讲一下Mysql聚集索引与非聚集索引,主键索引使用int与string有啥区别,你刚才说了索引底层b+树的结构,那么使用String会不会影响到这个结构

12、innodb中主键索引和非主键索引都是聚簇索引吗

13、给字段加索引最好怎么加?

14、什么情况下使用复合索引更好?

15、能说说复合索引编程需要注意的点吗

16、为什么使用模糊匹配会失效,你能给我解释一下底层原理吗?(???????)

17、为什么要⽤⾃增的主键?

18、用户id怎么生成?(DB自增不可靠,因为可能有多个机器共用一个DB,自增会溢出。从代码层面解释如何生成)?

19、索引下推是什么?

20、覆盖索引是什么?

21、联合索引,联合索引列(如 where a=,b=,c=)如何确定是 a b c 的顺序

22、组合索引+ like 会不会导致索引失效

23、mysql怎么创建索引

24、数据库优化了解哪些

25、从联合索引出发,要求画出联合索引B+树索引图

26、场景题:一个时间段、年龄 > 50 怎么建立索引

27、有1亿数据,走主键索引,mysql底层 IO次数是多少?

28、高并发的时候,请求量非常大,同时更新数据库的一条数据,这时候应该怎么处理?

2.1 事务知识点总结

1、理解为啥需要事务,以及事务的四大特性(最好能够举例子)

2、MVCC(问的很多)

3、掌握日志(undo log 和 redo log) 在事务中的作用(事务的实现就是基于这些)

4、理解两阶段提交

5、掌握几种常见的隔离级别(主要是可重复读,另外一个就是读提交),并且最好掌握下可重复读的实现原理

6、理解幻读 + 如何解决幻读,最好可以举例子。

7、binlog和redolog的区别

2.2 事务提问方式

1、事务隔离了解吗,什么是事务

2、mysql隔离级别有哪些啊,各有什么问题呢

3、不同的隔离级别解决了哪些问题?

4、Mysql了解吗,讲一下事务,那 mysql 是如何保证ACID的呢(答了undo-log,redo-log,加锁,mvcc),那讲一下MVCC

5、Mysql 怎么保证原子性的?(undo log)

6、Mysql 怎么保证持久性的?(redo log),Q:采用redo log的好处?

7、Mysql 怎么保证隔离性的?(锁 和 MVCC 机制)

8、快照读在提交读和可重复读级别下有什么区别?

9、在读提交(RC),可重复读(RR)两个不同的事务的隔离级别下,快照读有什么不同呢?

10、MySQL中为什么要有事务回滚机制?事务回滚的实现

11、幻读举个例子

12、innodb如何解决幻读

13、可重复读有没有解决这个幻读的问题?

14、可重复读是怎么实现的呢?

15、说说binlog和redolog,redolog两阶段提交的过程?

16、cap中的c和acid中的c有区别吗

17、从mysql事务出发,要求画出RC和RR隔离级别下的MVCC

18、从mysql update语句出发, 要求说出binlog 与 redolog一致性问题

19、undolog在宕机时怎么保证原子性

3.1 锁知识总结

1、理解 mysql 里面的乐观锁和悲观锁

2、锁的种类(虽然有很多中,但是记住常见的四五种就差不多了),说的时候最好举例子

3、记住行锁 锁的是索引

3.2 锁 的提问方式

1、mysql有哪些锁?

2、mysql里面的乐观锁和悲观锁熟悉吗

3、mysql是怎么实现乐观锁和悲观锁的?

4、那你了解哪些在SQL语句中可以用的悲观锁?

5、select for update是表锁还是行锁?

6、mysql怎么处理并发访问呢

7、间隙锁的原理?什么时候会加间隙锁?

4.1 其他知识总结

1、mysql 的几种常见引擎以及区别,重点关注下 InnoDB与MyISAM的区别

2、掌握 explain 的用法,用来干嘛

3、理解慢查询

4、了解下 inner join, left join, right join 的区别,以及 union 和 join 的区别 + union 和 union all 的区别。

5、视图,游标的概念

6、sql 注入问题

7、数据库三范式

4.2 其他的提问方式

1、mysql的存储引擎了解的有哪些

2、数据库引擎InnoDB与MyISAM的区别

3、看了用了数据库啊,那里觉得数据库有几种啊,mysql和redis比优势劣势呢

4、inner join,left join,right join区别

5、union /union all 的区别

6、union和join区别

7、听说过视图吗?那游标呢?

8、sql优化,说说explain需要关注哪些参数?

9、Explain进行查询性能优化,需要关注哪些字段?

10、慢查询

11、有一条mysql查询很慢,你有什么优化手段,请讲一下

12、mybatis sql语句里写 #和?的区别?

13、SQL注入,mybaits怎么防止SQL注入?

14、SQL语言四大类别

15、数据库三范式

16、雪花算法生成id,为什么不用数据库自增

17、场景题:所在的公司选择MySQL数据库作数据存储,一天五万条以上的增量,预计运维三年,你有哪些优化手段?

5.1 主从/分库分表的知识总结

1、理解为啥需要分库分表,需要从主

2、垂直分表和水平分表的概念

3、主从的难点在于同步、更新

关于从主这块,我觉得直接看问啥比较好吧

5.2 主从/分库分表等

1、垂直分表和水平分表

2、mysql主从架构

3、mysql双主架构在不分表的情况下保证数据一致性

4、如何避免mysql双主架构出现会循环的数据更新

5、回答:使用一个标志位,来标记请求的来源,如果是来自用户则执行后广播至其他主节点,如果来自其他主节点则执行。

发表评论

后才能评论