JDK 21 LTS 高频特性回顾与升级

共 18 题
#

1. JDK 21 LTS 相比 17 LTS 的关键特性(虚拟线程/结构化并发/模式匹配/记录模式)如何系统性盘点?

A 虚拟线程、结构化并发、模式匹配、记录模式、分代 ZGC 等是 21 的关键特性 ✓ 正确答案
B JDK 21 只新增了虚拟线程,无其他特性
C 模式匹配在 21 中仍是预览
D 分代 ZGC 在 17 已存在
#

2. Sequenced Collections(JEP 431)解决了集合的哪些一致性痛点,与 List/Deque/SortedSet 的兼容关系?

A 它只为 List 新增了方法,不影响其他集合
B 它只解决 Set 的无序问题
C 它是破坏性变更,会移除现有集合方法
D 新增 SequencedCollection/Set/Map 接口,统一首尾访问与逆序,List/Deque/SortedSet 自动继承 ✓ 正确答案
#

3. 记录模式(Record Patterns)与嵌套解构在业务代码中的实际收益,与模式匹配 switch 如何组合?

A 记录模式支持解构与嵌套解构,可与模式匹配 switch 组合实现穷尽性分支处理 ✓ 正确答案
B 记录模式只能解构一层,不能嵌套
C 记录模式必须手动强转
D 记录模式与 switch 无法组合
#

4. 分代 ZGC(JEP 439)相比非分代 ZGC 的停顿改进,什么场景下收益最大?

A 分代 ZGC 通过年轻代/老年代分离利用弱分代假设,短命对象多、分配率高的场景收益最大 ✓ 正确答案
B 分代 ZGC 与非分代 ZGC 完全一致
C 分代 ZGC 会显著增加停顿
D 分代 ZGC 只适用于小堆
#

5. 虚拟线程在生产落地的收益评估,IO 密集服务的吞吐提升与线程池迁移策略

A 虚拟线程对 CPU 密集场景收益最大
B 迁移只需替换线程池,无需其他检查
C 虚拟线程在 IO 密集高并发场景吞吐收益显著,迁移需排查钉住与控制 ThreadLocal ✓ 正确答案
D 虚拟线程会占用与平台线程相同的内存
#

6. 从 JDK 8/11 直接升级到 21 LTS 的主要兼容性风险与治理清单?

A 升级到 21 无任何兼容性风险
B 主要风险是内部 API 移除、模块化封装、行为变更与依赖兼容,需用 jdeps 扫描并分步升级 ✓ 正确答案
C 只需替换 JDK 版本号即可
D 模块化对 JDK 8 应用无影响
#

7. switch 模式匹配与 record pattern 的嵌套解构在业务代码中的实际收益?

A 它们增加了样板代码量
B 它们提供类型安全、穷尽性检查与嵌套解构,减少 if/else 与强转,提升可读性 ✓ 正确答案
C 模式匹配无法处理多态对象
D 穷尽性检查无法编译期实现
#

8. Java 21 的 Key Encapsulation Mechanism API(JEP 452)在应用侧的价值与使用场景?

A 它只是一个新的加密哈希算法
B KEM 只能用于对称加密
C 它与现有 TLS 密钥协商完全无关
D 它抽象密钥封装机制,为后量子密码(如 ML-KEM)提供标准 API,用于密钥协商 ✓ 正确答案
#

9. JDK 21 升级的兼容性治理,API 移除、模块化与字节码版本的影响如何?

A 升级只影响字节码版本,无其他影响
B 废弃 API 无需处理
C 模块化对反射无任何限制
D 需治理 API 移除、模块化封装与字节码版本,用 jdeps 扫描并升级依赖 ✓ 正确答案
#

10. JDK 21 升级后的性能回归验证,GC 行为、JIT 与启动时间对比

A 需用 JFR 与压测对比 GC、JIT 与启动时间,以数据定位差异并调整参数 ✓ 正确答案
B 升级后性能必然提升,无需验证
C GC 行为与 JDK 版本无关
D 启动时间无法优化
#

11. 虚拟线程在 JDK 21 的使用边界,synchronized pinning 与线程池迁移如何?

A 虚拟线程在 synchronized 内做阻塞 IO 无任何问题
B synchronized 内阻塞 IO 会钉住载体线程,迁移需排查钉住并谨慎使用 ThreadLocal ✓ 正确答案
C 虚拟线程适合所有负载类型
D ThreadLocal 在虚拟线程下内存开销可忽略
#

12. Java 21 中未命名模式与变量(JEP 443 预览)与字符串模板(JEP 430,预览)的定位与使用限制?

A 两者都是正式特性,可放心生产使用
B 两者都是预览特性,需 --enable-preview,且 API 可能变更,不适合生产依赖 ✓ 正确答案
C 未命名模式是正式特性,字符串模板是预览
D 预览特性保证向后兼容
#

13. Project Loom 后续(Loom 2.0)与虚拟线程的已知限制(同步阻塞、线程局部变量)?

A 虚拟线程没有已知限制
B ThreadLocal 在虚拟线程下开销可忽略
C 同步阻塞钉住与 ThreadLocal 内存放大是已知限制,Loom 后续持续缓解,工程上需规避 ✓ 正确答案
D 虚拟线程适合 CPU 密集任务
#

14. 从 Java 17 升级到 21 时,`Unsafe`、内部 API 与反射封装的兼容性风险点如何系统排查?

A 内部 API 在 21 下可无条件访问
B 反射 setAccessible 在 21 下永远成功
C 需用 jdeps 扫描 Unsafe/内部 API、处理反射封装异常并迁移到公开 API ✓ 正确答案
D Unsafe 是正式公开 API,无风险
#

15. 记录模式与密封类的组合使用,模式匹配 switch 的表达式如何?

A 记录模式不能用于 switch
B 密封类与 switch 无关
C 密封类可让 switch 获得编译期穷尽性检查,记录模式提供解构 ✓ 正确答案
D 组合使用仍必须手写 default 分支
#

16. JDK 21 的字符串模板/虚拟线程的工程落地与兼容性风险?

A 两者都可直接生产落地
B 虚拟线程已正式可落地但需注意钉住与 ThreadLocal,字符串模板仍预览应等待 ✓ 正确答案
C 虚拟线程仍是预览
D 字符串模板已正式,可放心使用
#

17. JDK 21 的 Foreign Function & Memory API 预览,与 JNI 的对比如何?

A FFM 不如 JNI 安全
B JNI 与 FFM 在安全上完全等价
C FFM 必须写 C 代码
D FFM 类型安全、纯 Java 编写、无需 C 样板,逐步替代 JNI 与 Unsafe ✓ 正确答案
#

18. JDK 21 的 API 增强(StringBuilder.repeat、Math 等)在生产代码中的应用

A JDK 21 没有新增任何 API
B Math.clamp 与 Math.max/min 无区别
C 这些增强只影响性能,不影响代码
D StringBuilder.repeat、Math.clamp、divCeil 等增强可减少样板代码、提升正确性 ✓ 正确答案