进入练答
求职面试 · 练习指南

后端开发面试常见问题与回答思路

后端开发面试考什么:项目经历会被连续追问,从需求背景问到技术选型,再问线上出过什么问题

考察方向

  1. 项目经历会被连续追问,从需求背景问到技术选型,再问线上出过什么问题
  2. 原理题不看背诵看应用,要说清为什么这样选、换一种方案会差在哪
  3. 系统设计题给一个并发或存储场景,看你怎么拆分、怎么估算、怎么兜底
  4. 排查题给一段异常现象,让你讲定位思路和验证顺序
  5. 协作题问你和前端、测试、运维怎么对齐接口与发布节奏

这场面试到底在考什么

后端面试有一个被反复误解的地方:很多人以为考的是"你背了多少八股"。八股确实会问,但它只是门票。面试官问你 HashMap 的底层,不是想听你复述"数组加链表加红黑树,负载因子 0.75",他想看的是你能不能从"是什么"往下再走一层,到"为什么这么设计、换一种设计会出什么问题"。能走到第二层的人,和只停在第一层的人,在面试官的评分表上不是一个档。

真正的主战场是你的项目。简历上写的每一行,面试官都默认可以问到底:数据量多大、QPS 多少、为什么选这个方案、当时有没有别的方案、后来出过什么问题。一个做过真实系统的人,讲项目时是有颗粒度的——他记得表有多少行、接口的 P99 是多少毫秒、那次故障是怎么定位到的。一个只跟着教程做过项目的人,讲到第三个追问就开始飘。面试官就是靠这个把人分开的,项目的真实深度决定了你在这场面试里的上限。

校招和社招的侧重点不太一样,但底层逻辑相同。校招更看基础扎不扎实、有没有潜力、碰到没见过的东西能不能现场推理;社招更看业务落地能力、线上问题处理经验和技术判断力——你做过的选择里,有多少是自己判断的,有多少是照搬的。不管哪种,"你为什么这么做"这个问题都会反复出现,你得习惯。

追问是常态,不是刁难。后端面试里面试官的基本操作就是顺着你的回答往下追,直到找到你的边界在哪。这不是为了让你难堪,而是他必须知道你的真实水平落在哪个区间,才能给出评价。所以被追到答不上来很正常,关键是你在边界处的表现:是诚实地说"这块我没深入过,但按我的理解应该是……",还是硬撑着编一个。前者面试官会记下"边界清楚、有推理能力",后者会记下"不靠谱"。

最后一个常被忽略的维度是表达。技术好但讲不清楚的人太多了。面试官在四十多分钟里能评估的,只有你说出口的那部分;你脑子里懂但没讲出来的,等于不存在。能把一个复杂系统用三句话讲清楚主干、再按需展开细节的人,天然就比想到哪说到哪的人分高。这是一个可以单独练出来的能力,和你的技术水平是两回事。

练习题与回答骨架

下面这些题在后端面经里反复出现,不分公司。每道题给出面试官问它的真实意图、回答的骨架(要点而不是范文),以及一个最常见的丢分点。

1. 介绍一下你做过的最有代表性的项目

为什么问这个:这是面试的起点,面试官要用它决定后面四十分钟往哪个方向追。你讲什么,他就问什么;你讲得越有颗粒度,他越能往技术深处走,而不是只能问八股。

回答骨架:

  • 一句话背景:这个系统给谁用、解决什么问题、规模量级(用户数、数据量、QPS 任选两个)。
  • 你负责的模块和边界:明确"我做的"和"团队做的",不要把整个系统说成自己的。
  • 一到两个技术难点:每个难点按"问题—方案—为什么选它—结果"讲,带数字。
  • 一个遗憾或改进点:说明你复盘过,也给面试官留一个自然的追问口。

常见扣分点:从头到尾讲业务功能,一个技术决策都没提,面试官听完不知道该从哪追问。

2. HashMap 的底层实现,为什么线程不安全,ConcurrentHashMap 怎么解决的

为什么问这个:看你对最基础数据结构的理解深度,以及对并发问题的敏感度。它是一道能从浅到深一路追下去的题,面试官很喜欢用它探边界。

