日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

java常用设计模式及其使用场景

發布時間:2023/12/10 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java常用设计模式及其使用场景 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

設計模式的使用場景。

設計模式分為?3?大類型共?23?種:

創建型:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結構型:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

行為型:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

?

最常見的設計模式有:單例模式、工廠模式、代理模式、構造者模式、責任鏈模式、適配器模式、觀察者模式等

?

面試中對于設計模式,你應該明白不同的設計用來解決什么場景問題,對于常用的設計模式能夠靈活運用。下面重點介紹幾種常用的設計模式。

?

單例模式

首先是單例模式,這個模式在實際業務中會經常用到,也是設計模式中的主要考察點。這里介紹線程安全的單例模式實現方式。

單例模式常見的實現方式有三種。

第一種是靜態初始化方式,也叫作餓漢方式。實現的思路就是在類初始化時完成單例實例的創建,因此不會產生并發問題,在這種方式下不管是否會使用到這個單例,都會創建這個單例。

第二種實現方式是雙重檢查,也叫作懶漢方式,只有在真正用到這個單例實例的時候才會去創建,如果沒有使用就不會創建。這個方式必然會面對多個線程同時使用實例時的并發問題。為了解決并發訪問問題,通過?synchronized?或者?lock?進行雙重檢查,保證只有一個線程能夠創建實例。這里要注意內存可見性引起的并發問題,必須使用?volatile?關鍵字修飾單例變量。

第三種是單例注冊表方式,Spring?中?Bean?的單例模式就是通過單例注冊表方式實現的。

下面結合設計模式的實際應用,來介紹常用的設計模式,在面試時遇到類似問題,記得要將設計模式與實際業務場景進行結合,來體現對設計模式的理解和應用能力。

?

? ???? ? ?

?

?

工廠模式

工廠模式是創建不同類型實例時常用的方式,例如?Spring?中的各種?Bean?是有不同?Bean?工廠類進行創建的。

?

代理模式

代理模式,主要用在不適合或者不能直接引用另一個對象的場景,可以通過代理模式對被代理對象的訪問行為進行控制。Java?的代理模式分為靜態代理和動態代理。靜態代理指在編譯時就已經創建好了代理類,例如在源代碼中編寫的類;動態代理指在?JVM?運行過程中動態創建的代理類,使用動態代理的方法有?JDK?動態代理、CGLIB、Javassist?等。面試時遇到這個問題可以舉個動態代理的例子,比如在?Motan RPC?中,是使用?JDK?的動態代理,通過反射把遠程請求進行封裝,使服務看上去就像在使用本地的方法。

?

責任鏈模式

責任鏈模式有點像工廠的流水線,鏈上每一個節點完成對對象的某一種處理,例如?Netty?框架在處理消息時使用的?Pipeline?就是一種責任鏈模式。

?

適配器模式

適配器模式,類似于我們常見的轉接頭,把兩種不匹配的對象來進行適配,也可以起到對兩個不同的對象進行解藕的作用。例如我們常用的日志處理框架?SLF4J,如果我們使用了?SLF4J?就可以跟?Log4j?或者?Logback?等具體的日志實現框架進行解藕。通過不同適配器將?SLF4J?與?Log4j?等實現框架進行適配,完成日志功能的使用。

?

觀察者模式

觀察者模式也被稱作發布訂閱模式,適用于一個對象的某個行為需要觸發一系列事件的場景,例如?gRPC?中的?Stream?流式請求的處理就是通過觀察者模式實現的。

?

構造者模式

構造者模式,適用于一個對象有很多復雜的屬性,需要根據不同情況創建不同的具體對象,例如創建一個?PB?對象時使用的?builder?方式。

?

Java?語言特性知識點

Java?語言特性的知識點匯總如下

?

?? ? ???? ? ?

?

常用集合類實現與?Java?并發工具包?JUC?是常見考點,JUC?會在后面的多線程課程中進行詳細講解。

Java?的集合類中部分需要重點了解類的實現。例如,HashMap、TreeMap?是如何實現的等。

動態代理與反射是?Java?語言的特色,需要掌握動態代理與反射的使用場景,例如在?ORM?框架中會大量使用代理類。而?RPC?調用時會使用到反射機制調用實現類方法。

Java?基礎數據類型也常常會在面試中被問到,例如各種數據類型占用多大的內存空間、數據類型的自動轉型與強制轉型、基礎數據類型與?wrapper?數據類型的自動裝箱與拆箱等。

