2019年228道Java中高階面試題(8),你會的有多少?

程式設計師追風發表於2019-12-16

2019年Java面試題中高階系列228道

Java面試題(一)

第一篇更新1~20題的答案解析
第二篇更新21~50題答案解析
第三篇更新51~95題答案解析

Java面試題(二)

第四篇更新1~20題答案解析
第五篇更新21~50題答案解析
第六篇更新51~80題答案解析
第七篇更新81~115題答案解析
2019年228道Java中高階面試題(8),你會的有多少?

Java面試題(二)

116、什麼時候使用訪問者模式?
117、什麼時候使用組合模式?
118、繼承和組合之間有什麼不同?
119、描述 Java 中的過載和重寫?
120、Java 中,巢狀公共靜態類與頂級類有什麼不同?
121、 OOP 中的 組合、聚合和關聯有什麼區別?
122、給我一個符合開閉原則的設計模式的例子?
123、抽象工廠模式和原型模式之間的區別?
125、巢狀靜態類與頂級類有什麼區別?
126、你能寫出一個正規表示式來判斷一個字串是否是一個數字嗎?
127、Java 中,受檢查異常 和 不受檢查異常的區別?
128、Java 中,throw 和 throws 有什麼區別
129、Java 中,Serializable 與 Externalizable 的區別?
130、Java 中,DOM 和 SAX 解析器有什麼不同?
131、說出 JDK 1.7 中的三個新特性?
132、說出 5 個 JDK 1.8 引入的新特性?
133、Java 中,Maven 和 ANT 有什麼區別?
2019年228道Java中高階面試題(8),你會的有多少?
本次更新116~133題的答案解析

116、什麼時候使用訪問者模式?

訪問者模式用於解決在類的繼承層次上增加操作,但是不直接與之關聯。這種模式採用雙派發的形式來增加中間層。

117、什麼時候使用組合模式?

組合模式使用樹結構來展示部分與整體繼承關係。它允許客戶端採用統一的形式來對待單個物件和物件容器。當你想要展示物件這種部分與整體的繼承關係時採用組合模式。

118、繼承和組合之間有什麼不同?

雖然兩種都可以實現程式碼複用,但是組合比繼承共靈活,因為組合允許你在執行時選擇不同的實現。用組合實現的程式碼也比繼承測試起來更加簡單。

119、描述 Java 中的過載和重寫?

過載和重寫都允許你用相同的名稱來實現不同的功能,但是過載是編譯時活動,而重寫是執行時活動。你可以在同一個類中過載方法,但是隻能在子類中重寫方法。重寫必須要有繼承。

120、Java 中,巢狀公共靜態類與頂級類有什麼不同?

類的內部可以有多個巢狀公共靜態類,但是一個 Java 原始檔只能有一個頂級公共類,並且頂級公共類的名稱與原始檔名稱必須一致。

121、 OOP 中的 組合、聚合和關聯有什麼區別?

如果兩個物件彼此有關係,就說他們是彼此相關聯的。組合和聚合是物件導向中的兩種形式的關聯。組合是一種比聚合更強力的關聯。組合中,一個物件是另一個的擁有者,而聚合則是指一個物件使用另一個物件。如果物件 A 是由物件 B組合的,則 A 不存在的話,B 一定不存在,但是如果 A 物件聚合了一個物件 B,則即使 A 不存在了,B 也可以單獨存在。

122、給我一個符合開閉原則的設計模式的例子?

開閉原則要求你的程式碼對擴充套件開放,對修改關閉。這個意思就是說,如果你想增加一個新的功能,你可以很容易的在不改變已測試過的程式碼的前提下增加新的程式碼。有好幾個設計模式是基於開閉原則的,如策略模式,如果你需要一個新的策略,只需要實現介面,增加配置,不需要改變核心邏輯。一個正在工作的例子是Collections.sort() 方法,這就是基於策略模式,遵循開閉原則的,你不需為新的物件修改 sort() 方法,你需要做的僅僅是實現你自己的 Comparator 介面。

123、抽象工廠模式和原型模式之間的區別?

抽象工廠模式:通常由工廠方法模式來實現。但一個工廠中往往含有多個工廠方法生成一系列的產品。這個模式強調的是客戶程式碼一次保證只使用一個系列的產品。當要切換為另一個系列的產品,換一個工廠類即可。原型模式:工廠方法的最大缺點就是,對應一個繼承體系的產品類,要有一個同樣複雜的工廠類的繼承體系。我們可以把工廠類中的工廠方法放到產品類自身之中嗎?如果這樣的話,就可以將兩個繼承體系為一個。這也就是原型模式的思想,原型模式中的工廠方法為 clone,它會返回一個拷貝(可以是淺拷貝,也可以是深拷貝,由設計者決定)。為了保證使用者程式碼中到時可以通過指標呼叫 clone 來動態繫結地生成所需的具體的類。這些原型物件必須事先構造好。原型模式想對工廠方法模式的另一個好處是,拷貝的效率一般對構造的效率要高。

124、什麼時候使用享元模式?

