前言程序員
前幾天小夥伴告訴我他面試的時候面試官問到了設計模式相關的問題,有幾道感受答的不太好,可能拿不到offer了;web
好在面試官仁慈,勉強拿到了offer,據說是看在他的態度比較好,給他加了點分,可是設計模式掌握不太好的問題仍是存在的;小編也是把最新整理的設計模式的視頻給了他才解決的面試
小編把他被問到的設計模式相關的問題整理了一下,分享給你們,供你們參考設計模式
設計模式面試題安全
1. 請列舉出在 JDK 中幾個經常使用的設計模式?app
單例模式(Singleton pattern)用於 Runtime,Calendar 和其餘的一些類中。工廠模式ide
(Factory pattern)被用於各類不可變的類如 Boolean,像 Boolean.valueOf,觀察者模式函數
(Observer pattern)被用於 Swing 和不少的事件監聽中。裝飾器設計模式(Decorator性能
design pattern)被用於多個 Java IO 類中。測試
2. 什麼是設計模式?你是否在你的代碼裏面使用過任 何設計模式?
設計模式是世界上各類各樣程序員用來解決特定設計問題的嘗試和測試的方法。設計模式
是代碼可用性的延伸
3.Java 中什麼叫單例設計模式?請用 Java 寫出線程安全的單例模式
單例模式重點在於在整個系統上共享一些建立時較耗資源的對象。整個應用中只維護一個
特定類實例,它被全部組件共同使用。Java.lang.Runtime 是單例模式的經典例子。從 Java
5 開始你可使用枚舉(enum)來實現線程安全的單例。
4. 在 Java 中,什麼叫觀察者設計模式(observer design pattern )?
觀察者模式是基於對象的狀態變化和觀察者的通信,以便他們做出相應的操做。簡單的例
子就是一個天氣系統,當天氣變化時必須在展現給公衆的視圖中進行反映。這個視圖對象
是一個主體,而不一樣的視圖是觀察者。
5. 使用工廠模式最主要的好處是什麼?在哪裏使用?
工廠模式的最大好處是增長了建立對象時的封裝層次。若是你使用工廠來建立對象,以後
你可使用更高級和更高性能的實現來替換原始的產品實現或類,這不須要在調用層作任
何修改。
6. 舉一個用 Java 實現的裝飾模式(decorator design pattern) ?它是做用於對象層次仍是類
層次?
裝飾模式增長強了單個對象的能力。Java IO 處處都使用了裝飾模式,典型例子就是
Buffered 系列類如 BufferedReader 和 BufferedWriter,它們加強了 Reader 和 Writer 對象,
以實現提高性能的 Buffer 層次的讀取和寫入。
7. 在 Java 中,爲何不容許從靜態方法中訪問非靜態變量?
Java 中不能從靜態上下文訪問非靜態數據只是由於非靜態變量是跟具體的對象實例關聯
的,而靜態的卻沒有和任何實例關聯。
8. 設計一個 ATM 機,請說出你的設計思路?
好比設計金融系統來講,必須知道它們應該在任何狀況下都可以正常工做。不論是斷電還
是其餘狀況,ATM 應該保持正確的狀態(事務) , 想一想 加鎖(locking)、事務
(transaction)、錯誤條件(error condition)、邊界條件(boundary condition) 等等。儘管
你不能想到具體的設計,但若是你能夠指出非功能性需求,提出一些問題,想到關於邊界
條件,這些都會是很好的。
9. 在 Java 中,何時用重載,何時用重寫?
若是你看到一個類的不一樣實現有着不一樣的方式來作同一件事,那麼就應該用重寫
(overriding),而重載(overloading)是用不一樣的輸入作同一件事。在 Java 中,重載的方
法簽名不一樣,而重寫並非。
10. 舉例說明什麼狀況下會更傾向於使用抽象類而不是接口?
接口和抽象類都遵循」面向接口而不是實現編碼」設計原則,它能夠增長代碼的靈活性,
能夠適應不斷變化的需求。下面有幾個點能夠幫助你回答這個問題:
在 Java 中,你只能繼承一個類,但能夠實現多個接口。因此一旦你繼承了一個類,你就
失去了繼承其餘類的機會了。
接口一般被用來表示附屬描述或行爲如:Runnable、Clonable、Serializable 等等,所以當你
使用抽象類來表示行爲時,你的類就不能同時是 Runnable 和 Clonable(注:這裏的意思是指
若是把 Runnable 等實現爲抽象類的狀況),由於在 Java 中你不能繼承兩個類,但當你使用
接口時,你的類就能夠同時擁有多個不一樣的行爲。
在一些對時間要求比較高的應用中,傾向於使用抽象類,它會比接口稍快一點。
若是但願把一系列行爲都規範在類繼承層次內,而且能夠更好地在同一個地方進行編碼,
那麼抽象類是一個更好的選擇。有時,接口和抽象類能夠一塊兒使用,接口中定義函數,而
在抽象類中定義默認的實現。
小編最新整理的設計模式視頻