Spring Data JPA 与 MySQL 集成

共 19 题
#

1. InnoDB 自适应哈希索引(AHI)在 Spring Boot 4.0 高并发点查场景下是否反而导致缓冲池污染

A AHI 会持久化到磁盘,因此重启后无需重建
B AHI 由 DBA 通过参数显式创建在指定列上,用于替代普通二级索引
C AHI 是 InnoDB 根据索引页访问频率自动构建的内存哈希索引,可降低 B+ 树等值查找的 CPU 开销 ✓ 正确答案
D AHI 只适用于范围扫描,对等值点查没有帮助
#

2. Spring Boot 4.0 中 JPA 派生查询方法命名自动生成索引与 DBA 人工审计的协作流程

A 派生查询仅生成 SQL 与 WHERE 条件,索引仍需通过迁移脚本或 DBA 创建,并需审计 ✓ 正确答案
B 派生查询方法名会自动生成对应索引,无需额外处理
C 派生查询方法不能传多个参数,因此不需要联合索引
D 派生查询方法执行时若索引不存在会自动跳过查询
#

3. Spring Cloud 微服务链路中数据库索引变更的灰度发布策略与慢 SQL 监控触发条件

A 索引变更必须与代码发布同一时刻完成,否则程序必然出错
B 应遵循"先加后删"原则,新增索引用 ONLINE DDL,观察稳定后再删除旧索引 ✓ 正确答案
C 删除索引无需灰度,可直接执行
D 慢 SQL 只需看执行时间,与扫描行数无关
#

4. Spring Data JPA 在 OPTIMISTIC 与 PESSIMISTIC_WRITE 锁模式下生成 SQL 的差异及索引依赖

A 乐观锁在 SELECT 时加 FOR UPDATE 锁
B 悲观锁通过 @Version 字段在 UPDATE 时校验版本号
C 乐观锁在 UPDATE 时附加 version 条件并校验受影响行数,悲观锁用 SELECT FOR UPDATE 预占锁 ✓ 正确答案
D 两种锁模式都不依赖索引
#

5. Spring Boot 4.0 与 MySQL 8.4 集成时,间隙锁(Gap Lock)对并发插入的影响与隔离级别选择

A REPEATABLE READ 下范围查询会产生间隙锁,可能阻塞并发插入;RC 下不使用间隙锁可提升并发 ✓ 正确答案
B 间隙锁只在 READ COMMITTED 下产生
C 间隙锁只锁已存在的记录,不阻止插入
D 隔离级别越高,并发插入性能越好
#

6. MySQL 8.0 引入的 SKIP LOCKED 与 NOWAIT 在 Spring Data JPA 中的语义映射与代码示例

A NOWAIT 会跳过已锁行并返回未锁行
B SKIP LOCKED 在目标行被锁时会立即报错
C JPA 中可通过 lock.timeout hint 值 -2 映射 SKIP LOCKED、0 映射 NOWAIT ✓ 正确答案
D JPA 的 PESSIMISTIC_WRITE 默认生成 FOR UPDATE SKIP LOCKED
#

7. MySQL Group Replication 在多主模式下写冲突检测与 Spring Boot 事务回滚机制的兼容性

A MGR 多主模式无写冲突检测,各节点自由写
B 冲突检测失败时事务自动提交,无需回滚
C MGR 多主模式只支持单主写入
D MGR 在提交阶段通过认证机制检测写冲突,冲突事务被回滚,Spring 通过捕获异常触发回滚,二者兼容 ✓ 正确答案
#

8. 使用 SELECT ... FOR UPDATE SKIP LOCKED 实现任务队列与 Redisson 分布式锁的工程取舍

A 两者都基于 Redis 实现
B SKIP LOCKED 适合所有大规模任务场景
C Redisson 分布式锁与业务数据天然同库强一致
D SKIP LOCKED 依赖数据库行锁且与业务数据同库一致,Redisson 依赖 Redis 更适合高吞吐分布式场景 ✓ 正确答案
#

9. MySQL 8.0 引入的 LOCK TABLES 与事务混合使用时的隐式提交点及 Spring 事务管理器如何感知

A Spring 事务管理器能自动感知并回滚数据库隐式提交的影响
B LOCK TABLES 会触发隐式提交,Spring 事务管理器无法感知,应避免在事务内混用 ✓ 正确答案
C 隐式提交只影响 DML,不影响事务边界
D LOCK TABLES 不会触发隐式提交,可安全用于事务内
#

10. MySQL 连接串与 JDBC 驱动参数(useSSL、characterEncoding、serverTimezone、rewriteBatchedStatements)对 JPA 应用的正确性与性能影响

A rewriteBatchedStatements=true 可将多条批量语句合并为多 VALUES 语句,显著提升批量写入性能 ✓ 正确答案
B rewriteBatchedStatements=true 会降低批量插入性能
C serverTimezone 不配置也不会影响日期时间
D characterEncoding 只影响 SSL 加密,与乱码无关
#

