十分钟,剖析 MyBatis,吊炸天的二级缓存!
前段时间刚被公司辞退的小伙突然发朋友,炫耀自己拿到了阿里的offer——菜鸟物流研发部、base杭州,虽然是个P6,但还是能感觉到他的兴奋。
其实,我还是有点疑惑,他之前基础就很一般(不然也不会被公司开了),也 面试了 大大小小 很多 公司,但总没有拿到一个满意的offer(用他的话说就是“要么薪酬太低,发展前景不好,要么就是面试被虐”)。
这么突然拿到了阿里的offer,还是让人觉得难以置信,所以我忍不住问他: “ 你最近都干啥了,阿里面试都问你什么了?”
这一问,就发现这小伙最近半年居然一直在闭关修炼,把一些基础的源码慢慢都啃了一遍!
所以当第三面中问到MyBatis的时候,他就很从容地从源码这一块讲起,每个问题都细细展开,面试官听完很惊讶,可以说是吊打面试官。
看完 源码的我…
关于设计模式,Mybatis至少使用了以下这些:
Builder模式, 例如SqlSessionFactoryBuilder、XMLConfigBuilder等;
工厂模式 ,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
单例模式 ,例如ErrorContext和LogFactory;
代理模式 ,Mybatis实现的核心,比如MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
组合模式 ,例如SqlNode和各个子类ChooseSqlNode等;
模板方法模式 ,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和所有的子类例如IntegerTypeHandler;
适配器模式 ,例如Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现;
装饰者模式 ,例如Cache包中的cache.decorators子包中等各个装饰者的实现;
迭代器模式 ,例如迭代器模式PropertyTokenizer;
MyBatis整体架构
其实,不只是在阿里,BAT等一线互联网公司面试也一定会 有涉及MyBatis的问题。接下来我没做个测试,看看你能回答几个?
1、MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?
2、MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?
3、请描述从数据库连接池获取一个数据连接的过程;
4、什么是缓存雪崩?如何解决?
其实 MyBatis并不难掌握 ,抓住关键自然而然就学会了!
为了让大家从源码角度更好地掌握MyBatis,升职加薪、跳槽大厂更稳,我特地邀请资深架构师、复旦大学硕士Lison老师为大家带来 《 MyBatis从青铜到王者之路》 系列直播课,带你解密MyBatis的核心运行流程,更学会看源码的能力!
原价199元
粉丝限时专享0.1元,限量200个名额!
在线直播,有疑问,现场解决!
《MyBatis从青铜到王者之路》
扫描二维码,立即进群
原价199元 ,本号粉丝专享限时 0.1元
Lison老师:
资深架构师,10余年java行业经验。
专精领域: 精通JAVA、J2EE和前端开发,擅长互联网高并发、高可靠架构设计;
课程大纲
6.16
MyBatis骨骼惊奇 果然是必学的秘籍
1.这些问题不会?你对MyBatis一无所知!
2.摸一摸骨架,快速了解MyBatis的全貌;
3.格式化你的大脑,谈谈面向对象的设计原则;
4.隐藏在日志模块的两个设计模式;
6.17
金三银四必备,源码必问面试题解答
1.如何给功能进行无侵入性的增强?
2.源码中到底用了哪些设计模式?为什么要用?
3.有什么优雅的方式创建复杂对象?
4.你能说清楚数据库连接池的底层机制吗?
6.18
深入剖析MyBatis两级缓存的设计与实现
1.什么是MyBatis的两级缓存?
2.解决缓存设计与实现之殇;
3.解决缓存雪崩?源码中找到答案;
4.十分钟解密MyBatis运行流程;
▲ 附赠 7.8G的Java架构进阶、视频资料
扫码进群,你也能成为大神
199元课程 限时0.1元
别犹豫, 3天带你精通 MyBatis