挑戰Java面試題複習第1天,堅持就是勝利

悟空非空也發表於2024-10-26

物件導向和麵向過程的區別
程序導向:

步驟分析:將問題分解為一系列步驟。
函式實現:用函式逐步實現這些步驟。
呼叫執行:在需要時呼叫這些函式。
高效能:適合對效能要求高的場合,如微控制器和嵌入式開發。
物件導向:

物件分解:將問題分解為多個物件。
行為描述:物件描述事物在問題解決過程中的行為。
特性:封裝、繼承、多型。
優點:易於維護、複用和擴充套件,可構建低耦合系統。
效能:相對程序導向,效能較低。
識別符號的命名規則
識別符號:

定義:程式中自定義的元素,如類名、方法名、變數名等。
命名規則(硬性要求):
組成:可包含字母、數字、$、_。
限制:不能以數字開頭。
避免:不得使用關鍵字。
命名規範(非硬性要求):

類名:首字母大寫,後續每個單詞首字母大寫(大駝峰式)。
變數名:首字母小寫,後續每個單詞首字母大寫(小駝峰式)。
方法名:與變數名規範相同。
自動裝箱與拆箱
裝箱:
定義:將基本資料型別自動轉換為對應的包裝器型別。
示例:int 轉換為 Integer。
方法:透過 Integer.valueOf(int) 實現。
拆箱:
定義:將包裝器型別自動轉換回對應的基本資料型別。
示例:Integer 轉換為 int。
方法:透過 Integer.intValue() 實現。
Java SE5之前的裝箱:
需要顯式使用 new 關鍵字建立包裝器型別例項。
示例:Integer i = new Integer(10);
Java SE5及之後的裝箱:
提供了自動裝箱特性,簡化了包裝器型別的建立。
示例:Integer i = 10;(自動呼叫 Integer.valueOf(int))
過載和重寫的區別
重寫(Override):

父子類關係:僅在子類與父類之間發生。
方法簽名一致:方法名、引數列表、返回型別(除子類方法返回型別是父類返回型別的子類外)必須與被重寫的方法相同。
訪問許可權:子類方法的訪問修飾符不能比父類方法的更嚴格。
異常限制:重寫的方法不能丟擲新的或更廣泛的檢查型異常。
過載(Overload):

多型性表現:是類中多型性的一種體現。
引數列表差異:要求同名方法的引數列表必須不同(可以是引數型別、個數或順序)。
返回型別:對返回值型別沒有限制,可以相同也可以不同,過載的判斷依據是引數列表而非返回型別。
equals與==的區別
== 運算子:

地址比較:比較兩個物件在記憶體中的地址是否相同。
物件引用:判斷兩個引用是否指向同一個物件。
型別要求:運算元必須型別相同或存在繼承關係。
數值比較:對於基本資料型別,如果值相等則比較結果為 true。
指標操作:本質上是比較指標地址。
equals 方法:

內容比較:比較兩個物件的內容是否相等。
繼承自 Object:所有類都繼承自 java.lang.Object 類,適用於所有物件。
預設行為:如果沒有重寫 equals 方法,它的行為與 == 相同。
空指標安全:使用 equals 比較時,可以避免 NullPointerException。
最佳實踐:在比較物件時推薦使用 equals 方法,尤其是在阿里程式碼規範中。
總結:

在比較物件是否相等時,應使用 equals 方法。
在比較常量時,將常量寫在前面,以避免可能的 NullPointerException。
推薦使用阿里程式碼規範,並使用阿里外掛來檢查和替換不合適的 == 使用。
Hashcode的作用
Java集合分為List和Set:

List:有序,允許重複。
Set:無序,不允許重複。
Set判斷元素存在性:

使用equals方法,但在大量元素時效率低。
雜湊演算法提升效率:
將集合劃分為多個儲存區域。
每個物件透過hashCode方法計算雜湊碼,確定儲存區域。
hashCode方法:

根據物件的記憶體地址計算出一個值。
集合新增新元素時,先透過hashCode方法定位儲存位置。
如果位置無元素,直接儲存;如果位置有元素,使用equals方法比較。
相同則不儲存,不同則尋找其他位置。
減少equals方法呼叫次數,提高效能。
String、StringBuffer和StringBuilder的區別
String 類要點:

不是基本資料型別,而是一個物件。
底層是 final 型別的字元陣列。
字串內容不可變,任何修改都會生成新的 String 物件。
欄位定義:private final char value[];
字串連線操作:

使用 + 運算子時,會隱式建立 StringBuilder 物件並呼叫 append 方法進行拼接。
StringBuilder 和 StringBuffer 要點:

兩者都繼承自 AbstractStringBuilder 抽象類。
底層都是可變字元陣列:char[] value;
適用於頻繁的字串操作。
執行緒安全:

StringBuffer 是執行緒安全的,方法加了同步鎖。
StringBuilder 非執行緒安全,沒有加同步鎖。

相關文章