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

Java 开发工程师面试题与常见问题:回答思路

Java 开发工程师考什么:项目经历会被连续追问,从业务背景问到技术选型,再问上线后遇到过什么问题、你当时怎么处理

考察方向

  1. 项目经历会被连续追问,从业务背景问到技术选型,再问上线后遇到过什么问题、你当时怎么处理
  2. Java 基础与 JVM 题看理解不看背诵,要说清集合、并发、内存模型在你项目里的实际取舍
  3. 框架题围绕 Spring 生态与数据访问展开,常追问一次请求经过哪些层、事务与缓存的边界在哪
  4. 系统设计题给一个高并发或数据一致性场景,看你怎么拆分、怎么估算容量、失败时怎么兜底
  5. 排查题给一段线上异常(超时、内存上涨、慢 SQL),让你讲定位顺序和验证方法

练习题与回答骨架

下列既有题目仅作表达练习材料,不代表题目出现频率。每题给的是回答骨架,不是范文——骨架是为了让你开口的时候有条理,具体的话得是你自己的。

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

回答骨架:

  • 一句话说清项目是干什么的、解决谁的什么问题,不超过二十秒
  • 整体架构用三四句话带过,重点落在你负责的那一块
  • 挑一个你做过的最有技术含量的点展开:遇到什么问题、怎么分析、方案是什么、结果如何
  • 主动留钩子:说出一两个你知道可以深聊的点,引导面试官往你熟的方向追问

2. HashMap 的底层实现,JDK8 做了哪些改动,为什么线程不安全

回答骨架:

  • 数组 + 链表 + 红黑树,hash 怎么算、怎么定位桶,为什么容量是 2 的幂
  • 链表转红黑树的阈值以及为什么有退化回链表的机制
  • 扩容流程,JDK8 头插改尾插解决了什么,没解决什么
  • 线程不安全的具体表现,以及对应该用什么替代

3. ConcurrentHashMap 是怎么保证并发安全的

回答骨架:

  • JDK7 分段锁和 JDK8 CAS + synchronized 锁单个桶的区别
  • put 的流程:桶为空走 CAS,不为空锁头节点
  • size 怎么算,为什么不是一个简单的 volatile 变量
  • get 为什么不加锁,靠什么保证可见性

4. synchronized 和 ReentrantLock 的区别,synchronized 的锁升级过程

回答骨架:

  • 两者在用法上的区别:是否可中断、是否公平、能否绑定多个条件、释放方式
  • synchronized 在 JVM 层面的实现,monitor 与对象头
  • 无锁、偏向锁、轻量级锁、重量级锁的升级路径,各自适合什么场景
  • 实际选型的判断:什么时候用 synchronized 就够了,什么时候需要 ReentrantLock

5. volatile 解决了什么问题,为什么不能保证原子性

回答骨架:

  • 可见性和禁止指令重排两个作用,分别对应什么场景
  • Java 内存模型里工作内存与主内存的关系
  • 为什么 i++ 这种操作 volatile 救不了,应该用什么
  • 一个典型的正确用法,比如双重检查锁里为什么要加 volatile

6. 线程池的核心参数和执行流程,参数怎么设

回答骨架:

  • 核心线程数、最大线程数、队列、拒绝策略几个参数各自管什么
  • 一个任务进来后的完整流转顺序,重点说清楚为什么是先进队列再开新线程
  • CPU 密集和 IO 密集的参数思路,以及为什么经验公式只是起点
  • 线上怎么观察线程池状态,出过什么问题

7. JVM 内存区域划分,什么情况下会发生 OOM,怎么排查

回答骨架:

  • 堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器各自存什么
  • 哪些区域会 OOM,各自的典型原因
  • 排查思路:dump 文件、用什么工具看、怎么定位到具体对象
  • 如果有真实经历,说一个你遇到过的内存问题和最后的根因

8. 讲一讲垃圾回收,CMS 和 G1 的区别

回答骨架:

  • 怎么判断对象可回收,可达性分析从哪些根出发
  • 标记清除、标记整理、复制三种算法各自的代价
  • 分代的逻辑,新生代和老年代分别用什么算法
  • CMS 和 G1 在停顿目标、内存布局、碎片处理上的根本差异,以及为什么 G1 成了默认

9. Spring Bean 的生命周期,循环依赖是怎么解决的

回答骨架:

  • 实例化、属性填充、初始化、销毁几个阶段,以及各阶段的扩展点
  • 三级缓存各自存什么,为什么需要三级而不是两级
  • 哪些情况下循环依赖解决不了,比如构造器注入和原型作用域
  • 顺带说清 AOP 代理对象是在哪一步生成的,为什么会影响循环依赖的处理

10. MySQL 的索引原理,什么情况下索引会失效,事务隔离级别

回答骨架:

  • B+ 树为什么适合做索引,聚簇索引和二级索引的区别,什么是回表
  • 最左前缀、函数操作、隐式类型转换等常见失效场景,以及怎么用执行计划确认
  • 四种隔离级别各自解决了什么问题,MySQL 默认是哪个,怎么在这个级别下处理幻读
  • 一条慢 SQL 的排查顺序

11. Redis 缓存穿透、击穿、雪崩分别怎么处理,缓存和数据库怎么保持一致

回答骨架:

  • 三种问题的本质区别:不存在的 key、热点 key 过期、大量 key 同时失效
  • 各自的应对手段,以及每种手段的副作用
  • 一致性的几种策略,先更库再删缓存为什么是主流,它在什么情况下还是会不一致
  • 你项目里实际用的是哪一种,为什么能接受它的不一致窗口

12. 你遇到过最难的线上问题是什么,怎么解决的

回答骨架:

  • 现象是什么,影响范围多大,当时的紧急程度
  • 定位过程:先看什么、排除了什么、用了什么工具、在哪一步找到线索
  • 根因和解决方案,止血和根治分别是什么
  • 事后做了什么改进,下次怎么更早发现

开口练习与复盘

先选一道题,结合本人经历说清背景、个人动作与依据。录下来听一遍,标出重复、跳步和暂时说不清的地方;补充资料后再用自己的话讲一次,对比表达顺序与完整度。练习材料不代表招聘方的题目、流程或评价标准。

用练答怎么练

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

真实面试也能辅助

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

练答 AI 面试工具

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

常见问题

Java 开发工程师一个人怎么练?

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

Java 开发工程师重点是什么?

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

Java 开发工程师练完怎么复盘?

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

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

Java 开发工程师开口练这题 →