本文基于近期大厂面经及 JDK 21/22/23 新特性趋势整理,涵盖基础、并发、集合、JVM、框架等高频考点。内容侧重技术原理与生产实践结合,适合中高级开发面试准备。
一、Java 基础 & JDK 新特性
当前面试对虚拟线程(Virtual Threads)的关注度极高。Tomcat 或 Spring WebFlux 场景下,建议直接使用虚拟线程池替代传统平台线程池。对于 JDBC、Redis 或 MQ 客户端,配合虚拟线程使用可大幅提升吞吐能力。但需注意,不要在虚拟线程内执行长时间 CPU 密集型计算,这会导致 carrier thread 饿死。
虚拟线程与平台线程对比
| 维度 | 平台线程(传统 Thread) | 虚拟线程(JDK 21+) | 备注 |
|---|---|---|---|
| 内存开销 | 1–2 MB / 线程 | ~几百字节 ~ 几 KB | 百万级无压力 |
| 上下文切换 | 操作系统内核态切换 | 用户态调度(轻量) | 快 10–100 倍 |
| 创建/销毁成本 | 高 | 极低 | 阻塞不贵 |
| 适合场景 | CPU 密集、少量长任务 | IO 密集、高并发短任务 | — |
| 线程池是否还需要 | 需要(控制并发数) | 一般不需要,可直接 new Thread() | 推荐 Thread.ofVirtual().start() |
生产建议:面试中常被追问实际落地场景。JDK 21/22/23 最值得关注的特性优先级如下:
| 优先级 | 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 Collections | JDK 21 正式 | List / Deque / SortedSet 统一首尾操作 | 'first() / last() / getFirst() 等方法' |
| ★★★ | Record Patterns + switch 模式匹配增强 | JDK 21–23 逐步正式 | 简化 instanceof + 强制转换 + 解构 | '替代繁琐的类型判断 + 强制转换' |
| ★★☆ | 分代 ZGC(Generational ZGC) | JDK 21 正式 |

