23

十分钟,剖析 MyBatis,吊炸天的二级缓存!

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA3MTUzOTcxOQ%3D%3D&%3Bmid=2452972135&%3Bidx=1&%3Bsn=f3f85a72577588f65c8e512a1eb40ed5
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

前段时间刚被公司辞退的小伙突然发朋友,炫耀自己拿到了阿里的offer——菜鸟物流研发部、base杭州,虽然是个P6,但还是能感觉到他的兴奋。

其实,我还是有点疑惑,他之前基础就很一般(不然也不会被公司开了),也 面试了 大大小小 很多 公司,但总没有拿到一个满意的offer(用他的话说就是“要么薪酬太低,发展前景不好,要么就是面试被虐”)。

这么突然拿到了阿里的offer,还是让人觉得难以置信,所以我忍不住问他: 你最近都干啥了,阿里面试都问你什么了?”

这一问,就发现这小伙最近半年居然一直在闭关修炼,把一些基础的源码慢慢都啃了一遍!

所以当第三面中问到MyBatis的时候,他就很从容地从源码这一块讲起,每个问题都细细展开,面试官听完很惊讶,可以说是吊打面试官。

eQzIVby.gif

看完 源码的我…

关于设计模式,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;

7bQva2a.png!web

MyBatis整体架构

其实,不只是在阿里,BAT等一线互联网公司面试也一定会 有涉及MyBatis的问题。接下来我没做个测试,看看你能回答几个?

1、MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?

2、MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?

3、请描述从数据库连接池获取一个数据连接的过程;

4、什么是缓存雪崩?如何解决?

其实 MyBatis并不难掌握 ,抓住关键自然而然就学会了!

为了让大家从源码角度更好地掌握MyBatis,升职加薪、跳槽大厂更稳,我特地邀请资深架构师、复旦大学硕士Lison老师为大家带来 《 MyBatis从青铜到王者之路》 系列直播课,带你解密MyBatis的核心运行流程,更学会看源码的能力!

原价199元

粉丝限时专享0.1元,限量200个名额!

在线直播,有疑问,现场解决! V7ZfYfB.png!web

《MyBatis从青铜到王者之路》

NnaumeR.png!web

扫描二维码,立即进群

qymqiir.png!web

原价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运行流程;

FrAJbqM.jpg!web

附赠 7.8G的Java架构进阶、视频资料

扫码进群,你也能成为大神

qymqiir.png!web

199元课程 限时0.1元

别犹豫, 3天带你精通 MyBatis


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK