数据库迁移工具与反应式关系型访问(R2DBC 与 Hibernate Reactive)

共 34 题
#

1. Flyway 与 Spring Boot 的集成(spring-boot-starter-jdbc + flyway-core)

A 迁移脚本默认在 db/schema
B 需手动调用迁移
C 引入 flyway-core 后 Spring Boot 在启动时自动执行 db/migration 下的迁移脚本 ✓ 正确答案
D Flyway 与 Spring Boot 无关
#

2. Flyway 在 Spring Boot 4.x 的兼容性

A 需选择与 Spring Boot 4.x 匹配的 Flyway 版本,注意依赖与 API 兼容 ✓ 正确答案
B 所有版本自动兼容
C Flyway 不参与 Spring Boot 自动配置
D 升级无影响
#

3. Flyway 的 baseline 与 repair 命令

A baseline 用于修复 checksum
B repair 用于建立基线
C baseline 对已有数据库建立基线,repair 修复 schema history 不一致 ✓ 正确答案
D 两者功能相同
#

4. Flyway 的 schema history 表如何在多实例并发启动时通过表锁保证迁移互斥,锁等待与超时失败如何处理

A 多实例可同时迁移
B Flyway 通过 schema history 表的数据库锁保证同时只有一个实例迁移 ✓ 正确答案
C 无需锁
D schema history 表与互斥无关
#

5. Flyway/Liquibase 与 Git 版本对齐

A 迁移脚本可随意修改
B 迁移与代码版本无关
C 无需纳入版本控制
D 迁移脚本应与代码一起版本管理、按顺序执行,保证代码与数据库一致 ✓ 正确答案
#

6. Liquibase 的 include/includeAll 与格式化

A 无法模块化组织
B 两者都只引入一个文件
C Liquibase 只支持 XML
D include 引入单个 changelog,includeAll 引入目录下所有 changelog ✓ 正确答案
#

7. Liquibase 的 liquibase.properties 与 profile

A 无法多环境配置
B 配置文件只用于数据源
C liquibase.properties 集中配置,profile/context 区分多环境执行 ✓ 正确答案
D 无 profile 概念
#

8. Liquibase 的 policyContext 治理

A 它用于分页
B 它用于对变更集应用治理/合规策略(如审批、限制) ✓ 正确答案
C 它只用于数据源
D 它无法管控变更
#

9. Liquibase 的 preConditions 条件执行

A 它用于回滚
B 它无法校验表是否存在
C 它总在变更后执行
D 它在变更前校验条件,满足才执行,避免错误状态迁移 ✓ 正确答案
#

10. 一次性数据回填脚本如何保证幂等(唯一键/记录状态字段)并支持安全重跑

A 回填脚本无需幂等
B 用唯一键约束或状态字段标记已处理,保证重复执行不产生重复数据 ✓ 正确答案
C 唯一键会引起重复
D 重跑必然报错
#

11. Flyway 与 Liquibase 的选型对比,社区版能力、回滚模型、多数据库支持与团队协作

A 两者回滚能力相同
B Liquibase 只支持 SQL
C Flyway 支持自动回滚
D Liquibase 回滚模型更完善、支持多格式,Flyway 简单以 SQL 版本脚本为主 ✓ 正确答案
#

12. Liquibase 的变更集(ChangeSet)与回滚(Rollback)

A ChangeSet 是变更单元,可定义 rollback 实现版本回退 ✓ 正确答案
B 回滚无需定义
C ChangeSet 无法回滚
D ChangeSet 与回滚无关
#

13. Spring 的 DatabaseClient 如何以响应式方式执行 SQL 并映射结果,fetch 之后的 map/one/all 各返回什么类型

A one() 返回 Flux
B all() 返回 Mono
C 两者都返回 List
D fetch().one() 返回 Mono,fetch().all() 返回 Flux ✓ 正确答案
#

14. 反应式事务中连接是如何在 Context 中绑定并沿订阅链传递的,与传统 ThreadLocal 绑定连接的机制有何不同

A 连接绑定在 ThreadLocal 中
B 连接绑定在响应式 Context 中沿订阅链传递,不依赖线程 ✓ 正确答案
C 线程切换会丢失连接
D 与 ThreadLocal 机制相同
#

15. 反应式链路中 @Transactional 为何失效,TransactionalOperator.transactional 如何把多个操作绑定到同一连接与事务

A @Transactional 在反应式中正常
B 反应式无需事务管理
C TransactionalOperator 用 ThreadLocal
D @Transactional 在反应式链路失效,需用 TransactionalOperator 通过 Context 绑定事务 ✓ 正确答案
#

16. 多个应用副本同时执行 Flyway migrate 时,如何避免重复执行与版本错乱,baseline 与 lock 机制各起什么作用

A lock 机制保证互斥,baseline 处理已有库接管,避免重复与版本错乱 ✓ 正确答案
B baseline 用于并发锁
C 多副本可同时迁移
D lock 处理已有库
#

17. 大表 DDL 在线变更(gh-ost/pt-osc)如何与 Flyway/Liquibase 协作,影子表切换期间迁移脚本的版本一致性如何保证

A 在线 DDL 无需记录版本
B 影子表切换需保证迁移脚本版本与最终结构一致,避免切换期间冲突 ✓ 正确答案
C 与迁移工具无关
D 切换可随时进行
#

