互联网Java工程师面试必备:涵盖全方位技术栈

需积分: 9 1 下载量 35 浏览量 更新于2024-07-09 收藏 4.77MB PDF 举报
"这份文档是2021年的互联网Java工程师面试题目集合,全面覆盖了Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等多个技术领域的常见问题。" 这篇文档主要针对Java工程师的面试准备,包含了多个技术栈的重要知识点。以下是一些关键内容的详细解释: 1. **MyBatis** 是一个轻量级的持久层框架,它简化了Java与数据库之间的交互,通过XML或注解的方式将SQL语句与Java代码分离。 2. **MyBatis优点** 包括灵活的SQL编写,减少了模板代码,易于维护,支持动态SQL等。 3. **MyBatis缺点** 包括可能的SQL注入风险,不如ORM框架自动化程度高,对数据库依赖较大。 4. **适用场合** MyBatis适合于需要对SQL有高度控制的项目,例如复杂查询或性能优化。 5. **MyBatis与Hibernate区别** Hibernate是全自动ORM框架,提供了一种对象-关系映射的解决方案,而MyBatis是半自动的,需要手动编写SQL。 6. **#{}与${}的区别** #{}用于预编译处理,防止SQL注入;${}则是简单的字符串替换,可能导致SQL注入。 7. **属性名与字段名不一致** 可以通过@XmlElement或@DatabaseField注解指定映射关系。 8. **模糊查询like** 在XML映射文件中,可以使用`<if>`标签配合`like`关键字完成模糊查询。 9. **Dao接口工作原理** Dao接口的方法被代理,MyBatis根据方法名生成对应的SQL语句,通过反射执行。 10. **MyBatis分页** 通常通过自定义分页插件实现,拦截Executor执行过程,修改SQL语句添加LIMIT和OFFSET。 11. **对象封装** MyBatis通过ResultMap机制,将查询结果映射到Java对象。 12. **批量插入** 使用`<insert>`标签的`useGeneratedKeys="true"`和`keyProperty="id"`属性,配合`<foreach>`标签。 13. **获取自动生成键值** 使用`useGeneratedKeys="true"`和`keyProperty="id"`,在插入后通过`int id = sqlSession.insert(...);`获取。 14. **传递多个参数** 可以通过Map、注解`@Param`或使用`<foreach>`标签。 15. **动态SQL** 动态SQL允许在XML映射文件中根据条件动态生成SQL,如`<if>`, `<choose>`, `<when>`, `<otherwise>`, `<where>`, `<set>`等标签。 16. **其他标签** 还有`<resultMap>`, `<association>`, `<collection>`, `<discriminator>`等,用于更复杂的对象映射和关联。 17. **半自动ORM** MyBatis需要开发者手动编写SQL,而全自动ORM如Hibernate则自动映射Java对象与数据库记录。 18. **一对一、一对多关联查询** 通过`<association>`和`<collection>`标签实现,配置对应的外键和关联对象。 19. **实现方式** 一对一可以通过主键关联,一对多可以通过List或Set进行映射。 20. **延迟加载** MyBatis不直接支持,但可以通过二级缓存或自定义实现。 21. **一级、二级缓存** 一级缓存是SqlSession级别的,二级缓存是Mapper级别的,可跨SqlSession共享数据。 22. **接口绑定** MyBatis通过Mapper接口与XML映射文件结合,实现SQL执行。实现方式包括注解方式和XML配置。 23. **Mapper接口调用要求** 需要有对应的SQL映射文件,方法名与SQL的id匹配。 24. **Mapper编写方式** 包括XML配置、注解方式,或者结合注解和XML。 25. **插件运行原理** MyBatis插件通过拦截器链模式工作,自定义插件需要继承`Interceptor`接口,并实现`intercept`方法。 以上内容只是文档中的一部分,完整的面试题涵盖了更广泛的Java技术栈,包括Spring全家桶、分布式服务框架、消息队列、搜索引擎、内存缓存、数据库等,对于准备Java工程师面试的人员来说,这是一个非常有价值的资源。