面试题汇总(Java基础)
2019-10-29 本文已影响0人
王勇1024
Timer执行任务会有什么缺点?
Timer执行定时任务只会创建一个线程。
Timer是基于绝对时间的调度机制,对系统时间敏感。
Timer存在线程泄露问题(Timer不捕获异常,当抛出一个未检查异常时线程将终止)。
深拷贝和浅拷贝区别是什么?
对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。
1、浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
== 和 equals 的区别是什么?
基本数据类型
他们之间的比较,应用双等号(==),比较的是他们的值。
复合数据类型(类)
,当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址
字符串比较
# s1 == s2
String s1 = "Monday";
String s2 = "Monday";
# s1 != s2
String s1 = "Monday";
String s2 = new String("Monday");
# s1 == s2
String s1 = "Monday";
String s2 = new String("Monday");
s2 = s2.intern();
浅拷贝
2、深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
深拷贝for、foreach和iterator的区别
- 使用 Iterator 的好处在于可以使用相同方式去遍历集合中元素,而不用考虑集合类的内部实现(只要它实现了 java.lang.Iterable 接口)
- 使用for/foreach如果在循环的过程中调用集合的remove()方法,就会导致循环出错
强引用、软引用、弱引用、虚引用
- 强引用所指向的对象在任何时候都不会被系统回收。JVM宁愿抛出OOM异常;
- 当堆使用率临近阈值时,才会去回收软引用对象,软引用可用于实现对内存敏感的Cache;
- 在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收;
- 当试图通过虚引用的get()方法取得引用对象时,总是返回null,虚引用的作用在用跟踪垃圾回收过程。