简介这是一份面向Java求职者与在校生的企业面试真题合集聚焦Java基础、高级特性、JVM、Spring框架、数据库、设计模式与算法等高频考点帮助读者系统梳理知识脉络、针对性备战不同层级岗位的面试。资源包共895个文件以677张jpg截图、103个txt笔记、73个docx与11个doc文档为主另含少量png、m4a录音、pdf及zip子包整体约442.8MB文档与截图便于按知识点分类查阅录音可用于复盘讲解。目前已有1727人学习下载内容覆盖Java基础概念、集合与异常处理、多线程与并发编程、JVM内存模型与垃圾回收、Spring全家桶、SQL与事务优化、设计模式及常见算法题等并针对高级岗与移动端岗位给出专项准备方向适合需要查漏补缺、快速建立面试知识体系的初中级开发者参考。1. 从一份 Java 企业面试真题合集说起谁在靠它翻盘投了三十份简历面试邀约不到五个好不容易进了技术面面试官问的却是“HashMap 扩容为什么是 2 的幂”“Spring 循环依赖三级缓存怎么走的”——这种场景对很多 Java 求职者来说并不陌生。问题往往不在编码能力而在信息差企业到底问什么、问到什么深度、同一道题在不同轮次怎么变形这些没人系统整理过。这份 Java 企业面试真题收集资源解决的就是这个信息差。它把分散在面经、社群、零散笔记里的题目按技术栈归类覆盖 Java 基础、集合、并发、JVM、Spring 生态、数据库、中间件与场景设计适合正在准备社招或校招的初中级开发者也适合工作几年想系统查漏补缺的人。它不是题库堆砌而是一份可以按模块逐项攻克的复习地图。2. 真题分类逻辑为什么按技术栈拆比按公司拆更抗遗忘拿到一份面试题合集第一反应往往是“有没有大厂原题”。但真正用起来会发现按公司名归档的题目复用率极低——同一家公司不同部门、不同面试官问的东西差异巨大而且公司名本身会过期。更稳的做法是按技术栈分层因为 Java 后端的知识体系是相对固定的面试官的提问路径也高度依赖候选人的简历和回答方向。2.1 分层结构从语法糖到系统设计这份资源把题目分成几个层次每个层次对应面试中的不同考察意图层级覆盖内容面试中的典型问法复习优先级语言基础泛型、反射、异常、String 不可变“String 为什么设计成 final”高集合与并发HashMap、ConcurrentHashMap、AQS、线程池“线程池参数怎么设拒绝策略选哪个”高JVM内存模型、GC 算法、类加载、调优工具“线上 OOM 你怎么排查”中高框架Spring IOC/AOP、事务传播、MyBatis 缓存“同一个类里方法调用事务为什么失效”高数据库索引原理、锁、MVCC、分库分表“一条慢 SQL 你怎么定位”高中间件与场景Redis 持久化、MQ 幂等、分布式锁“缓存穿透和击穿的区别分别怎么防”中这个分层不是拍脑袋来的。面试官在 45 分钟内能问的题量有限通常会沿着“基础→框架→数据库→场景”这条线走每一层挑一两个点深挖。按这个结构复习等于提前把面试路径走了一遍。2.2 题目标注区分“背答案”和“能展开”资源里每道题除了题干和参考答案还标注了追问方向和常见陷阱。比如“HashMap 线程不安全”这道题参考答案只写“并发扩容可能形成环”是不够的标注里会提示面试官可能追问“JDK 8 之后还有没有环”“红黑树在扩容时怎么拆分”。这种标注决定了你是只能答一句还是能扛住三层追问。我一般建议按这个顺序用先过一遍题干自己口述答案卡壳的地方标记再看参考答案对比自己漏了哪个维度最后看追问标注模拟面试官继续挖。整个过程不要默读要出声说因为面试是口头表达脑子里懂和嘴上说清楚是两回事。3. 把真题跑起来从整理到模拟面试的完整操作资源本身是题目集合但直接从头看到尾效率很低。更有效的做法是把它变成一个可执行的复习流程筛选目标岗位相关题目、建立自己的答题卡、用模拟面试验证掌握程度。下面这套流程是我自己用过并且推荐给身边人的不需要额外工具用 Markdown 文件和表格就能跑。3.1 按岗位 JD 做第一轮筛选不同岗位对技术栈的侧重不同。比如做业务开发的岗位Spring 事务和 MySQL 索引几乎是必问做基础架构的岗位JVM 调优和并发包源码占比更高。所以第一步不是刷题而是拿目标岗位的 JD 做关键词匹配。# 根据 JD 关键词筛选题目分类 # 输入jd_text 为岗位描述文本categories 为资源中的题目分类 jd_text 熟悉 Java 并发编程了解 JVM 内存模型与 GC 调优 熟练使用 Spring Boot、MyBatis理解事务与 AOP 原理 掌握 MySQL 索引优化有 Redis 缓存使用经验。 categories { Java基础: [String, 泛型, 反射, 异常], 并发编程: [线程池, AQS, ConcurrentHashMap, volatile], JVM: [内存模型, GC, 类加载, OOM], Spring: [IOC, AOP, 事务, 循环依赖], MySQL: [索引, 锁, MVCC, 慢查询], Redis: [缓存穿透, 持久化, 分布式锁] } # 简单关键词命中统计 for cat, keywords in categories.items(): hits [kw for kw in keywords if kw in jd_text] if hits: print(f{cat}: 命中 {len(hits)} 个关键词 - {hits})这段脚本的逻辑很直白把 JD 里出现的技术关键词和资源分类做匹配命中越多说明该分类优先级越高。参数方面jd_text直接粘贴岗位描述即可categories里的关键词可以按资源实际分类调整。跑完之后你会得到一张优先级列表比如上面这段 JD 会输出并发编程、JVM、Spring、MySQL、Redis 都命中那 Java 基础就可以快速过把时间留给这些重点模块。提示关键词匹配只是粗筛有些 JD 写得比较泛命中少不代表不考。建议把命中为 0 的分类也扫一眼题干确认是否真的不相关。3.2 建立答题卡每道题只写三个东西筛选出重点题目后不要抄答案。抄答案的后果是产生“我已经会了”的错觉。正确做法是给每道题建一张答题卡只写三样东西自己的口述要点、卡壳位置、追问预判。## 题目Spring 事务在什么情况下会失效 ### 我的口述要点 - 方法不是 public - 自调用同一个类里 A 调 B - 异常被 catch 没抛出 - 传播行为设置不对 - 数据库引擎不支持事务 ### 卡壳位置 - 自调用失效的底层原因说不清代理对象没走到 - 传播行为 REQUIRES_NEW 和 NESTED 的区别模糊 ### 追问预判 - 怎么解决自调用失效注入自身 / AopContext.currentProxy - REQUIRES_NEW 会不会导致死锁这张卡的价值在于暴露盲区。口述要点写不出来的就是没掌握卡壳位置写出来的就是需要回头补的原理追问预判写不出来的说明只背了表面答案。三栏都填满这道题才算过关。3.3 模拟面试用计时器逼出真实水平自己复习最大的问题是节奏松散一道题想五分钟也不觉得有问题。但面试是有时间压力的面试官不会给你五分钟组织语言。所以每道重点题都要做计时口述练习读题后 30 秒内开始回答2 分钟内说完核心要点然后对照答题卡检查遗漏。具体操作可以这样把答题卡里的题目抽出来随机排序用手机计时。每道题录音回放时听自己有没有卡顿、有没有逻辑跳跃、有没有漏掉关键点。录音回放这个动作很关键因为很多人口述时觉得自己说清楚了一听录音才发现全是“那个”“就是”“然后”之类的填充词关键原理一笔带过。注意模拟面试不要只练自己会的题。把答题卡里“卡壳位置”最多的题目优先抽出来练这些才是提分空间最大的地方。4. 避坑与排查用真题复习时最容易翻车的五个地方这份资源本身是题目集合但用它的过程中有很多细节会导致复习效果打折扣。下面五条是我自己和身边人踩过的坑每条按“现象→原因→解决”写清楚。4.1 只背答案不练口述面试时说不出来现象题目看了好几遍参考答案也能看懂但面试时被问到脑子里有印象却组织不成完整句子。原因阅读是输入口述是输出两者调用的大脑机制不同。看懂答案只需要识别口述需要主动检索和组织语言后者没有练习过就会卡壳。解决每道重点题强制口述三遍。第一遍允许看答题卡第二遍只看题干第三遍录音回放。三遍都过不了的题说明原理没吃透回去补原理而不是继续背答案。4.2 按公司归档导致复习范围失控现象收集了十几家公司的面经每家的题目都不一样复习时东看一道西看一道最后哪个模块都没系统过完。原因按公司归档的题目重复率低、覆盖面散而且公司名会带来心理压力“这是某大厂的题肯定很难”导致复习节奏被打乱。解决把题目按技术栈重新归类公司名只作为标签保留。复习时以技术栈为主线公司标签只用来判断某类题在目标公司的出现频率。4.3 忽略追问标注只准备第一层答案现象面试时第一问答得还行面试官一追问就露馅比如问“HashMap 线程不安全”答了扩容成环追问“JDK 8 怎么处理的”就答不上来。原因很多题目的参考答案只写了第一层但面试官通常会沿着一个点往下挖两到三层。只准备第一层等于只准备了面试的前五分钟。解决每道重点题至少准备三层追问。以“线程池”为例第一层是七个参数第二层是执行流程和拒绝策略第三层是线上怎么设参数、怎么监控队列积压。答题卡里的“追问预判”栏就是干这个用的。4.4 把“看过”当成“掌握”复习进度虚高现象复习计划表上打了很多勾感觉大部分题都看过了但模拟面试时发现真正能说清楚的不到一半。原因看题是被动识别掌握是主动输出。看一道题花两分钟口述一道题花十分钟前者容易产生进度快的错觉。解决复习进度不以“看过”计数以“能口述且扛住追问”计数。答题卡三栏全填满才算一道题过关否则标记为待复习。4.5 只复习不模拟时间分配失控现象平时复习感觉良好面试时前面几道题答得太细后面时间不够简单题反而没时间答。原因没有做过限时模拟对每道题该花多少时间没有概念。面试官通常会给每道题 2 到 5 分钟超时会被打断影响节奏。解决每周至少做一次完整模拟用计时器控制每道题的时间。简单题 1 分钟内收尾重点题 2 到 3 分钟超时立刻停练出时间感。5. 进阶用法把真题变成自己的知识索引用这份资源复习到后期你会发现一个现象题目本身会忘但如果你在复习时顺手把每道题关联到自己的项目经历或源码笔记上它就会变成一张长期可用的知识索引。我自己的做法是给每道重点题加一个“关联锚点”指向自己写过的代码、看过的源码片段或者线上排查过的案例。比如“ThreadLocal 内存泄漏”这道题参考答案会写“key 是弱引用、value 是强引用、不 remove 会泄漏”。但如果你在答题卡里加一行“关联某次线上接口超时排查线程池复用导致 ThreadLocal 未清理堆内存持续上涨”这道题就不再是孤立的知识点而是和你自己的经验绑定了。下次面试被问到你不仅能答原理还能带出排查过程面试官对“实战经验”的判断会完全不同。再比如“MySQL 索引失效”这道题与其背那几条规则不如打开自己的项目找一条慢 SQL用EXPLAIN看执行计划把type、key、rows、Extra几个字段的含义搞清楚。下面这个命令是我排查慢查询时的固定动作-- 查看执行计划重点关注 type、key、rows、Extra EXPLAIN SELECT o.id, o.order_no, u.name FROM orders o JOIN users u ON o.user_id u.id WHERE o.status 1 AND o.create_time 2024-01-01 ORDER BY o.create_time DESC LIMIT 20; -- 查看索引使用情况 SHOW INDEX FROM orders; -- 查看慢查询日志配置 SHOW VARIABLES LIKE slow_query_log%; SHOW VARIABLES LIKE long_query_time;EXPLAIN的输出里type如果是ALL说明全表扫描key为NULL说明没走索引rows估算扫描行数越大越危险Extra里出现Using filesort或Using temporary也要警惕。把这些字段和自己的 SQL 对应起来索引失效的规则就不再是死记硬背而是有画面感的排查经验。还有一个技巧是“反向出题”。复习到某个模块时试着站在面试官角度想如果我要考察候选人对这个模块的理解我会怎么问比如复习完 Redis 持久化你可以问自己“RDB 和 AOF 同时开启时恢复走哪个”“AOF 重写期间新写入的命令怎么处理”。能自己出题并答上来说明这个模块真的通了。从那以后我每次复习面试题都会强制走一遍“口述→录音→关联项目→反向出题”这个流程缺一步都觉得不踏实。希望这份真题合集加上这套用法能帮你在面试里少卡几次壳。本文还有配套的精品资源点击获取