秋招面试题系列- - -Java 工程师(二)

简介: 秋招面试题系列- - -Java 工程师(二)

MyBatis面试题


5、MyBatis与 Hibernate有哪些不同?

1、Mybatis和 hibernate不同,它不完全是一个 ORM框架,因为 MyBatis需要程序员自己编写 Sql语句。


2、Mybatis直接编写原生态 sql,可以严格控制 sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是 mybatis无法做到数据库无关性,


如果需要实现支持多种数据库的软件,则需要自定义多套 sql映射文件,工作量大。


3、Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用 hibernate开发可以节省很多代码,提高效率。


6、#{}和${}的区别是什么?

#{}是预编译处理,${}是字符串替换。


Mybatis在处理#{}时,会将 sql中的#{}替换为?号,调用 PreparedStatement的set方法来赋值;


Mybatis在处理${}时,就是把${}替换成变量的值。


使用#{}可以有效的防止 SQL注入,提高系统安全性。


7、当实体类中的属性名和表中的字段名不一样,怎么办?

第 1种:通过在查询的 sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。

select order_id id, order_no orderno ,order_price price form
orders where order_id=#{id};

第 2种:通过来映射字段名和实体类属性名的一一对应的关系。

select * from orders where order_id=#{id}

8、模糊查询 like语句该怎么写?

第 1种:在 Java代码中添加 sql通配符。

string wildcardname =“%smi%”;
listnames = mapper.selectlike(wildcardname);
id=”selectlike”>
select * from foo where bar like #{value}

第 2种:在 sql语句中拼接通配符,会引起 sql注入

string wildcardname =“smi”;
listnames = mapper.selectlike(wildcardname);
id=”selectlike”>
select * from foo where bar like "%"#{value}"%"

9、通常一个 Xml映射文件,都会写一个 Dao接口与之对应,请问,这个 Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

Dao接口即 Mapper接口。接口的全限名,就是映射文件中的 namespace的值;接口的方法名,就是映射文件中 Mapper的 Statement的 id值;接口方法内的


参数,就是传递给 sql的参数。


Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为 key值,可唯一定位一个 MapperStatement。在 Mybatis中,每一个


、、、标签,都会被解析为一个


MapperStatement对象。


举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到 namespace为com.mybatis3.mappers.StudentDao下面 id为


findStudentById的 MapperStatement。


Mapper接口里的方法,是不能重载的,因为是使用全限名+方法名的保存和寻找策略。Mapper接口的工作原理是 JDK动态代理,Mybatis运行时会使用 JDK动态代理为 Mapper接口生成代理对象 proxy,代理对象会拦截接口方法,转而执行 MapperStatement所代表的 sql,然后将 sql执行结果返回。


10、Mybatis是如何进行分页的?分页插件的原理是什么?

Mybatis使用 RowBounds对象进行分页,它是针对 ResultSet结果集执行的内存分页,而非物理分页。可以在 sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。


分页插件的基本原理是使用 Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql,根据 dialect方言,添加对应的物理分页语句和物理分页参数。

相关文章
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
4月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
548 83
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
100 2
|
2月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
76 4
|
3月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
98 2
|
4月前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
80 18
|
4月前
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
343 2
|
3月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
40 0
|
4月前
|
小程序 前端开发 JavaScript
Java开发工程师转小程序开发的前景如何?
Java开发工程师转小程序开发的前景如何?
60 0