回答骨架:

  • 结构:数组加链表,链表过长转红黑树,转换阈值和退化阈值说清楚。
  • 关键机制:哈希扰动的目的、扩容时机、为什么容量是 2 的幂次。
  • 线程不安全的具体表现:并发 put 丢数据、老版本扩容可能成环——要能说出"怎么发生的",不是只说"会出问题"。
  • ConcurrentHashMap 的演进:从分段锁到 CAS 加 synchronized 锁单个桶,以及为什么这样更好。

常见扣分点:只背出"数组加链表加红黑树",追问"为什么树化阈值是 8"就卡住,说明没理解泊松分布那段设计注释。

3. MySQL 为什么用 B+ 树做索引,什么情况下索引会失效

为什么问这个:数据库是后端最核心的依赖。这道题检验你是理解索引的物理原理,还是只会在 SQL 里加个 index。

回答骨架:

  • 从磁盘 IO 出发:B+ 树矮而宽,一次 IO 读一页,三四层就能覆盖千万级数据。
  • 对比红黑树、B 树、哈希:为什么它们各自不合适(范围查询、树高、非叶子节点存数据占空间)。
  • 聚簇索引和二级索引的区别、回表是什么、覆盖索引怎么避免回表。
  • 索引失效的典型场景:最左前缀不匹配、在索引列上做函数或运算、隐式类型转换、like 前置通配符、优化器判断全表扫描更快。

常见扣分点:把索引失效场景背成一个清单,追问"为什么对索引列做函数就走不了索引"答不出,说明不理解 B+ 树是按原始值有序存储的。

4. 事务隔离级别有哪些,MySQL 默认是哪个,怎么解决幻读

为什么问这个:看你对并发数据一致性的理解,以及有没有真的在业务里处理过并发写的问题。

回答骨架:

  • 四个级别和各自解决的问题(脏读、不可重复读、幻读),顺序要对。
  • MySQL InnoDB 默认可重复读,以及它在快照读下靠 MVCC、当前读下靠间隙锁和 next-key lock 处理幻读。
  • MVCC 的三要素:隐藏列、undo log 版本链、ReadView,能讲清一条记录的可见性判断。
  • 结合一个你业务里的例子:什么场景下你调过隔离级别或者用过 select for update。

常见扣分点:说"可重复读解决了幻读",不区分快照读和当前读,被追问"那为什么还需要间隙锁"就圆不回来。

5. Redis 缓存穿透、击穿、雪崩分别是什么,怎么处理

为什么问这个:几乎每个后端系统都有缓存。这道题看你是不是真的在生产环境碰过缓存的坑,还是只知道"缓存能加速"。

回答骨架:

  • 三个概念各用一句话区分:查不存在的数据、热点 key 过期瞬间、大量 key 同时过期或 Redis 宕机。
  • 对应方案:穿透用布隆过滤器或缓存空值;击穿用互斥锁或逻辑过期;雪崩用过期时间加随机、集群高可用、限流降级。
  • 缓存一致性:更新数据库和缓存的顺序、延迟双删、为什么不能完全一致只能最终一致。
  • 说一个你实际处理过的场景,哪怕是小规模的。

常见扣分点:三个概念混着说,或者方案和问题对不上,比如拿布隆过滤器去解决击穿。

6. 消息队列怎么保证消息不丢失、不重复消费

为什么问这个:消息队列是异步解耦的核心组件,这道题看你对"可靠性"的理解是否完整——不是某一端的问题,而是端到端的。

回答骨架:

  • 分三段讲:生产端(确认机制、重试、事务消息)、Broker 端(持久化、副本同步、刷盘策略)、消费端(手动 ack、先处理再提交位点)。
  • 不重复消费的本质是幂等:消费端靠唯一 ID 加去重表,或者业务天然幂等。
  • 明确"至少一次"和"恰好一次"的代价,以及为什么生产上通常选前者加幂等。
  • 顺序消息、消息积压怎么处理,作为进阶准备。

