JAVA BACKEND

Java后端面试题怎么准备?从语言原理到系统证据

Java后端面试通常从语言、并发和JVM逐步进入数据库、缓存、消息队列与系统设计。比背结论更重要的是说明适用条件、失败模式、监控指标,以及你在真实项目中承担了什么。

发布与复核:2026-08-19复核:面试稳产品与支持团队阅读约 11 分钟

Java后端面试的回答框架

用“语义—机制—场景—故障—验证”回答技术题。先给出准确含义,再解释运行机制;随后说明何时使用、可能怎样失败,最后给出测试、日志、指标或项目证据。

例如回答线程安全,不要停在“加锁”。应先指出共享可变状态和并发访问,再比较不可变对象、线程封闭、原子变量、锁与并发容器,解释可见性、原子性、活性和性能代价。Oracle并发教程与JLS把内存一致性和happens-before作为关键基础,但具体实现仍要结合当前JDK文档。

重点知识地图

层次核心问题常见追问
Java语言对象、泛型、异常、集合、反射equals/hashCode、类型擦除、不可变性
并发内存模型、锁、线程池、并发容器happens-before、死锁、任务背压
JVM内存区域、类加载、GC、诊断泄漏与溢出、停顿、线程与堆分析
数据层事务、索引、隔离、连接池慢查询、死锁、幂等与一致性
分布式组件缓存、消息、服务调用击穿、重复消费、超时与重试
系统设计容量、可靠性、可观测性P95、降级、限流、故障恢复

并发题怎样避免只背术语?

volatile和synchronized有什么区别?

回答应从问题出发:volatile用于建立特定的可见性和有序性关系,不能把复合读改写操作自动变成原子操作;synchronized通过监视器提供互斥,并建立相应的happens-before关系。选择时要说明共享状态、临界区和竞争程度,而不是只列关键字定义。

线程池参数怎样定?

先区分CPU密集与I/O等待,再结合到达率、单任务耗时、下游容量、队列长度和延迟目标。必须说明拒绝策略、监控、超时和优雅关闭。固定公式只能作为初始估计,最终要压测并观察队列、活跃线程和下游错误。

死锁怎么查?

确认线程是否长期等待,获取线程转储查看锁持有与等待关系,再定位不一致的加锁顺序或跨资源事务。修复可包括统一锁顺序、缩小临界区、超时或减少嵌套;不能简单靠增加线程数。

JVM问题怎样连接到线上诊断?

  1. 先描述症状:延迟上升、吞吐下降、CPU高、内存增长、频繁GC或进程退出。
  2. 检查时间相关的指标、GC日志、线程和堆信息,避免只看一次快照。
  3. 区分堆内对象、线程、直接内存、类元数据和本地资源。
  4. 建立假设后用负载、采样或最小复现验证。
  5. 修改配置或代码后回归延迟、吞吐和资源占用。

GC选择与参数依赖JDK版本、堆大小、分配速率和停顿目标。面试时先声明版本与工作负载,再讨论吞吐、停顿和内存之间的取舍,不要声称某个收集器适合所有系统。

数据库、缓存和消息队列常见追问

问题回答重点验证方式
索引为什么没用查询条件、选择性、统计信息、排序与回表执行计划和真实数据分布
事务隔离怎么选异常类型、一致性要求、锁与吞吐并发测试和数据库文档
缓存与数据库不一致更新顺序、失效、重试和容忍窗口故障注入与对账
消息重复消费投递语义、幂等键、事务边界重复投递和崩溃恢复测试
调用雪崩超时、重试放大、隔离、限流和降级依赖故障与容量压测

系统设计没有脱离约束的标准答案。先问QPS、数据规模、一致性、延迟和可用性目标,再画核心链路与数据流,最后讨论瓶颈、故障和演进。

项目经历怎样讲出后端深度?

使用项目经历结构说明背景和职责后,重点讲一个你真正做过的技术决策:基线有什么问题、有哪些候选方案、为什么选择当前方案、如何上线、如何监控、结果怎样核对、还有什么遗留风险。不要把团队成果全部写成个人成果,也不要编造QPS、延迟或节省比例。

版本与经验边界:Java语言、JVM和框架会演进。回答前说明使用的JDK、数据库和组件版本;本文提供准备框架,不替代对应版本的官方文档,也不代表特定公司的题库。

常见问题

需要把Spring源码都背下来吗?

通常更重要的是理解依赖注入、事务边界、代理、请求链路和失败行为,并能结合实际版本定位问题。源码可用于验证理解,不应替代场景分析。

八股题怎么准备更有效?

每个结论补三个追问:为什么、什么时候不适用、怎样验证。再把它连接到一个真实项目或最小实验。

系统设计应该先画什么?

先澄清目标和容量,再画用户请求、核心服务、数据存储和外部依赖;之后补缓存、异步、扩展、监控和故障路径。

没有高并发经验怎么办?

如实说明规模,展示你对容量估算、瓶颈、压测和风险的推理。不要把测试环境或理论估计说成线上结果。

来源与适用范围

并发基础参考 Oracle Java并发教程;内存模型与happens-before参考 Java Language Specification第17章;当前JDK工具、JVM与GC入口参考 JDK 25官方文档。教程可能对应较早JDK,具体行为应以项目版本规范为准;来源与面试稳不存在合作关系。