18. Flyway Teams 与社区版的差异

A 两者功能相同
B Teams 提供回滚、企业治理等高级功能,社区版只提供基础迁移 ✓ 正确答案
C 社区版支持回滚
D Teams 无额外功能
#

19. Flyway 的 repeatable migrations 与占位符

A repeatable 迁移按版本号唯一
B R__ 前缀的迁移在内容变化时重复执行,适合视图/存储过程 ✓ 正确答案
C 占位符用于定义版本
D repeatable 迁移只执行一次
#

20. Flyway 的 validateOnMigrate 与失败处理

A 它关闭迁移
B 它校验已应用迁移的 checksum 与一致性,失败需 repair 修复 ✓ 正确答案
C 校验失败无影响
D 它用于回滚
#

21. Flyway 的迁移机制(版本、校验、执行)

A 迁移可随时修改
B 按版本号排序执行未应用迁移,校验一致性后记录到 schema history ✓ 正确答案
C 迁移不记录版本
D 无校验机制
#

22. R2DBC 与 JDBC 在编程模型上的根本差异是什么,为什么 R2DBC 规范刻意不提供阻塞式 API

A R2DBC 提供阻塞 API
B 两者都阻塞
C JDBC 阻塞、R2DBC 非阻塞,R2DBC 不提供阻塞 API 以保持非阻塞链路 ✓ 正确答案
D 两者编程模型相同
#

23. R2DBC 的 ConnectionPool(r2dbc-pool)配置模型与 HikariCP 有哪些关键差异,acquire 超时与连接校验如何设置

A 它与 HikariCP 配置相同
B 有 connectionTestQuery
C 获取连接是阻塞的
D 它是响应式连接池,acquire 超时用 maxAcquireTime,无 JDBC 校验查询 ✓ 正确答案
#

24. Spring Data R2DBC 的 Repository 抽象相比 JDBC 版缺少哪些能力(如分页派生查询、懒加载),原因是什么

A 它缺少懒加载、级联等 JPA 式能力,因响应式模型与轻量 SQL 驱动 ✓ 正确答案
B 它与 JPA 完全相同
C 它支持懒加载
D 它支持级联映射
#

25. 在 WebFlux + R2DBC 链路中混入一次阻塞 JDBC 调用会破坏哪些保证,如何用 boundedElastic 隔离遗留代码

A 阻塞调用无影响
B 事件循环线程可被阻塞
C 阻塞调用会阻塞事件循环线程,需用 boundedElastic 隔离到独立线程池 ✓ 正确答案
D 无需隔离
#

26. 数据库迁移与 CI 流水线集成

A CI 中执行迁移创建测试库、校验脚本,保证多环境一致 ✓ 正确答案
B 迁移只能在生产执行
C CI 无法执行迁移
D 无需在 CI 验证
#

27. 数据库迁移在多租户(每租户 schema/分库)架构下的执行策略与租户感知

A 只迁移一个租户
B 迁移脚本租户无关
C 需对每个租户 schema 执行迁移,脚本需租户感知并记录状态 ✓ 正确答案
D 无需记录租户状态
#

28. Hibernate Reactive 的 Mutiny 编程模型与 @WithSession/@WithTransaction 的使用边界

A 它在反应式方法上开启事务,通过 Mutiny 上下文传播,替代 @Transactional ✓ 正确答案
B 它与 @Transactional 相同
C 它用于同步方法
D 它无法传播事务
#

29. 数据库迁移的版本控制策略(命名规范、目录结构)

A 迁移脚本可随意修改
B 版本号可重复
C 命名规范保证版本唯一递增,目录结构便于管理,脚本不可修改只追加 ✓ 正确答案
D 无需命名规范
#

30. 生产迁移如何设计灰度放量与回滚演练,迁移的验证指标与回滚触发条件是什么?

A 一次全量迁移即可
B 灰度放量逐步扩大,回滚演练验证可逆,指标异常触发回滚 ✓ 正确答案
C 无需回滚演练
D 回滚无需触发条件
#

31. 迁移脚本在多环境(dev/staging/prod)的差异

A 每环境独立脚本
B 多环境使用同一套脚本,差异通过配置(占位符/context)处理 ✓ 正确答案
C 脚本内容必然不同
D 无需统一结构
#

32. 迁移脚本的兼容性(向前/向后)

A 兼容迁移保证新旧代码/结构共存,采用 expand-contract(先加后删) ✓ 正确答案
B 无需考虑兼容
C 可随意删列
D 迁移必须破坏性
#

33. 迁移脚本的密码与密钥管理(Vault 集成)

A 密码可硬编码在脚本
B 密码与密钥应从 Vault 等安全注入,避免脚本硬编码明文 ✓ 正确答案
C 明文密码安全
D 密钥管理无必要
#

34. R2DBC 对批量插入、存储过程、LOB 的支持现状与限制,哪些传统 JDBC 场景目前仍难以平滑迁移

A 批量插入与 JDBC 相同
B R2DBC 完全覆盖 JDBC 能力
C R2DBC 对批量插入、存储过程、LOB 支持有限,部分 JDBC 场景难以迁移 ✓ 正确答案
D 存储过程完全支持