首页/ 学科题库/ Mytatis/ 缓存机制专题测试
Mytatis 模拟试卷

缓存机制专题测试

15 题 45 分钟 难度:★★
  • 一级缓存机制:SqlSession 级别缓存的作用域、生命周期、失效场景
  • 二级缓存配置:全局开关与 Mapper 级配置、缓存淘汰策略、实体序列化要求
  • 缓存读写策略:只读/读写模式的区别与适用场景、缓存刷新间隔与大小限制
  • 自定义缓存实现:Cache 接口规范、装饰器模式、Redis 分布式缓存集成要点
  • 缓存脏数据处理:多 Mapper 共享表场景、分布式环境一致性、外部数据变更感知

试卷习题(15 题)

参考答案在文末
判断题
1
判断题

MyBatis 的一级缓存(SqlSession 级别)在 SqlSession 关闭后会被销毁。

A

对

B

错

2
判断题

MyBatis 的二级缓存只需要在 Mapper XML 文件中添加 <cache/> 标签即可开启,不需要修改全局配置。

A

对

B

错

单选题
3
单选题

在 MyBatis 的 Mapper XML 中,<cache/> 标签的 eviction 属性不支持以下哪种策略?

A

LRU

B

FIFO

C

RANDOM

D

MRU

4
单选题

关于 MyBatis 一级缓存的描述,以下哪项是错误的?

A

一级缓存是 SqlSession 级别的缓存,默认开启

B

同一个 SqlSession 中执行相同的 SQL 查询时,会直接从缓存中获取数据

C

当执行 insert、update、delete 操作时,一级缓存会被清空

D

一级缓存可以在多个 SqlSession 之间共享数据

多选题
5
多选题

关于 MyBatis 二级缓存的配置,以下哪些说法是正确的?

A

需要在 MyBatis 全局配置文件中设置 cacheEnabled=true

B

只需要在 Mapper XML 文件中添加 标签即可

C

实体类必须实现 Serializable 接口

D

二级缓存默认使用 LRU 淘汰策略

6
多选题

关于 MyBatis 二级缓存的读写策略,以下哪些说法是正确的?

A

默认情况下,查询结果会以只读方式放入二级缓存

B

设置 readOnly="true" 时,所有调用者共享同一个缓存对象实例

C

设置 readOnly="false" 时,每次获取缓存都会返回对象的序列化副本

D

flushInterval 属性可以设置缓存的自动刷新时间间隔,单位是秒

7
多选题

如果要为 MyBatis 实现自定义的二级缓存(例如使用 Redis),需要实现 org.apache.ibatis.cache.Cache 接口。以下哪些方法是该接口必须实现的?

A

getId()

B

putObject(Object key, Object value)

C

getObject(Object key)

D

removeObject(Object key)

E

clear()

F

getSize()

8
多选题

以下哪些操作可能导致 MyBatis 二级缓存出现脏数据?

A

两个不同的 Mapper 操作同一张数据库表,且都开启了二级缓存

B

在事务中执行 update 后未提交就查询,使用了二级缓存

C

手动调用 sqlSession.clearCache() 清空了一级缓存

D

两个 Mapper XML 的 <cache> 标签使用了相同的 namespace

填空题
9
填空题

以下哪些操作会导致 MyBatis 一级缓存失效?请填空:

  1. 执行 sqlSession.() 方法会清空一级缓存
  2. 执行 sqlSession.() 方法会清空一级缓存
  3. 手动调用 sqlSession.() 方法可以清空一级缓存
  4. 关闭 sqlSession.close() 会销毁一级缓存
10
填空题

在 MyBatis Mapper XML 的 <cache> 标签中,以下属性用于控制缓存刷新策略:

  1. 属性设置缓存对象的最大数量,超过此数量后按 eviction 策略淘汰
  2. 属性设置缓存自动刷新的时间间隔(毫秒),默认不自动刷新
  3. 如果希望某个 SELECT 语句不使用二级缓存,可在 <select> 标签上设置 ="true"
  4. 如果希望某个 UPDATE 语句执行后不清空二级缓存,可在 <update> 标签上设置 flushCache="false"
11
填空题

在 MyBatis 中使用自定义缓存实现时:

  1. 在 Mapper XML 中通过 <cache type=""/> 指定自定义缓存类的全限定名
  2. MyBatis 内置的缓存装饰器 可以为缓存添加 LRU 淘汰策略
  3. MyBatis 内置的缓存装饰器 可以为缓存设置定时刷新功能
  4. 如果需要实现分布式缓存,通常推荐基于 Cache 接口进行扩展
12
填空题

为了防止 MyBatis 二级缓存出现脏数据,可以通过以下配置进行控制:

  1. 在 <insert>、<update>、<delete> 标签上设置 flushCache="" 可以确保执行写操作后刷新缓存,这是默认行为
  2. 在 <select> 标签上设置 useCache="" 可以强制该查询不使用二级缓存,每次都查询数据库
  3. 对于涉及同一张表的多个 Mapper,推荐使用 属性关联它们,使它们共享同一个缓存实例
  4. 在多表关联查询中,如果任何一张表的数据发生变化,都应清空相关缓存,可通过设置 flushCache="true" 实现
简答题
13
简答题

请解释 MyBatis 二级缓存中 readOnly="true" 和 readOnly="false" 两种模式的区别,并说明在什么场景下应该使用哪种模式?

14
简答题

MyBatis 二级缓存在什么情况下会产生脏数据?请列举至少三种典型场景,并说明相应的解决方案。

15
简答题

如果要将 MyBatis 的二级缓存从默认的 PerpetualCache 替换为 Redis 分布式缓存,请简述需要考虑的关键设计点。

参考答案
1.正确 2.错误 3.D 4.D 5.A;C;D 6.A;C 7.A;B;C;D;E;F 8.A;B 9.commit;rollback;clearCache 10.size;flushInterval;useCache 11.完整类名(如 com.example.MyCache);LruCache;ScheduledCache 12.true;false;cache-ref 13.略 14.略 15.略
想在手机上在线作答这套卷子?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可限时作答并自动判分。
了解产品 App
← 上一套 生态工具与扩展专题测试 下一套 → 高级映射与复杂场景专题测试