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

Java 最新面试题(2026 年版 · 全网最全、最细、附答案)

以下内容基于 2025 下半年 ~ 2026 年初 真实大厂(字节、阿里、腾讯、美团、华为、京东、快手、小米等)面经 + JDK 21/22/23 新特性趋势整理。
答案力求准确、简洁、可背诵、可展开,适合三面、四面、技术终面使用。

分为八大模块,按面试出现频率从高到低排序。

一、Java 基础 & JDK 新特性(2026 年常考 JDK 21–23)

    • Tomcat / Spring WebFlux → 直接用虚拟线程线程池
    • JDBC / Redis / MQ 客户端 → 配合虚拟线程使用可大幅提升吞吐
    • 不要在虚拟线程里跑长时间 CPU 计算(会饿死 carrier thread)

虚拟线程(Virtual Threads)与平台线程(Platform Threads)对比?使用场景?
核心对比表:

维度平台线程(传统 Thread)虚拟线程(JDK 21+)备注
内存开销1–2 MB / 线程~几百字节 ~ 几 KB百万级无压力
上下文切换操作系统内核态切换用户态调度(轻量)快 10–100 倍
创建/销毁成本极低阻塞不贵
适合场景CPU 密集、少量长任务IO 密集、高并发短任务
线程池是否还需要需要(控制并发数)一般不需要,可直接 new Thread()推荐 Thread.ofVirtual().start()

生产建议(常考追问):

JDK 21 / 22 / 23 最值得关注的特性有哪些?生产中你会用哪些?
答案参考优先级(2026 年真实使用率排序):

优先级JEP / 特性稳定状态生产使用场景举例面试加分点回答
★★★★★虚拟线程(Virtual Threads)JDK 21 正式高并发 HTTP、消息消费、爬虫、数据库连接池“替换 tomcat 线程池,QPS 提升 5–20 倍”
★★★★☆结构化并发(Structured Concurrency)JDK 23 预览批量任务编排、超时控制、资源自动关闭“替代 CompletableFuture 的混乱回调地狱”
★★★★☆Scoped Values(范围值)JDK 21 预览→22 正式线程局部变量的现代化替代(轻量、无继承)“比 ThreadLocal 更安全、更高效”
★★★★String Templates(字符串模板)多次预览中日志、SQL、JSON 构建(防注入)“替代 String.format + 占位符混乱”
★★★☆Sequenced CollectionsJDK 21 正式List / Deque / SortedSet 统一首尾操作“first() / last() / getFirst() 等方法”
★★★Record Patterns + switch 模式匹配增强JDK 21–23 逐步正式简化 instanceof + 强制转换 + 解构“替代繁琐的类型判断 + 强制转换”
★★☆分代 ZGC(Generational ZGC)JDK 21 正式大堆低延迟 GC(<1ms STW)“生产环境开启 -XX:+UseZGC -XX:+ZGenerational”
★★Foreign Function & Memory APIJDK 22–23JNI 现代化替代、直接操作 off-heap 内存“调用 C++ 库、Zero-Copy 网络”

一句话总结(面试常背):
“2026 年最值得上生产的是虚拟线程 + 结构化并发 + Scoped Values 这套组合,基本可以取代传统的线程池 + ThreadLocal 模式,极大简化高并发代码。”

二、并发 & 多线程(2026 年仍是重灾区)

  1. JDK 21+ 虚拟线程下,synchronized 还有性能问题吗?
    答案:几乎没有
    虚拟线程的阻塞不再占用 carrier thread(平台线程),所以 synchronized 导致的阻塞成本大幅降低。
    但仍建议:高竞争场景优先用 ReentrantLock + Condition,因为 synchronized 在虚拟线程时代优化了很多,但锁升级(偏向 → 轻量 → 重量)过程仍然存在。
  2. ThreadLocal 在虚拟线程下还有必要吗?
    答案:基本没必要了,推荐用 Scoped Value(JDK 21+)。
    ThreadLocal 在虚拟线程中会导致内存泄漏风险(因为虚拟线程数量巨大且频繁创建销毁),而 Scoped Value 是结构化的、不可变的值传递,生命周期自动跟随作用域,天然避免泄漏。
  3. 说说 AQS 的核心思想?ReentrantLock / CountDownLatch / Semaphore 的实现都依赖它吗?
    核心:一个 volatile int state + 一个 CLH 变种的双向链表队列。大部分 JUC 工具类都基于 AQS:ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore、CyclicBarrier、FutureTask 等。
    • state:表示锁状态 / 剩余资源数 / 计数等
    • 队列:存放等待线程(Node 节点)
    • CAS 修改 state + park/unpark 阻塞唤醒