Java?對對象的引用分為強引用、軟引用、弱引用、虛引用四種,這些引用在?GC?時的處理策略不同,強引用不會被?GC?回收;軟引用內存空間不足時會被?GC?回收;弱引用則在每次?GC?時被回收;虛引用必須和引用隊列聯合使用,主要用于跟蹤一個對象被垃圾回收的過程。

Java?的異常處理機制就是?try-catch-finally?機制,需要知道異常時在?try catch?中的處理流程;需要了解?Error?和?Exception?的區別。

最后?Java?的注解機制和?SPI?擴展機制可以作為擴展點適當了解。

?

詳解?Map

關于?Java?的基礎知識重點講解最常考察點?HashMap?和?ConcurrentHashMap,以及?Java?的不同版本新技術特性

?

?? ? ???? ? ?

?

面試中,Map?的實現這個題目能夠考察到數據結構、Java?基礎實現以及對并發問題處理思路的掌握程度。

?

HashMap

先來看?HashMap?的實現,簡單來說,Java?的?HashMap?就是數組加鏈表實現的,數組中的每一項是一個鏈表。通過計算存入對象的?HashCode,來計算對象在數組中要存入的位置,用鏈表來解決散列沖突,鏈表中的節點存儲的是鍵值對。

除了實現的方式,我們還需要知道填充因子的作用與?Map?擴容時的?rehash?機制,需要知道?HashMap?的容量都是?2?的冪次方,是因為可以通過按位與操作來計算余數,比求模要快。另外需要知道?HashMap?是非線程安全的,在多線程?put?的情況下,有可能在容量超過填充因子時進行?rehash,因為?HashMap?為了避免尾部遍歷,在鏈表插入元素時使用頭插法,多線程的場景下有可能會產生死循環。

ConcurrentHashMap????

從?HashMap?的非線程安全,面試官很自然地就會問到線程安全的?ConcurrentHashMap。ConcurrentHashMap?采用分段鎖的思想來降低并發場景下的鎖定發生頻率,在?JDK1.7?與?1.8?中的實現差異非常大,1.7?中使用?Segment?進行分段加鎖,降低并發鎖定;1.8?中使用?CAS?自旋鎖的樂觀鎖來提高性能,但是在并發度較高時性能會比較一般。另外?1.8?中的?ConcurrentHashMap?引入了紅黑樹來解決?Hash?沖突時鏈表順序查找的問題。紅黑樹的啟用條件與鏈表的長度和?Map?的總容量有關,默認是鏈表大于?8?且容量大于?64?時轉為紅黑樹。這部分內容建議詳細閱讀源碼進行學習。

?

詳解 Java 版本特性

? ? ? ? ? ? ?

?

?

Java?近些年一改以往的版本發布風格,發布頻率提高了很多。目前大部分公司的生產環境使用的還是?1.8?版本,一少部分升級到?1.9?或?1.10 版本,Java?的?1.8?版本是一個長期支持的版本,最新發布的?1.11?版本也是一個長期支持的版本,1.11?版本中已經包含了?1.9、1.10 版本的功能,所以?1.8?和?1.11?版本是我們要重點關注的版本。

在?1.8?版本中?Java?增加了對?lambda?表達式的支持,使?Java?代碼的編寫可以更簡潔,也更方便支持并行計算。并且提供了很多?Stream?流式處理的?API。1.8?版本還支持了方法引用的能力,可以進一步簡化?lambda?表達式的寫法。

在?1.8?版本中,接口可以提供默認方法了,這樣可以簡化一些簡單的抽象類。最后在?1.8?版本中對方法區進行調整,使用?Metaspace?替換掉了?PermGen?的永久代。Metaspace?與?PermGen?之間最大的區別在于:Metaspace?并不在虛擬機中,而是使用本地內存。替換的目的一方面是可以提升對元數據的管理同時提升?GC?效率,另一方面是方便后續?HotSpot?與?JRockit?合并

在?1.9、1.10?版本中的主要特性是增加了模塊系統,將?G1?設為默認垃圾回收器、支持局部變量推斷等功能。這些功能都已經包含在?1.11?版本中。

1.11?版本是?Java?最新的長期支持版本,也將會是未來一段時間的主要版本,1.11?版本中提供的最激動人心的功能是?ZGC?這個新的垃圾回收器,ZGC?為大內存堆設計,有著非常強悍的性能,能夠實現?10ms?以下的?GC?暫停時間。關于?ZGC?會在下一課中進一步介紹。除此之外,1.11?版本對字符串處理?API?進行了增強,提供了字符復制等功能。1.11?版本還內置了?HttpClient。

總結

以上是生活随笔為你收集整理的java常用设计模式及其使用场景的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。