天天看點

java_SE基礎容易被忽略的面試題

)運作時異常,非運作時異常。

運作時異常可進行處理,也可不進行處理。非運作時異常必須進行處理(可以通過try-catch語句處理,也可通過關鍵字throws抛出異常)。非運作時異常繼承自Exception但不繼承自RuntimeException。

2)equals()方法與“==”的差別

(1)對于字元串變量以及基本資料類型的包裝類型來說:“==”比較兩變量的引用是否相等,即變量在記憶體的首位址是否相等。“equals()”比較實體(記憶體空間)的内容是否相等,因為String類中重新定義了equals()方法,并且是用來比較其值得而不是記憶體位址。注意:如果 StringBuffer s1=new StringBuffer(“a”); StringBuffer s2=new StringBuffer(“a”); s1.equals(s2);為false,因為StringBuffer類中沒有重新定義的equals()方法,是以equals()方法來自于Object類,而Object類的equals()方法是用來比較位址的,是以為false。

(2)對于非字元串變量來說:“==”和“equals()”的作用是相同的,都是用來比較對象在堆記憶體中的首位址,即用來比較兩個引用變量是否指向同一個實體(記憶體空間)。注意:(1)如果是基本資料類型比較隻能用“==”不能用“equals()”。(2)對于基本資料類型的包裝類型“==”比較的是實體的引用,“equals()”比較的是實體的内容。

3)是否可以繼承String類?

String類是final類故不可以繼承。

4)構造器Constructor是否可被override?

構造器Constructor不能被繼承,是以不能被override(重寫),但可以被overload(重載)。

5)HashMap和Hashtable的差別。

1.HashMap是Hashtable的輕量級實作,效率更高。

2.Hashtable是線程安全的,HashMap是非線程安全的,即前者中的方法有用synchronized修飾,後者沒有。

3.HashMap允許空(null)鍵值(key),而Hashtable不允許。

4.Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實作。

5.HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

6)GC是什麼? 為什麼要有GC?

GC是垃圾收集的意思(Garbage Collection),(記憶體處理是程式設計人員容易出現問題的地方,忘記或者錯誤的記憶體回收會導緻程式或系統的不穩定甚至崩潰)Java提供的GC功能可以 自動監測對象是否超過作用域進而達到自動回收記憶體的目的,避免記憶體溢出造成的一系列問題。Java語言沒有提供釋放已配置設定記憶體的顯示操作方法。

7)同步和異步有何異同,在什麼情況下分别使用他們?舉例說明。

(1)同步(synchronized)和異步(asynchronized)是對于多線程(multi-threading)而言的

同步可防止并發 主要出于資料安全的考慮。對于線程中的共享資料,必須進行同步存取。

(2)異步允許并發。當應用程式在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程式等待方法的傳回時,就應該使用異步程式設計。

建立了幾個String Object ?   

兩個,堆區中一個,常量池中一個。

String a="xyz"; 首先會到常量池中去查找,如果存在就不再配置設定,如果不存在就配置設定,常量池中的資料

是在編譯期指派的,也就是生成class檔案時就把它放到常量池裡了。

9)簡述synchronized和java.util.concurrent.locks.Lock的異同 ?

主要相同點:Lock能完成synchronized所實作的所有功能

主要不同點:Lock有比synchronized更精确的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程式員手工釋放,并且必須在finally從句中釋放。

想要學習Java開發的同學,可以參考千鋒成都Java教育訓練班提供的學習大綱;

10)多線程有幾種實作方法,都是什麼? 同步有幾種實作方法,都是什麼?

多線程有兩種實作方法,分别是繼承Thread類與實作Runnable接口。

實作同步也有兩種,分别為使用同步方法和使用同步塊。同步方法就是在方法傳回類型後面加上synchronized,如:public void synchronized add(){},同步塊就是直接寫:synchronized(需要同步的對象){}

11)switch是否能作用在byte上? 是否能作用在long上? 是否能作用在String上?

switch(expr1)中,expr1是一個整數表達式。是以傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。long, String 都不能作用于swtich.