三、集合 & 容器(高频 + 细节)

  1. ConcurrentHashMap 1.8 相对于 1.7 做了哪些优化?为什么放弃分段锁?
    核心变化:放弃分段锁原因:1.7 最大并发 = segment 数量(默认 16),1.8 理论并发更高 + 内存利用率更好。
    • 放弃分段锁 → 用 CAS + synchronized(只锁链表头 / 红黑树根)
    • size() / isEmpty() 等操作不再加锁,而是用 baseCount + CounterCells 累加(类似 LongAdder)
    • 扩容时多线程协助(transfer 方法)
    • 链表转红黑树阈值 8 + 数组长度 ≥64
  2. HashMap 在 JDK 17/21 有哪些新变化?
    几乎没有大的 API 变化,但内部有微优化:
    • 更好的树化 / 退化逻辑(JDK 16+)
    • 配合虚拟线程使用时,迭代器更安全(fail-fast 机制不变)

四、JVM & GC(2026 年依然是三面、四面杀手)

Shenandoah GC、ZGC、Epsilon GC、ZGC 分代各自适用场景?

GC 类型最大暂停时间吞吐量牺牲适用场景是否分代
Shenandoah<10ms中等对延迟敏感、中等堆
ZGC<1ms中等大堆、低延迟否(21前)
ZGC 分代<1ms较小大堆 + 高吞吐
Epsilon无 GC最高内存充足、短期任务

分代 ZGC(JDK 21)与普通 ZGC 的区别?生产中怎么开启?
普通 ZGC:非分代,所有对象都用统一处理方式
分代 ZGC:引入年轻代(Eden + Survivor),小对象回收更快
开启方式(生产推荐):

-XX:+UseZGC -XX:+ZGenerational -Xmx32g -Xms32g 

五、Spring / Spring Boot(框架层高频)

  1. Spring Boot 3.x(JDK 17+)有哪些重大变化?
    • 最低要求 JDK 17
    • Jakarta EE 9+(javax.* → jakarta.*)
    • AOT 编译支持(GraalVM Native Image 更友好)
    • Observability 增强(Micrometer + Tracing)
    • 虚拟线程原生支持(Tomcat / WebFlux)

六、场景题 & 设计题(四面 / HR 面常考)

  1. 设计一个支持 10w QPS 的秒杀系统,缓存 + 数据库怎么配合?
    典型回答框架:
    1. 前置限流(Sentinel / Nginx)
    2. Redis + Lua 脚本原子扣库存
    3. 异步落库(MQ 削峰)
    4. 缓存预热 + 热点 key 缓存
    5. 虚拟线程处理请求(JDK 21+)
    6. 幂等 + 防超卖(唯一订单号 + 去重)
  2. 如何设计一个分布式 Session 方案?
    主流三种:
    • Spring Session + Redis(最常用)
    • JWT(无状态,前后端分离首选)
    • 粘性 Session(Nginx ip_hash)

七、其他高频补充(2026 年新趋势)

  • GraalVM Native Image 优缺点?(启动快、内存低,但反射/动态代理受限)
  • Project Loom 生态现状?(很多框架 2025–2026 年已适配虚拟线程)
  • Java 23 / 24 预览特性了解多少?(关注 Class-File API、Vector API 等)

需要我继续展开某个模块(比如完整的 并发八股文JVM 调优实战Spring 源码级问题),或者针对某家公司(如字节/阿里/美团)的专项面经,请直接告诉我,我继续给你补充最细的版本。

