Java常见设计模式面试题及答案
文章目錄
- 1.設計模式是什么?你是否在代碼中使用過?
- 2. JDK 中常用的設計模式有哪些?
- 3.單例模式是什么?請用 Java 寫出線程安全的單例模式
- 4.在 Java 中,什么叫觀察者模式(observer design pattern)?
- 5.使用工廠模式有哪些好處?說說它的應用場景?
- 6.舉一個 Java中 實現裝飾模式的例子?
- 7.在 Java 中,什么時候用重載,什么時候用重寫?
- 8. Java 是否可以從靜態方法中訪問非靜態變量?為什么?
- 9.什么情況下更傾向于使用抽象類而非接口?
| 前????言 |
JAVA | 2021最全Java面試題及答案匯總
| 正????文 |
1.設計模式是什么?你是否在代碼中使用過?
設計模式(Design Pattern)是前輩們對代碼開發經驗的總結,是解決特定問題的一系列套路。它不是語法規定,而是一套用來提高代碼可復用性、可維護性、可讀性、穩健性以及安全性的解決方案。
設計模式就是程序員總結出來的一套用來提高代碼可復用性、可維護性、可讀性、穩健性以及安全性的解決方案。,
2. JDK 中常用的設計模式有哪些?
3.單例模式是什么?請用 Java 寫出線程安全的單例模式
單例(Singleton)模式:指一個類只有一個實例,且該類能自行創建這個實例的一種模式。Java.lang.Runtime 是單例模式的經典例子。
public class Singleton5 {private Singleton5(){}private static class InstanceHolder{private static Singleton5 instance = new Singleton5();}public static Singleton5 getInstance(){return InstanceHolder.instance;} }就是套了一個私有的靜態內部類。java語言規范保證了,一個類或者接口的靜態成員在被賦值的時候,這個類會初始化(有個初始化鎖,每個線程都會至少獲取一次初始化鎖保證初始化),這個過程比較復雜,結果就是對任意線程,內部可以重排序,但是這種重排序對其他線程不可見。這個也是Google推薦的寫法。
4.在 Java 中,什么叫觀察者模式(observer design pattern)?
觀察者(Observer)模式: 指多個對象間存在一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都得到通知并被自動更新。這種模式有時又稱作發布-訂閱模式、模型-視圖模式,它是對象行為型模式。
觀察者模式是一種對象行為型模式,其主要優點如下:
- 降低了目標與觀察者之間的耦合關系,兩者之間是抽象耦合關系。符合依賴倒置原則。
- 目標與觀察者之間建立了一套觸發機制。
它的主要缺點如下:
- 目標與觀察者之間的依賴關系并沒有完全解除,而且有可能出現循環引用。
- 當觀察者對象很多時,通知的發布會花費很多時間,影響程序的效率。
5.使用工廠模式有哪些好處?說說它的應用場景?
工廠模式包括簡單工廠模式、工廠方法模式和抽象工廠模式三種。
6.舉一個 Java中 實現裝飾模式的例子?
7.在 Java 中,什么時候用重載,什么時候用重寫?
8. Java 是否可以從靜態方法中訪問非靜態變量?為什么?
9.什么情況下更傾向于使用抽象類而非接口?
接口和抽象類都遵循”面向接口而不是實現編碼”設計原則,它可以增加代碼的靈活性,可以適應不斷變化的需求。下面有幾個點可以幫助你回答這個問題:
在 Java 中,你只能繼承一個類,但可以實現多個接口。所以一旦你繼承了一個類,你就失去了繼承其他類的機會了。
接口通常被用來表示附屬描述或行為如:Runnable、Clonable、Serializable
等等,因此當你使用抽象類來表示行為時,你的類就不能同時是 Runnable 和 Clonable(注:這里的意思是指如果把 Runnable
等實現為抽象類的情況),因為在 Java 中你不能繼承兩個類,但當你使用接口時,你的類就可以同時擁有多個不同的行為。
- 在一些對時間要求比較高的應用中,傾向于使用抽象類,它會比接口稍快一點。
- 如果希望把一系列行為都規范在類繼承層次內,并且可以更好地在同一個地方進行編碼,那么抽象類是一個更好的選擇。
有時,接口和抽象類可以一起使用,接口中定義函數,而在抽象類中定義默認的實現
| 干貨推薦 |
Java設計模式:23種設計模式全面解析(超級詳細)
java中的7種單例模式
總結
以上是生活随笔為你收集整理的Java常见设计模式面试题及答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: knx智能照明控制系统电路图_can总线
- 下一篇: Java集合——HashMap、Hash