這些可都是乾貨,Java面試題我都告訴你了

馬上就過年了,過完年是不是有好朋友也要投身找工作的大軍中了,想成為程序員,但是心裡沒底?那你看看下面的這些題吧。

1.Java的數據結構你用過那些?map與set的本質區別是什麼

數據結構:是指相互之間存在一種或多種特定關係的數據元素的集合。

依據邏輯關係,數據結構分為:線性和非線性數據結構。

2.ArrayList和LinkedList的區別?(鏈表和數組的優缺點)

答:ArrayList是一個動態的數組結構,而LinkedList是雙向鏈表結構;存取數據的時候,ArrayList更適合按位隨機存取,而LinkedList更適合順序讀存取;插入/刪除數據時,ArrayList的開銷就比LinkedList更大,因為對於ArrayList,插入/刪除一個數據時需要移動其後所有數據,而LinkedList只需要修改幾個指針即可。

3.HashMap是怎樣的結構?工作原理是什麼?退化成鏈表解決方法?

答:HashMap的本質仍然是數組,不過數組中存儲的不是數據,而是一個鏈表的頭節點。所以準確的說,其實現就是鏈表數組。HashMap中保存的是一個鍵值對,插入對象時必須提供一個鍵對象;查找對象時必須給定一個鍵對象(因此必須記住鍵)。鍵對象時不允許重複的,但是允許null空鍵的存在。

HashMap插入對象時,根據給定的鍵key計算hashcode,然後再與數組長度進行求餘運算得到數組下標。然後與該位置上的鏈表中已存儲的鍵進行比較,對於已存在的鍵,則覆蓋;對於不存在的鍵,則添加到鏈表尾。

4.使用StringBuffer類與String類進行字符串連接時有何區別?

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據。

5.final, finally, finalize的區別。

final 用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。

6.數組有沒有length()這個方法? String有沒有length()這個方法?

數組沒有length()這個方法,有length的屬性。String有length()這個方法。

7.Overload和Override的區別。

override(重寫)

1)方法名、參數、返回值相同。

2)子類方法不能縮小父類方法的訪問權限。

3)子類方法不能拋出比父類方法更多的異常(但子類方法可以不拋出異常)。

4)存在於父類和子類之間。

5)方法被定義為final不能被重寫。

overload(重載)

1)參數類型、個數、順序至少有一個不相同。

2)不能重載只有返回值不同的方法名。

3)存在於父類和子類、同類中。

8.Java多態的實現(繼承、重載、覆蓋)

多態可分為:

1)編譯多態:主要是體現在重載,系統在編譯時就能確定調用重載函數的哪個版本。

2)運行多態:主要體現在OO設計的繼承性上,子類的對象也是父類的對象,即上溯造型,所以子類對象可以作為父類對象使用,父類的對象變量可以指向子類對象。因此通過一個父類發出的方法調用可能執行的是方法在父類中的實現,也可能是某個子類中的實現,它是由運行時刻具體的對象類型決定的。


分享到:


相關文章: