JAVA面试题

一、JAVA概述


二、变量、数据类型和运算符


三、流程控制


四、数组和字符串及包装类

1.String,StringBuffer与StringBuilder

① String的属性都是final类型的,故String的长度是不可变的而其它两个则都是可变的,可用append()添加;通常操作少量的数据时用String
② StringBuffer是线程安全的,但效率相对较低,通常在多线程中操作大量数据用;而StringBuilder则是线程不安全的,效率高,通常在单线程中操作大量数据时用


五、IO流


六、异常处理与内存管理

1.强、弱、软、虚引用

(1)强引用(StrongReference):就是使用最普遍的引用,一个对象引用另一个对象,垃圾回收就不会回收
(2)软引用(SoftReference):当内存不足的时候会被回收
(3)弱引用(WeakReference):即时内存充足,只要被GC看到了就会被回收
(4)虚引用:没用过,貌似主要是监测GC


七、类与对象

1.Java浅拷贝与深拷贝的区别?

① 浅拷贝:默认拷贝方式,只拷贝基本数据类型变量,不拷贝引用数据类型变量,只是拷贝的引用变量指向的对象相同
② 深拷贝:两种数据类型的变量都拷贝一份新的,通常要实现深拷贝需要实现Cloneable接口并重写对象的clone方法(继承自Object),由于性能花销较大,某些情况下强制使用浅拷贝(如,数组的clone()方法、Arrays.copyOf()方法等)


八、继承与多态

1.java中实现多态的机制是什么?

多态靠的是父类或接口定义的引用变量指向子类对象或具体实现类的实例对象;而程序运行时所调用的方法是在运行期才动态绑定的,即调用的方法是具体子类或实现类的方法。


九、抽象类与接口

1.抽象类与接口的区别?

 接口往往是一种规范,实现分离降低耦合而抽象类则是一种模版比啊是待完善
(1)抽象类是用abstract关键字,接口是用interface关键字
(2)接口的成员变量必须是public static final类型的,而抽象类则随意
(3)类可以有多实现但只能单继承
(4)抽象类中可以有非抽象方法而接口则全部是抽象方法
(5)抽象类可以有构造和静态代码块,而接口则不能


十、线程

1.wait和sleep的区别?

wait:Object类的方法,表示对象锁,锁定方法不让继续进行,在执行notify方法后会释放锁继续进行
sleep:Thread线程类的方法表示线程睡眠,一般会有睡眠时间,到达时间后线程继续运行


十一、集合类

1.ArrayList和LinkedList的区别

(1)ArrayList是基于数组的数据结构,而LinkedList是基于链表
(2)随机访问get set ArrayList要优于LinkedList,LinkedList要移动指针
(3)add和remove操作LinkedList更优,ArrayList要移动数据

你可能感兴趣的:(JAVA面试题)