常见扣分点:只讲了其中一端,比如只说"消费端手动 ack",对生产端和 Broker 端的丢失场景没有意识。

7. 分布式锁怎么实现,Redis 锁和 ZooKeeper 锁的区别

为什么问这个:看你在分布式环境下对互斥和一致性的理解,以及是否知道"能用"和"可靠"之间的差距。

回答骨架:

  • Redis 方案:SET NX EX 原子加锁、value 存唯一标识防误删、Lua 脚本保证释放的原子性、看门狗续期。
  • Redis 锁的问题:主从切换时锁丢失、时钟漂移,以及 RedLock 的争议。
  • ZooKeeper 方案:临时顺序节点、watch 前一个节点避免羊群效应、会话断开自动释放。
  • 取舍:Redis 性能好但强一致性弱,ZooKeeper 可靠但吞吐低,根据业务对"锁丢失"的容忍度选。

常见扣分点:只说"用 setnx",追问"锁过期了但业务没执行完怎么办"答不上,说明没考虑过续期和误删。

8. 接口如何保证幂等性

为什么问这个:这是一道离真实业务最近的题。支付、下单、扣款都涉及幂等,面试官想知道你有没有真正设计过防重复的链路。

回答骨架:

  • 先明确哪些操作天然幂等(查询、删除、带版本号的更新),哪些需要额外设计(插入、累加)。
  • 常用方案:唯一索引、token 机制(先申请令牌再提交)、状态机、乐观锁版本号、去重表。
  • 按场景选:前端重复点击、网络重试、消息重投,各自最合适的方案不同。
  • 说一个你处理过的具体案例,包括重复请求是怎么发现的。

常见扣分点:把"加分布式锁"当成幂等方案,没有区分"互斥"和"幂等"是两个问题。

9. 线程池的核心参数,任务提交后的执行流程

为什么问这个:线程池是 Java 后端几乎必问的题,看你对并发资源管理的理解,以及会不会在生产上配置它。

回答骨架:

  • 七个参数逐一说清,重点是核心线程数、最大线程数、队列、拒绝策略之间的关系。
  • 执行流程:核心线程未满就创建、满了进队列、队列满了才开非核心线程、都满了才拒绝——顺序不能错。
  • 参数怎么定:CPU 密集和 IO 密集的经验公式,以及为什么经验公式只是起点,要压测。
  • 常见坑:用无界队列导致 OOM、用默认拒绝策略把异常吞掉、线程池内的任务抛异常没捕获。

常见扣分点:执行顺序说成"核心线程满了就开最大线程",把队列的位置放错。

10. JVM 内存区域划分,什么情况会 OOM,怎么排查

为什么问这个:看你是不是真的处理过 JVM 层面的线上问题。校招偏重理解内存模型,社招偏重排查经验。

回答骨架:

  • 运行时数据区:堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器,各自存什么、哪些线程共享。
  • OOM 的几种类型和典型成因:堆溢出(大对象、内存泄漏)、元空间溢出(动态生成类)、栈溢出(递归)、直接内存溢出。
  • 排查路径:先看 GC 日志和监控曲线、dump 堆、用分析工具找支配树里最大的对象、定位到代码。
  • GC 算法和收集器的演进,以及你生产上用的是哪个、为什么。

常见扣分点:能背出内存区域,但问"堆 OOM 了你第一步做什么"就只会说"加内存"。

11. 讲一次你排查线上问题的经历

为什么问这个:社招几乎必问,校招有实习经历的也会问。它看的是你的排查思路是否系统、面对压力是否冷静,以及事后有没有复盘。

回答骨架:

  • 现象:什么时候、什么指标异常、影响范围多大,用数字。
  • 定位路径:从现象到根因走了几步,每一步看了什么、排除了什么——这是面试官最想听的部分。
  • 根因和修复:根因要具体到代码或配置,修复分临时止血和长期方案。
  • 复盘:这件事之后加了什么监控、改了什么流程,避免再发生。

常见扣分点:直接跳到根因,跳过了"怎么找到的"这一段,面试官无法判断是你定位的还是别人告诉你的。

12. 设计一个秒杀系统,或者:如果现在的请求量涨十倍,你的系统哪里先崩

