缓存机制专题测试
考察知识点
- 一级缓存机制:SqlSession 级别缓存的作用域、生命周期、失效场景
- 二级缓存配置:全局开关与 Mapper 级配置、缓存淘汰策略、实体序列化要求
- 缓存读写策略:只读/读写模式的区别与适用场景、缓存刷新间隔与大小限制
- 自定义缓存实现:Cache 接口规范、装饰器模式、Redis 分布式缓存集成要点
- 缓存脏数据处理:多 Mapper 共享表场景、分布式环境一致性、外部数据变更感知
1
单选题
关于 MyBatis 一级缓存的描述,以下哪项是错误的?
2
填空题
以下哪些操作会导致 MyBatis 一级缓存失效?请填空:
- 执行
sqlSession.!!1_!!()方法会清空一级缓存 - 执行
sqlSession.!!2_!!()方法会清空一级缓存 - 手动调用
sqlSession.!!3_!!()方法可以清空一级缓存 - 关闭
sqlSession.!!4_!!()会销毁一级缓存
3
多选题
关于 MyBatis 二级缓存的配置,以下哪些说法是正确的?
4
单选题
在 MyBatis 的 Mapper XML 中,<cache/> 标签的 eviction 属性不支持以下哪种策略?
5
多选题
关于 MyBatis 二级缓存的读写策略,以下哪些说法是正确的?
6
填空题
在 MyBatis Mapper XML 的 <cache> 标签中,以下属性用于控制缓存刷新策略:
!!1_!!属性设置缓存对象的最大数量,超过此数量后按 eviction 策略淘汰!!2_!!属性设置缓存自动刷新的时间间隔(毫秒),默认不自动刷新- 如果希望某个 SELECT 语句不使用二级缓存,可在
<select>标签上设置!!3_!!="true" - 如果希望某个 UPDATE 语句执行后不清空二级缓存,可在
<update>标签上设置!!4_!!="false"
7
简答题
请解释 MyBatis 二级缓存中 readOnly="true" 和 readOnly="false" 两种模式的区别,并说明在什么场景下应该使用哪种模式?
8
多选题
如果要为 MyBatis 实现自定义的二级缓存(例如使用 Redis),需要实现 org.apache.ibatis.cache.Cache 接口。以下哪些方法是该接口必须实现的?
9
填空题
在 MyBatis 中使用自定义缓存实现时:
- 在 Mapper XML 中通过
<cache type="!!1_!!"/>指定自定义缓存类的全限定名 - MyBatis 内置的缓存装饰器
!!2_!!可以为缓存添加 LRU 淘汰策略 - MyBatis 内置的缓存装饰器
!!3_!!可以为缓存设置定时刷新功能 - 如果需要实现分布式缓存,通常推荐基于
!!4_!!接口进行扩展
10
简答题
如果要将 MyBatis 的二级缓存从默认的 PerpetualCache 替换为 Redis 分布式缓存,请简述需要考虑的关键设计点。
11
多选题
以下哪些操作可能导致 MyBatis 二级缓存出现脏数据?
12
填空题
为了防止 MyBatis 二级缓存出现脏数据,可以通过以下配置进行控制:
- 在
<insert>、<update>、<delete>标签上设置flushCache="!!1_!!"可以确保执行写操作后刷新缓存,这是默认行为 - 在
<select>标签上设置useCache="!!2_!!"可以强制该查询不使用二级缓存,每次都查询数据库 - 对于涉及同一张表的多个 Mapper,推荐使用
!!3_!!属性关联它们,使它们共享同一个缓存实例 - 在多表关联查询中,如果任何一张表的数据发生变化,都应清空相关缓存,可通过设置
flushCache="!!4_!!"实现
13
简答题
MyBatis 二级缓存在什么情况下会产生脏数据?请列举至少三种典型场景,并说明相应的解决方案。
14
判断题
MyBatis 的一级缓存(SqlSession 级别)在 SqlSession 关闭后会被销毁。
15
判断题
MyBatis 的二级缓存只需要在 Mapper XML 文件中添加 <cache/> 标签即可开启,不需要修改全局配置。
📝 发现内容有误?点击此处直接编辑
想参加完整模拟考试?
小程序提供计时考试、自动评分和详细解析
长按或扫描二维码,立即体验