尽管上一篇的内容,对于初学者来说,已经算是稍微有点难度了,但是对于有一点工作经验的开发人员来说,仍然算不上有难度,所以这一篇将从面试的角度,总结一下需要了解的知识点,这一篇将只列知识点,不给答案,或者给一个大致的方向。如果要面试的人,也可以试着回答以下问题。如果你现在不想深入研究MYSQL,毕竟人的精力都是有限的,也可以把以下内容,放入到你的TODO LIST中去,以后再慢慢研究,我的建议是,每个编程的人,都应该有一个自己编程的笔记本,例如微软的ONE NOTE,印象笔记、苹果的备忘录(我正在用),然后有一个笔记,是专门存放要做的事情的,在任何时候,任何地点,遇到了不会的东西,立即放入TODO LIST中去。这也是一种编程思想,你想一下,消息队列(MQ)是不是就是这个思路,很多地方都是这个思路,这里就不一一列举了。
1、索引篇
- mysql哪些索引会命中,哪些不会命中?
- 怎么查看mysql索引是否命中? explain查看执行计划
- 联合索引哪些情况索引会命中? 哪些不会呢?
- mysql底层索引是什么数据结构? B+树
- 聚簇索引和覆盖索引有什么区别?
- mysql索引为什么快?
- mysql索引为什么用B+,而不是B树?
- 建了索引一定就会快吗? 不是
- 建了索引,且索引命中了,就一定会快吗?不是
- varchar类型的列有100个长度,适合建索引吗? 如果不适合,怎么解决?
- 哪些列适合建索引? 区分度大的列适合,像ID
- 哪些列不适合建索引? SEX这种 text 长度大的varchar
- varchar和char有什么区别?
- 索引有什么坏处? 新增和更新、删除慢了点,占用磁盘空间大了点等等
- 什么是慢SQL?怎么查看MYSQL的慢SQL?
- 做过哪些MYSQL的查询优化?
2、事务篇
之前的内容没有讲解事务,但是高级开发人员是必须精通事物的,本篇不打算讲解事务,只给出几个问题,网上的资料也很多,可以自己去找一下
- 什么是事务?
- 事务的4个特性是什么? ACID
- 分别解释ACID是什么意思?
- 事务的隔离级别有几种?MYSQL默认是什么级别?
- 什么是脏读、不可重复读、幻读?
- MVCC和事务隔离级别的关系?
- 事务的传播机制是什么?
- @Transactional哪些情况会失效?
3、锁篇
- 什么是间隙锁?
- 什么是行锁?
- 死锁是怎么产生的?
- 怎么避免死锁?
- 事务和锁是什么关系?
4、安全
- 什么是SQL注入?
- 怎么避免SQL注入?
- mybatis中#和$的区别
5、其它
- 电商的订单号可以用自增ID吗?
- (延伸)怎么设计1个分布式的自增ID,要求不能重复,高性能,高可用。
- innerDB的自增ID,断电重启之后会怎么样?
- 数据库字段设计有哪些经验?
- timestamp和datetime有什么区别?
- MYSQL支持模糊查询吗?
- 看过MYSQL的慢日志吗?
- 数据库连接池用的哪个?
- 为什么要用连接池?
- 连接池各个参数设置的都是多少?
如果想更深入的学习MYSQL,可以看一下<高性能MYSQL>这本书,讲的会更细,对于MYSQL的执行流程、索引、缓存、调优等都有特别深入的讲解,远远比这篇文章讲的要多的多。
全文完。
关注我的博客,获取更多Java编程知识: 双King的技术博客