# 1. Cosmos DB 的 multi-master write 冲突解决中 LWW、custom proc、last-writer-wins 矩阵的边界? A LWW 用时间戳决定胜者、简单但丢失合并信息且受时钟影响;custom proc 可自定义合并但需保证幂等 ✓ 正确答案 B LWW 能自动合并所有并发写入 C custom proc 无法处理冲突 D 多主写入不会产生冲突
# 2. RGA(Replicated Growable Array)如何处理并发插入到同一位置,为什么用插入后悬垂指针排序,删除用墓碑? A 并发插入按物理位置排序即可收敛 B 并发插入用节点唯一 ID 的全局序排序,删除用墓碑标记保留结构以保证收敛 ✓ 正确答案 C 删除可以直接移除节点,无需墓碑 D RGA 无法处理并发插入
# 3. CRDT 与 OT 的对比中协作编辑场景下两种方案的合并策略与复杂度差异? A OT 可去中心化,无需服务器 B OT 用 transform 变换操作适配上下文、依赖中心服务器;CRDT 用可交换合并、可去中心化且容忍乱序 ✓ 正确答案 C CRDT 需要 transform 才能合并 D 两者都依赖中心服务器排序
# 4. OR-Set 的并发添加/删除中墓碑(tombstone)机制如何保证收敛? A OR-Set 添加时不生成标签 B 删除直接移除元素值,无需标签 C 并发添加会被删除误删 D 每个元素带唯一标签,删除只移除已观察到的标签集合,墓碑保证删除被所有副本感知并收敛 ✓ 正确答案
# 5. Yjs 在协同编辑、白板、表格、设计工具中的连接、同步、离线、重新连接与冲突恢复? A 重连后需全量重放操作才能收敛 B 本地持久化更新、重连后按版本向量只同步缺失增量、CRDT 保证冲突自动收敛 ✓ 正确答案 C 离线时无法编辑,必须在线 D 冲突恢复必须人工解决
# 6. 如何估算 Yjs/Automerge 文档大小、压缩率、压缩时机与 GC 策略对内存的影响? A 压缩与 GC 只在在线时进行,离线无需 B 墓碑可以无条件立即清理 C 文档大小与操作数×元数据成正比,GC 清理墓碑需等所有副本确认删除,否则破坏收敛 ✓ 正确答案 D 文档大小与编辑次数无关
# 7. CRDT 实现有哪些常见误区(非交换操作、冲突解决策略)? A 非交换操作会导致不同副本按不同顺序合并结果不同,违背 CRDT 的代数性质而不收敛 ✓ 正确答案 B CRDT 操作可以依赖全局顺序 C 删除直接用物理移除即可,无需墓碑 D 操作不必幂等,重复投递无影响
# 8. G-Counter、PN-Counter、G-Set、2P-Set、OR-Set、LWW-Register 的实现与冲突解决语义? A G-Counter 单调递增按分量 max 合并,PN-Counter 由两个 G-Counter 组合支持增减,OR-Set 用标签实现观察删除 ✓ 正确答案 B G-Counter 支持减少操作 C 2P-Set 的元素可随意复活 D LWW-Register 合并取所有值之和
# 9. CRDT(Conflict-free Replicated Data Type)的核心分类中 CvRDT(基于状态收敛)vs CmRDT(基于操作收敛)的区别与适用场景? A CvRDT 通过合并状态(join-semilattice)收敛,CmRDT 通过传播可交换操作收敛,同步粒度不同 ✓ 正确答案 B 两者都只同步操作 C CvRDT 对乱序敏感,CmRDT 对乱序健壮 D CmRDT 需要合并整个状态
# 10. G-Counter、PN-Counter、G-Set、OR-Set 的设计原理中为什么这些结构能保证最终一致性而无需协调? A 它们通过幂等、交换、结合的合并运算,使任意副本任意顺序合并都收敛到同一结果 ✓ 正确答案 B 它们依赖中心服务器排序 C 合并运算不满足交换性 D 它们必须锁协调才能保证一致
# 11. LWW-Register(Last-Writer-Wins)的时钟依赖问题中逻辑时钟 vs 物理时钟 vs 混合时钟在冲突解决中的取舍? A 逻辑时钟能反映真实时间先后 B 物理时钟完全可靠,无需担心漂移 C 物理时钟存在漂移可能导致错误覆盖,逻辑时钟保证因果但无真实时间,HLC 结合二者兼顾接近真实与因果序 ✓ 正确答案 D LWW 适合所有类型的冲突
# 12. CRDT 收敛性的数学基础中 join-semilattice 与单调合并为什么能保证所有副本最终一致? A 单调性会让状态来回波动 B 收敛性依赖中心服务器排序 C join 运算不满足交换性 D join-semilattice 上的合并(join)满足幂等、交换、结合且单调,任意乱序合并都收敛到同一最小上界 ✓ 正确答案
# 13. CRDT 在协同编辑中的应用中 Yjs/Automerge 的序列 CRDT 如何处理并发插入和删除? A 删除直接物理移除节点 B 并发插入按物理位置排序即可 C 插入用唯一 ID 的偏序确定相对顺序,删除用墓碑标记保证收敛 ✓ 正确答案 D 序列 CRDT 无法处理并发编辑
# 14. CRDT 的元数据开销中 OR-Set 的 tombstone 会无限增长?GC 策略如何设计? A tombstone 增长与删除次数无关 B 墓碑可以无条件立即清理 C 删除需保留墓碑直到所有副本确认,否则无限增长;GC 必须确认墓碑已全局可见才能安全清理 ✓ 正确答案 D GC 越激进越安全,无需确认
# 15. CRDT vs OT(Operational Transformation)中 Google Docs 用 OT、Figma 用 CRDT 的设计取舍? A 两者都需要 transform 处理冲突 B OT 天生去中心化,无需服务器 C CRDT 需要中心服务器排序 D Google Docs 用中心化的 OT 适配服务器架构,Figma 用去中心化的 CRDT 支持离线与乱序合并 ✓ 正确答案
# 16. CRDT 的两种类型中基于状态(state-based)与基于操作(op-based)的合并语义差异? A 两者都同步整个状态 B state-based 合并整个状态(join)对乱序健壮,op-based 同步可交换操作带宽低但依赖可靠通道 ✓ 正确答案 C state-based 对乱序敏感 D op-based 合并整个状态
# 17. G-Counter/PN-Counter 中单调计数与增减计数的 CRDT 实现? A G-Counter 直接支持增减 B G-Counter 用每副本单调计数 + 逐分量 max 合并,PN-Counter 由两个 G-Counter(增/减)组合支持增减 ✓ 正确答案 C PN-Counter 用一个计数器即可 D 合并用逐分量求和而非 max
# 18. 混合逻辑时钟(HLC)中如何用物理时钟加逻辑计数器保持因果序且接近墙上时间,与 Lamport 时钟的差异? A HLC 用物理时间加逻辑计数器使时间戳接近真实时间且保持因果序,Lamport 只有逻辑计数器、脱离物理时间 ✓ 正确答案 B HLC 与 Lamport 都只用物理时钟 C Lamport 时钟能反映真实时间 D HLC 不保持因果序
# 19. CRDT 在边缘计算和离线优先(Local-First)应用中的价值中如何支持断网编辑后自动合并? A 离线时无法编辑,必须在线 B 它依赖中心服务器排序 C 它去中心化、离线可编辑,联网后靠可交换合并自动收敛,无需人工冲突解决 ✓ 正确答案 D 断网编辑后需人工合并冲突
# 20. Delta-CRDT 的增量同步中如何只传输变更增量而非完整状态以降低带宽? A 它无法用于大文档 B 它每次传输完整状态 C delta 合并不满足可交换性 D 它只传输自上次同步以来的增量状态(delta),接收方合并 delta 到本地,降低带宽且保留可交换合并 ✓ 正确答案
# 21. CRDT 的工程应用中 Redis/云数据库的冲突解决(last-write-wins vs 计数器)? A 云数据库无法使用 CRDT B 所有冲突都适合用 LWW C 计数器用 LWW 覆盖即可 D 覆盖语义(如单值)适合 LWW,累加语义(如计数)用计数器(G/PN-Counter),避免覆盖导致计数丢失 ✓ 正确答案
# 22. Automerge 在分布式数据库、CRDT 持久层、版本化存储与查询 DSL 的最新进展? A 它提供高效二进制持久化、版本化存储、查询索引能力,并与数据库集成作为 CRDT 数据层 ✓ 正确答案 B 它只能全量重放历史,无法持久化 C Automerge 不支持版本化 D 它无法与数据库集成
# 23. CRDT 与最终一致/向量时钟的边界差异? A 最终一致保证必然收敛,无需 CRDT B 向量时钟能直接解决冲突合并 C CRDT 用可交换合并数学保证收敛,是强收敛的最终一致;向量时钟只检测因果/并发,不解决合并 ✓ 正确答案 D CRDT 不保证收敛
# 24. CRDT 的核心概念中 LWW、G-Counter、状态复制与操作复制? A LWW 是覆盖语义、G-Counter 是累加语义,状态复制同步状态、操作复制同步操作,两者构成 CRDT 设计维度 ✓ 正确答案 B LWW 也是累加语义 C 状态复制与操作复制是同一回事 D G-Counter 用覆盖语义合并
# 25. CRDT 的 JSON 文档(Y.Map、Y.Array、Y.Text)、富文本协同、OT 与 CRDT 的工程差异? A CRDT 需要中心服务器排序 B OT 天生去中心化 C Y.Text 无法支持富文本 D Y.Map/Y.Array/Y.Text 组合表达 JSON 文档,CRDT 去中心化自动合并、易支持离线,OT 依赖中心服务器 transform ✓ 正确答案
# 26. CRDT 的 tombstone、因果稳定标签、混合逻辑时钟(HLC)、Lamport 时钟如何保证正确性与可压缩? A 时钟仅用于压缩,与正确性无关 B tombstone 只用于压缩,不影响正确性 C tombstone 保证删除收敛,HLC/Lamport 保证因果序,因果稳定标签是安全回收墓碑实现可压缩的依据 ✓ 正确答案 D 因果稳定标签无法用于回收
# 27. CRDT 的两大族中 CmRDT(基于操作)与 CvRDT(基于状态)的偏序合并、幂等性、交换性、结合性如何证明? A 两者都不需要幂等性 B CmRDT 用 join 合并证明 C CvRDT 用半格上 join 的幂等/交换/结合证明,CmRDT 用可交换且幂等的操作证明 ✓ 正确答案 D CvRDT 操作依赖全局顺序
# 28. 为什么强一致的 OT(操作变换)逐渐被 CRDT 取代?请从数学结构和工程实现两端分析。 A OT 依赖复杂 transform 与操作顺序,CRDT 用可交换合并的代数性质直接保证收敛、去中心化且易离线 ✓ 正确答案 B CRDT 需要 transform 才能收敛 C OT 也能去中心化,无需服务器 D CRDT 对乱序敏感
# 29. 协同画板、表格、PPT、设计稿在 CRDT 与 OT 间的迁移经验与回退机制? A 迁移要点是数据模型映射、稳定 ID、增量同步与收敛测试,回退用双轨/版本标记/快照保证新旧兼容 ✓ 正确答案 B 迁移无需保留 ID,直接转换即可 C 回退机制无法兼容旧客户端 D 迁移后无法保留旧数据
# 30. 在移动端、Web 端、桌面端分别使用 Yjs/Automerge 的最佳实践与库选型? A 所有端都用同一套库,无需选型 B Web 端常用 Yjs 生态(y-websocket/y-indexeddb),移动/嵌入式用 Automerge Rust 核心,通用实践是本地持久化+增量同步 ✓ 正确答案 C 移动端无需本地持久化 D Automerge 无法用于桌面端
# 31. 如何测试 CRDT 实现的正确性、收敛性、可用性?举出单元测试、模拟时钟、模糊测试的方案? A 模糊测试只能测性能,不能测收敛 B 只需测试单副本操作即可 C 收敛性无需测试,天然正确 D 单元测试验证幂等/交换/结合,模拟时钟+随机重排验证多副本乱序收敛,模糊测试穷举并发场景 ✓ 正确答案
# 32. 当 CRDT 状态过大时如何做 compaction、snapshot、state-based delta merge 的取舍? A snapshot 无需保证合法性 B 三者可无条件执行,无需确认 C delta merge 每次传输全量状态 D compaction 压缩存储、snapshot 固化历史、delta merge 优化传输,三者都需在副本确认(因果稳定)后安全执行 ✓ 正确答案