vinqi.com

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个反问问题,写在备忘录里,结尾环节直接用

                                  常见问题

                                  SQL开发工程师面试会手写SQL吗?
                                  大概率会。常见形式是笔试题或在线平台现场写,重点是多表关联、分组聚合、窗口函数和连续登录类经典题。建议面试前至少手写10道找回手感,别只在脑子里过。
                                  SQL开发和DBA面试考的一样吗?
                                  有重叠但不完全一样。SQL开发偏重写查询、调优和建模;DBA更偏重备份恢复、主从架构、权限和故障处理。投递前看清JD,按岗位侧重准备,别答偏方向。
                                  没有大厂经验,怎么答调优问题?
                                  用小数据量项目的真实例子讲思路,重点展示排查方法论:看执行计划、检查索引失效、评估扫描行数。面试官更看重章法而非规模,硬编大厂经历反而容易露馅。
                                  这个岗位一般几轮面试?
                                  常见2-3轮:笔试或机试写SQL、技术面深挖项目和调优、主管或HR面看沟通与稳定性。部分公司会把笔试合进第一轮技术面里,现场白板或共享屏幕写题。

                                  继续看这个岗位

                                  相关岗位