金三银四 Java 面试一周突击方案 + 专家级模拟面试逐字稿
核心突击原则(一周上岸的前提)
一周突击每日落地计划(精准到天,可直接执行)
Day1:定位摸底 + 面试框架搭建(靶心校准,不盲目学习)
|
时段 |
核心任务 |
验收标准 |
|
上午 |
1. 明确目标岗位(大厂 / 中厂 / 小厂),对应考点权重排序 2. 简历逐行拆解,标记所有技术栈 / 项目 / 业绩,预判追问点 3. 1 套目标公司历年真题闭卷摸底,定位薄弱模块 |
输出《简历追问预判清单》《薄弱模块优先级表》 |
|
下午 |
搭建 Java 面试核心知识体系,按面试频率排序: Java 基础→JVM→并发编程→Spring 全家桶→MySQL→Redis→MQ→项目→算法 |
每个模块整理出Top10 高频考点,只抓核心,不扩展 |
|
晚上 |
定稿 1 分钟 / 3 分钟两个版本自我介绍,严格按「基本信息 + 年限 + 核心栈 + 核心项目 + 求职意向」结构 |
脱稿背诵无卡顿,3 分钟版本能突出个人优势,无流水账 |
Day2:Java 核心基础(零容错,基础丢分直接淘汰)
核心目标:基础题 100% 答对,不丢分,覆盖面试 90% 基础考点
- 必背高频 Top10(每个考点必须能脱稿讲清「是什么 + 原理 + 场景 + 踩坑」): == 和 equals 的区别,重写 equals 为什么必须重写 hashCode String、StringBuffer、StringBuilder 的区别,String 不可变性 HashMap 底层原理(JDK7&8 区别)、ConcurrentHashMap 并发实现 接口与抽象类的区别,Java8 + 的变化 异常体系:受检 / 非受检异常,常见运行时异常 Java 四大引用(强 / 软 / 弱 / 虚)及使用场景 泛型原理、泛型擦除、通配符使用 面向对象三大特性(封装 / 继承 / 多态),多态实现原理 BIO/NIO/AIO 区别,NIO 核心组件 深拷贝 / 浅拷贝的实现方式
- 晚间验收:对着镜子脱稿复述所有考点,牛客网刷对应模块真题,错题整理到错题本
Day3:JVM + 并发编程(中高级岗分水岭,拉开差距核心)
核心目标:核心考点 100% 掌握,能结合调优 / 实战经验,大厂必问
- JVM 必背高频 Top10: JVM 内存区域划分,各区域作用及 OOM 场景 垃圾回收机制:GC Roots、分代回收算法 经典垃圾回收器(CMS/G1/ZGC)特点、优缺点、适用场景 类加载机制:双亲委派模型、类加载全流程、破坏双亲委派的场景 对象创建流程、内存布局、访问定位 Full GC 触发场景,OOM 排查流程及常用工具(jps/jstat/jmap/jstack/MAT) STW 是什么,哪些 GC 会触发 STW,如何降低 STW 内存溢出与内存泄漏的区别,泄漏排查思路 JVM 常用调优参数(堆内存、GC 相关) 三色标记法与读写屏障
- 并发编程必背高频 Top10: 线程生命周期 6 种状态及流转 synchronized 底层原理、锁升级流程、锁优化 volatile 作用、可见性 / 禁止指令重排、内存屏障、与 synchronized 区别 线程池 7 大核心参数、执行流程、参数设计实战、拒绝策略 AQS 底层原理,基于 AQS 实现的常用类 ReentrantLock 与 synchronized 区别,公平锁 / 非公平锁 / 读写锁 线程安全三大特性(原子性 / 可见性 / 有序性)及保证方案 死锁 4 大必要条件,死锁排查与规避方案 ThreadLocal 原理、内存泄漏问题、使用场景 并发集合(ConcurrentHashMap/CopyOnWriteArrayList)实现原理
- 晚间验收:每个考点结合项目场景打磨话术,比如「项目中如何排查 OOM」「如何设计线程池参数」,脱稿复述无卡顿
Day4:框架 + 中间件(业务开发核心,面试占比最高)
核心目标:吃透原理 + 实战场景 + 问题排查,贴合业务开发需求
- Spring 全家桶必背高频 Top10: IOC 和 AOP 底层原理,动态代理两种实现的区别 SpringBean 生命周期、循环依赖解决方案 @Transactional 事务原理、传播行为、隔离级别、失效场景 SpringBoot 自动配置原理、starter 实现 SpringMVC 执行流程、九大核心组件 SpringCloud 核心组件(注册中心 / 配置中心 / 网关 / 熔断降级)原理 SpringCloud Alibaba Nacos 服务注册 / 配置中心核心原理 SpringCloud Gateway 与 Zuul 的区别,核心执行流程 Spring 事务失效的 10 种场景及解决方案 Spring 中常用的设计模式及实战应用
- 中间件必背核心(MySQL/Redis/MQ,每个 Top8): MySQL:InnoDB 架构、索引底层原理、事务 ACID、MVCC 实现、锁机制、SQL 优化、分库分表、主从复制 Redis:5 大数据类型底层结构、持久化机制、过期策略 / 内存淘汰、高可用架构、缓存三大问题(穿透 / 击穿 / 雪崩)、单线程模型、双写一致性、分布式锁实现 MQ:核心作用、消息不丢失方案、幂等性保证、消息积压处理、顺序消息、死信队列、RocketMQ/Kafka 架构区别
- 晚间验收:所有考点结合项目使用场景打磨话术,比如「项目中如何优化慢 SQL」「如何解决缓存一致性问题」,整理错题本
Day5:项目深挖 + 场景题突击(决定终面通过率的核心)
核心目标:项目无死角,能应对连环追问,场景题有标准化答题思路
- 上午:项目 STAR 法则拆解,每个项目必须输出: 标准化项目介绍话术(Situation:项目背景 / 痛点;Task:你的核心职责;Action:你的具体动作 / 技术方案;Result:量化成果) 每个项目至少 3 个核心亮点 / 难点,按「问题→方案→效果→技术沉淀」结构拆解,必须有量化数据(比如 QPS 从 5000 提升到 3 万 +,接口耗时从 200ms 降到 30ms) 预判面试官连环追问,比如「分库分表的分片键怎么选」「秒杀系统如何防止超卖」,提前准备好标准答案 项目技术栈与前 4 天的考点强绑定,避免技术栈和知识点脱节
- 下午:高频场景题突击,Top10 必背,每个都要能讲清设计思路 + 流程图: 设计一个秒杀系统,核心架构与优化方案 分布式 ID 生成器设计方案 接口幂等性的 6 种实现方案 分布式锁的实现方案及优缺点 大促场景下,系统限流 / 熔断 / 降级方案 千万级数据量的报表统计优化方案 分布式事务解决方案及适用场景 系统超时问题的全链路排查与优化思路 延迟任务系统设计方案 微服务架构下,全链路问题排查方案
- 晚间验收:脱稿讲解项目,找朋友模拟连环追问,查漏补缺,场景题能脱稿讲清核心思路
Day6:算法突击 + 真题复盘 + 错题本攻坚
核心目标:放弃难题,死磕高频题,手撕环节不丢分,保底通关
- 上午:算法高频题突击,只刷简单 + 中等难度,按类型分类,掌握解题模板: 必刷优先级:链表→数组 / 字符串→二叉树→排序→动态规划→贪心→回溯 核心必刷:剑指 Offer 高频题 + 力扣热题 100,重点刷反转链表、二分查找、二叉树遍历、两数之和、快速排序、全排列等高频题 刷题方法:先想思路,再写代码,最后总结模板,做到举一反三,拒绝背题
- 下午:3-5 套目标公司真题闭卷模拟,严格按面试时间执行;错题本全量复盘,每个错题必须讲清错误原因 + 正确答案,杜绝二次出错
- 晚上:准备 3-5 个高质量反问问题(聚焦技术 / 团队 / 业务,不问薪资 / 加班 / 福利),梳理面试礼仪,线上面试提前测试设备,线下面试确认路线
Day7:全真模拟 + 查漏补缺 + 心态调整
核心目标:适应面试节奏,保证正常发挥,临门一脚不翻车
- 上午:2 轮全真模拟面试(技术一面 + 二面),严格按 60 分钟 / 轮执行,全程录音,完全还原真实面试流程
- 下午:复盘模拟面试问题,整改卡顿 / 答不上来的内容,所有话术最终定稿,全量考点快速过一遍,形成完整知识体系
- 晚上:停止学习新内容,只看错题本和核心考点,准备面试材料,早点休息,调整心态
专家级 Java 模拟面试逐字稿(3 年电商高级开发岗,技术一面 60 分钟)
面试背景
候选人:3 年 Java 电商后端开发经验,目标岗位互联网大厂 Java 高级开发工程师
面试官:10 年 Java 技术专家,大厂资深面试官
【开场环节 5 分钟】
面试官:你好,欢迎参加今天的面试,我是今天的技术面试官,先请你做个自我介绍吧。
候选人:面试官您好,我叫 XX,有 3 年 Java 后端开发经验,一直深耕电商行业,先后参与过电商交易系统、秒杀系统、订单中心的设计与开发。核心技术栈围绕 Java 生态,熟练掌握 Java 核心、JVM、并发编程,深入使用过 Spring 全家桶、SpringCloud Alibaba 微服务架构,对 MySQL、Redis、RocketMQ 等中间件有丰富的实战和调优经验。在过往的项目中,主导过秒杀系统的全链路性能优化,将系统 QPS 从 5000 提升到 3 万 +,同时优化了核心链路慢 SQL,将接口平均响应时间从 200ms 降到 30ms 以内。今天面试的岗位是 Java 高级开发工程师,希望能加入贵团队,谢谢。
专家点评:
✅ 踩分点:时长控制精准,逻辑闭环,用数据量化成果,突出了与岗位的匹配度,无流水账
⚠️ 优化点:可补充一句个人技术优势,比如「擅长高并发场景的问题排查与性能优化」,更贴合高级岗定位
【Java 核心基础环节 10 分钟】
面试官:好的,我们先从基础开始,请问 HashMap 和 ConcurrentHashMap 在 JDK7 和 JDK8 中的底层实现有什么核心区别?
候选人:好的,我分两个维度分别讲解,先讲 HashMap,再讲 ConcurrentHashMap。
首先是 HashMap 的版本差异:
然后是 ConcurrentHashMap,核心差异在并发实现上:
面试官:好的,再问一下,volatile 关键字的作用是什么?底层原理是什么?和 synchronized 有什么区别?
候选人:好的,我先讲核心作用,再讲底层原理,最后对比两者的区别。
首先,volatile 是 Java 提供的轻量级同步机制,核心有两个作用:
然后是底层原理:volatile 的核心是内存屏障,这是 CPU 层面的指令,一方面禁止屏障前后的指令重排序,另一方面强制刷新缓存,保证变量可见性。
- 对 volatile 变量的写操作,会在写后加入 StoreStore 屏障,禁止前后写操作重排序,再加入 StoreLoad 屏障,禁止写操作和后续读操作重排序,同时将写缓冲区数据刷新到主内存。
- 对 volatile 变量的读操作,会在读前加入 LoadLoad 屏障,禁止前后读操作重排序,再加入 LoadStore 屏障,禁止读操作和后续写操作重排序,同时让工作内存的变量副本失效,从主内存读取最新值。
- 最典型的应用就是 DCL 双重检查锁实现单例模式,必须用 volatile 修饰单例对象,防止对象初始化时指令重排序,导致其他线程拿到半初始化的对象。
最后是和 synchronized 的核心区别:
【JVM 与并发编程环节 12 分钟】
面试官:基础掌握得不错,接下来问 JVM 相关内容,请问 JVM 内存区域是怎么划分的?每个区域的作用是什么?哪些区域会发生 OOM?
候选人:好的,JVM 运行时数据区主要分为两大类,一类是线程私有区域,包括程序计数器、Java 虚拟机栈、本地方法栈;另一类是线程共享区域,包括 Java 堆、方法区(元空间);还有一块直接内存,不属于 JVM 运行时数据区,但也会被频繁使用,同样会发生 OOM。
我逐个讲解每个区域的作用和 OOM 场景:
首先是线程私有区域,生命周期和线程绑定,线程结束内存自动释放:
然后是线程共享区域,整个 JVM 只有一份,随虚拟机启动创建,关闭销毁:
最后是直接内存,又称堆外内存,不属于 JVM 运行时数据区,是 Java 通过 NIO 的 DirectByteBuffer 直接申请的本地内存,不受堆大小限制,但受本地内存限制。频繁申请堆外内存导致本地内存不足时,会抛出OutOfMemoryError: Direct buffer memory。
专家点评:
✅ 踩分点:划分逻辑清晰,每个区域的作用、异常场景、异常信息都讲解准确,区分了 JDK 版本的差异,覆盖了所有核心考点,无知识点错误
⚠️ 优化点:可补充各区域的常用 JVM 调优参数,更贴合实战调优场景
面试官:好的,再问并发编程的内容,线程池的核心参数有哪些?执行流程是什么?你在项目中是怎么设置线程池参数的?
候选人:好的,我先讲 7 个核心参数,再讲执行流程,最后结合项目实战讲参数设计。
首先,ThreadPoolExecutor 的核心构造函数有 7 个核心参数:
然后是线程池的执行流程,任务通过 execute () 提交后,执行逻辑如下:
最后是我在项目中的参数设计实战,我之前负责电商订单系统,核心原则是避免线程池过大或过小,按业务场景隔离线程池,主要分两类场景:
另外,我们的项目规范里,绝对禁止使用 Executors 创建默认线程池,因为 FixedThreadPool 的队列长度是 Integer.MAX_VALUE,会堆积任务导致 OOM;CachedThreadPool 的最大线程数是 Integer.MAX_VALUE,会创建大量线程导致 OOM,所有线程池都通过 ThreadPoolExecutor 自定义,同时按业务场景做线程池隔离,避免单个业务故障影响整个服务。
专家点评:
✅ 踩分点:参数讲解准确,执行流程完全正确,结合项目实战分场景讲解参数设计,覆盖了生产环境最佳实践(线程池隔离、自定义线程工厂、禁用默认线程池),体现了真实的项目经验,完全符合高级开发要求
⚠️ 优化点:可补充项目中遇到的线程池故障及优化方案,让回答更有说服力
【框架与中间件环节 15 分钟】
面试官:接下来问框架相关内容,Spring 的 @Transactional 注解在哪些场景下会失效?
候选人:好的,在讲失效场景之前,我先讲一下底层原理:@Transactional 是基于 Spring AOP 动态代理实现的,只有通过代理对象调用被注解修饰的方法,事务才会生效,本类直接调用不会走代理,这是大部分失效场景的根本原因。
我把常见的失效场景分为四大类,逐个讲解:
第一类:代理不生效导致的失效
第二类:异常处理错误导致的失效
5. 异常被 try-catch 捕获且未抛出:@Transactional 默认只回滚 RuntimeException 和 Error,若方法内捕获了异常且未向外抛出,Spring 感知不到异常,就不会回滚事务。
6. 抛出的异常非 RuntimeException:默认情况下,受检异常(比如 IOException)不会触发回滚,除非在注解中指定rollbackFor = Exception.class,覆盖所有异常类型。
7. rollbackFor 设置错误:比如 rollbackFor 指定了自定义异常,但实际抛出的异常不是其子类,事务不会回滚。
第三类:传播行为设置错误导致的失效
8. 传播行为不支持事务:比如设置propagation = Propagation.NOT_SUPPORTED,该传播行为会以非事务方式运行,若存在事务则挂起事务,注解自然失效;还有 Propagation.NEVER,存在事务时直接抛异常。
第四类:其他特殊场景
9. 多线程调用:在方法内开启新线程调用有注解的方法,事务会失效。因为 Spring 事务基于 ThreadLocal 绑定数据库连接,不同线程拿到的连接不同,不在同一个事务中,无法回滚。
10. 数据库不支持事务:比如 MySQL 使用 MyISAM 存储引擎,本身不支持事务,无论注解怎么写都不会生效,目前主流使用 InnoDB 引擎。
针对这些失效场景,我们项目中的最佳实践是:
面试官:好的,再问 MySQL 相关内容,InnoDB 的 MVCC 底层原理是什么?是怎么实现的?
候选人:好的,MVCC 全称是多版本并发控制,是 InnoDB 实现事务隔离级别的基础,核心作用是解决读写冲突,实现不加锁的非阻塞读,大幅提升数据库并发性能。
我先讲 MVCC 的三大核心基础组件,再讲可见性判断规则,最后讲不同隔离级别的实现差异。
首先是三大核心基础组件:
然后是 MVCC 的核心可见性判断规则,事务读取数据时,按以下规则判断版本是否可见:
若当前版本不可见,就通过 DB_ROLL_PTR 回滚指针,找到 undo log 中的上一个历史版本,重复上述规则判断,直到找到可见版本,或遍历完所有版本无结果,返回空。
最后是 MVCC 在不同隔离级别下的实现差异,核心是Read View 的生成时机不同:
补充一点:MVCC 的读是快照读,也就是普通的不加锁 SELECT,实现读写不冲突;而当前读(SELECT … FOR UPDATE、INSERT、UPDATE、DELETE)是加锁的,通过临键锁解决幻读问题,两者配合实现了 InnoDB 的事务隔离。
专家点评:
✅ 踩分点:核心组件讲解准确,可见性判断规则完全正确,讲清了 RC 和 RR 隔离级别的核心差异,区分了快照读和当前读,逻辑层次清晰,有深度,完全符合高级开发的面试要求
⚠️ 优化点:可补充一个具体的事务执行案例,用规则判断可见性,更直观
面试官:好的,再问 Redis 相关内容,缓存和数据库的双写一致性问题,你在项目中是怎么解决的?
候选人:好的,首先要明确,根据 CAP 定理,分区容错性是必须保证的,所以我们只能在一致性和可用性之间做权衡,没有绝对的强一致性,除非读写都加锁,但会牺牲性能,我们生产环境优先保证最终一致性,同时尽量缩短不一致的时间窗口。
首先先讲两个错误方案,以及为什么不推荐:
接下来讲我们项目中使用的三种主流方案,按业务场景选型:
方案一:Cache Aside Pattern 旁路缓存模式,这是最常用的方案,普通业务场景全量使用。
- 读流程:先读缓存,命中则直接返回;未命中则读数据库,将数据写入缓存后返回。
- 写流程:先更新数据库,数据库更新成功后,再删除缓存。
- 这个方案有一个极低概率的并发异常场景:线程 A 读缓存未命中,去读数据库拿到旧数据;此时线程 B 更新数据库,删除了缓存;然后线程 A 将旧数据写入缓存,导致缓存与数据库不一致。但这个场景发生概率极低,因为需要读操作比写操作更慢,而数据库写操作会加行锁,通常写比读慢,所以概率极低。
- 针对这个场景,我们的解决方案是:
方案二:基于 binlog 的最终一致性方案,核心订单、库存等核心业务场景使用。
流程如下:
方案三:强一致性方案,分布式锁串行化,仅用于金融支付等对一致性要求极高的场景。
读写请求都需要争抢同一把分布式锁,抢到锁才能执行,将读写请求串行化,完全避免并发问题,保证强一致性,但会牺牲性能,并发量大幅降低,所以仅在极端场景使用。
另外,针对删除缓存失败的兜底方案:
【项目深挖环节 10 分钟】
面试官:技术基础掌握得不错,接下来聊你的项目,你刚才说主导过电商秒杀系统的性能优化,把 QPS 从 5000 提升到 3 万 +,请你详细讲一下项目背景、核心问题、优化方案和最终效果。
候选人:好的,首先讲项目背景。这个项目是我们公司的电商大促秒杀系统,每年 618、双 11 都会有大促活动,之前的系统压测最高只能支撑 5000QPS,接口响应时间超过 1 秒,大促时频繁出现接口超时、订单超卖的问题,用户体验极差。所以我们需要对秒杀系统做全链路性能优化,目标是支撑 3 万 + QPS,接口响应时间控制在 200ms 以内,同时保证零超卖、数据一致性。我在项目中担任核心开发,负责秒杀核心链路的设计与优化,包括库存扣减、下单流程、缓存设计、限流降级等模块。
然后讲我们遇到的核心问题,主要有四个:
针对这些问题,我们做了全链路五层优化,从前端、接入层、应用层、缓存层、数据库层全链路压测和优化,我重点讲后端核心优化方案:
第一,前端 + 接入层优化,拦截 90% 的无效请求,降低后端压力:
第二,应用层优化,核心是「异步化、削峰、解耦、隔离」:
第三,缓存层优化,把 99% 的请求拦截在缓存层,不落到数据库:
第四,数据库层优化,兜底保证数据一致性和性能:
最后讲优化后的效果:
【手撕算法环节 5 分钟】
面试官:好的,项目讲得很详细,接下来做一道手撕算法题,用 Java 实现反转单链表,要求时间复杂度 O (n),空间复杂度 O (1)。
候选人:好的,我先讲解题思路,再写代码。
反转单链表有两种解法,一种是迭代法(双指针法),时间复杂度 O (n),空间复杂度 O (1),完全符合题目要求;另一种是递归法,空间复杂度 O (n),不符合要求,所以我用迭代法实现。
解题思路:
代码实现如下:
java
运行
/**
* 单链表节点定义
*/
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
public class ReverseLinkedList {
public ListNode reverseList(ListNode head) {
// 双指针定义
ListNode pre = null;
ListNode cur = head;
// 临时节点,保存下一个节点
ListNode next = null;
while (cur != null) {
// 保存当前节点的下一个节点
next = cur.next;
// 反转当前节点的指向
cur.next = pre;
// 双指针后移
pre = cur;
cur = next;
}
// 遍历结束,pre为反转后的头节点
return pre;
}
}
我再补充一下边界情况的处理:
【结尾反问环节 3 分钟】
面试官:好的,今天的技术面试就到这里,你有什么想问我的吗?
候选人:您好,我有两个问题想请教一下。
第一个问题,请问这个岗位所属的团队,目前的核心业务是什么?后续的技术规划是怎样的?
第二个问题,请问团队对于高级开发工程师的核心能力要求是什么?对入职的新人,3-6 个月内有什么期望?
面试官:(解答问题)
候选人:好的,非常感谢您的解答,我没有其他问题了。
专家点评:
✅ 踩分点:反问问题聚焦团队、业务、技术,体现了对岗位的兴趣和职业规划,数量合适,未问薪资、加班等敏感问题,无减分项
面试最终结论
候选人基础扎实,对 Java 核心、JVM、并发编程、框架、中间件的底层原理掌握透彻,有丰富的高并发项目实战经验,项目亮点突出,算法能力达标,完全符合 Java 高级开发工程师的要求,面试通过,进入下一轮。
一周突击核心上岸提醒
面试题分享

220万字八股面试宝典,需要的小伙伴查看下方名片拿走即可!




