后端开发工程师面试问题:面试官到底会问什么
作者 Aaron Cao · 更新于

后端面试通常集中在五个方向:API 设计、数据库与数据建模、缓存与性能、并发与可靠性,以及系统设计环节,通常还会搭配一轮代码题。面试官关心的不是你说出了哪些工具名称,而是你能否讲清权衡取舍,并复盘一次你调试过的故障。
后端开发工程师面试会考察哪些内容?
后端职位描述里往往列出十几种技术,很难判断面试到底会考哪些。本节梳理了后端面试轮次中反复出现的问题领域。技术栈因公司而异,但底层考察的话题相当稳定。
- API 设计。REST 与 RPC 的取舍、版本管理、分页、错误响应、身份验证,以及幂等键。
- 数据库与数据建模。选择关系型还是文档型存储、索引、连接查询、事务、隔离级别、N+1 查询,以及如何安全地执行 schema 迁移。
- 缓存与性能。缓存失效、过期策略、缓存击穿,以及如何分析一个响应缓慢的接口。
- 并发与可靠性。竞态条件、锁、队列、超时,以及带退避的重试机制。
- 系统设计。例如设计短链接服务、限流器或通知系统。
- 编码题。数据结构与实际问题,通常可以用你熟悉的语言作答。
语言和框架专项轮次会更深入具体细节;题库中心收录了 Go、Java、Spring Boot、微服务等更多题集。
哪些数据库和 API 问题最常被问到?
这些问题以各种形式出现在大多数后端面试轮次中。练习时,试着在两分钟内大声讲完每一个答案:
- 给某一列加索引会发生什么?什么情况下加索引反而有害?
- read committed 和 serializable 隔离级别有什么区别?什么时候值得为更严格的级别付出代价?
- 如何在 ORM 中发现并修复 N+1 查询?
- 如何让一个支付接口能够安全地被客户端重试?
- 当结果集在用户滚动过程中不断变化时,如何做分页?
- 什么时候会选择文档型数据库而不是关系型数据库?
- 如何在不停机的情况下完成一次列重命名?
一个有说服力的回答通常遵循同样的结构:先说明你的默认选择,再说明这个选择的代价,最后描述什么情况下你的答案会反过来。面试官经常会追问那个“反过来”的情况,所以要准备一个真实的例子。
系统设计和调试类问题该怎么回答?
回答系统设计题时,先澄清需求:谁会调用这个服务、什么数据绝对不能丢失、读写比例大致如何。然后画出能work的最简单设计,只有当你能说清楚是哪个需求逼着你这么做时,才加入缓存、队列或分片。
调试类问题最能体现真实经验。一位应聘某支付公司中级职位的后端工程师被问到:为什么某个接口在一次发布后延迟翻倍了。他没有靠猜测原因,而是描述了自己的排查步骤:检查这次发布改了什么、对比慢路径的调用链路、查看查询执行计划,并用同一个延迟指标验证修复效果。接着他把这次经历和上一份工作中的一次慢查询事故联系了起来,后面的对话基本都围绕那次事故展开,而不是围绕工具展开。
在任何一场后端面试前,都准备好两个生产环境的故事:一个是你追查到底的 bug,一个是你现在会做出不同选择的设计决策。
该如何练习?实时助手能帮上什么忙?
看着答案念和真正说出来是两回事。可以掐着表把上面的问题列表大声练一遍,或者用模拟面试工具来提问,并对含糊的回答进行追问。
在真正的视频面试中,SubcueAI 会转录面试官的话,并在本地悬浮窗里草拟结构化的回答要点——既可以在 macOS 或 Windows 桌面客户端中使用(适用于 Zoom、Google Meet、Microsoft Teams),也可以在浏览器扩展的侧边栏中用于 Chrome 或 Edge 标签页里的通话。没有机器人会加入通话。它在对话性质的环节中最有用,比如设计讨论和经历类问题。共享屏幕的编码环节、有监考的测评、录制的单向面试,以及公司托管设备,都超出了它能安全覆盖的范围,而且你在屏幕上分享的任何内容都是可见的。设置方法见教程页面。