全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 10 道配套习题

生产环境最佳实践专题

专题说明

本专题全面讲解MyBatis生产环境最佳实践,涵盖监控告警体系设计、SQL注入纵深防御、线程安全与并发控制、异常重试与幂等性设计、配置热部署等核心能力,覆盖从开发到运维的完整生命周期。

学习目标

  1. 掌握生产环境监控指标体系设计与告警分级策略
  2. 深入理解SQL注入防护的纵深防御体系
  3. 掌握MyBatis各核心组件的线程安全特性
  4. 学会死锁异常的重试策略与幂等性设计
  5. 理解配置热部署的完整实现方案与回滚机制

学习内容

  • 监控与告警:SQL性能指标、连接池指标、缓存指标、告警分级
  • SQL注入防护:#{}/$ {}区别、白名单校验、拦截器检测、OGNL风险
  • 线程安全与并发:SqlSessionFactory/SqlSession/Mapper线程安全特性
  • 异常处理与重试:死锁重试、Spring Retry、幂等性设计
  • 热部署与配置刷新:XML热加载、Configuration更新、回滚机制

学习建议

生产环境最佳实践是系统稳定性的保障。SQL注入防护是安全必考点,线程安全是并发基础,异常重试和幂等性是金融级系统必备能力。建议结合实际项目理解监控体系设计和热部署方案。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(10 题)

1
多选题

在生产环境中,针对 MyBatis 的监控体系,以下哪些指标是必须纳入告警范围的核心指标?

A

SQL 执行时间超过 500ms 的慢查询数量

B

数据库连接池活跃连接数占最大连接数的比例超过 80%

C

MyBatis 一级缓存命中率和二级缓存命中率

D

Mapper 方法的调用频率与平均响应时间趋势

2
简答题

某电商平台在促销活动期间,MyBatis 查询响应时间飙升,但事后排查发现没有任何监控告警提前发现问题。请设计一套完整的 MyBatis 生产环境监控方案,要求包含:

  1. 需要采集的核心指标及采集方式
  2. 指标存储与可视化方案
  3. 告警规则设计(含分级策略)
  4. 如何避免监控本身成为性能瓶颈
3
多选题

在生产环境中,以下哪些做法可以有效防止 MyBatis 的 SQL 注入攻击?

A

所有参数绑定统一使用 #{},仅在白名单校验后的 ORDER BY 和动态表名场景才使用 ${}

B

使用 <bind> 标签拼接用户输入到 SQL 中,因为它会自动进行 OGNL 转义

C

在 MyBatis 拦截器中对 SQL 进行关键字黑名单检测(如 UNION、DROP、DELETE 等)

D

对于 ${} 引用的参数,在 Java 层通过正则表达式校验只允许字母、数字和下划线组合

E

关闭 MyBatis 的 logImpl 配置,避免 SQL 日志泄露敏感参数信息

4
多选题

生产环境中防御 MyBatis SQL 注入攻击,以下哪些措施是有效的纵深防御策略?

A

在 MyBatis 自定义拦截器中检测 SQL 中是否包含 UNION、DROP 等危险关键字并拦截

B

所有使用 ${} 的参数必须经过白名单校验(如表名、排序字段限定在预定义集合内)

C

启用 MyBatis 的 safeResultHandlerEnabled 配置防止结果集注入

D

使用 SQL 防火墙(如 SQL 审计代理)在数据库层拦截异常 SQL 模式

5
填空题

在 MyBatis 生产环境中防止 SQL 注入,以下关键措施需要正确实现:

  1. 参数绑定必须使用 #{} 而不是 ______,因为前者使用 ______ 机制避免注入
  2. 对于必须使用 ${} 的场景(如动态 ORDER BY 字段),必须通过 ______ 校验限制输入范围
  3. 在 XML 中编写动态 SQL 时,<bind> 标签的 value 属性中如果拼接了用户输入,同样存在 ______ 风险
6
多选题

在高并发 Web 应用中使用 MyBatis,以下关于线程安全的描述,正确的有哪些?

A

SqlSessionFactory 是线程安全的,整个应用生命周期只需创建一个实例

B

SqlSession 是线程安全的,可以在多个线程间共享同一个 SqlSession 实例

C

Mapper 接口代理对象本身无状态,但底层依赖 SqlSession,因此不应跨线程共享

D

MyBatis 一级缓存(Local Cache)绑定在 SqlSession 上,多线程共享 SqlSession 会导致缓存数据混乱

7
填空题

MyBatis 二级缓存(二级 Cache)在多节点部署和高并发场景下存在以下问题:

  1. 默认二级缓存使用 PerpetualCache(基于 ______),多线程并发读写需要加锁,MyBatis 通过 ______ 模式减少锁竞争
  2. 在集群多节点部署时,各节点的二级缓存相互独立,会导致 ______ 问题,应改用 ______ 实现分布式缓存
  3. 使用 @CacheNamespace 注解开启二级缓存时,flushInterval 设置过小会导致频繁 ______,影响高并发下的读性能
8
简答题

某支付系统使用 MyBatis 进行订单状态更新,偶发数据库死锁异常(Deadlock found when trying to get lock),部分订单更新失败。团队直接在 catch 块中对原方法进行重试,但出现了 TransactionAlreadyCompletedException 和重复扣款问题。请分析:

  1. 为什么在同一个事务内 catch 后重试会抛出 TransactionAlreadyCompletedException
  2. 死锁异常和约束违反异常(如 Duplicate Key)在重试策略上应如何区别对待?
  3. 在 Spring 环境下,如何正确实现可重试的数据库操作?
  4. 如何防止重试过程中出现重复扣款等幂等性问题?
9
多选题

在生产环境中实现 MyBatis 配置的热部署与动态刷新,以下说法正确的有:

A

通过 Nacos/Apollo 等配置中心推送新配置后,MyBatis 的 configuration.xml 中的配置可以实时生效

B

使用 Spring Boot + MyBatis-Spring-Boot-Starter 时,修改 application.yml 中的 mybatis.configuration 属性需要重启应用才能生效

C

实现 Mapper XML 文件热加载,需要在应用运行期间重新解析 XML 并更新 Configuration 对象中的 MappedStatement 注册表

D

MyBatis-Plus 的 GlobalConfig 中 isRefresh 参数在生产环境应设置为 true 以实现 XML 热加载

10
简答题

某金融系统要求在不重启服务的情况下,支持动态调整 MyBatis 的 Mapper XML SQL 语句(例如紧急修复一个性能有问题的 SQL)。请设计一套生产环境可用的 MyBatis SQL 热部署方案,要求:

  1. 描述 XML 变更的监听与触发机制
  2. 说明如何安全地重新加载 XML 并更新 MyBatis 的 Configuration
  3. 如何保证热加载过程中的线程安全(加载期间正在执行的 SQL 不受影响)
  4. 如果新 SQL 加载失败,如何实现自动回滚到旧版本
← 上一个专题 源码架构与核心原理专题
下一个专题 → 生态工具与扩展专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库