Read more

Java-Spring入门指南(十四)利用IDEA教你构建第一个SpringMVC系统

Java-Spring入门指南(十四)利用IDEA教你构建第一个SpringMVC系统

Java-Spring入门指南(十四)SpringMVC项目实战搭建 * 前言 * 一、首先导入我们的Maven * 二、接着导入SpringMVC相关的包 * 三、创建Servlet_web环境 * (1)配置springmvc.xml * (2)配置web.xml里面的中央处理器 * (3)为什么需要配置前端控制器? * 五、配置最新的tomcat 11 * 六、运行项目 前言 * 在上一篇博客中,我们系统学习了SpringMVC的核心流程与组件分工,明确了DispatcherServlet(前端控制器)、HandlerMapping(处理器映射器)等组件的协作逻辑。 * 理论之后更需实践,如何从0到1搭建一个可运行的SpringMVC项目,如何将核心组件配置落地,是本次实战的核心目标。 * 本文将基于Maven+IDEA+Tomcat 11环境,一步步完成SpringMVC项目的搭建、配置与运行,让你直观感受“理论”到“实战”的转化过程。 我的个人主页,欢迎来阅读我的其他文章 https:

By Ne0inhk
【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战

【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战

我的个人主页我的专栏:人工智能领域、java-数据结构、Javase、C语言,MySQL,JavaEE初阶,希望能帮助到大家!!!点赞👍收藏❤ 目录 * 一、先搞懂:文件和文件系统的基础认知 * 二、Java 中操作文件的“核心工具”:File 类 * 1. File 类的关键属性、构造和方法 * 2. File 类实操:从获取信息到创建删除 * (1)搞懂 get 系列方法:获取文件信息 * (2)创建与删除文件:createNewFile() 和 delete() * (3)创建目录:mkdir() 和 mkdirs() 的区别 * (4)文件重命名:renameTo() * 三、Java IO

By Ne0inhk
Java 数据结构与算法:时间空间复杂度 从入门到实战全解

Java 数据结构与算法:时间空间复杂度 从入门到实战全解

🏠个人主页:黎雁 🎬作者简介:C/C++/JAVA后端开发学习者 ❄️个人专栏:C语言、数据结构(C语言)、EasyX、JAVA、数据结构与算法(JAVA)、游戏、规划、程序人生 ✨ 从来绝巘须孤往,万里同尘即玉京 文章目录 * Java 数据结构与算法:时间空间复杂度 从入门到实战全解 🚀 * 📝 文章摘要 * 🧠 前置知识回顾 * 一、数据结构与算法基础认知 📚 * 1. 什么是数据结构? * 2. 数据库 ≠ 数据结构(一定要分清) * 3. 数据结构与算法的关系 * 4. 最实用的学习路线(直接照做) * 二、算法复杂度:评价算法好坏的唯一标准 ⚖️ * 1. 两个核心概念 * ① 时间复杂度 ⏱️ * ② 空间复杂度 📦 * ③ 时间 vs 空间:怎么取舍?

By Ne0inhk
Java 注解与反射实战:手把手实现自定义日志与参数校验注解

Java 注解与反射实战:手把手实现自定义日志与参数校验注解

前言:为什么需要自定义注解? 在日常开发中,我们经常遇到两类重复工作: 日志记录:每个重要方法都要写 "开始执行"、"参数是 xxx"、"执行结束" 的代码;参数校验:判断输入是否为 null、年龄是否在合理范围、手机号格式是否正确等。 这些工作机械且冗余,而注解 + 反射正是解决这类问题的 "银弹"—— 用注解标记需要处理的地方,用反射自动执行逻辑,实现 "一次定义,多处复用"。 本文将带你从零实现两个实用案例: 1. 自定义日志注解@Log:自动记录方法调用细节; 2. 自定义参数校验注解@NotNull、@Range:自动校验方法参数合法性。 全程实战,代码可直接运行,搭配图解帮你吃透底层逻辑。 案例一:自定义日志注解@

By Ne0inhk