Java实用面试题五十道

1、举例说明什么是持久化。

答案:

持久化是将程序数据在持久状态和瞬时状态间转换的机制。JDBC 就是一种持久化机制,文件 IO 也是一种持久化机制。

 

2、举例说明什么是对象关系映射。

答案:

持久状态的数据一般保存在数据库中,是一种关系模型,如,用户数据保存在 user 表里,userName 字段保存用户的名称,birthday 字段保存用户的出生日期。一条数据库记录对应一个用户。瞬时的数据一般以面向对象的方式被组织,并保存在内存中,如,对应于 user 表,有 User 类,User 类有 userName 属性和 birthday 属性,对应 user 表的 userName 字段和birthday 字段。关系型数据和对象数据间存在着天然的映射关系,这种映射关系称为“对象—关系映射”,又称为 ORM。

 

3、谈谈 resultType 和 resultMap 的区别和具体的应用场景。

答案:

resultType:将查询结果按照 sql 列名 pojo 属性名一致性映射到 pojo 中。场景:查询用户信息。

resultMap:使用 association 和 collection 完成一对一和一对多高级映射(对结果有特殊的映射要求)。场景:查询订单及关联用户信息,查询用户权限范围模块及模块下的菜单。

 

4、谈谈 Mybatis 一级缓存和二级缓存的区别。

答案:

一级缓存是 SqlSession 级别的缓存。在操作数据库时需要构造 sqlSession 对象,在对象中有一个数据结构用于存储缓存数据。不同的 sqlSession 之间的缓存数据区域是互相不影响的。也就是只能作用在同一个 sqlSession 中,不同的 sqlSession 中的缓存是互相不能读取的。二级缓存是 mapper 级别的缓存,多个 SqlSession 去操作同一个 Mapper 的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。Mapper 有一个二级缓存区域(按 namespace 分),其它 mapper 也有自己的二级缓存区域(按 namespace 分)。每一个namespace 的 mapper 都有一个二级缓存区域,两个 mapper 的 namespace 如果相同,这两个 mapper 执行 sql 查询到数据将存在相同的二级缓存区域中。

 

5、说明如何使用 foreach、来完成复杂查询以及它的应用场景。

答案:

对于一些 SQL 语句中含有 in 条件,需要迭代条件集合来生成,MyBatis 入参为数组类型或者 List、Map,使用 foreach 标签来实现 SQL 条件的迭代。使用 foreach 可指定一个集合,并指定开始和结束的字符,也可加入一个分隔符到迭代器中,并能够智能处理该分隔符,不会出现多余的分隔符。

 

6、说明 Mybatis 集合参数入参如何处理。

答案:无论 MyBatis 的入参是哪种参数类型,MyBatis 都会将参数放在一个 Map 中:

若入参为 List:默认“list”作为 key,该 List 即为 value

若入参为数组:默认“array”作为 key,该数组即为 value

若入参为 Map:键值不变通过 foreach 标签去实现 SQL 条件的迭代。

 

7、说出 3 个动态 SQL 的组合及其作用。

答案:

if+set:完成按条件更新操作

if+where:完成多条件查询

if+trim:完成多条件查询或更新操作,可替代 if+set 或 if+where

choose+when+otherwise:完成条件查询(多条件下,选择其一)

foreach:完成复杂查询,主要用于 in 条件查询中,迭代集合。

 

8、谈谈控制反转和依赖注入的区别和原理。

答案:

控制反转:创建对象实例的控制权从代码控制剥离到 IOC 容器控制。

依赖注入:创建对象实例时,为这个对象注入属性值或其它对象实例。

原理:以文件流读取配置文件,再通过反射创建对象并赋值。

 

9、什么是 AOP,以及 AOP 涉及的设计模式。

答案:

AOP(面向切面编程),简单地说就是在不改变原程序的基础上为代码段增加新的功能,对代码进行增强处理。它的设计思想来源于代理设计模式中的动态代理。

 

10、请简述在数据库事务中什么是脏读,并举例说明。

答案:

脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值