Java最新面试题(全网最全、最细、附答案)

2025-2026 年 Java 后端面试题 最全整理(高频 + 最新特性 + 真实场景),覆盖 Java 基础 / 集合 / 多线程 & 并发 / JVM / Spring 全家桶 / Spring Boot / MySQL / Redis / 微服务 & 分布式 等主流方向。

内容基于2025年下半年到2026年初真实大厂(字节、阿里、腾讯、美团、华为、京东等)面经 + JDK 21/22/23 新特性趋势,答案力求准确、简洁、可背诵、可展开

分为模块整理,建议收藏 + 按模块逐个攻克

一、Java 基础 & 集合(常问 2025-2026 版)

  1. String 为什么是不可变的?String、StringBuilder、StringBuffer 区别? String 被 final 修饰 + 底层 char[] 也是 final 的 → 不可变性,保证线程安全 + 常量池复用 + Hash 值缓存。
    StringBuilder(非线程安全、高性能)、StringBuffer(线程安全、synchronized、性能差)。
  2. JDK 8 到 JDK 21/22/23 有哪些重要变化?面试常考新特性?
  • JDK 17/21(LTS):密封类、记录类(record)、模式匹配 for switch(JDK 21 正式)、虚拟线程(Project Loom,JDK 21 正式)、字符串模板(预览)、Sequenced Collections(JDK 21)
  • JDK 22/23:字符串模板正式、外部函数 & 内存 API(预览)、结构化并发(预览)
  • 面试最爱问:虚拟线程(轻量级、平台线程阻塞不影响虚拟线程调度)、记录类 record(不可变数据载体,替代 Lombok @Data 部分场景)
  1. HashMap JDK 1.7 vs 1.8 区别?JDK 1.8 为什么引入红黑树? 1.7:数组 + 链表,头插法(扩容死循环风险)
    1.8:尾插法 + 链表长度 >8 转红黑树(查询 O(log n)),引入 hash 扰动优化
  2. ConcurrentHashMap 1.7 vs 1.8 区别?1.8 如何保证线程安全? 1.7:Segment 分段锁
    1.8:CAS + synchronized(只锁桶头节点),放弃分段锁,扩容协助机制更高效
  3. Java 中有哪些线程安全集合?底层实现分别是什么?
  • Vector / Hashtable(全表 synchronized)
  • Collections.synchronizedXXX(包装器,同步方法)
  • CopyOnWriteArrayList(写时复制,适合读多写少)
  • CopyOnWriteArraySet
  • ConcurrentHashMap(分段/CAS+synchronized)
  • ConcurrentSkipListMap / Set(跳表)

二、多线程 & 并发(2025-2026 高频 + 场景题)

  1. 线程池参数如何合理设置?核心线程数、最大线程数、队列怎么选?
  • CPU 密集型:核心数 +1
  • IO 密集型:核心数 × 2 + 核心数(经验值)
  • 队列:LinkedBlockingQueue(有界)、SynchronousQueue(不缓存)
  • 拒绝策略:CallerRunsPolicy(业务线程执行)、DiscardPolicy
  1. volatile 关键字作用?能否保证原子性? 保证可见性 + 禁止指令重排序不保证原子性
    i++ 场景仍需加锁或 AtomicInteger
  2. synchronized vs ReentrantLock 区别?哪个更好? synchronized(JDK 6 后优化):偏向锁 → 轻量级锁 → 重量级锁
    ReentrantLock:可中断、可公平、可定时、支持 Condition
    现在:优先 synchronized(JVM 优化更好),特殊需求用 ReentrantLock
  3. ThreadLocal 内存泄漏原因?怎么解决? ThreadLocalMap 的 key 是弱引用,value 是强引用
    线程池复用线程 → value 未回收 → 泄漏
    解决:用完 remove(),Spring 自动管理(RequestContextHolder)
  4. AQS 原理?CountDownLatch / Semaphore / CyclicBarrier 底层都是 AQS? AQS:CLH 变种队列 + state 状态
    • CountDownLatch:state 倒计数
    • Semaphore:state 表示许可数
    • CyclicBarrier:ReentrantLock + Condition
  5. 虚拟线程(JDK 21)与平台线程区别?使用场景? 虚拟线程:轻量级(百万级)、由 JVM 调度、阻塞不耗平台线程
    场景:高并发 IO 密集(网关、爬虫、Web 服务),代替 Tomcat NIO 线程池

