前言
9月初大环境还可,有个小伙伴海投Java后端开发岗后拿到华为、美团、快手等公司的offer,当时一直在纠结去哪儿。后面接到腾讯4面HR的电话,有点惊喜,毕竟前面两轮面试后一直没信儿,以为没消息了。
大厂嘛,人人都想进,机会来了肯定想把握一下的,可惜面前自信满满,面后被虐体无完肤...
刚刚开始的时候一切进展都非常顺利,突然不知怎地那面试官一直揪着MyBatis源码问个不停,小伙伴MyBatis还是比较常用的,但是没深入看过源码,所以没回答好。
结果可想而知...因为才有了这篇MyBatis干货整理文章...
先来看看MyBatis常问面试题目(附带解析)
- 什么是 MyBatis?讲下 MyBatis 的缓存
- Mybatis 是如何进行分页的?分页插件的原理是什么?
- 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
- Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
- “#{}”和“${}”的区别是什么?
- 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
- Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
- MyBatis 与 Hibernate 有哪些不同?
- MyBatis 的好处是什么?
- 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
- 什么是 MyBatis 的接口绑定,有什么好处?
- 接口绑定有几种实现方式,分别是怎么实现的?
- 什么情况下用注解绑定,什么情况下用 xml 绑定?
- MyBatis 实现一对一有几种方式?具体怎么操作的?
- Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
- MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?
- Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
- Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签?
- 当实体类中的属性名和表中的字段名不一样,如果将查询的结果封装到指定 pojo?
- 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, Dao 的工作原理,是否可以重载?
- Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标签的内容,请问,B 标签能否定义在 A 标签的后面,还是说必须定义在 A 标签的前面?
- Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
- Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?
- Mybatis 中如何指定使用哪一种 Executor 执行器?
- Mybatis 执行批量插入,能返回数据库主键列表吗?
- Mybatis 是否可以映射 Enum 枚举类?
- 如何获取自动生成的(主)键值?
- 在 mapper 中如何传递多个参数?
- resultType resultMap 的区别?
- 使用 MyBatis 的 mapper 接口调用时有哪些要求?
- Mybatis 比 IBatis 比较大的几个改进是什么?
- IBatis 和 MyBatis 在核心处理类分别叫什么?在细节上的不同有哪些?
其次是 关于Mybatis源码部分的题目:
1、Mybatis源码中用了哪些设计模式?为什么要用这些设计模式?
2、MyBatis打开调试模式之后,能打印sql语句等信息,这是怎么实现的?实现过程中使用了什么设计模式?
3、请详细描述从数据库连接池中获取一个连接资源的过程?
4、MyBatis是如何为二级缓存动态添加日志、同步控制、阻塞、缓存淘汰策略等附加能力的?用了什么设计模式?
5、请描述从数据库连接池获取一个数据 连 接的过程;
6、结合源码说说什么是缓存雪崩?如何解决?
估计问你你也懵逼,对不对?但是BAT等一线互联网公司面试一定会涉及源码解析的问题。
为什么面试官这么喜欢问源码?程序员又为什么要学会看源码呢?
image.png
再给大家分享一下阿里大神多隆的故事。多隆是淘宝创始团队三个工程师之一,非计算机出身,从底层码农写到阿里巴巴的合伙人。很多项目,从头到尾都是他一个人就完成了。他做的最多的就是在工位上,对着屏幕上的黑框写代码,看代码。他很热衷于看源码解决问题,经常有同事找到解决难题。第二天他已经看完了xxx的源码,改哪里哪里。
学会看源码,可以让你拥有:
1. 编写优雅、高效的代码经验;
2. 提升微观的架构设计能力,重点在思维和理念;
3. 解决工作中、学习中的各种疑难杂症;
4.学习大牛解决问题的思维。
如何高效的学习MyBatis源码呢?
市面上真正适合学习的MyBatis资料太少,有的书或资料虽然讲得比较深入,但是语言晦涩难懂,大多数人看完这些书基本都是从入门到放弃。学透MyBatis源码难道就真的就没有一种适合大多数同学的方法吗?
在这分享一份精通MyBatis学习指南(学习文档+视频讲解+Xmind思维导图),这份学习指南从MyBatis源码的角度,深入浅出,从入门到精通,同时介绍一些MyBatis的高级用法,并挖掘MyBatis源码中使用的设计模式等
整理不易,MyBatis学习指南都在这了
MyBatis学习文档
- mybatis的基本用法
- mybatis的体系结构
- 深入mybatis的配置文件
- 深入Mapper XML映射文件
- mybatis的关联映射和动态SQL
- mybatis的事务管理和缓存机制
- mybatis的注解配置
- Spring整合mybatis
image.png
Mybatis思维导图
- mybatis简介
- 与hibernate对比
- mybatis框架整体设计
- mybatis源码的几个主要部件
- XML映射配置文件
- mybatis的优缺点
- Spring整合mybatis
- mapper的xml文件
- 动态SQL
- resultMap子元素
- 鉴别器discriminator
- 插件拓展
- 常用注解