数据库核心技术

候选人小刘坐在字节跳动的面试间,面试官翻了翻简历,开口问道:

"线上有条 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% 的数据库面试题。

建议阅读顺序:

  1. InnoDB vs MyISAM — 理解存储引擎选择
  2. B+ 树索引 — 索引原理的核心
  3. 聚簇索引与辅助索引 — 索引落地方式
  4. 隔离级别与 MVCC — 事务核心
  5. ReadView 机制 — 快照读的实现
  6. 锁机制 — 行锁与表锁
  7. 慢查询优化 — 实战落地

第二阶段:Redis 进阶(高频)

Redis 是面试中能拉开差距的模块。它不像 MySQL 那么"重",但知识点之间的关联性极强,数据结构 → 持久化 → 缓存策略 → 集群方案,这条链路必须闭环。

建议阅读顺序:

  1. 线程模型 — 单线程为什么快
  2. 数据结构 — 底层实现
  3. 持久化机制 — RDB/AOF/混合
  4. 缓存穿透/击穿/雪崩 — 生产三连
  5. 分布式锁 — 手写级别的重点
  6. Redis Cluster — 高可用方案

第三阶段:MongoDB / TiDB(按需)

这两个模块面向有特定场景需求的候选人。MongoDB 适合内容/文档类业务场景,TiDB 适合需要水平扩展的关系型数据场景。

面试题分级速查

级别重点考察期望深度
P5索引类型、事务 ACID、Redis 基本数据类型能说出概念,不怵追问
P6MVCC、锁机制、慢查询优化、Redis 持久化与集群理解原理,能回答追问
P7主从复制细节、分库分表设计、Redis 集群一致性、数据一致性方案有生产经验,能做权衡
💡

面试数据库部分,面试官最怕听到的是"背书式回答"——概念说得出来,但一问细节就崩。建议每个知识点至少追问自己三遍:这个设计为什么是这样?有别的方案吗?生产环境会出什么问题?

导航指引

MySQL

Redis

MongoDB

TiDB / 其他