三、JVM(线上问题排查必考)

  1. JVM 内存区域划分?JDK 8 后永久代去哪了? 线程私有:程序计数器、虚拟机栈、本地方法栈
    线程共享:堆、元空间(Metaspace)(原来 PermGen → 直接内存)
  2. 新生代 & 老年代垃圾回收算法?Minor GC vs Major GC vs Full GC? 新生代:复制算法(Minor GC)
    老年代:标记-清除 / 标记-整理(Major GC / Full GC)
    Full GC 触发:老年代满、元空间不足、显式 System.gc() 等
  3. JVM 参数调优常用选项?线上 OOM / CPU 高怎么排查? -Xms / -Xmx / -Xss / -XX:MaxMetaspaceSize
    -XX:+UseG1GC / -XX:+UseZGC(JDK 21 分代 ZGC)
    排查:jmap -histo、jstack、jstat -gc、arthas、MAT
  4. G1 vs ZGC vs Shenandoah?JDK 21 分代 ZGC 有什么改进? G1:可预测停顿、分区
    ZGC:低延迟(<10ms)、染色指针、并发整理(JDK 21 分代后新生代回收更快)

四、Spring / Spring Boot 高频

  1. Spring IOC 实现原理?Bean 生命周期? 反射 + 工厂模式 + 单例池
    生命周期:实例化 → 属性填充 → Aware → 初始化前 → 初始化 → 使用 → 销毁前 → 销毁
  2. @Transactional 失效场景有哪些?事务传播行为区别? 失效:非 public、内部调用、异常被捕获、事务方法不是 public
    传播:REQUIRED(最常用)、REQUIRES_NEW(独立事务)、NESTED(保存点)
  3. Spring Boot 自动配置原理?starter 机制? @EnableAutoConfiguration → spring.factories → Condition 条件装配
  4. Spring MVC 执行流程? DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → ViewResolver → 渲染
  5. Spring Boot Actuator 常用端点?如何暴露? health、info、metrics、env、loggers
    management.endpoints.web.exposure.include=*

五、MySQL / Redis / 分布式(简要)

  1. MySQL 索引失效场景?回表?覆盖索引? 函数、类型转换、OR、!=、最左前缀不满足
    回表:非主键索引 → 回主键索引取整行
    覆盖索引:查询字段都在索引中 → 不回表
  2. Redis 持久化机制?RDB vs AOF?混合持久化? RDB:快照,适合冷备
    AOF:日志,数据更安全,fsync 策略
    混合:4.0 后默认,AOF 重写时用 RDB + 增量
  3. 分布式锁怎么实现?Redisson 原理? setnx + 过期时间(防死锁)
    Redisson:Lua 脚本 + Watch Dog 自动续期
  4. RocketMQ / Kafka 消息丢失场景?怎么保证不丢失? 生产者:acks=all
    Broker:刷盘策略(同步/异步)
    消费者:手动提交 offset

六、场景题(2025-2026 真题趋势)

  1. 秒杀系统设计?超卖怎么防? 限流(令牌桶 / 漏桶)→ Redis 预减库存 → Lua 脚本原子扣减 → MQ 异步下单 → 数据库最终一致性
  2. 线上 CPU 100% / OOM 怎么排查? CPU:top + jstack 找 busy thread
    OOM:jmap -dump → MAT 分析 dominator tree
  3. 设计一个分布式 ID 生成方案? 雪花算法(Snowflake) / 带业务字段的雪花 / Redis 自增 + 分段
  4. 虚拟线程在 Web 应用中怎么替换 Tomcat 线程池? Spring Boot 3.2+ + JDK 21,配置 server.tomcat.threads.virtual.enabled=true

建议背诵节奏

  • 先背 Java 基础 + 集合 + 多线程(每天 20 道)
  • 再攻 JVM + Spring(重点)
  • 最后刷场景题 + 新特性(虚拟线程、分代 ZGC、记录类)

需要我展开某个模块的详细答案、代码示例、JDK 21 虚拟线程实战代码、或者针对某个方向(比如 Spring 源码 / JVM 调优 / 分布式事务)的更深内容,直接告诉我!祝你金三银四拿下满意 offer!

文章已创建 4631

发表回复

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

相关文章

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

返回顶部