2025年 Java 面试八股文

2025–2026 年 Java 后端面试(尤其是金九银十、春招秋招、社招)的高频“八股文”已经高度内卷化。面试官越来越倾向于“八股文 + 项目场景 + 真实问题解决”的组合考察。

下面给你一份2025–2026 年仍然最主流、最常被问到的八股文分类汇总(基于大量真实面经、牛客/B 站/知乎/CSDN/GitHub 等渠道的统计),按出现频率从高到低排序。

每个模块列出 8–15 个最高频问题(带极简答案框架 + 追问方向),建议你至少把带 ★ 的问题背到能脱口而出 + 手写代码

一、Java 基础 & 集合 & JVM(出现率 95%+)

  1. HashMap 1.8 底层数据结构 + 扩容机制 + 为什么引入红黑树?
    → 数组 + 链表 → 数组 + 链表/红黑树(阈值8 & 数组长度≥64)
  2. HashMap 是线程安全的吗?为什么?并发场景用什么替代?
    → 不安全 → ConcurrentHashMap(1.7 Segment → 1.8 CAS + synchronized)
  3. ConcurrentHashMap 1.7 vs 1.8 的区别?
    → 1.7 Segment 分段锁 → 1.8 Node + CAS + synchronized(锁粒度更细)
  4. JVM 运行时数据区有哪些?哪些是线程共享的?
    → 程序计数器(私有)、虚拟机栈、本地方法栈、堆(共享)、方法区/元空间(共享)
  5. JVM 垃圾回收算法有哪些?新生代用什么?老年代用什么?
    → 标记-清除、标记-整理、复制 → 新生代复制 + 标记清除,老年代标记整理/CMS/G1
  6. JVM 怎么判断对象可以被回收?(两种方式)
    → 引用计数法(不主流)、可达性分析(GC Roots)
  7. 常见的 GC Roots 有哪些?
    → 虚拟机栈中引用的对象、方法区中静态变量/常量、native 方法栈 JNI 引用等
  8. full gc 频繁的原因及解决思路?
    → 大对象、元空间溢出、老年代分配担保失败、System.gc() 等
  9. String、StringBuilder、StringBuffer 的区别?
    → String 不可变、SB 非线程安全、Buffer 线程安全
  10. equals() 和 hashCode() 的关系?重写 equals 必须重写 hashCode 吗?
    → 必须,否则 HashMap 等集合行为异常
  11. Java 8 新特性你用过哪些?Lambda、Stream、Optional、函数式接口

二、并发 & 多线程(出现率 90%+)

  1. 线程与进程的区别?
    → 进程资源独立、线程共享进程资源
  2. 创建线程的几种方式?哪种最好?
    → 继承 Thread、实现 Runnable、Callable + FutureTask、线程池(推荐)
  3. 线程池的核心参数?如何合理配置?
    → 核心数、最大数、队列、拒绝策略、线程工厂
  4. 线程池饱和后拒绝策略有几种?默认是哪个?
    → Abort、CallerRuns、Discard、DiscardOldest → 默认 AbortPolicy
  5. synchronized 和 ReentrantLock 的区别?
    → synchronized 自动释放、ReentrantLock 可中断、可公平、可定时
  6. volatile 关键字的作用?底层实现?
    → 可见性 + 禁止指令重排序 → 内存屏障 + Lock 前缀指令
  7. CAS 是什么?ABA 问题怎么解决?
    → Compare And Swap → AtomicStampedReference / AtomicMarkableReference
  8. AQS 是什么?核心思想?
    → AbstractQueuedSynchronizer → 状态变量 + CLH 队列 + 模板方法
  9. ReentrantLock 是怎么实现的?
    → 基于 AQS + CAS 修改 state
  10. 线程安全的单例模式有几种写法?
    → 双检锁(volatile)、静态内部类、枚举
  11. ThreadLocal 的原理?内存泄漏怎么解决?
    → 每个线程一个 Map → remove() 或 weak 引用 + 主动清理

