新聞中心
前言
10年積累的成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有榮昌免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
前幾天小伙伴告訴我他面試的時(shí)候面試官問到了設(shè)計(jì)模式相關(guān)的問題,有幾道感覺答的不太好,可能拿不到offer了;
好在面試官仁慈,勉強(qiáng)拿到了offer,聽說是看在他的態(tài)度比較好,給他加了點(diǎn)分,但是設(shè)計(jì)模式掌握不太好的問題還是存在的;小編也是把最新整理的設(shè)計(jì)模式的視頻給了他才解決的
小編把他被問到的設(shè)計(jì)模式相關(guān)的問題整理了一下,分享給大家,供大家參考
設(shè)計(jì)模式面試題
1. 請列舉出在 JDK 中幾個(gè)常用的設(shè)計(jì)模式?
單例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些類中。工廠模式
(Factory pattern)被用于各種不可變的類如 Boolean,像 Boolean.valueOf,觀察者模式
(Observer pattern)被用于 Swing 和很多的事件監(jiān)聽中。裝飾器設(shè)計(jì)模式(Decorator
design pattern)被用于多個(gè) Java IO 類中。
2. 什么是設(shè)計(jì)模式?你是否在你的代碼里面使用過任 何設(shè)計(jì)模式?
設(shè)計(jì)模式是世界上各種各樣程序員用來解決特定設(shè)計(jì)問題的嘗試和測試的方法。設(shè)計(jì)模式
是代碼可用性的延伸
3.Java 中什么叫單例設(shè)計(jì)模式?請用 Java 寫出線程安全的單例模式
單例模式重點(diǎn)在于在整個(gè)系統(tǒng)上共享一些創(chuàng)建時(shí)較耗資源的對象。整個(gè)應(yīng)用中只維護(hù)一個(gè)
特定類實(shí)例,它被所有組件共同使用。Java.lang.Runtime 是單例模式的經(jīng)典例子。從 Java
5 開始你可以使用枚舉(enum)來實(shí)現(xiàn)線程安全的單例。
4. 在 Java 中,什么叫觀察者設(shè)計(jì)模式(observer design pattern )?
觀察者模式是基于對象的狀態(tài)變化和觀察者的通訊,以便他們作出相應(yīng)的操作。簡單的例
子就是一個(gè)天氣系統(tǒng),當(dāng)天氣變化時(shí)必須在展示給公眾的視圖中進(jìn)行反映。這個(gè)視圖對象
是一個(gè)主體,而不同的視圖是觀察者。
5. 使用工廠模式最主要的好處是什么?在哪里使用?
工廠模式的最大好處是增加了創(chuàng)建對象時(shí)的封裝層次。如果你使用工廠來創(chuàng)建對象,之后
你可以使用更高級(jí)和更高性能的實(shí)現(xiàn)來替換原始的產(chǎn)品實(shí)現(xiàn)或類,這不需要在調(diào)用層做任
何修改。
6. 舉一個(gè)用 Java 實(shí)現(xiàn)的裝飾模式(decorator design pattern) ?它是作用于對象層次還是類
層次?
裝飾模式增加強(qiáng)了單個(gè)對象的能力。Java IO 到處都使用了裝飾模式,典型例子就是
Buffered 系列類如 BufferedReader 和 BufferedWriter,它們增強(qiáng)了 Reader 和 Writer 對象,
以實(shí)現(xiàn)提升性能的 Buffer 層次的讀取和寫入。
7. 在 Java 中,為什么不允許從靜態(tài)方法中訪問非靜態(tài)變量?
Java 中不能從靜態(tài)上下文訪問非靜態(tài)數(shù)據(jù)只是因?yàn)榉庆o態(tài)變量是跟具體的對象實(shí)例關(guān)聯(lián)
的,而靜態(tài)的卻沒有和任何實(shí)例關(guān)聯(lián)。
8. 設(shè)計(jì)一個(gè) ATM 機(jī),請說出你的設(shè)計(jì)思路?
比如設(shè)計(jì)金融系統(tǒng)來說,必須知道它們應(yīng)該在任何情況下都能夠正常工作。不管是斷電還
是其他情況,ATM 應(yīng)該保持正確的狀態(tài)(事務(wù)) , 想想 加鎖(locking)、事務(wù)
(transaction)、錯(cuò)誤條件(error condition)、邊界條件(boundary condition) 等等。盡管
你不能想到具體的設(shè)計(jì),但如果你可以指出非功能性需求,提出一些問題,想到關(guān)于邊界
條件,這些都會(huì)是很好的。
9. 在 Java 中,什么時(shí)候用重載,什么時(shí)候用重寫?
如果你看到一個(gè)類的不同實(shí)現(xiàn)有著不同的方式來做同一件事,那么就應(yīng)該用重寫
(overriding),而重載(overloading)是用不同的輸入做同一件事。在 Java 中,重載的方
法簽名不同,而重寫并不是。
10. 舉例說明什么情況下會(huì)更傾向于使用抽象類而不是接口?
接口和抽象類都遵循”面向接口而不是實(shí)現(xiàn)編碼”設(shè)計(jì)原則,它可以增加代碼的靈活性,
可以適應(yīng)不斷變化的需求。下面有幾個(gè)點(diǎn)可以幫助你回答這個(gè)問題:
在 Java 中,你只能繼承一個(gè)類,但可以實(shí)現(xiàn)多個(gè)接口。所以一旦你繼承了一個(gè)類,你就
失去了繼承其他類的機(jī)會(huì)了。
接口通常被用來表示附屬描述或行為如:Runnable、Clonable、Serializable 等等,因此當(dāng)你
使用抽象類來表示行為時(shí),你的類就不能同時(shí)是 Runnable 和 Clonable(注:這里的意思是指
如果把 Runnable 等實(shí)現(xiàn)為抽象類的情況),因?yàn)樵?Java 中你不能繼承兩個(gè)類,但當(dāng)你使用
接口時(shí),你的類就可以同時(shí)擁有多個(gè)不同的行為。
在一些對時(shí)間要求比較高的應(yīng)用中,傾向于使用抽象類,它會(huì)比接口稍快一點(diǎn)。
如果希望把一系列行為都規(guī)范在類繼承層次內(nèi),并且可以更好地在同一個(gè)地方進(jìn)行編碼,
那么抽象類是一個(gè)更好的選擇。有時(shí),接口和抽象類可以一起使用,接口中定義函數(shù),而
在抽象類中定義默認(rèn)的實(shí)現(xiàn)。
小編最新整理的設(shè)計(jì)模式視頻
網(wǎng)站標(biāo)題:面試官:關(guān)于設(shè)計(jì)模式的這些問題你來回答一下
URL網(wǎng)址:http://fisionsoft.com.cn/article/gjpcsh.html