CopyOnWriteArrayList的底层原理是怎样的
- CopyOnWriteArrayList内部是用数组实现的,添加元素会复制一个新的数组,写操作在新的数组上进行,读操作在原数组上进行。
- 写操作会加锁,防止出现并发写入丢失数据的问题。
- 写操作结束之后,会把原数组指向新数组。
- CopyOnWriteArrayList允许写操作时来读取数据,大大提高了读的性能,适合读多写少的应用场景。
Java中的异常体系是怎样的
- Java中的异常都来自顶级父类Throwable。
- Throwable下有两个子类Exception和Error。
- Error表示很严重的错误,通常出现这种错误时,仅仅通过程序自己是解决不了的,也不建议去捕获这些Error,因为程序可能已经运行不了了。
- Exception表示异常,程序出现Exception时,可以靠程序自己来解决的。
- Exception的子类通常又可以分为RunTimeException和非RunTimeException两类
- RunTimeException表示运行期异常,这类异常是在代码运行过程中抛出的,是非检查的异常,可以捕获,也可以不处理。
- 非RunTimeException表示非运行期异常,也就是检查异常,是必须处理的异常,否则程序不能运行。
深拷贝和浅拷贝
深拷贝和浅拷贝指对象的拷贝,一个对象中存在两种类型的属性,一种是基本数据类型,一种是实例对象的引用。
- 浅拷贝是指,只会拷贝基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所指向的对象,内部的类属性指向的是同一个对象
- 深拷贝是指,既会拷贝基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制,内部的属性指向的不是同一个对象。
Java死锁如何避免
造成死锁的原因:
- 一个资源每次只能被一个线程使用
- 一个线程在阻塞等待某个资源时,不释放已占有的资源
- 一个线程已经获得的资源,在未使用完之前,不能被强行剥夺
- 若干线程形成头尾相接的循环等待资源关系
如果想要避免死锁,只需要不满足其中某一个条件即可,前三个条件是作为锁要符合的条件,所以避免死锁就需要打破第4个条件,不出现循环等待锁的条件。
Java中有哪些类加载器
JDK自带的三个类加载器:Bootstrap ClassLoader、ExtClassLoader、AppClassLoader
- Bootstrap ClassLoader是ExtClassLoader的父类加载器,默认负责加载%JAVA_HOME%/lib下的jar包和class文件。
- ExtClassLoader是AppClassLoader的父类加载器,负责加载%JAVA_HOME%/lib/ext文件夹下的jar包和class类。
- AppClassLoader是自定义类加载器的父类,负责加载classpath下的类文件。
备战秋招的第二天!!
生活坏到一定程度就会好起来,因为它无法更坏,努力过后,才知道许多事情,坚持坚持,就过来了。