为什么问这个:系统设计题看的是你的工程判断,而不是某个具体技术。面试官想看你能不能把一个模糊的需求拆成清晰的约束,再逐层给出取舍。

回答骨架:

  • 先问清楚或主动假设约束:库存多少、预估峰值、允许超卖吗、要不要防刷。
  • 分层削峰:前端限流和按钮置灰、网关限流、Redis 预扣库存、消息队列异步下单、数据库最终扣减。
  • 关键难点逐个击破:库存扣减的原子性、热点 key、防止重复下单、库存回滚。
  • 说清每一层的取舍和兜底:限流误杀正常用户怎么办、Redis 和数据库库存不一致怎么对账。

常见扣分点:上来就画架构图堆组件,没有先界定约束,也没有说为什么每一层是必要的。

面试官/考官在听什么

第一条分水岭是"复述"和"推理"。平庸的回答是把知识点背出来:"B+ 树的叶子节点之间有双向链表"。好的回答是把知识点当成结论,把推导过程讲出来:"因为范围查询需要顺序遍历,如果叶子节点之间没有链表就得回到上层重新定位,所以 B+ 树在叶子层加了链表。"面试官一听就知道,前者是看过,后者是懂了。所有八股题都可以用这个标准自测:你能不能不用"是什么"开头,而用"为什么"开头讲一遍。

第二条分水岭是有没有数字。"数据量比较大"和"单表三千万行,日增五十万"是两个完全不同的回答。数字是你真正做过这件事的证据,没有数字的项目描述在面试官耳朵里默认打折。这不是说要编数字——编的数字在追问下一戳就破——而是说,面试前你应该回到项目里把真实的量级查出来、记住。哪怕是个小项目,也有它的数字:接口平均耗时、日活、表的行数、一次压测的结果。

第三条分水岭是有没有取舍。平庸的回答只说"我用了什么":用了 Redis、用了消息队列、用了分库分表。好的回答会说"我没用什么、为什么不用":"当时考虑过直接上分库分表,但数据量还没到那个程度,运维成本太高,最后先做了冷热分离。"取舍体现判断力,而判断力是面试官对社招候选人最看重的东西,对校招也是一个明显的加分项。

第四条分水岭是碰到不会的题时的反应。面试官一定会把你问到不会,这是他的工作。平庸的表现是沉默、绕开、或者硬编。好的表现是三步走:承认边界("这块我没有深入了解过")、给出推理("但按我对类似问题的理解,应该是……")、表达态度("面试后我会去看一下")。面试官在这一刻评估的不是知识,而是你的诚实度和学习方式,这两样在真实工作里比知识面重要得多。

开口练的方法

把项目讲成三个版本。同一个项目,准备三十秒、两分钟、十分钟三个版本,全部大声说出来并录音。三十秒版本是电梯演讲,只有背景、你的角色、一个亮点;两分钟版本加上技术难点和数字;十分钟版本是完整的设计和取舍。回放录音时只听一件事:主干在不在——听完能不能一句话复述你做了什么。绝大多数人第一次录完会发现,自己讲了五分钟但主干是散的。

给每道八股题挂一条"为什么"链。拿一道题,说出标准答案后,对自己追问三次"为什么":为什么是 B+ 树?为什么不是 B 树?为什么非叶子节点不存数据?每一层都要说出口,不能在脑子里"觉得懂了"就过。很多人的八股在第二层就断了,而面试官追问的位置恰好就在第二、三层。这个练法的要点是"说出口",因为嘴上说不出来的东西,脑子里多半也只是一个模糊的印象。

找一个不会放过你的追问者。自己练追问有一个天然的漏洞:你知道自己哪里虚,会下意识地绕开。朋友帮忙问又往往问得不够深、不够狠。这时候 AI 模拟面试的价值就出来了:它顺着你的回答往下追,你说"用了 Redis 做缓存",它会问"缓存和数据库怎么保证一致",你说"延迟双删",它会问"第二次删除失败了怎么办"。它不会因为气氛尴尬就放过你含糊的地方,而那些被追到卡壳的点,就是你明天面试前最该补的洞。

