面试题记录

第一题:深入理解Integer对象的拆箱和装箱

1.Integer类型的和new Integer()类型的进行比较,永远都是false。

2.如果一个是Integer类型的,一个是int类型的,这两个类型进行比较,只要是数值相等就肯定相等。

3.只要两个Integer对象都是new出来的Integer对象,比较一律按照对象进行处理。

4.也就是最关键的,如果两个都是Integer类型的进行比较的话,那么会先把[-128,127]的都当成一个int常量进行比较,如果两个Integer类型的数超过这个范围,其实就是相当于还需要按照对象进行比较。

第二题:说一说什么是深拷贝,什么是浅拷贝,怎样实现深拷贝

浅拷贝:需要被拷贝的对象A中没有包含对象B,紧紧是单纯的变量和方法或者被拷贝对象A中包含了对象B,但是拷贝完的对象A1是一个分配了新的内存的全新对象,而B1只是引用了原对象B的地址。

深拷贝:拷贝完的对象A1和B1都是分配了新的内存地址的全新对象,下面有例为证。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JmO54mZ6Zi_54-C6Ium57uD57yW56iL,size_20,color_FFFFFF,t_70,g_se,x_16

 上图就算是一个浅拷贝

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JmO54mZ6Zi_54-C6Ium57uD57yW56iL,size_20,color_FFFFFF,t_70,g_se,x_16

 上图是一个深拷贝

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JmO54mZ6Zi_54-C6Ium57uD57yW56iL,size_20,color_FFFFFF,t_70,g_se,x_16

 测试证明

总结:以上实现深拷贝的方法之一,实现Cloneable接口,重写clone方法,但是这种深拷贝方式有个弊端,就是包含了另一个对象的类要层层实现Cloneable方法。所以采用第二种方法:序列化方式更好。

第三题:关于String、StringBuffer、StringBuilder的线程安全和运营效率。

String和StringBuilder是线程不安全,String为字符串常量,一旦定义就不可改变。StringBuilder为字符串变量,StringBuffer是线程安全的字符串变量,因为它的方法全都用"synchronized"关键字修饰。他们的运行效率StringBuilder> StringBuffer>String

第四题:MyBatis的缓存

MyBatis缓存分为一级缓存和二级缓存,一级缓存为MyBatis的默认缓存,不需要手动开启,同一个sqlSession下执行相同的查询条件多次,则第二次查询会从缓存中读取。

会使一级缓存失效的原因有4种:

①不同的SqlSession对应不同的一级缓存

②同一个SqlSession但是查询条件不同

③同一个SqlSession两次查询期间执行了任何一次增删改操作

④同一个SqlSession两次查询期间手动清空了缓存

二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被缓存,此后若再次执行相同的查询语句,结果就会从缓存中获取。

二级缓存开启的条件:

①在核心配置文件中,设置全局配置属性catchEnable="true",一般默认为true,所以不需要设置

②在映射文件中设置标签< cache/>

③二级缓存必须在SqlSession关闭或者提交之后有效

④查询的数据所转换的实体类类型必须实现序列化

使二级缓存失效的情况:两次查询之间执行了任意的增删改,会使一级和二级缓存同事失效。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值