架构师面试问题指导性框架
1.Java基础问题
1.1.所有Java类的基类是什么?
java.lang.Object
1.2.Object类中有哪些方法?(说出三个)
// 对象相关
getClass()
clone() - protected
toString()
equals(Object)
hashCode()
// 线程相关
notify()
notifyAll()
wait([long[, int]])
// GC相关
finalize()
1.3.equals和==的差别?
equals为对象相等。
==代表引用相等(即同一个对象)。
Object.equals的实现和==相同,但子类可以覆盖此方法,以便实现不同的比较算法,例如String.equals逐字比较。
1.4.hashCode的作用
在HashMap或HashSet中,作为杂凑值,以提高查的性能。
Object.hashCode实际上返回的是对象的引用地址,但子类可以覆盖此方法,实现不同的杂凑算法。
1.5.hashCode和equals方法的关系
如果两个对象equals相等,那么hashCode必须相等。
反之,则不一定:hashCode相等,可能equals不等。但这个概率不能太高,否则将增加HashMap的冲突可能性,而降低查的效率。
1.6.如何停止一个线程?
设置一个标记,让线程自行停止。必要时,主线程执行join方法等待子线程完全退出。
publicclass TestThread {
privatebooleanexit = false;
privatevoid go() throws Exception {
Thread thread = new Thread(new MyRunnable(), "my_thread");
System.out.println("Press Enter ");
thread.start();
System.in.read();
exit = true;
thread.join();
}
privateclass MyRunnable implements Runnable {
publicvoid run() {
jsessionidfor (int i = 1; !exit; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
publicstaticvoid main(String[] args) throws Exception {
new TestThread().go();
}
}
事实上,Thread自己有interrupted标志,可以通过Thread.interrupted()或某些方法的InterruptedException来捕获中断标志。程序可改进为:
publicclass TestThread {
privatebooleanexit = false;
privatevoid go() throws Exception {
……
exit = true;
thread.interrupt();
thread.join();
}
privateclass MyRunnable implements Runnable {
publicvoid run() {
for (int i = 1; !exit; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论