Java高级编程考核
什么是双亲委派模型?为什么要使用双亲委派模型?
双亲委托机制是Java类加载器的一种工作机制,通过层级加载和委托父类加载器来加载类,确保类的唯一性、安全性和模块化。
首先应用类加载器会判断该类是否加载过,如果没有就交给拓展类加载器,拓展类加载器先判断是否被加载过,如果没有,就交给引导类加载器,之后引导类加载器判断自己是否可以加载,如果可以加载就加载,如果不行就交给加载类加载器,如果可以加载就加载,如果不可以就交给应用类加载器,如果应用类加载器可以加载就加载,如果不可以就抛出异常。
try-catch块中有return语句,那么发生异常,是执行return还是finally?
如果发生异常,先执行finally语句,之后再执行return,
在执行中,有finally语句出现就一定会执行finally代码块的语句,并且如果finally代码块中有return语句,一定会返回finally代码块中的return结果,同时结束代码块,不会再去执行catch中的语句
JDK8中HashMap的数据结构是什么?什么时候扩容?
在JDK8中,HashMap的数据结构是数组和链表的组合,即使用数组存储数据,当发生哈希冲突时,使用链表来解决冲突。当链表长度超过一定阈值时,会将链表转换为红黑树,以提高查询效率。
HashMap在什么时候扩容取决于两个因素:负载因子(load factor)和桶的数量(capacity)。负载因子是一个介于0和1之间的值,表示HashMap中已使用的桶的比例。当HashMap中的键值对数量超过负载因子乘以桶的数量时,就会触发扩容操作。
默认情况下,JDK 8中HashMap的负载因子为0.75,桶的数量为16。当HashMap中的键值对数量超过12(0.75 * 16)时,就会自动触发扩容操作。扩容操作会创建一个新的更大的数组,并将所有的键值对重新分配到新的桶中,以减少链表的长度,提高性能。
Java创建对象有几种方式?
1.克隆的方法 clone()
2.new关键字创建 new 对象
3.反序列化的时候
4.反射机制创建对象 newInstance()
hashCode()的作用
hashCode()方法是Object类中的一个方法,它返回对象的哈希码。哈希码用于在哈希表等数据结构中快速定位对象。hashCode()方法的作用是提供一个对象的哈希码,以便在需要使用哈希码的场景中能够高效地进行操作,如在HashMap中进行键值对的存储和查找。
BIO,NIO,AIO是什么意思,各自有什么区别?
BIO(Blocking I/O)是传统的阻塞式I/O模型,它使用同步阻塞的方式进行数据的读写,即当一个线程执行I/O操作时,会阻塞其他线程的执行,直到I/O操作完成。
NIO(Non-blocking I/O)是一种非阻塞式I/O模型,它使用选择器(Selector)和通道(Channel)来实现非阻塞的读写操作。通过选择器可以同时监听多个通道的事件,当某个通道有数据可读或可写时,才会进行相应的读写操作,不会阻塞其他通道的操作。
AIO(Asynchronous I/O)是一种异步I/O模型,它使用回调机制来实现异步的读写操作。当一个异步操作完成时,会通过回调函数来通知应用程序,不需要应用程序主动等待操作完成。
既然编译器要把泛型擦除,那为什么还要用泛型呢?用Object代替是否可以?
泛型在编译器中会被擦除,但在编译期间会进行类型检查,可以提前发现类型错误。使用泛型可以使代码更加安全和可读,可以避免类型转换错误,并提供编译期间的类型检查。如果使用Object代替泛型,会失去类型安全性,并且需要进行强制类型转换,容易引发运行时错误。
请简述HashMap 和 HashTable 区别?
1.线程安全性:HashMap是非线程安全的,而HashTable是线程安全的。HashTable通过使用synchronized关键字来保证线程安全,但这也导致了性能上的损失。
2.null键和null值:HashMap允许键和值都为null,而HashTable不允许键和值为null。
3.迭代器:HashMap的迭代器是fail-fast的,即在迭代过程中如果其他线程对HashMap进行了结构上的修改,会抛出ConcurrentModificationException异常。而HashTable的迭代器是fail-safe的,不会抛出异常,但可能会返回旧的数据。
反射机制的应用场景有哪些?
1.通过反射可以获取类、方法、字段等的注解信息,并根据注解信息进行相应的处理。
2.加载jar包或class,利用反射稳定加载
3.通过反射可以获取私有方法和字段,并进行单元测试。
ArrayList 和 LinkedList 的区别有哪些
1.ArrayList是有数组实现的,
LinkedList的本质是双向链表。
2.ArrayList由于数组的问题,增删慢而查找快,
LinkedList由于链表的问题,增删快而查找慢。