MyBatis 一级缓存与二级缓存
候选人小段在面试字节 P6 时,面试官问道:
"MyBatis 的缓存是怎么工作的?"
小段说:"有一级缓存和二级缓存..."
面试官追问:"一级缓存和二级缓存有什么区别?"
小段说:"一级缓存是 SqlSession 级别的..."
面试官继续追问:"那二级缓存什么时候失效?"
小段答不上来。
【面试官心理】 这道题我用来测试候选人对 MyBatis 缓存机制的理解。缓存是 MyBatis 的核心特性,能说清一级缓存的会话级别、二级缓存的 namespace 级别、以及缓存失效条件的,是真正理解 MyBatis 的候选人。
一、核心问题 🔴
1.1 问题拆解
第一层:缓存层级
- "MyBatis 有一级缓存和二级缓存,分别是什么?"
- "一级缓存和二级缓存的区别是什么?"
第二层:原理
- "一级缓存是怎么实现的?"
- "二级缓存是怎么实现的?"
第三层:细节
- "什么情况下缓存会失效?"
- "二级缓存的 flushInterval 是做什么的?"
1.2 标准回答
P5 回答:区别对比
1.3 追问升级
追问 1:一级缓存的实现
追问 2:二级缓存的配置
二、面试总结
MyBatis 缓存的核心是:一级缓存是 SqlSession 私有的,二级缓存是 Mapper namespace 级别共享的。