互联网Java工程师面试必备知识点:涵盖核心技术栈

需积分: 6 0 下载量 78 浏览量 更新于2024-06-29 收藏 7.9MB PDF 举报
"Java知识总结(造次).pdf 是一份针对互联网Java工程师的面试题集,涵盖了Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux等众多技术栈的内容。适合有一定编程基础,正在学习Java的读者,鼓励大家积极面对挑战,努力提升技能。" 本文将详细探讨这份资料中提及的一些Java和MyBatis的相关知识点: 1. **MyBatis** 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 2. **MyBatis的优点** 包括:灵活的SQL编写、减少模板代码、对复杂查询的良好支持、良好的事务管理等。 3. **MyBatis的缺点** 主要有:SQL书写工作量较大,对于不熟悉SQL的开发者可能较为困难;由于SQL写在XML中,导致SQL与Java代码分离,不利于代码的管理和测试。 4. **MyBatis适用场合** 多在于需要对SQL有高度控制,或者需要进行复杂查询的项目中。 5. **MyBatis与Hibernate的区别** 包括:MyBatis更加轻量级,对SQL的控制更自由,而Hibernate则提供了对象关系映射的完整解决方案,更加自动化。 6. **#{ }和${ }的区别**:#{ }用于预编译处理,防止SQL注入,${ }则是简单的字符串替换。 7. **属性名与字段名不一致** 的情况下,可以使用@Alias注解或者在Mapper XML文件中使用resultMap进行映射。 8. **模糊查询like语句** 可以在SQL中使用`LIKE '%value%'` 或者 `LIKE 'value%'`,在MyBatis映射文件中配置相应的条件。 9. **Dao接口的工作原理** 通常是通过MyBatis的动态代理机制,在运行时生成对应的实现类,实现方法调用到具体的SQL执行。 10. **MyBatis分页** 可以通过PageHelper等插件实现,原理是对SQL进行拦截,动态添加limit和offset。 11. **对象封装** MyBatis通过ResultMap和ResultType来将查询结果映射到Java对象。 12. **批量插入** 使用`<insert>`标签的`useGeneratedKeys`和`keyProperty`属性,配合`<batch>`标签。 13. **获取自动生成的键值** 通过`useGeneratedKeys="true"`和`keyProperty`属性,MyBatis会在插入后自动获取并设置到对应的Java对象属性上。 14. **传递多个参数** 可以使用Map,或者使用多个`@Param`注解的参数。 15. **MyBatis动态SQL** 动态SQL主要用于根据条件拼接SQL,主要标签有`if`, `choose`, `when`, `otherwise`, `foreach`等。 16. **其他标签** 还有`<resultMap>`, `<association>`, `<collection>`, `<discriminator>`等用于复杂映射的标签。 17. **半自动ORM映射** 意味着MyBatis需要手动编写SQL,而全自动如Hibernate会自动生成SQL。 18. **一对一、一对多关联查询** 可以通过`<association>`和`<collection>`标签实现,其中`<association>`用于一对一,`<collection>`用于一对多。 19. **MyBatis实现一对一** 通常通过`@One`或在Mapper XML中配置`<association>`标签。 20. **MyBatis实现一对多** 可以使用`@Many`或配置`<collection>`标签,结合`<resultMap>`进行映射。 21. **延迟加载(Lazy Loading)** MyBatis一级缓存默认不支持,二级缓存可以配置为延迟加载。 22. **MyBatis的缓存** 一级缓存是SqlSession级别的,二级缓存是Mapper级别的,可以跨SqlSession共享数据。 23. **接口绑定** MyBatis允许通过注解(@Mapper)或者XML配置将接口方法与SQL语句绑定。 这些只是部分知识点,完整的学习和掌握还需要深入阅读文档,实践操作,理解每个技术的原理和应用场景。对于Java工程师来说,熟练掌握这些技术栈是非常重要的,能有效提高开发效率和项目的稳定性。