并发集合

共 19 题
#

1. ArrayBlockingQueue 的有界单锁实现

A 双锁
B 单一 ReentrantLock + 两个 Condition ✓ 正确答案
C 无锁
D synchronized
#

2. Collections.synchronizedList 与并发集合的取舍

A 写多
B 读多写少、迭代频繁 ✓ 正确答案
C 高写并发
D
#

3. ConcurrentHashMap 的 JDK 7/8/9+ 实现演进

A 全局锁
B Node[] + CAS + synchronized(桶级) ✓ 正确答案
C 无锁纯 CAS
D 分段锁
#

4. ConcurrentHashMap 的 forEach/reduce/search 并行操作

A 阻塞
B 串行
C 用 ForkJoinPool 并行执行 ✓ 正确答案
D 抛异常
#

5. ConcurrentHashMap 的 put/扩容/协助扩容流程

A 忽略
B 发现 ForwardingNode 后协助扩容 ✓ 正确答案
C 阻塞
D 抛异常
#

6. ConcurrentHashMap 的计数机制(baseCount/CounterCell)

A 单变量
B
C 全局锁
D baseCount + CounterCell 分段计数 ✓ 正确答案
#

7. ConcurrentHashMap.keySet() 视图的弱一致性

A 弱一致(不抛 CME,但可能反映部分修改) ✓ 正确答案
B 不可用
C 快照
D 强一致
#

8. ConcurrentHashMap.size() 在分片计数下的近似返回与精确性取舍

A 近似值(分片计数求和,弱一致) ✓ 正确答案
B 精确值
C 异常
D
#

9. ConcurrentSkipListMap 在有序并发场景下与 Collections.synchronizedSortedMap 的性能对比

A 两者相同
B TreeMap
C ConcurrentSkipListMap(无锁跳表) ✓ 正确答案
D synchronizedSortedMap
#

10. CopyOnWriteArrayList 在读多写少场景下的写时复制成本与适用边界

A O(1)
B O(n) 复制整个数组 ✓ 正确答案
C
D 加锁
#

11. LinkedBlockingQueue 的双锁(take/put)实现

A 双锁让 put/take 并行 ✓ 正确答案
B 更快
C 无界必须
D 单锁
#

12. 为什么 ThreadPoolExecutor 不推荐使用 Executors.newFixedThreadPool 默认的 LinkedBlockingQueue,无界队列在高并发下会引发哪些典型故障

A 快速失败
B
C 任务无限堆积导致内存 OOM ✓ 正确答案
D 自动扩容
#

13. 锁分段(Striped Lock)在 ConcurrentHashMap 早期版本的设计与 JDK 8 后的演进

A 加全局锁
B
C 废除分段锁,改桶级 CAS + synchronized ✓ 正确答案
D 保留分段
#

14. BlockingQueue 在生产者-消费者中的取舍

A 无界队列
B 同步队列
C 有界队列(队满阻塞) ✓ 正确答案
D 任意
#

15. ConcurrentSkipListMap 的跳表实现与时间复杂度

A O(1)
B O(log n) ✓ 正确答案
C O(n²)
D O(n)
#

16. ConcurrentSkipListSet 的底层实现

A 链表
B TreeSet
C ConcurrentSkipListMap ✓ 正确答案
D 数组
#

17. DelayQueue 的延迟元素与 ScheduledThreadPoolExecutor

A SynchronousQueue
B
C ArrayBlockingQueue
D DelayQueue ✓ 正确答案
#

18. SynchronousQueue 的公平/非公平模式

A 栈(LIFO) ✓ 正确答案
B 队列
C 数组
D
#

19. ConcurrentLinkedQueue 的非阻塞算法(Michael & Scott 队列)在 JDK 25 中的演化

A 数组
B 分段锁
C 全局锁
D Michael & Scott 无锁队列 ✓ 正确答案