个人评价
这次面试算是对我基础知识空缺的排查,有很多小知识点是我没有去复习到的,也是一次比较愉快的面试。
1.在java中有哪些数据属于共享变量?(共享变量怎么创建)
共享变量的形式还是很多的,首先就是今天变量进行一个共享变量。当我们需要将某个变量变成一个共享变量的时候需要使用Voliate进行修饰,使其变成共享变量。
2.多线程进行操作数据时如果不上锁为什么共享变量中的数据会被该的乱七八糟吗?
举例子:两个线程同时去操作一个类中的变量,就比如说对应的变量++,当两个线程进行竞争的时候,二者可能获取的数据都是对方为修改的数据,此时就会出现++缺失的情况。
3.JVM加载class的时候卸载class的条件是什么?
1.当该类的所有实例已经被全部进行GC了,这时候在JVM中不存在class的实例。
2.当该类的.class没有被任何的引用,也就是我们不能通过放射来获取对应的实例。
3.当该类的classLoader被GC了。
4.软引用,弱引用,虚引用在什么时候会使用呢?
软引用(softRefrence):当我们内存不足的时候,如果检查到当前的软引用的时候,就会进行回收。主要的应用场景就是做缓存,当内存不足的时候就会清除一点缓存。
弱引用(weakRefrence):即使在内存充裕的情况下,如果检查到弱引用的时候,就会对其进行回收。主要的应用场景就是解决ThreadLocal内存泄漏问题。
虚引用(phantoms Refrence):不会对对象的生命周期有影响,我们无法从该引用中获取对象实例,主要就是在垃圾回收前的做一些列的操作,就比如系统通知。
4.ThreadLocal中ThreadLocalMap的entry为什么使用弱引用来解决呢?
使用弱引用作为ThreadLocalMap的key在进行垃圾回收的时候呢,虽然会导致key为null出现内存泄漏的问题,但是呢如果key使用强引用,key设置为null也会出现内存泄漏的问题。
相比于强引用,当key为弱引用的时候,当我们进行垃圾回收的时候,ThreadLocal的实例就会进行回收,虽然vlaue在还存在,但是呢,在set和get方法中有回收无效key的操作。
5.什么情况下,强引用会被回收呢?
1.在执行方法的时候,我们会创建一些局部变量,在执行完这个方法后就会将该引用进行回收。
2.使用可达性分析算法无法在GC中找到对应的对象,也就是没有被引用,这时候就会被回收。
6.数据的隔离级别中可重复读有什么缺点?
1.无法解决幻读的问题,当一个事务对某个范围进行查询,另外一个事务对当前范围中的数据进行插入操作,那事务一在做查询的时候,查询的结果就会不一样,最终出现幻读的情况。
2.因为可重复读在多次进行读取的时候使用的都是同一个readView,我们就无法获取刚更新的数据。
7.介绍一下实习项目中业务的难点?
合并写请求。