数据库核心技术
候选人小刘坐在字节跳动的面试间,面试官翻了翻简历,开口问道:
"线上有条 SQL 执行时间是 3 秒,你排查过吗?"
小刘说:"用 EXPLAIN 看了下,加了个索引。"
面试官:"加了什么索引?为什么加这个?最左前缀原则是什么?"
小刘开始擦汗。
面试官继续追问:"加了索引还是慢怎么办?explain 里的哪些字段你最关注?"
小刘支支吾吾,说了个 type=all,面试官眉头一皱。
这还没完。面试官翻到下一页,问:"MySQL 的事务隔离级别,你了解多少?RC 和 RR 的区别是什么?快照读和当前读呢?"
小刘彻底卡住了。
【面试官心理】 我出一道数据库题,十个候选人里有八个能说出几个关键词。但问到「为什么 InnoDB 选择 B+ 树而不是 B 树」,能接住的不超过三个。数据库面试的本质不是考记忆,是考你是否亲手排查过问题、分析过源码、理解过设计者的取舍。
目录概述
数据库是后端工程师的"地基",也是面试中区分 P5/P6 和 P7 的关键战场。
这一模块涵盖 MySQL、Redis、MongoDB、TiDB 等主流数据库,围绕三个核心维度展开:
- 原理层:索引结构、存储引擎、事务机制、MVCC、锁模型
- 实战层:慢查询优化、分库分表、主从复制、读写分离、缓存策略
- 面试层:高频追问、场景陷阱、生产避坑、方案选型
无论你是校招 P5 候选人,还是社招 P6/P7,数据库都是必考项。这不是背几个概念就能过的科目——面试官会追着你问到底层实现、生产案例、trade-off 权衡。
【面试官心理】 我出一道数据库题,十个候选人里有八个能说出几个关键词。但问到「为什么 InnoDB 选择 B+ 树而不是 B 树」,能接住的不超过三个。数据库面试的本质不是考记忆,是考你是否亲手排查过问题、分析过源码、理解过设计者的取舍。
内容范围
MySQL — Innodb 存储引擎 🔴
MySQL 是面试中数据库部分的绝对主角,尤其 InnoDB 存储引擎,几乎逢面必问。
索引体系:B+ 树索引结构、聚簇索引与辅助索引、最左前缀原则、覆盖索引、索引下推
事务与锁:ACID 特性、隔离级别(RU/RC/RR/SERIALIZABLE)、MVCC 原理、ReadView 机制、当前读与快照读、表锁/行锁/间隙锁/临键锁、死锁成因与排查
SQL 优化:EXPLAIN 分析、慢查询优化、索引失效场景、分页优化、COUNT(*) 优化
架构与高可用:主从复制原理(binlog)、读写分离、分库分表、Sharding
Redis — 内存数据库 🔴
Redis 是缓存领域的标配,也是面试中的高频亮点。它的数据结构、持久化机制、集群方案,每一块都是追问的深水区。
数据结构:SDS 简单动态字符串、Dict 字典、跳表(Ziplist/Quicklist 对比)、压缩列表、对象系统
线程模型:单线程模型原理、I/O 多路复用、命令执行流程、与 Memcached 的对比
持久化:RDB 快照、AOF 日志、混合持久化(4.0+)、数据恢复流程
缓存策略:缓存穿透、缓存击穿、缓存雪崩、缓存一致性、淘汰策略(LRU/LFU)、分布式锁、RedLock
高可用:主从复制、Sentinel 哨兵机制、Redis Cluster 槽分片、代理分片
性能与运维:内存优化、大 key 问题、Pub/Sub、事务(MULTI/EXEC)、Pipeline
MongoDB — 文档数据库 🟡
MongoDB 面向高并发写入和灵活 Schema 场景,在内容平台、物流系统、日志系统中应用广泛。
数据模型:BSON 格式、文档模型设计、Schema 设计与范式化
索引:索引类型(单字段/复合/多键/地理空间)、索引机制、覆盖查询
聚合:聚合管道、MapReduce、聚合阶段优化
高可用:副本集(Replica Set)原理、分片集群(Sharded Cluster)架构、Shard Key 选型
选型对比:MongoDB vs MySQL 的场景选择、TiDB 兼容性对比
TiDB — 分布式关系型数据库 🟢
TiDB 是 NewSQL 的代表,提供水平扩展能力与 MySQL 协议兼容。
架构原理:分布式 SQL 架构、存储计算分离、TiKV 与 TiFlash
生态工具:数据迁移、生态兼容性、DM 同步工具
其他数据库 🟢
覆盖 PostgreSQL、达梦、GaussDB 等国产数据库的选型对比与特性分析,帮助你拓宽技术视野。
学习路径指引
第一阶段:MySQL 根基(必学)
如果你只有时间学一个数据库,那就选 MySQL。从索引结构到事务原理,从 SQL 优化到主从复制,这条链路覆盖了 80% 的数据库面试题。
建议阅读顺序:
- InnoDB vs MyISAM — 理解存储引擎选择
- B+ 树索引 — 索引原理的核心
- 聚簇索引与辅助索引 — 索引落地方式
- 隔离级别与 MVCC — 事务核心
- ReadView 机制 — 快照读的实现
- 锁机制 — 行锁与表锁
- 慢查询优化 — 实战落地
第二阶段:Redis 进阶(高频)
Redis 是面试中能拉开差距的模块。它不像 MySQL 那么"重",但知识点之间的关联性极强,数据结构 → 持久化 → 缓存策略 → 集群方案,这条链路必须闭环。
建议阅读顺序:
- 线程模型 — 单线程为什么快
- 数据结构 — 底层实现
- 持久化机制 — RDB/AOF/混合
- 缓存穿透/击穿/雪崩 — 生产三连
- 分布式锁 — 手写级别的重点
- Redis Cluster — 高可用方案
第三阶段:MongoDB / TiDB(按需)
这两个模块面向有特定场景需求的候选人。MongoDB 适合内容/文档类业务场景,TiDB 适合需要水平扩展的关系型数据场景。
面试题分级速查
面试数据库部分,面试官最怕听到的是"背书式回答"——概念说得出来,但一问细节就崩。建议每个知识点至少追问自己三遍:这个设计为什么是这样?有别的方案吗?生产环境会出什么问题?
导航指引
MySQL
- InnoDB vs MyISAM
- B+ 树索引
- 聚簇索引与辅助索引
- 最左前缀原则
- 索引失效场景
- 覆盖索引
- 索引条件下推 ICP
- EXPLAIN 分析
- 慢查询优化
- ACID 特性
- 隔离级别
- MVCC 原理
- ReadView 机制
- 当前读与快照读
- 锁机制
- 间隙锁与临键锁
- 死锁问题
- SQL 优化
- 主从复制与 binlog
- 读写分离
- 分库分表
- 分页优化
- COUNT 优化
Redis
- 线程模型
- 数据结构
- SDS 动态字符串
- 跳表
- 持久化机制
- 混合持久化
- 缓存穿透
- 缓存击穿
- 缓存雪崩
- 缓存一致性
- 淘汰策略
- 分布式锁
- RedLock
- 主从复制
- Sentinel 哨兵
- Redis Cluster
- 性能优化
- 内存优化
- 事务机制
- Pub/Sub
- Redis vs Memcached