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)內置了軟體構建的生命周期;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5237.html
標籤:其他
