前段时间刚被公司辞退的小伙突然发朋友,炫耀自己拿到了阿里的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

相关文章