众所周知,简历上“了解=听过名字;熟悉=知道是啥;熟练=用过;精通=做过东西”。(文末有跳槽涨薪福利)
相信大家对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构。索引作为MySQL中比较重点的知识,在面试中出现的频率特别高。
本人自认为对MySQL的索引知识相当了解,同事们工作中也都热情的称呼我为大佬。为了进阿里,我特地花了1个月左右时间复习相关知识,自信满满的在简历上写了“精通MySQL”,想不到被阿里面试官狠狠虐了一把…
前半段和面试官相谈甚欢,聊着聊着我提到我们业务量比较大,每天大概有几百万的新数据生成,面试官来了兴趣.........
面试官:你们每天这么大的数据量,都是保存在关系型数据库中吗?
我:是的,我们线上使用的是MySQL数据库。
面试官:那你们有没有对查询做一些优化呢?
我:我们用了索引。
阿里面试题
(由于篇幅问题,接下来的内容我只列出了阿里面试官的问题,自己能答上来的大概只有一半)
- 你能说说为什么B+树相对于B树在查询上会更加优胜吗?
- 除了上面这个范围查询之外,你还能说出其他的一些区别吗?
- 刚刚我们聊到B+ Tree,那你知道B+Tree的叶子节点都可以存哪些东西吗?
- 聚簇索引和非聚簇索引,在查询数据的时候有区别吗?
- 刚刚你提到主键索引查询只会查一次,而非主键索引需要回表查询多次。所有情况都是这样的吗?关键索引一定会查询多次吗?
联合索引、最左前缀匹配
- 你们在创建索引的时候都会考虑哪些因素呢?你们有用过联合索引吗?
- 那你们在创建联合索引的时候,需要做联合索引多个字段之间的顺序你们是如何选择的呢?
索引下推、查询优化
- 你知道在MySQL 5.6中,对索引做了哪些优化吗?
- 你们创建的那么多索引,到底有没有生效,或者说你们的SQL语句有没有使用索引查询你们有统计过吗?
- 那排查的时候,有什么手段可以知道有没有走索引查询呢?
- 那什么情况下会发生明明创建了索引,但是执行的时候并没有通过索引呢?
- 哦,索引有关的知识我们暂时就问这么多吧。你们线上数据的事务隔离级别是什么呀?
对于程序员来说,去任何一家公司面试,数据库是避不开的。开发人员对MySQL掌握的越深入,你能做的事情就越多。
目前大厂春招已经开始了,如果想要最后再冲刺一下,或者是提前为今年的秋招做准备的,我强烈建议你看一下这份现在圈内疯狂转发的《Java面经》。朴实无华全是干货,毕竟这几个月面试竞争压力大,多看多学,知道面试官要问什么很关键,这样有很大概率在千千万万的面试者中脱颖而出。
限于文章篇幅原因,只能以截图的形式展示出来, 👇🏻 👇🏻 有需要的小伙伴可以文末获取 👇🏻 👇🏻
部分目录:
内容截图:
Java基础部分
Java多线程部分
数据结构与算法部分
Linux命令部分
Java 内存模型 和 垃圾回收部分
总结
内容太多我懒得一一截图了你们领了自己去慢慢看吧,绝对有收获! 限于文章篇幅原因,只能以截图的形式展示出来, 👇🏻 👇🏻 有需要的小伙伴可以文末获取 👇🏻 👇🏻