最近收到了小伙伴的捷报,他刚拿到了阿里的offer,是菜鸟物流研发部,base杭州,虽然是个P6,但明显感觉到他很兴奋。
其实,我还是有点疑惑,他之前基础很一般,早就嚷嚷着要跳槽,大大小小的公司面试了很多,但总没有拿到一个满意的offer,要么薪酬太低,发展前景不好,要么就是面试被虐。咋就突然拿到了阿里的offer。后来没忍住,我问他:
“你最近都干啥了,阿里面试都问你什么了?”
结果,这小伙最近半年居然一直在闭关修炼,把一些基础的源码慢慢都啃了一遍。像第三面中主要问到MyBatis,他之前已经把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整体架构
MyBatis在阿里等大厂十分流行,BAT等一线互联网公司面试也一定会涉及源码解析的问题。但是很多同学并没有真正掌握MyBatis。
你能答上这些吗?
1、MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?
2、MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?
3、请描述从数据库连接池获取一个数据连接的过程;
4、什么是缓存雪崩?如何解决?
很多工作3、5年的程序员,就是如此,工作中接触的技术有限,对于MyBatis的诸多妙用依然一知半解。
为了带大家发现MyBatis的全新世界,我特地邀请了资深架构师、复旦大学硕士Lison老师为大家带来《MyBatis》系列直播课,带你摸清MyBatis的骨架,同时从源码角度深度理解MyBatis,原价199元,公众号粉丝限时专享0.1元,限量200个名额!
在线直播,有疑问,现场解决!
《MyBatis从青铜到王者之路》
原价199元,本公众号粉丝专享限时0.1元
Lison老师:
资深架构师,10余年java行业经验。
专精领域:精通JAVA、J2EE和前端开发,擅长互联网高并发、高可靠架构设计;
课程大纲
3.10
骨骼惊奇的MyBatis
1.摸清MyBatis的骨架
2.日志模块分析
3.11
数据源与缓存的实现
1.数据源模块分析
2.缓存模块分析
3.12
学习源码的正确姿势
1.MyBatis的核心运行流程
2.看源码的正确姿势
▲附赠7.8G的Java架构进阶、视频资料
及程序员简历模板(简历做好,面试就成了一半)
扫码添加肉兰老师报名
“掌握MyBatis要多久?”
“3天。”
“但是学会之后一定要不断练习。”