# 1. @Transactional 的传播行为(Propagation)的 7 种语义 A NEVER 允许存在事务 B 所有传播行为都新建独立事务 C MANDATORY 允许无事务执行 D REQUIRED 默认加入或新建事务,REQUIRES_NEW 总是新建独立事务,NESTED 基于保存点嵌套 ✓ 正确答案
# 2. @Transactional 的隔离级别(Isolation)与数据库默认差异 A 隔离级别与并发问题无关 B 所有数据库默认 READ_UNCOMMITTED C SERIALIZABLE 性能最高 D MySQL 默认 REPEATABLE_READ,Oracle/SQL Server 默认 READ_COMMITTED,DEFAULT 采用数据库默认 ✓ 正确答案
# 3. @Transactional(readOnly = true) 的优化与数据库只读事务 A 它只对数据库生效,与应用无关 B 它强制禁止所有写操作 C 它跳过 JPA 脏检查并可能设置连接只读,是查询类方法的性能与语义优化 ✓ 正确答案 D 它没有优化效果
# 4. Spring 6.x 的事务管理变更 A 事务 API 完全重写 B 主要变更是适配 Jakarta EE 命名空间与 Java 17 基线,核心事务语义保持稳定 ✓ 正确答案 C 传播行为被移除 D 与 Spring 5 完全一致
# 5. Spring Framework 7 在 JDK 25 虚拟线程下事务同步的线程绑定边界 A 虚拟线程下 ThreadLocal 自动跨线程传播 B 事务通过 ThreadLocal 绑定线程,虚拟线程下事务也必须在同一线程内完成,跨线程会丢失 ✓ 正确答案 C 事务与线程无关 D 虚拟线程下事务无需线程绑定
# 6. Spring 事务与 JPA 的协作(JpaTransactionManager) A 它只能提交不能回滚 B 它只管理 JDBC 连接,与 JPA 无关 C JPA 不需要事务管理器 D 它管理 JPA 的 EntityManager 与事务,协调持久化上下文与事务边界 ✓ 正确答案
# 7. Spring 事务与 JTA 的集成(Atomikos/Narayana) A JTA 不需要 XA 数据源 B JTA 只用于单数据源 C JtaTransactionManager 配合 XA 数据源与 Atomikos/Narayana 实现基于 2PC 的分布式事务 ✓ 正确答案 D JTA 比普通事务更快
# 8. Spring 事务与 Seata 分布式事务的协作 A @GlobalTransactional 组织全局事务,内部 @Transactional 本地事务通过 XID 关联,实现分布式一致 ✓ 正确答案 B Seata 与 Spring 事务无关 C Seata 只支持单库 D Seata 不依赖本地事务
# 9. Spring 事务抽象(PlatformTransactionManager)与编程式/声明式 A 编程式事务无侵入 B 声明式事务必须手写提交回滚 C PlatformTransactionManager 统一抽象,编程式用 TransactionTemplate,声明式用 @Transactional,二者都基于该抽象 ✓ 正确答案 D 事务管理器与 JPA/JDBC 无关
# 10. Spring 事务的 readOnly 标志在 JDBC 驱动层面的优化(如 MySQL 的事务访问模式) A readOnly 对数据库无任何影响 B readOnly 会调用 Connection.setReadOnly 让数据库使用只读事务访问模式,减少开销 ✓ 正确答案 C readOnly 只影响应用层,不影响连接 D readOnly 会提升写性能
# 11. Spring 事务的 rollback 规则(RuntimeException vs Checked Exception) A 默认受检异常回滚、运行时异常不回滚 B 默认所有异常都回滚 C 默认 RuntimeException 回滚、Checked Exception 不回滚,可用 rollbackFor 覆盖 ✓ 正确答案 D 回滚规则无法配置
# 12. Spring 事务的 rollbackFor/noRollbackFor 在 RuntimeException 默认回滚语义下的精细控制 A 两者都必填 B rollbackFor 增加回滚异常,noRollbackFor 排除回滚异常,在默认语义上精细控制 ✓ 正确答案 C rollbackFor 只影响受检异常 D noRollbackFor 只影响运行时异常
# 13. Spring 事务的传播行为(PROPAGATION_REQUIRED/REQUIRES_NEW/NESTED)在嵌套调用中的差异 A NESTED 与 REQUIRED 完全等价 B 三者共享同一事务 C 三者都新建独立事务 D REQUIRED 加入外层事务,REQUIRES_NEW 独立事务,NESTED 基于保存点局部回滚 ✓ 正确答案
# 14. Spring 事务的隔离级别(READ_COMMITTED/REPEATABLE_READ/SERIALIZABLE) A READ_COMMITTED 防脏读,REPEATABLE_READ 防不可重复读,SERIALIZABLE 防所有并发问题但性能最低 ✓ 正确答案 B 三者性能相同 C SERIALIZABLE 性能最高 D READ_COMMITTED 防幻读
# 15. TransactionTemplate 编程式事务的工程应用 A 它与 @Transactional 完全等价 B 它只能用于声明式事务 C 它无法手动回滚 D 它是编程式事务模板,execute 回调内定义事务边界,适合精细控制与自调用失效场景 ✓ 正确答案
# 16. 事务与虚拟线程(synchronized 锁)的协作 A synchronized 在虚拟线程下无任何影响 B 事务内用 synchronized 包住阻塞操作可能钉住载体线程并导致持锁死锁,应尽量用 ReentrantLock ✓ 正确答案 C 事务与锁无关 D 虚拟线程下 synchronized 自动释放
# 18. 事务事件(@TransactionalEventListener)与业务解耦 A 默认在事务提交后(AFTER_COMMIT)执行后续操作,实现业务解耦与一致性 ✓ 正确答案 B 它在事务回滚后也默认执行 C 它与事务无关 D 它只能同步执行
# 19. 内层事务回滚标记(rollback-only)如何导致外层 UnexpectedRollbackException,如何避免与排查 A 它只出现在 REQUIRES_NEW 场景 B 它由数据库死锁导致 C 内层 REQUIRED 回滚标记整个事务 rollback-only,外层捕获异常后仍提交即抛 UnexpectedRollbackException ✓ 正确答案 D 它是正常提交的标志
# 20. 事务传播与 Spring 事件可靠投递 A 事件在事务回滚后也默认投递 B @TransactionalEventListener 在事务提交后投递事件,保证事件执行与事务提交对齐 ✓ 正确答案 C 事件投递与事务无关 D 事件总是可靠投递
# 21. 事务同步(TransactionSynchronization)与回调 A 它无法感知回滚状态 B 它只能监听提交 C 它与事务无关 D 它提供事务提交/回滚/完成回调,可在事务边界执行一致逻辑 ✓ 正确答案
# 22. 事务在 Spring Modulith 下的边界 A 模块间必须用分布式事务 B 跨模块应共用同一事务 C 事务与模块无关 D 事务应限制在模块内部,跨模块一致靠事件驱动与最终一致而非分布式事务 ✓ 正确答案
# 23. 事务失效的常见场景(异常被吞、私有方法、线程切换) A 事务对 private 方法自动生效 B 只有异常被吞会失效 C 异常被吞、private/final 方法、自调用、线程切换都会导致事务失效 ✓ 正确答案 D 跨线程时事务自动传播
# 24. 事务方法中调用 Thread.sleep 的边界 A 虚拟线程下 sleep 无风险 B sleep 在事务内无任何影响 C sleep 会加快事务提交 D 事务内 sleep 会延长连接占用与锁持有,制造长事务风险,应避免 ✓ 正确答案
# 25. 嵌套事务(PROPAGATION_NESTED)与保存点的关系 A NESTED 与 REQUIRES_NEW 完全等价 B NESTED 基于保存点,内层回滚只回滚到保存点,外层事务仍可提交 ✓ 正确答案 C NESTED 内层回滚会回滚整个外层事务 D NESTED 不依赖保存点
# 26. @Transactional 在 Spring 6.x 的 Propagation 演进 A 传播行为被完全重写 B Propagation 语义基本稳定,演进主要在响应式事务适配与 API 清晰化 ✓ 正确答案 C 7 种传播被移除 D 响应式事务与传播无关
# 27. @Transactional(propagation = REQUIRES_NEW) 的连接占用 A REQUIRES_NEW 不占用额外连接 B REQUIRES_NEW 共享外层连接 C REQUIRES_NEW 新建独立事务需额外占用连接,深嵌套会耗尽连接池 ✓ 正确答案 D 连接占用与传播无关
# 28. @Transactional(timeout = ...) 的边界 A timeout 与锁等待超时相同 B timeout 设置事务超时,超时强制回滚并抛异常,防止长事务 ✓ 正确答案 C timeout 超时后事务继续提交 D timeout 只影响查询
# 29. 事务在 GraalVM Native Image 下的限制 A 反射与 Native 无冲突 B Native 下事务完全可用,无需处理 C Native 下不能使用事务 D 事务的动态代理与反射需 Spring AOT 提前生成元数据,CGLIB 运行时增强在 Native 受限 ✓ 正确答案
# 30. @Transactional 的 AOP 代理机制(JDK 动态代理 vs CGLIB)与自调用、final 方法失效的关系 A private 方法事务自动生效 B JDK 动态代理可拦截 final 方法 C 自调用经过代理,事务生效 D 默认 CGLIB 子类代理,自调用绕过代理、final 不可覆写、private 不可拦截均导致事务失效 ✓ 正确答案
# 31. 大事务/长事务的危害(连接占用、锁持有、UNDO 膨胀)与拆分策略 A 长事务无危害 B 长事务导致连接占用、锁持有、UNDO 膨胀,应拆分为小事务并移出非 DB 操作 ✓ 正确答案 C 事务越长性能越好 D UNDO 膨胀与事务时长无关
# 32. 事务失效场景汇总,自调用、非 public 方法、异常被吞、propagation 配置错误等如何? A 只有自调用会失效 B 自调用、非 public、final、异常被吞、propagation 配置错误、类未受 Spring 管理等都会失效 ✓ 正确答案 C 非 public 方法事务正常 D 异常被吞不影响事务
# 33. @Transactional 的 rollbackFor 与默认回滚规则,为什么运行时异常才默认回滚? A 默认受检异常回滚 B 默认所有异常回滚 C 默认 RuntimeException 回滚、Checked 不回滚,因为受检异常视为业务预期 ✓ 正确答案 D rollbackFor 无法覆盖默认