面试常问之数据库

一、mysql

索引原理
为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?
事务的隔离级别以及每种隔离级别解决的问题
mysql中每种隔离级别的实现原理(MVCC+锁)
mysql锁分类以及常见增删改查语句的加锁分析
一条sql语句在mysql中的执行过程
mysql查询优化器对sql的优化过程(基于规则的优化、基于成本的优化)
如何使用explain进行sql优化
数据库死锁排查

以上大部分内容,我自己是通过看下面这个掘金小册学会的。作为后端开发,小册上的内容没必要都看,只需把我上述列的一些重点看了就行。
面试常问之数据库

二、redis

redis基础问题

5种基本数据类型(string、list、hash、set、zset)用法及实现原理
高级数据类型(位图、布隆过滤器)
数据持久化方式(AOF、快照)及原理
key的过期策略(定期删除、惰性删除)
redis集群模式(主从同步、哨兵模式、redis cluster)
Redis内存淘汰机制(lru)

redis疑难问题

缓存与数据库双写不一致
缓存雪崩(缓存机器全部出现宕机)
缓存穿透(恶意请求,访问不存在的数据,无法命中缓存)
缓存击穿(某个热点key突然失效)
缓存并发竞争(多客户端同时并发写一个 key)

以上问题我大部分是通过看Redis 深度历险:核心原理与应用实践这本书学习的,还有部分可以看advanced-java中与缓存相关的部分。