给简历上的每个项目配三个数字。面试前回到项目里,把真实的量级、性能指标、改进前后的对比找出来,写在简历旁边,然后练到张口就来。数字要真,不确定的就说"大约"或者"量级在"。讲数字时最好能顺带说出它的来源,比如"这是当时压测的结果"或者"这是从监控面板看到的峰值",这种细节会让面试官确信你真的做过。

练"不会时怎么说"。提前准备一套面对不会的题的表达方式,然后拿真正不会的题来练——不是练答案,是练那种诚实但有思路的状态。比如被问到没碰过的中间件,说"我没用过它,但如果它解决的也是消息可靠投递的问题,我猜它在 ack 机制上应该和我用过的类似,区别可能在……"。这个能力练过和没练过,现场表现差别很大。

对着空白页口述一道设计题。系统设计题不要只在脑子里想,也不要先写代码。打开一个空白文档或白板,计时十分钟,从"我先确认几个约束"开始,一边画一边说,把每一层为什么需要、不要会怎样讲出来。说完回看,如果你画了五个组件但只解释了两个的存在理由,那另外三个在面试里就是被追问的靶子。

常见误区

  • 把八股背成清单而不是因果链,面试官一追"为什么"就断,所有准备等于白做。
  • 讲项目时把团队的成果说成自己的,被追到细节答不上,反而让面试官怀疑你真正做的那部分。
  • 简历上写"熟悉"的技术,面试时答不出第二层,不如干脆写"了解"或者不写。
  • 以为面试官追问是在为难你,于是情绪紧绷、语速加快、开始防御,其实他只是在找你的边界。
  • 碰到不会的题硬编一个答案,被识破后前面所有回答的可信度一起打折。
  • 系统设计题上来就堆组件,没有先界定约束,讲得越多暴露的漏洞越多。
  • 只在脑子里"过一遍",从没大声说出口,上场才发现明明懂的东西讲出来是散的。

用练答怎么练

  1. 模拟面试:选定本场景,像真实问答一样开口完成一轮,并继续回答追问。
  2. 逐题复盘:练习结束后查看每题的问题与改进建议,修改表达后再练一遍。
  3. 简历工具:求职场景可围绕目标岗位整理简历重点;工具不改写你的真实经历。
  4. AI 面试辅助:正式面试进行中,AI 面试辅助实时提词,把回答要点即时递到你的屏幕上。(该功能不适用于国家教育考试等法律禁止的场景)

真实面试也能辅助

本场景练熟之后,真实视频面试(腾讯会议 / Zoom / 飞书等)进行中,还可以用AI 面试辅助实时提词:识别面试官的问题,把基于你本人简历组织的参考回答,显示在你自己屏幕的提词浮层上。只讲你本人的真实经历,不编造没有做过的事。不得用于国家教育考试等法律禁止的场景。

练答 AI 面试工具

AI 面试 · AI 模拟面试 · AI 面试辅助 · AI 笔试辅助 · AI 简历

常见问题

后端开发面试一个人怎么练?

先从库内考察方向“项目经历会被连续追问,从需求背景问到技术选型,再问线上出过什么问题”选一个重点,按真实问答节奏开口作答;遇到追问继续说明依据,不看稿完成一轮后,再用练答逐题复盘并重练同一重点。

后端开发面试重点是什么?

现有场景语料给出的重点是“项目经历会被连续追问,从需求背景问到技术选型,再问线上出过什么问题”。准备时应把这些要点拆成能口头说明的经历、判断或步骤,并以库内原文为边界,不补写没有依据的结论。

后端开发面试练完怎么复盘?

练完先回看每题是否真正覆盖“项目经历会被连续追问,从需求背景问到技术选型,再问线上出过什么问题”,再检查回答有没有说清依据、过程和边界。练答会给出逐题复盘和改进建议,改完后用同一考察点再完整回答一遍。

本页考察方向由练答依据该场景的公开考试形式与岗位面试通行做法核定;未经核实的具体题目不作补写。

后端开发面试开口练这题 →