11. 唯一索引与业务唯一约束在并发插入下的间隙锁竞争对 Spring Boot 事务吞吐的影响

A 唯一索引在并发插入时不会产生任何锁竞争
B 并发插入同一唯一键值会触发间隙锁竞争与死锁,可用 INSERT ... ON DUPLICATE KEY UPDATE 等原子操作缓解 ✓ 正确答案
C 唯一索引只影响查询性能,不影响插入
D 提高隔离级别可消除唯一索引的锁竞争
#

12. 在 GraalVM Native Image 下启动时执行 schema 校验与索引一致性检查的可行性

A 原生镜像下无法连接数据库执行任何 SQL
B schema 校验可行,但 Hibernate 的反射/动态代理需在构建期通过 reachability metadata 显式配置 ✓ 正确答案
C 原生镜像下 Hibernate 无需任何配置即可正常工作
D schema 校验在原生镜像下会自动关闭,无法开启
#

13. 在 Spring Data JPA 中使用 @Index 注解与 Flyway 自动创建索引的兼容性与事务回滚差异

A Flyway 迁移脚本统一管理索引,hbm2ddl.auto 应设为 none;MySQL 的 DDL 隐式提交导致无法事务回滚 ✓ 正确答案
B @Index 注解在生产环境 hbm2ddl.auto=none 时仍会自动创建索引
C @Index 与 Flyway 可同时开启且互不冲突
D MySQL 的 CREATE INDEX 可在事务内回滚
#

14. 使用 SEQUENCE 引擎与 AUTO_INCREMENT 在 Spring Cloud 微服务分库场景下的全局唯一性取舍

A AUTO_INCREMENT 在分库分表后仍能保证全局唯一
B 分库后各库 AUTO_INCREMENT 互不影响,不会重复
C MySQL 原生支持 SEQUENCE,可直接用于分库
D AUTO_INCREMENT 仅单库唯一,分库分表需改用号段模式、雪花算法等全局唯一 ID 方案 ✓ 正确答案
#

15. MySQL 8.4 中 read_only 与 super_read_only 在 Spring Boot 多租户数据隔离中的权限模型

A read_only=ON 时 SUPER 用户也不能写
B super_read_only=ON 时普通用户依然可写
C 两个参数都只影响查询,不影响写操作
D super_read_only=ON 时连 SUPER 用户也禁止写,用于彻底保护只读节点 ✓ 正确答案
#

16. rewriteBatchedStatements=true 与 Hibernate 批量插入(hibernate.jdbc.batch_size)如何配合提升批量写入吞吐

A 只开启 rewriteBatchedStatements 就足以提升批量性能,无需其他配置
B rewriteBatchedStatements 与 batch_size 互斥,只能二选一
C batch_size 控制攒批阈值,rewriteBatchedStatements 让驱动合并为多 VALUES,两者配合并配合 order_inserts 可最大化吞吐 ✓ 正确答案
D batch_size 越大越好,无上限
#

17. Hibernate MySQL 方言对 java.time、BigDecimal 与 JSON 类型的映射差异与精度陷阱

A BigDecimal 默认无精度限制,可任意存入
B JSON 类型在所有 Hibernate 版本都无需配置即可映射
C LocalDateTime 映射为 TIMESTAMP 时不会有时区问题
D BigDecimal 映射为 DECIMAL,若数据库精度/标度不足会四舍五入或溢出,需用 @Column(precision, scale) 显式声明 ✓ 正确答案
#

18. Spring Boot 默认开启的 spring.jpa.open-in-view(OSIV)如何把 Session 生命周期绑定到请求,视图/序列化阶段访问懒加载属性为何抛 LazyInitializationException,关闭后应选用 @EntityGraph、JOIN FETCH 还是事务内访问

A 关闭 OSIV 后,Session 在事务外仍保持打开,可正常访问懒加载属性
B @EntityGraph 与 JOIN FETCH 作用相同,都能解决所有加载问题
C OSIV 关闭后 LazyInitializationException 不会发生
D OSIV 默认开启,把 Session 绑定到请求;关闭后事务外访问懒加载属性抛 LazyInitializationException,可用 @EntityGraph、JOIN FETCH 或事务内访问解决 ✓ 正确答案
#

19. Spring @Transactional 的 REQUIRES_NEW 与 NESTED 在 MySQL SAVEPOINT 支持下的真实语义差异

A REQUIRES_NEW 是物理独立事务,内层可独立提交;NESTED 基于 SAVEPOINT,内层不独立提交,随外层事务提交 ✓ 正确答案
B NESTED 不支持 SAVEPOINT,内部必回滚整个事务
C NESTED 与 REQUIRES_NEW 语义完全相同
D 外层回滚时 REQUIRES_NEW 内层也会一起回滚