1. 程式人生 > >我的面試題

我的面試題

發的 sync shm size 動態 trap implement 類加載器 記錄

最近在準備java的筆試,在這裏記錄一下遇到的筆試題中的知識點

1.關於java classloader

  A java默認提供的三個ClassLoader 是 BootStrap ClassLoader,Extension ClassLoader,App ClassLoader

  B ClassLoader 使用的是雙親委托模型來搜索類的

  C JVM在判斷兩個class是否相同時,只用判定類名是否相同就可以了,與類加載器無關

  錯誤:JVM在判斷兩個class是否相同時,不僅要判斷兩個類名是否相同,而且要判斷是否是由同一個類加載器實例加載的。

  D ClassLoader就是用力啊動態加載class文件到內存中的。

2.技術分享圖片

技術分享圖片

解析:記住wait必須要進行異常捕獲,記住調用wait或者notify方法必須采用當前鎖調用,即必須采用synchronized中的對象

這題有兩個錯誤的地方,第一個錯誤是 wait() 方法要以 try/catch 包覆,或是擲出 InterruptedException 才行
因此答案就是因為缺少例外捕捉的 InterruptedException

第二個錯誤的地方是, synchronized 的目標與 wait() 方法的物件不相同,會有 IllegalMonitorStateException ,不過 InterruptedException 會先出現,所以這不是答案。

(如果在執行wait() 與 notify/notifyAll() 之前沒有獲得相應的對象鎖,就會拋出:java.lang.IllegalMonitorStateException異常。)

3.技術分享圖片

解析:

HashTable和HashMap區別

①繼承不同。

public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map

Hashtable 中的方法是同步的,而HashMap中的方法在缺省情況下是非同步的。在多線程並發的環境下,可以直接使用Hashtable,但是要使用HashMap的話就要自己增加同步處理了。

Hashtable中,key和value都不允許出現null值。

在HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示 HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應該用containsKey()方法來判斷。

④兩個遍歷方式的內部實現上不同。

Hashtable、HashMap都使用了 Iterator。而由於歷史原因,Hashtable還使用了Enumeration的方式 。

哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。

Hashtable和HashMap它們兩個內部實現方式的數組的初始大小和擴容的方式。HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。

4.

技術分享圖片

1、null、true、false 是 Java 中的顯式常量值,並不是關鍵字 或 保留字 2、sizeof 是 C/C++ 中的方法,Java 中並沒有這個方法,也沒有該關鍵字 或 保留字 3、implements 和 instanceof 都是 Java 中的關鍵字

我的面試題