互联网Java工程师面试必备:MyBatis等技术栈深度解析
需积分: 5 192 浏览量
更新于2024-06-26
3
收藏 4.3MB PDF 举报
“1000道+互联网Java工程师面试题.pdf”涵盖了广泛的Java技术栈,包括MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等。此资源旨在帮助互联网Java工程师准备面试,内容详细且深入。
以下是部分Java和MyBatis面试题的详解:
1. **MyBatis** 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2. **MyBatis优点** 包括:简化SQL操作,减少代码量;良好的封装,易于维护;支持动态SQL,提高了灵活性;提供日志功能,方便调试。
3. **MyBatis缺点** 主要是:相比全自动化 ORM 框架(如Hibernate),MyBatis 需要编写较多的XML 映射文件和SQL 语句;对于复杂的关联查询,可能需要手动编写较多的SQL。
4. **适用场合**:适合那些对SQL性能要求较高,或者需要灵活控制数据库操作的项目。
5. **MyBatis与Hibernate不同**:MyBatis更加轻量级,SQL书写更自由,而Hibernate则提供了对象关系映射的完整解决方案,自动管理数据库事务,但SQL自动生成较不灵活。
6. **#{** 和 **}${}** 的区别:#{} 用于预编译处理,防止SQL注入,而${} 直接替换,不进行预编译,存在SQL注入风险。
7. **属性名与字段名不同** 可以通过resultMap来映射字段关系。
8. **模糊查询like语句** 一般使用`like '%value%'` 或者 `like 'value%'`,`like '%value'`。
9. **Dao接口工作原理** 依赖于MyBatis的动态代理机制,当调用Dao接口的方法时,MyBatis会根据方法签名生成对应的SQL并执行。
10. **MyBatis分页** 可以通过PageHelper等插件实现,原理是对Statement进行包装,动态生成分页SQL。
11. **对象封装** MyBatis通过ResultMap自动映射SQL查询结果到Java对象,支持自动和手动两种映射方式。
12. **批量插入** 使用`<insert>`标签的`useGeneratedKeys`和`keyProperty`属性配合`<selectKey>`标签获取自增主键。
13. **获取主键值** 可以通过`useGeneratedKeys="true"`和`keyProperty="id"`属性实现。
14. **传递多个参数** 可以通过`@Param`注解指定参数名,或者使用Map作为参数。
15. **动态SQL** 动态SQL允许在XML映射文件中根据条件拼接SQL,常用的动态SQL元素有`if`, `choose`, `when`, `otherwise`, `where`, `trim`, `foreach`等。
16. **其他标签** 除了基础的CRUD标签,还有`<resultMap>`, `<association>`, `<collection>`, `<discriminator>`等用于复杂映射。
17. **半自动ORM** MyBatis需要手动编写SQL,与全自动ORM如Hibernate相比,它只负责SQL执行和结果映射,不负责对象关系的维护和管理。
18. **一对一、一对多关联查询** 通过`<association>`和`<collection>`标签实现,可配置在`resultMap`中。
19. **实现方式** 一对一可以通过`@One`注解,一对多可以通过`@Many`注解。
20. **延迟加载** MyBatis支持懒加载,只有在真正访问关联对象时才会去查询数据库,实现原理主要基于代理。
21. **一级、二级缓存** 一级缓存是SqlSession级别的缓存,二级缓存是Mapper级别的缓存,二者都基于HashMap实现,二级缓存可以配置是否开启和共享。
22. **接口绑定** 包括`@Mapper`注解和`Mapper.xml`结合的方式,以及`@MapperScan`注解扫描接口。
23. **调用要求** 需要确保接口方法与XML映射文件中的SQL id匹配,并且配置了正确的数据源。
24. **Mapper编写方式** 包括注解方式和XML配置方式。
25. **插件运行原理** MyBatis通过拦截器链模式执行,用户可以通过实现Interceptor接口创建自己的插件,插件会在特定的执行点(如执行SQL前、后)介入。
这些知识点仅是文件中部分内容的概述,完整的PDF文件将包含更多关于Java工程师面试的相关问题,涵盖更广泛的技术领域。准备面试的Java工程师可以通过这份资源深入理解和复习相关技术。
2021-12-11 上传
2023-03-26 上传
2021-08-27 上传
2021-06-30 上传
2023-02-21 上传
2020-07-07 上传
2020-03-22 上传
2021-07-30 上传
「已注销」
- 粉丝: 264
- 资源: 63
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