锁优化与无锁编程

共 17 题
#

1. JDK 25 中 AtomicReferenceArray 的细粒度 CAS 在无锁队列中的实现

A 元素级细粒度 CAS ✓ 正确答案
B 整体锁
C 全局 synchronized
D
#

2. 无锁栈(Lock-Free Stack)的实现

A 数组拷贝
B 阻塞
C 头指针 CAS 更新(push/pop) ✓ 正确答案
D 加锁
#

3. 无锁算法在 JCTools(SpscArrayQueue)的应用

A 单生产者单消费者 ✓ 正确答案
B 多生产者多消费者
C
D 任意
#

4. 无锁算法在内存可见性保证上的底层 VarHandle.acquireFence/releaseFence 依赖

A
B 阻塞
C 全序
D 数据写入先于索引发布(发布语义) ✓ 正确答案
#

5. 无锁编程的可线性化(Linearizability)定义

A 每个操作有原子生效的线性化点,可串行解释 ✓ 正确答案
B 无重排
C 阻塞
D
#

6. 无锁队列(Lock-Free Queue)的算法基础

A 数组拷贝
B 阻塞
C 头尾 CAS 更新 + ABA 处理 ✓ 正确答案
D 全局锁
#

7. CAS 竞争下的缓存一致性代价(cache line ping-pong)与伪共享缓解

A 缓存行填充/分段分散热变量 ✓ 正确答案
B 加锁
C
D 加线程
#

8. Hazard Pointer 与 RCU 的对比

A 复制副本再原子替换,延迟回收旧副本 ✓ 正确答案
B
C 原地改
D 加锁
#

9. RCU(Read-Copy-Update)思想在 Java 中的模拟

A 全局锁
B
C 阻塞
D Copy-on-Write + 原子引用替换 + GC 回收 ✓ 正确答案
#

10. 锁粗化与锁消除,JIT 在什么条件下可以消除同步,与逃逸分析的关系如何?

A 加锁
B
C 逃逸分析证明对象不逃逸(无并发) ✓ 正确答案
D 对象逃逸
#

11. 自适应自旋(Adaptive Spinning),JVM 如何根据竞争历史调整自旋次数?

A
B 上次自旋成功率与持锁时间 ✓ 正确答案
C 随机
D 固定
#

12. 无锁与加锁在高竞争/低竞争场景的性能拐点与选择依据

A 两者相同
B
C 无锁
D 加锁(阻塞调度更优) ✓ 正确答案
#

13. VarHandle 与 AtomicXxx 在能力与内存序控制上的差异

A AtomicInteger
B 两者都行
C VarHandle ✓ 正确答案
D
#

14. 无锁编程的 ABA 问题,AtomicStampedReference 如何解决,与乐观锁如何类比?

A 阻塞
B
C 用版本号检测并发修改 ✓ 正确答案
D 加锁
#

15. 偏向锁/轻量级锁/重量级锁的升级,JVM 锁膨胀的触发条件与性能影响如何?

A
B 无竞争
C 首次使用
D 自旋失败或竞争激烈 ✓ 正确答案
#

16. volatile 的语义,可见性/有序性与原子性的边界如何?

A 有序性
B 缓存
C 可见性
D 复合操作原子性 ✓ 正确答案
#

17. Disruptor 的缓存行填充与无锁环形缓冲(Sequence)设计

A 全局锁
B 动态分配
C Sequence 缓存行填充 + 无锁 CAS ✓ 正确答案
D 阻塞