剑指Offer —— 面试题(二)

本文探讨了CopyOnWriteArrayList的并发原理,其利用数组复制实现写时复制,确保读写安全。同时,介绍了Java异常体系,包括Exception和Error的区别。接着讲解了深拷贝与浅拷贝的概念,以及如何预防Java中的死锁问题。最后,提到了Java的类加载器,包括BootstrapClassLoader、ExtClassLoader和AppClassLoader的角色。
摘要由CSDN通过智能技术生成

CopyOnWriteArrayList的底层原理是怎样的

  • CopyOnWriteArrayList内部是用数组实现的,添加元素会复制一个新的数组,写操作在新的数组上进行,读操作在原数组上进行。
  • 写操作会加锁,防止出现并发写入丢失数据的问题。
  • 写操作结束之后,会把原数组指向新数组。
  • CopyOnWriteArrayList允许写操作时来读取数据,大大提高了读的性能,适合读多写少的应用场景。

Java中的异常体系是怎样的

  • Java中的异常都来自顶级父类Throwable。
  • Throwable下有两个子类Exception和Error。
  • Error表示很严重的错误,通常出现这种错误时,仅仅通过程序自己是解决不了的,也不建议去捕获这些Error,因为程序可能已经运行不了了。
  • Exception表示异常,程序出现Exception时,可以靠程序自己来解决的。
  • Exception的子类通常又可以分为RunTimeException和非RunTimeException两类
  • RunTimeException表示运行期异常,这类异常是在代码运行过程中抛出的,是非检查的异常,可以捕获,也可以不处理。
  • 非RunTimeException表示非运行期异常,也就是检查异常,是必须处理的异常,否则程序不能运行。

深拷贝和浅拷贝

深拷贝和浅拷贝指对象的拷贝,一个对象中存在两种类型的属性,一种是基本数据类型,一种是实例对象的引用。

  • 浅拷贝是指,只会拷贝基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所指向的对象,内部的类属性指向的是同一个对象
  • 深拷贝是指,既会拷贝基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制,内部的属性指向的不是同一个对象。

Java死锁如何避免

造成死锁的原因:

  1. 一个资源每次只能被一个线程使用
  2. 一个线程在阻塞等待某个资源时,不释放已占有的资源
  3. 一个线程已经获得的资源,在未使用完之前,不能被强行剥夺
  4. 若干线程形成头尾相接的循环等待资源关系

如果想要避免死锁,只需要不满足其中某一个条件即可,前三个条件是作为锁要符合的条件,所以避免死锁就需要打破第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下的类文件。

备战秋招的第二天!!

生活坏到一定程度就会好起来,因为它无法更坏,努力过后,才知道许多事情,坚持坚持,就过来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值