# 1. Collections.unmodifiableMap、Collections.synchronizedMap 的工程价值 A unmodifiableMap 提供只读视图,synchronizedMap 提供互斥加锁的线程安全 ✓ 正确答案 B 两者都不可修改 C unmodifiableMap 保证线程安全 D synchronizedMap 并发度高于 ConcurrentHashMap
# 2. ConcurrentHashMap 与 Collections.synchronizedMap/Hashtable 的并发度与性能对比 A Hashtable 并发度更高 B 两者并发度相同 C ConcurrentHashMap 读操作也加锁 D Hashtable 用全局锁,ConcurrentHashMap 用 CAS 与桶级锁,并发度更高 ✓ 正确答案
# 3. ConcurrentHashMap 的 forEachKey/forEachValue 并行遍历与顺序保证的边界 A 遍历保证全局一致顺序 B 遍历期间修改会抛异常 C 遍历是弱一致的,不保证顺序与反射并发修改 ✓ 正确答案 D 并行遍历总是按 key 排序
# 4. ConcurrentHashMap 的 putIfAbsent/remove(key,value)/replace(key,old,new)原子语义 A 这些操作在并发下不原子 B putIfAbsent 仅当 key 不存在时放入,replace(key,old,new) 仅当值匹配才替换 ✓ 正确答案 C putIfAbsent 总是覆盖旧值 D remove(key,value) 无条件移除
# 5. ConcurrentHashMap 的 reduce/transform 并行操作与 ForkJoinPool.commonPool 的协作 A 并行任务提交到 ForkJoinPool.commonPool 分片并行归约 ✓ 正确答案 B 并行度固定为 1 C 阻塞操作在 commonPool 无影响 D commonPool 只能被这一个 map 使用
# 6. HashMap 在 JDK 8 中尾插法替代头插法解决死循环但仍不保证并发安全的边界 A 尾插法解决扩容死循环,但仍不保证并发安全 ✓ 正确答案 B JDK8 HashMap 并发安全 C 尾插法导致死循环 D JDK8 HashMap 可替代 ConcurrentHashMap
# 7. HashMap 的 put/putIfAbsent/compute/merge 的工程价值 A merge 用函数合并旧值与新值,适合累加计数 ✓ 正确答案 B 这些方法在并发下都安全 C putIfAbsent 总是覆盖旧值 D compute 不能初始化新 key
# 8. 结构化并发与 CompletableFuture 组合模式的取舍 A 结构化并发无法聚合结果 B 两者完全相同 C CompletableFuture 保证任务生命周期可控 D 结构化并发保证子任务生命周期可控、取消级联,CompletableFuture 灵活但易泄漏 ✓ 正确答案
# 10. ArrayList 与 LinkedList 在随机访问、插入、删除的工程差异 A ArrayList 随机访问 O(1) 且内存紧凑,LinkedList 头尾插入 O(1) 但访问 O(n) ✓ 正确答案 B LinkedList 随机访问 O(1) C ArrayList 中间插入 O(1) D LinkedList 内存更紧凑
# 11. ArrayList 的扩容机制(1.5 倍、Arrays.copyOf)的工程价值 A 扩容复制是 O(1) B 每次 add 都触发拷贝 C 扩容倍数越大越省内存 D 扩容约 1.5 倍并 Arrays.copyOf 拷贝,均摊 add 仍 O(1) ✓ 正确答案
# 12. ConcurrentHashMap 在 JDK 8 中 get 操作不加锁的可见性保证(volatile 读/Unsafe) A get 读不到最新值 B volatile 只保证原子性 C get 必须加锁 D get 不加锁,靠 volatile 读与写发布保证可见性 ✓ 正确答案
# 13. ConcurrentHashMap 扩容时多线程协助 transfer 的机制与 sizeCtl 状态机(负数标记) A 扩容只能单线程 B 多线程分桶迁移,ForwardingNode 标记已迁移桶,sizeCtl 负数标记扩容状态 ✓ 正确答案 C ForwardingNode 表示已归还锁 D sizeCtl 负数表示空闲
# 14. ConcurrentHashMap 的 capacity 初始值与负载因子(固定 0.75)的调优策略 A initialCapacity 无意义 B 负载因子可任意配置 C 容量越大性能一定越好 D 负载因子固定 0.75,通过 initialCapacity 按预估元素数预留 ✓ 正确答案
# 15. ConcurrentHashMap 的 size()/mappingCount() 一致性语义与 LongAdder 风格的分段计数 A 用分段计数(CounterCell)返回近似值,弱一致 ✓ 正确答案 B 计数无并发优化 C size() 返回精确实时值 D mappingCount() 返回 int
# 16. ConcurrentHashMap 的树化(treeifyBin)条件与红黑树在并发查找中的优势 A 链表长度 ≥ 8 且容量 ≥ 64 时把链表转为红黑树 ✓ 正确答案 B 树化只为内存 C 红黑树查找 O(n) D 链表长度 ≥ 8 就树化,与容量无关
# 17. ConcurrentHashMap.computeIfAbsent 递归更新导致的死锁/IllegalStateException 陷阱与规避 A 计算函数内修改同一 map 会死锁或抛 IllegalStateException ✓ 正确答案 B 该问题只存在于 HashMap C 规避方法是在函数内递归 D 计算函数内可安全修改同一 map
# 18. HashMap 容量为何是 2 的幂与 hash() 扰动函数设计(高 16 位异或) A 扰动函数只影响高位 B 2 的幂容量用位运算求桶下标,高 16 位异或扰动低位提升分布 ✓ 正确答案 C 容量是 2 的幂没有意义 D 扰动函数增加冲突
# 19. HashMap 死循环(JDK7 头插法)与线程不安全表现(数据丢失/覆盖) A 并发写不会覆盖 B JDK7 头插法扩容可能成环导致死循环,并发写还会数据丢失/覆盖 ✓ 正确答案 C HashMap 并发安全 D 死循环只发生在 JDK8
# 21. HashMap 的扩容(2 倍、rehash)的工程价值 A 扩容 2 倍,元素留原下标或移到原下标+旧容量,均摊 O(1) ✓ 正确答案 B 扩容每次都是 O(1) C 扩容只影响新元素 D 扩容后所有元素重新哈希到新位置
# 22. Java 应用的 Resilience4j 与限流降级设计 A Resilience4j 只用于重试 B 只有熔断功能 C 限流无法降级 D 提供熔断、限流、重试、舱壁等组件,配合 fallback 实现降级 ✓ 正确答案
# 23. LinkedHashMap 在 LRU Cache 的工程价值 A removeEldestEntry 无法控制淘汰 B 无法实现 LRU C 只能按插入序遍历 D accessOrder=true 时按访问序,重写 removeEldestEntry 淘汰最久未访问 ✓ 正确答案
# 24. List.of()、Set.of()(Java 9+)不可变集合的工程价值 A 允许 null B 与 unmodifiable 包装完全相同 C 可变集合 D 创建不可变集合,不可修改、不含 null,可安全共享 ✓ 正确答案
# 25. ReentrantLock 与 synchronized 在虚拟线程环境下的取舍 A 两者在虚拟线程下相同 B synchronized 阻塞可能钉住虚拟线程,ReentrantLock 不钉住,更受青睐 ✓ 正确答案 C synchronized 永不钉住 D ReentrantLock 更容易钉住
# 26. Stream 的并行(parallelStream)与线程安全的工程价值 A 并行流与线程安全无关 B 无状态操作也需加锁 C 适合无状态、无副作用、大数据量的操作,共享状态会引入竞态 ✓ 正确答案 D 小数据量并行收益最大
# 27. WeakHashMap、IdentityHashMap、EnumMap 的工程价值 A EnumMap 用链表实现 B WeakHashMap 用强引用 C WeakHashMap 用弱引用回收无强引用 key,EnumMap 用数组实现枚举键映射 ✓ 正确答案 D IdentityHashMap 用 equals 比较
# 28. BlockingQueue 接口(ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue)的工程价值 A ArrayBlockingQueue 有界数组,LinkedBlockingQueue 链表,PriorityBlockingQueue 按优先级出队 ✓ 正确答案 B 三者吞吐相同 C PriorityBlockingQueue 无优先级 D 三者都基于数组
# 29. DelayQueue 在定时任务的工程价值 A 元素按插入顺序出队 B DelayQueue 天然支持分布式 C 元素无需实现 Delayed D 元素按到期时间排序,take 阻塞到最早到期元素可用 ✓ 正确答案
# 30. EnumSet、BitSet 在位运算的工程价值 A EnumSet 只能用于 int B 两者都基于 TreeMap C BitSet 不能做位运算 D EnumSet 用位向量表示枚举集合,BitSet 是通用位向量支持位运算 ✓ 正确答案
# 31. FFM API 的安全模型与内存访问越界防护 A FFM 与 JNI 安全性相同 B MemorySegment 带界与生命周期,越界访问抛异常 ✓ 正确答案 C FFM 允许任意越界访问 D Arena 管 segment 创建
# 32. Foreign Function & Memory API 替代 JNI 的动机与架构 A FFM 只能访问内存 B FFM 用 Linker/SymbolLookup/MethodHandle 声明式调用原生函数,无需手写 C 胶水 ✓ 正确答案 C FFM 与 JNI 相同 D FFM 仍需要手写 JNI
# 33. HashSet、LinkedHashSet、TreeSet 的工程价值 A 三者都无序 B HashSet 无序 O(1),LinkedHashSet 保持插入序,TreeSet 排序支持范围查询 ✓ 正确答案 C LinkedHashSet 按排序 D TreeSet 查询 O(1)
# 34. JDK 发布列车(6 个月 LTS 策略)对生产升级的影响 A LTS 无维护 B 所有版本都是 LTS C 生产应升级每个特性版本 D 每 6 个月发布特性版本,每 2 年一个 LTS,生产宜选 LTS ✓ 正确答案
# 35. MemoryLayout 定义 struct 与 VarHandle 访问 off-heap 内存 A 需手算偏移 B VarHandle 定义布局 C MemoryLayout 定义 struct 布局,VarHandle 对其做类型化读写 ✓ 正确答案 D MemoryLayout 只能访问堆内存
# 36. MemorySegment、Arena 与内存生命周期管理 A Arena 管理 segment 生命周期,关闭时统一释放 ✓ 正确答案 B segment 关闭后仍可访问 C Arena 只用于分配 D segment 永不释放
# 37. OpenTelemetry 与 Micrometer 在 Java 应用中的集成 A 两者只能互斥使用 B Micrometer 是指标门面,OpenTelemetry 提供统一观测标准,二者可桥接集成 ✓ 正确答案 C OpenTelemetry 不导出指标 D Micrometer 只做追踪
# 38. Sequenced Collections(JEP 431, Java 21)的工程价值 A 无法逆序 B 只适用于 HashMap C 统一有序集合的 getFirst/getLast/addFirst/reversed 等操作 ✓ 正确答案 D 只适用于 TreeSet
# 39. ShutdownOnFailure/ShutdownOnSuccess 策略与子任务取消 A 只用于单任务 B 任一失败/成功即关闭作用域并取消其余子任务 ✓ 正确答案 C 必须等全部子任务完成 D 无法取消子任务
# 40. Spring Modulith 模块化单体架构的设计与应用 A 模块间直接访问私有实现 B 与模块边界无关 C 按业务域拆分模块,明确边界与事件通信,可平滑演进微服务 ✓ 正确答案 D 强制拆分为微服务
# 41. Stream API 的中间操作(filter、map、flatMap、distinct、sorted)的工程价值 A 中间操作立即执行 B flatMap 用于去重 C 中间操作无法组合 D 中间操作是惰性的,可链式组合实现筛选、转换、去重、排序 ✓ 正确答案
# 42. Stream API 的终端操作(forEach、collect、reduce、count)的工程价值 A collect/reduce/count 触发求值并聚合结果 ✓ 正确答案 B 终端操作也是惰性的 C collect 只能转 List D reduce 只能求和
# 43. Stream 的 Spliterator 在自定义数据源的工程价值 A Spliterator 与 Stream 无关 B trySplit 用于顺序遍历 C 只能用于 ArrayList D 提供 tryAdvance/trySplit,让自定义数据源接入 Stream 并支持并行 ✓ 正确答案
# 44. SymbolLookup 与 MethodHandle 实现原生函数调用 A SymbolLookup 找符号,Linker 绑定为 MethodHandle 后调用 ✓ 正确答案 B 无法调用原生函数 C MethodHandle 找符号 D SymbolLookup 直接调用函数
# 45. SynchronousQueue 在任务交接的工程价值 A 有界缓冲队列 B 零缓冲,put 必须配对 take,用作 cachedThreadPool 的直接交接队列 ✓ 正确答案 C 与线程池无关 D 会积压任务
# 46. TransferQueue(LinkedTransferQueue)在生产者-消费者的工程价值 A 只能缓冲不能交接 B transfer 有消费者等待时直接交接,无则入队缓冲 ✓ 正确答案 C 基于锁实现 D 与 SynchronousQueue 相同
# 47. closed-world analysis、reachability metadata 与反射配置 A closed-world 静态分析可达代码,反射等动态特性需 reachability metadata 显式声明 ✓ 正确答案 B closed-world 与反射无关 C Native Image 保留所有反射 D 无需元数据即可反射
# 48. JDK 24 前 synchronized 导致的虚拟线程钉住(pinning)问题与 JEP 491 的解决方式 A synchronized 永不钉住 B pinning 只影响 ReentrantLock C JDK 24 前 synchronized 阻塞会钉住虚拟线程,JEP 491 修复该问题 ✓ 正确答案 D JEP 491 引入钉住
# 50. 虚拟线程在 CPU 密集 vs I/O 密集场景下的性能差异 A 虚拟线程能提升核数 B CPU 密集受益最大 C I/O 密集受益大,CPU 密集受核数限制无增益 ✓ 正确答案 D 两者无差异
# 51. 虚拟线程环境下的结构化日志与 MDC 替代方案 A 上下文无法传递 B ThreadLocal 在虚拟线程下零开销 C 用结构化日志显式字段或 Scoped Values 替代 ThreadLocal 的 MDC ✓ 正确答案 D MDC 天然适合虚拟线程
# 52. CRaC(Coordinated Restore at Checkpoint)的快照恢复机制 A 无需资源协调 B 快照不可恢复 C 保存 JVM 快照并恢复,通过 Resource 协调资源实现快速启动 ✓ 正确答案 D 只做编译优化
# 53. GraalVM Native Image 的 AOT 编译原理与限制 A AOT 保留所有反射 B AOT 与 JIT 相同 C AOT 静态编译裁剪代码,动态特性需元数据声明,无 JIT 热优化 ✓ 正确答案 D AOT 启动更慢
# 54. Native Image 与 CRaC 的适用场景对比与选型决策 A 两者都不启动 B Native Image 是原生编译生态受限,CRaC 保留 JVM 与热优化但需资源协调 ✓ 正确答案 C 两者完全相同 D CRaC 无 JVM
# 55. Native Image 的启动时间 vs 峰值吞吐量权衡 A 两者吞吐相同 B Native Image 无启动优势 C 峰值吞吐总高于 JIT D 启动快但峰值吞吐可能低于 JIT,适合启动敏感短生命周期场景 ✓ 正确答案
# 56. Scoped Values 在虚拟线程上下文传播中的应用 A 提供不可变、结构化作用域上下文,适合虚拟线程传递 trace-id 等 ✓ 正确答案 B 不能跨线程传播 C 与 ThreadLocal 相同 D 可变上下文
# 57. Spring Boot 4 + GraalVM Native Image 的 RuntimeHints API A 运行时才声明 B 与反射无关 C 只用于模板 D 构建期声明反射/资源/代理需求并生成 Native Image 元数据 ✓ 正确答案
# 58. Structured Concurrency(JEP 453)的设计理念与 API A 无法聚合结果 B 子任务可无限运行 C 子任务生命周期受作用域约束,作用域结束前完成或取消 ✓ 正确答案 D 与作用域无关
# 59. Testcontainers 在集成测试中的最佳实践 A 无法用于集成测试 B 用容器提供真实依赖,复用容器、固定版本、隔离数据 ✓ 正确答案 C 每个测试都启动新容器 D 容器与生产差异大