集合框架与流处理

共 60 题
#

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 灵活但易泄漏 ✓ 正确答案
#

9. 结构化并发如何处理线程泄漏与取消传播

A 子任务可无限运行
B 取消不传播
C 作用域结束前强制完成或取消子任务,杜绝泄漏并级联取消 ✓ 正确答案
D 作用域不管理子任务
#

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
#

20. HashMap 的实现(数组+链表+红黑树, Java 8+)

A 无需处理冲突
B 树化后永不退化
C 数组 + 链表,冲突严重时树化为红黑树 ✓ 正确答案
D 只有数组
#

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 引入钉住
#

49. 如何排查与诊断虚拟线程相关的性能问题

A 虚拟线程无需诊断
B JFR 无法记录虚拟线程
C 钉住不会影响性能
D 用 JFR 与线程转储分析钉住、阻塞与线程数量 ✓ 正确答案
#

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 容器与生产差异大
#

60. jextract 工具生成 Java 绑定的工作流

A 与 C 头文件无关
B 从 C 头文件自动生成 Java 绑定,替代手写原生绑定 ✓ 正确答案
C 生成 C 代码
D 只能手写绑定