SQL开发工程师面试题及答题要点
SQL开发工程师(也叫数据库开发、部分公司混称DBA)面试通常2-3轮:一轮笔试或机试写SQL,一轮技术面深挖项目和调优,一轮主管面看沟通与稳定性。最容易挂的不是语法,而是说不出「为什么这么写」和真实线上问题处理经验。
专业基础
inner join、left join、right join、full join 的区别,什么时候用哪个?
考察点:考察join语义是否真懂,而不是背语法
别踩:只背定义不举业务例子,暴露没实际写过查询。
where 和 having 的区别?
考察点:基础过滤逻辑,顺带看是否理解执行顺序
别踩:只说「where不能跟聚合函数」却不解释为什么。
说说你对事务和ACID的理解?
考察点:考察数据一致性意识,是否碰过并发问题
别踩:四个特性背得滚瓜烂熟,但问「你项目里怎么用的」就答不上。
union 和 union all 有什么区别?
考察点:细节题,看写SQL的熟练度
别踩:不知道union有排序开销,暴露没关注过性能。
SQL调优与线上问题
一条SQL跑得很慢,你会怎么排查?
考察点:核心题:排查思路是否有章法
别踩:一上来就说「加索引」,没有排查过程,显得没处理过真实慢查询。
什么情况下索引会失效?
考察点:高频考点,考察索引原理理解
别踩:只背清单,追问「为什么最左前缀不满足就失效」就卡住。
explain 执行计划里你主要看哪些字段?
考察点:验证是否真的用过执行计划,而不是纸上谈兵
别踩:说不出type各档含义,或只认识一个all。
遇到过死锁或锁等待吗?怎么处理的?
考察点:线上事故处理经验,区分背书和实战
别踩:没遇到过却硬编,细节追问两句就露馅,不如坦诚说了解原理。
项目经历深挖
讲一个你做过的数据量最大的表或最复杂的查询?
考察点:验证项目真实性,看规模和复杂度上限
别踩:只说「我做了优化」却给不出前后对比数据。
你设计的表结构,举一个例子讲讲你的设计思路?
考察点:建模能力:字段、索引、扩展性怎么权衡
别踩:只展示ER图却不讲「为什么」,被追问设计取舍就慌。
你们团队的SQL上线流程是怎样的?你怎么保证质量?
考察点:工程规范意识,是否在正规流程里待过
别踩:回答「写完直接上线」,暴露没经历过有规范的环境。
情景应变与行为面试
线上一个批量更新把库搞挂了,你第一件事做什么?
考察点:应急意识:先止血还是先查因
别踩:先花十分钟查原因导致影响扩大,顺序错了直接扣大分。
业务方说报表跑不出来催得急,你怎么回应?
考察点:跨部门沟通和优先级判断
别踩:只顾埋头修不给反馈,业务方最反感的是没有时间承诺。
和后端开发在表设计上有分歧,他坚持要加很多冗余字段,你怎么办?
考察点:协作与坚持专业判断的平衡
别踩:要么硬顶要么全让,两种极端都显得不成熟。
为什么从上家公司离职?
考察点:稳定性风险和动机是否合理
别踩:抱怨前公司加班或领导,HR会直接给稳定性打低分。
反问环节
你有什么想问我们的吗?
考察点:看你对岗位的思考深度和入职意愿
别踩:说「没有问题了」,等于放弃展示动机的最后机会。
面试准备清单
| 什么时候 | 要做什么 |
|---|---|
| 面试前 3 天 | 把join、索引、事务、执行计划四大块过一遍,每块准备一个自己项目的实例 |
| 面试前 3 天 | 刷10-15道手写SQL题,重点练窗口函数和多表关联,很多公司有现场写SQL环节 |
| 面试前 1 天 | 把简历上每个项目准备好「数据量、问题、动作、结果」四要素,数字要能脱口而出 |
| 面试前 1 天 | 准备一个慢查询优化的完整故事:现象、排查、方案、效果对比 |
| 面试当天 | 提前登录好在线笔试环境,手写SQL时先写清思路再敲代码,注意边界条件 |
| 面试当天 | 准备2-3个反问问题,写在备忘录里,结尾环节直接用 |