岗位与流程
数据库内核岗分布在独立数据库厂商、云厂商与大厂自研团队,方向包括存储引擎、SQL 引擎(解析/优化/执行)、事务系统与分布式(复制/共识/分片)。流程通常为笔试 → 2~3 轮技术面 → HR 面,白板推导与系统设计占比高。
笔试与一面高频题
- 存储:B+ 树与 LSM-Tree 的读写放大对比、各自适合的负载;页结构与缓冲池管理(LRU 的坑与改进)。
- 事务:ACID 分别靠什么机制保证;MVCC 的版本链与可见性判断;两阶段锁与死锁检测。
- 日志与恢复:WAL 为什么必须先写日志;redo/undo 的分工;checkpoint 的作用。
- 查询:一条 SQL 的完整执行路径;优化器基于什么选索引和 join 顺序;hash join 与 merge join 的取舍。
- C/C++ 与系统:内存对齐、mmap 与 direct IO、多线程下的原子操作与内存序。
二面:设计与深挖
- 常见设计题:设计一个简化 KV 存储(接口/落盘格式/崩溃恢复),或讨论「怎么给现有引擎加一个二级索引」。
- 分布式方向会加:主从复制的一致性语义、Raft 选举与日志复制、分布式事务的两阶段提交缺陷。
- 做过 15-445/6.824 等课程实验的同学基本全程围绕实验深挖:哪个 checkpoint 最难、性能测试瓶颈在哪。
简历与准备建议
- 一个能通过公开测试的课程实验(bustub/miniob 等)加上自己的优化记录,是最有效的简历素材。
- 精读一个真实引擎的某个模块(如 InnoDB 的锁系统或 RocksDB 的 compaction)并能对比取舍,属于显著加分。
- 明确表达对「慢工出细活」型工作的接受度:内核迭代周期长,面试官会确认动机是否可持续。