跳表与 LSM

共 20 题
#

1. B-Tree vs LSM 的取舍,写少读多 vs 写多读多?

A B-Tree 写快
B B-Tree 读快写弱适读多写少,LSM 写快读弱适写多场景 ✓ 正确答案
C LSM 读快
D 两者读写性能相同
#

2. LSM 树(Log-Structured Merge Tree)的写优化原理,内存表 + 磁盘 SSTable 合并?

A 写入先到 WAL 与内存表,顺序刷盘成 SSTable,后台合并,写放大低 ✓ 正确答案
B LSM 随机写
C LSM 无内存表
D LSM 读快
#

3. 跳表在 Redis SortedSet 的应用?

A SortedSet 用数组
B Redis SortedSet 用跳表实现有序与按分数范围查询,O(log n) 操作 ✓ 正确答案
C SortedSet 用哈希即可
D 跳表不支持范围查询
#

4. LSM 的典型实现,LevelDB、RocksDB、Cassandra、HBase?

A LSM 只用于嵌入式
B 所有 LSM 实现相同
C MySQL 是 LSM
D LevelDB/RocksDB 是嵌入式 LSM,Cassandra/HBase 是分布式 LSM NoSQL ✓ 正确答案
#

5. LSM 的写放大(Write Amplification)与读放大(Read Amplification)?

A Compaction 不产生放大
B LSM 无写放大
C LSM 无读放大
D 写放大源于 Compaction 重复读写,读放大源于多级查询,可用 Bloom Filter 缓解读放大 ✓ 正确答案
#

6. LSM 的压缩(Compaction)策略,Size-Tiered、Leveled、Universal?

A Size-Tiered 写放大低读放大高,Leveled 读放大低写放大高,按读写权衡选择 ✓ 正确答案
B 所有策略相同
C Leveled 写放大低
D Size-Tiered 读放大低
#

7. 跳表(Skip List)的原理,多层有序链表,平均 O(log n) 查找?

A 跳表由多层有序链表组成,查找从顶层下探,平均 O(log n),实现简单 ✓ 正确答案
B 跳表是单层链表
C 跳表最坏 O(log n)
D 跳表需旋转平衡
#

8. LSM 的 MemTable 与 SSTable 架构?

A SSTable 在内存
B MemTable 在磁盘
C MemTable 是内存有序缓冲,SSTable 是磁盘有序存储,WAL 保证持久性,Compaction 合并 ✓ 正确答案
D 无 WAL
#

9. 跳表的查找/插入/删除操作如何通过"抛硬币"决定层数实现概率平衡,为什么平均 O(log n)、最坏 O(n),与红黑树相比实现复杂度与缓存友好性如何?

A 跳表最坏 O(log n)
B 抛硬币决定层数实现概率平衡,平均 O(log n)、最坏 O(n),实现比红黑树简单 ✓ 正确答案
C 跳表需旋转平衡
D 跳表实现比红黑树复杂
#

10. LSM 的 Compaction 触发策略与写入路径(WAL 组提交、MemTable flush)如何协同控制写放大与延迟尖刺?

A WAL 组提交不相关
B Compaction 无需限流
C WAL 组提交减少 fsync、适度 MemTable 大小、Compaction 限流协同控制写放大与延迟尖刺 ✓ 正确答案
D flush 总造成延迟尖刺
#

11. LSM 的读路径如何依赖 Bloom Filter 与多级缓存(Block Cache)控制读放大?点查与范围扫描各有何特征?

A Bloom Filter 无作用
B Bloom Filter 过滤不存在的 key、Block Cache 缓存热块,点查快、范围扫描读放大高 ✓ 正确答案
C 范围扫描点查快
D 点查读放大高
#

12. Cassandra 的 SSTable 合并?

A SSTable 可变
B Cassandra 不合并
C Compaction 合并重叠 SSTable、清理冗余与墓碑,默认 Size-Tiered 策略 ✓ 正确答案
D 合并无策略
#

13. LSM 的删除标记(tombstone)?

A tombstone 无空间影响
B 删除立即清除数据
C 删除写入 tombstone 标记,Compaction 时清理,需及时处理避免空间浪费 ✓ 正确答案
D tombstone 立即清理
#

14. LevelDB 与 RocksDB 的差异?

A LevelDB 功能更强
B 两者完全相同
C RocksDB 是 LevelDB 优化版,支持列族、事务、多样 Compaction 策略,性能更强 ✓ 正确答案
D RocksDB 更简单
#

15. RocksDB 的 Leveled Compaction?

A 写放大低
B 读放大高
C 分层合并、层内有序,读放大低但写放大高,RocksDB 默认 ✓ 正确答案
D 无分层
#

16. Bloom Filter 在 LSM 读路径中的作用,为什么它能把不存在的 key 的磁盘访问降到零,误判率与空间如何权衡,还有哪些替代结构?

A 误判率与空间无关
B Bloom Filter 有假阴性
C Bloom Filter 无假阴性,可跳过不存在的 key 的 SSTable,误判率与空间成正比,替代有 Cuckoo/Xor Filter ✓ 正确答案
D Bloom Filter 无法过滤
#

17. LSM 的空间放大(Space Amplification)问题,SSTable 之间的数据冗余如何量化,compaction 策略如何权衡空间放大与写放大?

A 空间放大反映 SSTable 冗余,Leveled 空间放大低写放大高,Size-Tiered 相反 ✓ 正确答案
B Leveled 空间放大高
C 空间放大与 Compaction 无关
D Size-Tiered 写放大高
#

18. RocksDB 的 Column Family 与 WAL 在写入路径中的作用,多 CF 共享 WAL 的崩溃一致性,为什么 WAL 必须先于 MemTable 持久化?

A WAL 可丢失
B WAL 后于 MemTable 写
C 各 CF 独立 WAL 无一致性
D 多 CF 共享 WAL 保证跨 CF 崩溃一致,WAL 先于 MemTable 持久化便于崩溃后重放恢复 ✓ 正确答案
#

19. Cassandra 的 LSM 实现?

A Cassandra 用 B-Tree
B 写入先到 Memtable 再刷成 SSTable,Commit Log 保证持久性,Compaction 合并 ✓ 正确答案
C Cassandra 无 Memtable
D Cassandra 随机写
#

20. LSM 存储引擎在分布式系统中的读修复(read repair)与 Compaction 如何协作,Cassandra 的 hint 与墓碑清理(gc_grace_seconds)对一致性的影响?

A 读修复保证副本一致、Compaction 清理冗余,hint 保证写送达,gc_grace_seconds 避免删除复活 ✓ 正确答案
B 读修复与 Compaction 无关
C gc_grace_seconds 立即清理墓碑
D hint 与一致性无关