享元模式通過共享物件來避免建立太多的物件。為了使用享元模式,你需要確保你的物件是不可變的,這樣你才能安全的共享。JDK 中 String 池、Integer 池以及 Long 池都是很好的使用了享元模式的例子。

125、巢狀靜態類與頂級類有什麼區別?

一個公共的頂級類的原始檔名稱與類名相同,而巢狀靜態類沒有這個要求。一個巢狀類位於頂級類內部,需要使用頂級類的名稱來引用巢狀靜態類,如HashMap.Entry 是一個巢狀靜態類,HashMap 是一個頂級類,Entry 是一個巢狀靜態類。

126、你能寫出一個正規表示式來判斷一個字串是否是一個數字嗎?

一個數字字串,只能包含數字,如 0 到 9 以及 +、- 開頭,通過這個資訊,你可以下一個如下的正規表示式來判斷給定的字串是不是數字。 首先要 import java.util.regex.Pattern 和 java.util.regex.Matcher
public Boolean isNumeric(String str){
	Pattern pattern = Pattern.compile("[0-9]*");
	Matcher isNum = pattern.matcher(str);
	if( !isNum.matches() ){
		return false;
	}
	return true;
}複製程式碼

127、Java 中,受檢查異常 和 不受檢查異常的區別?

受檢查異常編譯器在編譯期間檢查。對於這種異常,方法強制處理或者通過throws 子句宣告。其中一種情況是 Exception 的子類但不是RuntimeException 的子類。非受檢查是 RuntimeException 的子類,在編譯階段不受編譯器的檢查。

128、Java 中,throw 和 throws 有什麼區別

throw 用於丟擲 java.lang.Throwable 類的一個例項化物件,意思是說你可以通過關鍵字 throw 丟擲一個 Error 或者 一個 Exception,如:throw new IllegalArgumentException(“size must be multiple of 2″)而 throws 的作用是作為方法宣告和簽名的一部分,方法被丟擲相應的異常以便呼叫者能處理。Java 中,任何未處理的受檢查異常強制在 throws 子句中宣告。

129、Java 中,Serializable 與 Externalizable 的區別?

Serializable 介面是一個序列化 Java 類的介面,以便於它們可以在網路上傳輸或者可以將它們的狀態儲存在磁碟上,是 JVM 內嵌的預設序列化方式,成本高、脆弱而且不安全。Externalizable 允許你控制整個序列化過程,指定特定的二進位制格式,增加安全機制。


2019年228道Java中高階面試題(8),你會的有多少?

130、Java 中,DOM 和 SAX 解析器有什麼不同?

DOM 解析器將整個 XML 文件載入到記憶體來建立一棵 DOM 模型樹,這樣可以更快的查詢節點和修改 XML 結構,而 SAX 解析器是一個基於事件的解析器,不會將整個 XML 文件載入到記憶體。由於這個原因,DOM 比 SAX 更快,也要求更多的記憶體,不適合於解析大 XML 檔案。

131、說出 JDK 1.7 中的三個新特性?

雖然 JDK 1.7 不像 JDK 5 和 8 一樣的大版本,但是,還是有很多新的特性,如 try-with-resource 語句,這樣你在使用流或者資源的時候,就不需要手動關閉,Java 會自動關閉。Fork-Join 池某種程度上實現 Java 版的 Map-reduce。允許 Switch 中有 String 變數和文字。菱形操作符(<>)用於型別推斷,不再需要在變數宣告的右邊申明泛型,因此可以寫出可讀寫更強、更簡潔的程式碼。另一個值得一提的特性是改善異常處理,如允許在同一個 catch 塊中捕獲多個異常。

132、說出 5 個 JDK 1.8 引入的新特性?

Java 8 在 Java 歷史上是一個開創新的版本,下面 JDK 8 中 5 個主要的特性:
(1)Lambda 表示式,允許像物件一樣傳遞匿名函式
(2)Stream API,充分利用現代多核 CPU,可以寫出很簡潔的程式碼
(3)Date 與 Time API,最終,有一個穩定、簡單的日期和時間庫可供你使用
(4)擴充套件方法,現在,介面中可以有靜態、預設方法。
(5)重複註解,現在你可以將相同的註解在同一型別上使用多次。

133、Java 中,Maven 和 ANT 有什麼區別?

雖然兩者功能上都是構建工具,都用於建立 Java 應用,但是 Maven 做的事情更多,在基於“約定優於配置”的概念下,提供標準的Java 專案結構,同時能為應用自動管理依賴(應用中所依賴的 JAR 檔案)。Ant僅僅是軟體構建工具,而Maven的定位是軟體專案管理和理解工具。Maven除了具備Ant的功能外,有以下主要的功能:
(1)使用Project Object Model來對軟體專案管理;
(2)內建了更多的隱式規則,使得構建檔案更加簡單;
(3)內建依賴管理和Repository來實現依賴的管理和統一儲存;
(4)內建了軟體構建的生命週期;

最後

歡迎大家關注我的公眾號【程式設計師追風】,整理了1000道2019年多家公司java面試題400多頁pdf文件,文章都會在裡面更新,整理的資料也會放在裡面。

喜歡文章記得點個贊喲,感謝支援!
2019年228道Java中高階面試題(8),你會的有多少?

相關文章