三、Spring 全家桶(出现率 85%+)

  1. Spring IOC 的底层实现?
    → BeanDefinition + BeanFactory + 反射 + 代理
  2. Bean 的生命周期?
    → 实例化 → 属性填充 → 初始化前 → 初始化(init-method) → 使用 → 销毁前 → 销毁
  3. Spring 如何解决循环依赖?(三级缓存)
    → singletonObjects(一级) → earlySingletonObjects(二级) → singletonFactories(三级)
  4. @Transactional 传播行为有几种?默认是哪个?
    → REQUIRED(默认)、REQUIRES_NEW、NESTED 等 7 种
  5. Spring AOP 的底层实现?动态代理的两种方式区别?
    → JDK 动态代理(接口) vs CGLIB(子类)
  6. Spring Boot 自动配置原理?
    → @EnableAutoConfiguration → META-INF/spring.factories → Condition 条件装配
  7. Spring Boot 如何实现 starter?
    → 约定大于配置 + spring.factories + 自动配置类
  8. Spring MVC 的执行流程?
    → DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver → View

四、MySQL & Redis & MQ(出现率 80%+)

  1. MySQL 索引为什么用 B+ 树?
    → 范围查询效率高、叶子节点存数据、扇出大
  2. InnoDB 与 MyISAM 的区别?
    → InnoDB 支持事务/行锁/外键,MyISAM 表锁/全文索引
  3. 索引失效的常见场景?
    → 函数、隐式转换、or、!=、is null、like %xx%
  4. Redis 数据类型有哪些?ZSet 底层实现?
    → String/Hash/List/Set/ZSet/BitMap/Geo/HyperLogLog → ziplist + skiplist
  5. Redis 持久化方式?RDB vs AOF 优缺点?
    → RDB 快照(紧凑)、AOF 日志(安全、可重放)
  6. Redis 缓存击穿/穿透/雪崩怎么解决?
    → 击穿:互斥锁 / 逻辑过期
    → 穿透:布隆过滤器 / 缓存空对象
    → 雪崩:随机过期 + 多级缓存 + 限流
  7. Kafka 高可用怎么保证?
    → 分区副本 + Leader/Follower + ISR

五、分布式 & 微服务 & 高并发场景(出现率 70%+)

  1. 分布式锁怎么实现?Redis vs Zookeeper?
    → Redis:setnx + 过期 + Lua 脚本
    → ZK:临时顺序节点
  2. 分布式事务有几种方案?优缺点?
    → 2PC/3PC、TCC、Seata-AT、MQ 最终一致性、本地消息表
  3. 秒杀系统怎么设计?超卖怎么防?
    → 限流 + 令牌桶 + 异步下单 + 库存扣减(Redis Lua / 数据库乐观锁)
  4. 服务拆分原则?如何避免分布式事务?
  5. JWT 原理?如何实现无状态登录?

六、项目 & 场景题(2025–2026 年占比越来越高)

  1. 线上 OOM / Full GC 频繁怎么排查?
    → jmap / jstat / arthas / dump 分析
  2. 深分页怎么优化?
    → 覆盖索引 + 延迟关联 + search after / scroll
  3. 扫码登录怎么实现?
    → UUID + 长轮询 / WebSocket + Redis 存储状态
  4. Redis 如何实现亿级用户连续签到统计?
    → Bitmap + HyperLogLog(UV) + bitfield 统计
  5. 如何设计一个高并发点赞系统?

重阳,你现在是准备春招/秋招还是社招跳槽

  • 应届生 / 1–3 年:重点 Java 基础 + Spring + MySQL + Redis + 项目
  • 3–5 年:并发 + JVM 调优 + 分布式 + 场景题
  • 5 年+:架构设计 + 源码 + 真实故障案例

告诉我你的经验年限 + 目标公司档次(字节/阿里/腾讯/美团/京东/拼多多/大厂外包等),我可以给你更精准的优先级排序 + 刷题路线 + 答案模板

需要我展开某个模块的详细答案(比如三级缓存、AQS、秒杀防超卖)也可以直接说~

文章已创建 4357

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部