# 1. 兼容层的"维护"(maintenance)的退场时间表 A 兼容层应永久保留,因为它总能提供方便 B 兼容层无需维护,上线后自动消失 C 兼容层必须制定退场时间表,明确期限、触发条件与监控,避免其成为新的长期技术债 ✓ 正确答案 D 兼容层退场无需任何监控与计划
# 2. 兼容层的"范围"(scope)中接口层、数据层、消息层、用户层 A 兼容层只需覆盖接口层,其他层无关 B 用户层兼容不是兼容层的事 C 兼容层范围越大越好,无需权衡 D 兼容层范围包括接口、数据、消息、用户四个层面,应按迁移场景与不可变消费者选择范围 ✓ 正确答案
# 3. 兼容层(compatibility layer)的"目的"(purpose)中维持外部契约 A 兼容层用于让内部系统更快,与外部无关 B 兼容层只在迁移结束后存在 C 兼容层可以随意改变外部契约 D 兼容层通过适配在内部迁移时维持外部契约(接口、数据、行为),支持渐进式迁移 ✓ 正确答案
# 4. 迁移策略的"接口迁移"(API migration)中 Adapter、Facade、Strangler Fig A 三种模式含义相同,可随意互换 B Facade 直接暴露内部实现细节 C Strangler Fig 适合一次性全量替换 D Adapter 适配新旧接口、Facade 提供统一入口、Strangler Fig 渐进替换,三者可组合使用 ✓ 正确答案
# 5. 迁移策略的"数据库迁移"(DB migration)中 expand & contract、Flyway、Liquibase A 数据库迁移可一次性删除旧列,无需过渡 B 数据库迁移不需要回滚方案 C Flyway 与 Liquibase 功能完全相同,可任意替代 D expand & contract 先扩展新结构再收缩旧结构,配合 Flyway/Liquibase 版本化工具实现可回滚的渐进迁移 ✓ 正确答案
# 6. 迁移策略的"数据迁移"(data migration)三种中双写、影子读、批量回填 A 双写保证增量同步、影子读验证结果、批量回填迁移存量,三者常组合使用 ✓ 正确答案 B 三种方式互斥,只能选一种 C 影子读用于写数据,不用于对比 D 批量回填用于在线增量,双写用于存量
# 7. 双写的一致性对账中新旧两端的差异如何通过异步对账发现与修复,对账周期与告警如何设计? A 双写只要两端写入成功,就一定一致,无需对账 B 对账周期对所有数据都应相同,不分优先级 C 应通过异步对账比对新旧差异、按权威源修复,并按一致性要求设置对账周期与差异率告警形成闭环 ✓ 正确答案 D 对账发现的差异无需修复,记录即可
# 8. 迁移策略的"组件迁移"(component migration)中绞杀者模式、特性开关 A 组件迁移必须一次性全量切换 B 绞杀者模式无需监控即可切换 C 特性开关只能用于新功能,不能用于迁移 D 绞杀者模式渐进替换旧组件,特性开关控制灰度放量与回退,共同实现可控制、可回退的组件迁移 ✓ 正确答案
# 9. 数据迁移的"双写"(dual write)中同时写新旧库 A 双写只写新库,不写旧库 B 双写会增加写入开销,所以应避免使用 C 双写不会产生任何不一致 D 双写同时写新旧库以保持新库最新,但需对账处理一致性问题,常与批量回填、影子读配合 ✓ 正确答案
# 10. 数据迁移的"影子读"(shadow read)中对比新旧库结果 A 影子读把写请求同时打到新旧库 B 影子读会直接改变用户看到的数据 C 影子读把读请求影子打到新库对比新旧结果以验证新库正确性,通常配合双写才有效 ✓ 正确答案 D 影子读能验证写路径的正确性
# 11. 数据迁移的"批量回填"(backfill)中离线一次性迁移 A 批量回填离线一次性迁移存量历史数据,需与双写/增量同步衔接并校验完整性 ✓ 正确答案 B 批量回填用于在线增量数据的实时同步 C 批量回填无需校验,导入即可 D 批量回填只适用于小数据量
# 12. 数据迁移的"读新写旧"(read new, write old)中渐进切换 A 读新写旧把读切到新库、写仍写旧库,先验证读路径再切换写,实现渐进切换 ✓ 正确答案 B 读新写旧指读和写都切到新库 C 读新写旧无需新旧库数据同步 D 读新写旧与读旧写新完全等价
# 13. 兼容层的设计中适配器与版本桥接? A 适配器与版本桥接是同一概念,可互换 B 适配器负责把新接口适配成旧契约,版本桥接负责多版本互通,兼容层应保持纯适配且可测可监控 ✓ 正确答案 C 兼容层应夹带业务逻辑,便于复用 D 兼容层无需监控,上线即永久
# 14. 接口兼容的三个层次中源码、二进制与行为兼容的差异,如何用工具检测破坏性变更? A 源码兼容比二进制兼容更严格 B 源码兼容要求重新编译、二进制兼容要求二进制不变、行为兼容要求行为一致,可用 japi-compliance-checker、Revapi 等工具检测破坏性变更并集成 CI ✓ 正确答案 C 行为兼容只关心签名,不关心行为 D 破坏性变更无法自动检测
# 15. 批量回填与增量同步的衔接中存量回填期间新增数据如何不丢失,双写与回填顺序如何安排? A 回填与双写互不影响,无需衔接 B 回填只能一次性完成,无需对账 C 回填期间新增的数据丢失没关系 D 应先开启双写保证增量、再批量回填存量、最后对账补平,回填需幂等避免与双写冲突 ✓ 正确答案
# 16. 数据迁移的"读旧写新"(read old, write new)中下游切换 A 读旧写新指读和写都切到旧库 B 读旧写新是永久保留旧库的方案 C 读旧写新无需新旧库数据同步 D 读旧写新把写切到新库、读仍读旧库,先验证新库写入再切换读,与读新写旧互为渐进切换路径 ✓ 正确答案
# 17. 迁移策略,并行运行、影子流量与切换? A 迁移应一次性全量切换,无需验证 B 切换无需灰度,一步到位 C 影子流量会直接影响真实用户 D 并行运行让新旧并存、影子流量复制流量验证、切换按灰度比例渐进放量,全程可回退、可观察 ✓ 正确答案
# 18. 兼容性测试中 API 与数据格式? A 兼容性测试覆盖 API 契约测试与数据格式的序列化/版本化测试,验证前后向兼容并集成 CI ✓ 正确答案 B 兼容性测试只测新 API,不测数据格式 C 兼容性测试无法自动化 D 兼容性测试只需在新版本上线前测一次
# 19. 架构/数据迁移中的回滚与灰度中如何设计可逆的迁移步骤与回滚预案,灰度切换的流量比例与观察期如何设定? A 迁移一旦开始就无法回退,只能前进 B 灰度可以一次性放量到 100% C 应设计可逆的迁移步骤与回滚预案,按 1%→…→100% 灰度放量、每档设观察期并监控,迁移后保留回退期 ✓ 正确答案 D 迁移无需观察期,切完即可
# 20. 兼容层的可观测性中适配器调用量、失败率与转换错误如何监控,作为退场决策依据? A 兼容层无需监控,可随意决定退场 B 兼容层失败率不影响任何决策 C 调用量高说明兼容层已无用,应立刻下线 D 应监控适配器调用量、失败率与转换错误,当调用量趋近 0 且消费者已迁移、无转换错误时再启动退场 ✓ 正确答案