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

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

Java面試題(一)

第一篇更新1~20題的答案解析

第二篇更新21~50題答案解析

第三篇更新51~95題答案解析

Java面試題(二)

第四篇更新1~20題答案解析

第五篇更新21~50題答案解析

第六篇更新51~80題答案解析

第七篇更新81~115題答案解析

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 有什麼區別?

本次更新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 允許你控制整個序列化過程,指定特定的二進制格式,增加安全機制。

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)內置了軟件構建的生命週期;

 

最後

歡迎大家關注我的公種浩【程序員追風】,2019年多家公司java面試題整理了1000多道400多頁pdf文檔,文章都會在裏面更新,整理的資料也會放在裏面。

喜歡文章記得關注我點個贊喲,感謝支持!

發佈了174 篇原創文章 · 獲贊 2290 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章