Java面试题及答案(一)
目录
1.String,Stringbuffer,StringBuild 的区别
3.讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候他们的执行顺序
4.用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理是什么,比如储存方式,hashcode,扩容,默认容量等
6.抽象类和接口的区别,类可以继承多个类吗,接口可以继承多个接口吗,类可以实现多个接口吗
8.讲讲你理解的nio和bio的区别是啥,谈谈reactor模型
10.反射中,Class.forName和ClassLoader的区别
1.String,Stringbuffer,StringBuild 的区别
String是final类不能被继承,字符串常量,而StringBuilder和StringBuffer均为字符串变量
运算速度(通常情况下):StringBuilder>StringBuffer>String
线程安全:stringBuilder非线程安全,该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)StringBuffer中大部分方法由synchronized关键字修饰
String:适用于少量的字符串操作。
StringBuilder:适用于单线程下在字符串缓冲区进行大量操作。
StringBuffer:适用于多线程下在字符串缓冲区进行大量操作。
2.ArrayList和LinkedList有什么区别
1、数据结构不同:ArrayList是基于Array(动态数组)的数据结构,LinkedList是基于Link(链表)的数据结构。
2、效率不同:
(1)随机遍历访问:linkedlist的性能要低于arraylist.
因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。查找某个元素的时间复杂度是O(n)。而ArrayList查找某个元素的时间复杂度是O(1)
(2)增删效率:linkedlist的增删要优于arraylist
因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动
3、内存消耗不同
LinkedList比ArrayList更占内存,因为 ArrayList 的每个索引的位置是实际的数据,而 LinkedList 中的每个节点中存储的是实际的数据和前后节点的位置 ( 一个 LinkedList 实例存储了两个值: Node<E> first 和 Node<E> last 分别表示链表的其实节点和尾节点,每个 Node 实例存储了三个值: E item,Node next,Node pre) 。
3.讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当new的时候他们的执行顺序
-
没有继承关系
- 静态字段
- 静态构造方法
- 实例字段
- 实例构造方法
-
有继承关系
- 子类的静态字段
- 子类的静态构造方法
- 子类的实例字段
- 父类的静态字段
- 父类的静态构造方法
- 父类的实例字段
- 父类的实例构造方法
- 子类的实例构造方法