設計模式之匯總

設計模式

零、設計原則

0.1 單一職責

0.2 接口隔離

0.3 開閉原則

0.4 依賴倒置

在這里插入圖片描述
在這里插入圖片描述

0.5 迪米特法則,最小知道原則

在這里插入圖片描述
用戶關機

只和朋友通信
朋友條件:
1)當前對象本身(this)
2)以參量形式傳入到當前對象方法中的對象
3)當前對象的實例變量直接引用的對象
4)當前對象的實例變量如果是一個聚集,那么聚集中的元素也都是朋友
5)當前對象所創建的對象
在這里插入圖片描述

0.6 里氏替換原則

在這里插入圖片描述
代碼符合里氏替換原則
長方形繼承正方形,就是反例
根據歷史替換原則,正方形不是長方形

0.7 組合由于繼承

一丶單例模式

類加載創建對象,是餓漢式,調用方法創建對象是懶漢式

二丶簡單工廠模式(靜態工廠模式)

2.1 UML類圖

在這里插入圖片描述

2.2 說明

封裝實例化代碼的行為

2.2 三種工廠方法區別

產品的種類很多,可以用抽象工廠模式,如果就那幾個產品可以用簡單工廠
工廠模式意義:將實例化對象的代碼提取出來,放到一個類中,統一管理和維護,達到這主項目的一來關系解耦,從而提供項目的擴展和維護性。

三丶工廠方法模式

3.1 UML類圖

在這里插入圖片描述

3.2 說明

  1. 工廠方法模式:定義了一個創建對象的抽象方法,由子類決定要實例化的類。工廠方法模式將對象的實例化推遲到子類。

四丶抽象工廠模式

4.1 UML類圖

在這里插入圖片描述

4.2 說明

  1. 將工廠抽象成兩層,AbsFactory(抽象工廠) 和 具體實現的工廠子類。程序員可以根據創建對象類型使用對應的工廠子類。這樣將單個的簡單工廠類變成了工廠簇,更利于代碼的維護和擴展。

五丶原型模式(克隆羊)

5.1 UML類圖

在這里插入圖片描述

5.2 說明

  1. 創建新的對象比較復雜時,可以利用原型模式簡化對象的創建過程,同時也能夠提高效率
  2. 不用重新初始化對象,而是動態地獲得對象運行時的狀態
  3. 如果原始對象發生變化(增加或者減少屬性),其它克隆對象的也會發生相應的變化,無需修改代碼
  4. 在實現深克隆的時候可能需要比較復雜的代碼
  5. 缺點:需要為每一個類配備一個克隆方法,這對全新的類來說不是很難,但對已有的類進行改造時,需要修改其源代碼,違背了ocp原則,這點請同學們注意.

比如Spring bean的的類型為prototype時會用到

深拷貝: 實現clone方法
實現序列化接口 輸出對象,再讀取對象
淺拷貝: 簡單實現

六丶建造者模式

6.1 UML類圖(傳統)

在這里插入圖片描述

6.2 說明

建造者模式的注意事項和細節

  1. 客戶端(使用程序)不必知道產品內部組成的細節,將產品本身與產品的創建過程解耦,使得相同的創建過程可以創建不同的產品對象
  2. 每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者, 用戶使用不同的具體建造者即可得到不同的產品對象
  3. 可以更加精細地控制產品的創建過程。將復雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰,也更方便使用程序來控制創建過程
  4. 增加新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類編程,系統擴展方便,符合 “開閉原則”

6.3 UML類圖(改進版)

在這里插入圖片描述

七丶適配器(手機充電)

將一個類的接口轉換成另一種接口,讓原本不兼容的類可以兼容。

7.1 UML類圖(類適配器)

在這里插入圖片描述

7.2 說明

類適配器有繼承關系,不建議使用
根據合成復用原則,在系統中盡量使用關聯關系代替繼承關系。

7.3 UML類圖(對象適配器)

在這里插入圖片描述

7.4 說明

對象適配器模式介紹

  1. 基本思路和類的適配器模式相同,只是將Adapter類作修改,不是繼承src類,而是持有src類的實例,以解決兼容性的問題。即:持有src類,實現dst類接口,完成src->dst的適配
  2. 根據“合成復用原則”,在系統中盡量使用關聯關系來替代繼承關系。
  3. 對象適配器模式是適配器模式常用的一種

7.5 UML類圖 (接口適配器)

在這里插入圖片描述

public class Client {public static void main(String[] args) {AbsAdapter absAdapter = new AbsAdapter() {@Overridepublic void operation1() {System.out.println("調用operation1方法");}};absAdapter.operation1();}
}

7.6 說明

接口適配器模式介紹

  1. 一些書籍稱為:適配器模式(Default Adapter Pattern)或缺省適配器模式。
  2. 當不需要全部實現接口提供的方法時,可先設計一個抽象類實現接口,并為該接口中每個方法提供一個默認實現(空方法),那么該抽象類的子類可有選擇地覆蓋父類的某些方法來實現需求
  3. 適用于一個接口不想使用其所有的方法的情況。

7.6 源碼應用

說明:
? Spring定義了一個適配接口,使得每一種Controller有一種對應的適配器實現類
? 適配器代替controller執行相應的方法
? 擴展Controller 時,只需要增加一個適配器類就完成了SpringMVC的擴展了,
? 這就是設計模式的力量

7.6 手動實現Springmvc

7.6.1 類圖

!](https://i-blog.csdnimg.cn/direct/f66561f96e254004934ccd58b0ae3cfd.png)

7.6.2 適配器模式的注意事項和細節

  1. 三種命名方式,是根據 src是以怎樣的形式給到Adapter(在Adapter里的形式)來
    命名的。
  2. 類適配器:以類給到,在Adapter里,就是將src當做類,繼承
    對象適配器:以對象給到,在Adapter里,將src作為一個對象,持有
    接口適配器:以接口給到,在Adapter里,將src作為一個接口,實現
  3. Adapter模式最大的作用還是將原本不兼容的接口融合在一起工作。
  4. 實際開發中,實現起來不拘泥于我們講解的三種經典形式

八、橋接模式(手機分類)

8.1 UML類圖

在這里插入圖片描述
解決類爆炸
在這里插入圖片描述

8.2 說明

橋接模式(Bridge)-基本介紹
基本介紹

  1. 橋接模式(Bridge模式)是指:將實現與抽象放在兩個不同的類層次中,使兩個層
    次可以獨立改變。
  2. 是一種結構型設計模式
  3. Bridge模式基于類的最小設計原則,通過使用封裝、聚合及繼承等行為讓不同
    的類承擔不同的職責。它的主要特點是把抽象(Abstraction)與行為實現
    (Implementation)分離開來,從而可以保持各部分的獨立性以及應對他們的功能
    擴展

8.3 橋接模式在JDBC的源碼剖析

  1. Jdbc的Driver接口,如果從橋接模式來看,Driver就是一個接口,下面可以有MySQL的Driver,Oracle的Driver,這些就可以當做實現接口類

在這里插入圖片描述

8.4 橋接模式的注意事項和細節

  1. 實現了抽象和實現部分的分離,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,這有助于系統進行分層設計,從而產生更好的結構化系統。
  2. 對于系統的高層部分,只需要知道抽象部分和實現部分的接口就可以了,其它的部分由具體業務來完成。
  3. 橋接模式替代多層繼承方案,可以減少子類的個數,降低系統的管理和維護成本。
  4. 橋接模式的引入增加了系統的理解和設計難度,由于聚合關聯關系建立在抽象層,要求開發者針對抽象進行設計和編程
  5. 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用范圍有一定的局限性,即需要有這樣的應用場景。

8.5 橋接模式其它應用場景

  1. 對于那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用.
  2. 常見的應用場景:
    -JDBC驅動程序
    -銀行轉賬系統
    轉賬分類:網上轉賬,柜臺轉賬,AMT轉賬
    轉賬用戶類型:普通用戶,銀卡用戶,金卡用戶…
    -消息管理
    消息類型:即時消息,延時消息
    消息分類:手機短信,郵件消息,QQ消息…

九、裝飾者模式(購買咖啡)

9.1 UML類圖

9.1.1 最差方案

在這里插入圖片描述

9.1.2 第二種解決方案

在這里插入圖片描述

9.1.3 裝飾者方案

在這里插入圖片描述

9.1.2 說明

裝飾者模式定義

  1. 裝飾者模式:動態的將新功能附加到對象上。在對象功能擴展方面,它比繼承更有彈性,裝飾者模式也體現了開閉原則(ocp)
  2. 這里提到的動態的將新功能附加到對象和ocp原則,在后面的應用實例上會以代碼的形式體現,請同學們注意體會。
    在這里插入圖片描述

9.2 源碼

在這里插入圖片描述
public abstract class InputStream implements Closeable{} //是一個抽象類,即Component
public class FilterInputStream extends InputStream { //是一個裝飾者類Decorator
protected volatile InputStream in //被裝飾的對象 }
class DataInputStream extends FilterInputStream implements DataInput { //FilterInputStream 子類

十、組合模式(輸出院系信息)

10.1 UML類圖

在這里插入圖片描述

在這里插入圖片描述

10.2 說明

  • 組合模式的注意事項和細節
    組合模式的注意事項和細節
  1. 簡化客戶端操作。客戶端只需要面對一致的對象而不用考慮整體部分或者節點葉子的問題。
  2. 具有較強的擴展性。當我們要更改組合對象時,我們只需要調整內部的層次關系,客戶端不用做出任何改動.
  3. 方便創建出復雜的層次結構。客戶端不用理會組合里面的組成細節,容易添加節點或者葉子從而創建出復雜的樹形結構
  4. 需要遍歷組織機構,或者處理的對象具有樹形結構時,非常適合使用組合模式.
  5. 要求較高的抽象性,如果節點和葉子有很多差異性的話,比如很多方法和屬性都不一樣,不適合使用組合模式

10.3 源碼應用

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

十一、外觀模式(家庭影院)

11.1 UML類圖(傳統方式)

在這里插入圖片描述

11.2 傳統方式問題分析

在這里插入圖片描述

11.3 UML類圖(外觀模式)

在這里插入圖片描述
在這里插入圖片描述

11.4 說明

在這里插入圖片描述

11.5 源碼

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

11.6 外觀模式的注意事項和細節

  1. 外觀模式對外屏蔽了子系統的細節,因此外觀模式降低了客戶端對子系統使用的復
    雜性
  2. 外觀模式對客戶端與子系統的耦合關系,讓子系統內部的模塊更易維護和擴展
  3. 通過合理的使用外觀模式,可以幫我們更好的劃分訪問的層次
  4. 當系統需要進行分層設計時,可以考慮使用Facade模式
  5. 在維護一個遺留的大型系統時,可能這個系統已經變得非常難以維護和擴展,此時
    可以考慮為新系統開發一個Facade類,來提供遺留系統的比較清晰簡單的接口,
    讓新系統與Facade類交互,提高復用性
  6. 不能過多的或者不合理的使用外觀模式,使用外觀模式好,還是直接調用模塊好。
    要以讓系統有層次,利于維護為目的。

十二、享元模式(同一網站多種形式發布)

12.1 UML類圖(傳統)

在這里插入圖片描述

12.2 問題分析

在這里插入圖片描述

12.3 UML類圖(享元模式)

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

12.4 說明

在這里插入圖片描述

12.5 源碼應用

public class FlyweightInInteger {public static void main(String[] args) {Integer x = Integer.valueOf(127);Integer y = new Integer(127);Integer z = Integer.valueOf(127);Integer w = new Integer(127);System.out.println(x.equals(y)); // trueSystem.out.println(x == y);      // falseSystem.out.println(x == z);      // trueSystem.out.println(w == x);      // falseSystem.out.println(w == y);      // false}
}

十三、代理模式(代理老師授課)

在這里插入圖片描述

13.1 UML類圖

13.2 說明 (靜態代理)

靜態代理在使用時,需要定義接口或者父類,被代理對象(即目標對象)與代理對象一起實現相同的接口或者是繼承相同父類

13.3 UML類圖

在這里插入圖片描述

13.4 說明(動態代理)

在這里插入圖片描述

13.4 Cglib代理

在這里插入圖片描述
代理不能是final

13.5 UML類圖(Cglib)

在這里插入圖片描述

13.6 兩者區別

jdk代理
Proxy.newProxyInstance獲取代理對象,重寫invoke方法
Cclib代理
實現MethodInterceptor接口,重寫Interceptor方法。用Enhancer獲取代理對象,在內存中生成子對象。

        // 1、創建工具類Enhancer enhancer = new Enhancer();// 2、設置父類enhancer.setSuperclass(target.getClass());// 3、設置回調函數enhancer.setCallback(this);// 4、創建子類對象,即代理對象return enhancer.create();

十四、模板方法模式(制作豆漿)

制作豆漿

14.1 UML類圖

在這里插入圖片描述

14.2 說明

在這里插入圖片描述

14.3 UML類圖

在這里插入圖片描述

14.4 鉤子方法

在這里插入圖片描述

14.5 源碼分析

在這里插入圖片描述

14.6 源碼類圖

在這里插入圖片描述

14.7 注意事項和細節

在這里插入圖片描述

十五、命令模式(稍微難)(遙控器控制開燈關燈)

15.1 UML類圖

在這里插入圖片描述
在這里插入圖片描述

15.2 說明

在這里插入圖片描述

15.3 源碼使用

在這里插入圖片描述

15.4 說明

在這里插入圖片描述

十六、訪問者模式(有點難)(訪問動物園,需要買票)

16.1 UML類圖

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

16.2 說明

在這里插入圖片描述

16.3 注意事項和細節

在這里插入圖片描述

十七、迭代器模式(遍歷學校院系結構)ArrayList遍歷,沒仔細看

17.1 UML類圖

在這里插入圖片描述
在這里插入圖片描述

17.2 說明

在這里插入圖片描述

17.3 源碼分析

在這里插入圖片描述

在這里插入圖片描述

17.3 注意事項和細節

在這里插入圖片描述

十八、觀察者模式(天氣預報和氣象站)

18.1 UML類圖(傳統)

18.2 說明(傳統)

在這里插入圖片描述

18.3 UML類圖(觀察者)

在這里插入圖片描述

在這里插入圖片描述

18.4 說明

在這里插入圖片描述

18.5 源碼應用

在這里插入圖片描述

十九、中介者模式(家庭影院各個設備協調工作)

19.1 UML類圖

在這里插入圖片描述

19.2 說明

中介者模式(Mediator Pattern),用一個中介對象來封裝一系列的對象交互。

  1. 中介者使各個對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立
    地改變它們之間的交互
  2. 中介者模式屬于行為型模式,使代碼易于維護
  3. 比如MVC模式,C(Controller控制器)是M(Model模型)和V(View視圖)的中
    介者,在前后端交互時起到了中間人的作用

19.3 UML類圖

在這里插入圖片描述
在這里插入圖片描述

19.4 注意事項

在這里插入圖片描述

二十、備忘錄模式(游戲角色死后恢復)

20.1 UML類圖

在這里插入圖片描述
在這里插入圖片描述

20.2 說明

1)備忘錄模式(Memento Pattern)在不破壞封裝性的前提下,捕獲一個對象的內
部狀態,并在該對象之外保存這個狀態。這樣以后就可將該對象恢復到原先保
存的狀態
2) 可以這里理解備忘錄模式:現實生活中的備忘錄是用來記錄某些要去做的事情,
或者是記錄已經達成的共同意見的事情,以防忘記了。而在軟件層面,備忘錄
模式有著相同的含義,備忘錄對象主要用來記錄一個對象的某種狀態,或者某
些數據,當要做回退時,可以從備忘錄對象里獲取原來的數據進行恢復操作
3) 備忘錄模式屬于行為型模式

20.3 UML類圖(游戲角色)

在這里插入圖片描述

20.4 注意事項

在這里插入圖片描述

二十一、解釋器模式(計算器求值)

21.1 UML類圖

在這里插入圖片描述

21.2 說明

在這里插入圖片描述

21.3 源碼應用

在這里插入圖片描述

21.4 說明

解釋器模式的注意事項和細節

  1. 當有一個語言需要解釋執行,可將該語言中的句子表示為一個抽象語法樹,就可以
    考慮使用解釋器模式,讓程序具有良好的擴展性
  2. 應用場景:編譯器、運算表達式計算、正則表達式、機器人等
  3. 使用解釋器可能帶來的問題:解釋器模式會引起類膨脹、解釋器模式采用遞歸調用
    方法,將會導致調試非常復雜、效率可能降低.

二十二、狀態模式(用戶抽獎)

22.1 UML類圖

在這里插入圖片描述
在這里插入圖片描述

22.2 說明

  1. 狀態模式(State Pattern):它主要用來解決對象在多種狀態轉換時,需要對外
    輸出不同的行為的問題。狀態和行為是一一對應的,狀態之間可以相互轉換
  2. 當一個對象的內在狀態改變時,允許改變其行為,這個對象看起來像是改變了
    其類

22.3 訂單模式

在這里插入圖片描述

22.4 注意事項和細節

  1. 代碼有很強的可讀性。狀態模式將每個狀態的行為封裝到對應的一個類中
  2. 方便維護。將容易產生問題的if-else語句刪除了,如果把每個狀態的行為都放到一
    個類中,每次調用方法時都要判斷當前是什么狀態,不但會產出很多if-else語句,
    而且容易出錯
  3. 符合“開閉原則”。容易增刪狀態
  4. 會產生很多類。每個狀態都要一個對應的類,當狀態過多時會產生很多類,加大維
    護難度
  5. 應用場景:當一個事件或者對象有很多種狀態,狀態之間會相互轉換,對不同的狀
    態要求有不同的行為的時候,可以考慮使用狀態模式

二十三、策略模式(鴨子問題)

23.1 UML類圖

在這里插入圖片描述

23.2 說明

傳統的方式實現的問題分析和解決方案

  1. 其它鴨子,都繼承了Duck類,所以fly讓所有子類都會飛了,這是不正確的
  2. 上面說的1 的問題,其實是繼承帶來的問題:對類的局部改動,尤其超類的局部改
    動,會影響其他部分。會有溢出效應
  3. 為了改進1問題,我們可以通過覆蓋fly 方法來解決 => 覆蓋解決
  4. 問題又來了,如果我們有一個玩具鴨子ToyDuck, 這樣就需要ToyDuck去覆蓋Duck
    的所有實現的方法 => 解決思路 策略模式 (strategy pattern)

23.3 UML類圖(策略模式)

在這里插入圖片描述

在這里插入圖片描述

23.4 源碼應用

在這里插入圖片描述

23.5 注意事項

  1. 策略模式的關鍵是:分析項目中變化部分與不變部分
  2. 策略模式的核心思想是:多用組合/聚合 少用繼承;用行為類組合,而不是行為的
    繼承。更有彈性
  3. 體現了“對修改關閉,對擴展開放”原則,客戶端增加行為不用修改原有代碼,只
    要添加一種策略(或者行為)即可,避免了使用多重轉移語句(if…else if…else)
  4. 提供了可以替換繼承關系的辦法: 策略模式將算法封裝在獨立的Strategy類中使得
    你可以獨立于其Context改變它,使它易于切換、易于理解、易于擴展
  5. 需要注意的是:每添加一個策略就要增加一個類,當策略過多是會導致類數目龐大

二十四、責任鏈模式(OA系統審批)

24.1 UML類圖

在這里插入圖片描述

24.2 說明

  1. 職責鏈模式(Chain of Responsibility Pattern),
    又叫 責任鏈模式,為請求創建了一個接收者
    對象的鏈(簡單示意圖)。這種模式對請求的
    發送者和接收者進行解耦。
  2. 職責鏈模式通常每個接收者都包含對另一個接
    收者的引用。如果一個對象不能處理該請求,
    那么它會把相同的請求傳給下一個接收者,依
    此類推。
  3. 這種類型的設計模式屬于行為型模式

24.3 源碼應用

在這里插入圖片描述

24.4 說明

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93732.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93732.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93732.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第6章 Decoder與Encoder核心組件

前言 Netty從底層Java通道讀取ByteBuf二進制數據,傳入Netty通道的流水線,隨后開始入站處理。在入站處理過程中,需要將ByteBuf二進制類型解碼成Java POJO對象。這個解碼過程可以通過Netty的Decoder(解碼器)去完成。 在…

[已解決]當啟動 Spring Boot 應用時出現 Using generated security password xxx提示

當啟動 Spring Boot 應用時出現 Using generated security password xxx提示當啟動 Spring Boot 應用時出現 Using generated security password xxx提示,這是 Spring Security 自動配置的默認行為,通常發生在你??未自定義安全配置??但引入了 Spring…

自動分析需求,PRD 生成只需 SOLO 一步!

資料來源:火山引擎-開發者社區 寫不清需求?PRD 難產?開發總跑偏?這些痛點,SOLO 來解決。 TRAE SOLO 是行業首個 Context Engineer。它不止協助編碼,更能基于精準上下文理解和工具調用,從構思、…

物聯網軟件開發過程中,數據流圖(DFD),用例圖,類圖,活動圖,序列圖,狀態圖,實體關系圖(ERD),BPMN(業務流程建模)詳解分析

概述軟件開發過程中,特別是在物聯網(IoT)場景中,數據流圖(DFD)、UML圖(包括用例圖、類圖、活動圖、序列圖、狀態圖)、實體關系圖(ERD)和業務流程建模&#xf…

Mac(一)常用的快捷鍵整理

目錄1、系統操作與窗口管理2、應用與窗口切換3、常規編輯操作4、文本導航與光標控制??5、文本格式與文檔功能(支持應用中)6、截圖快捷鍵7、Safari 瀏覽器快捷鍵8、Finder 快捷鍵(文件管理)9、Fn / Globe 功能鍵(部分…

HAProxy使用方法以及和LVS區別

HAProxy簡介HAProxy是法國開發者 威利塔羅(Willy Tarreau) 在2000年使用C語言開發的一個開源軟件 是一款具備高并發(萬級以上)、高性能的TCP和HTTP負載均衡器 支持基于cookie的持久性,自動故障切換,支持正則表達式及web狀態統計LVS 與 HAProxy 的核心區別…

超越“小作文”:大模型指令設計的進階之路——優化知識信噪比

文章摘要:你是否認為,給大模型的指令(Prompt)寫得越詳細越好?真的是信息越多,模型就越懂你嗎?本文將深入探討一個反直覺的觀點:初級的指令設計專注於資訊的堆砌,而高階的…

elasticsearch-集成prometheus監控(k8s)

一. 簡介: 關于elasticsearch的簡介和部署,可以參考單獨的文章elasticsearch基礎概念與集群部署-CSDN博客,這里就不細說了。這里只講講如何在k8s中部署export并基于prometheus做es的指標采集。 二. 實現方式: 首先我們需要先部署…

貪心算法(Greedy Algorithm)詳解

一、什么是貪心算法? 貪心算法是一種算法設計范式,指在解決問題時,依賴于每次選擇最優的局部解,以期最終得到全局最優解。貪心算法的關鍵特點是: 局部最優選擇:每個階段選擇當前看起來最好的選擇&#xff0…

電梯的構造|保養|維修視頻全集_電梯安全與故障救援(課程下載)

課程下載:https://download.csdn.net/download/m0_66047725/91699586 電梯原理與維修視頻教程 相關簡介: 電梯現在運用的非常廣泛,比如大型商場,建筑工地,特別是現在建造的很多高樓、商品房,基本都是安裝了電梯。電梯維保不力是導致電梯運行中安全事故頻發的主要原…

Traefik網關DNS解析超時問題優化

1、背景 在生產環境使用 Traefik 網關時出現了偶發的 DNS 解析超時導致網關與后端服務建立連接異常的情況。通過調用鏈埋點數據觀察發現,該部署環境中 Traefik 的 DNS 解析性能較差,耗時通常在 4ms 以上(正常應該是 1ms 以內) 初…

從0到1掌握 Spring Security(第三篇):三種認證方式,按配置一鍵切換

> 本文是Spring Security系列第三篇,將帶你實現內存、JDBC和自定義三種認證方式的無縫切換,只需修改配置文件即可完成認證策略變更! ## 一、為什么需要多種認證方式? 在軟件開發的不同階段,我們需要不同的認證策略: - **開發階段**:使用內存認證,快速配置測試賬號…

阿里云國際站云防火墻:如何利用阿里云云防火墻實現細粒度的訪問控制?

利用阿里云云防火墻實現細粒度的訪問控制,可以從分層策略、精確匹配、動態調整三個方面著手,讓不同業務、用戶和資源的訪問權限清晰可控。一、明確控制目標業務隔離:不同業務系統、部門或環境(生產/測試)之間互不干擾。…

rom定制系列------小米cc9機型 原生安卓15系統 雙版線刷root 定制修改功能項

小米 9 Lite/CC9 機型代碼;pyxis.搭載驍龍710處理器.適用于以下型號的小米機型:M1904F3BG, M1904F3BC. 刷寫前提; 需要當前機型已經解鎖bl的狀態下進入fast模式刷寫。此機型可以正常官方解鎖與強解bl鎖。效果都是一樣的。在fast模式下裝好聯機驅動。使用官方平臺刷…

解讀60頁全面認識大數據基礎知識培訓【附全文閱讀】

該培訓課件適用于對大數據知識感興趣的初學者、企業管理人員、相關技術從業者等。內容圍繞大數據展開,先介紹其基本概念,包括定義、數據級別、來源、類型、價值挖掘等,還闡述了 5 個 “V” 特征及與傳統數據的區別。接著講述大數據的發展演進,涵蓋國際國內發展歷程、發展階…

Prompt engineering(PE) —— prompt 優化如何進行?

從新手到高手:Prompt最佳實踐全解析 一、引言:開啟 Prompt 的神秘大門在這個人工智能飛速發展的時代,AI 已經悄然融入我們生活的方方面面。你是否有過這樣的經歷: 當你對著智能音箱詢問 “明天天氣如何” 時,它能迅速給…

云服務器的優缺點都有哪些?

云服務器作為一種有著高度靈活性的服務器類型,能夠根據用戶的需求來調整資源,有著很強的優勢,但是云服務器還是有著一定的缺點的,本文就來共同探討一下云服務器的優缺點都有哪些吧!首先,云服務器能根據業務…

宋紅康 JVM 筆記 Day05|運行時數據區內部結構、JVM中的線程說明、程序計數器

一、今日視頻區間 P39-P43 二、一句話總結 運行時數據區內部結構;JVM中的線程說明;程序計數器(PC寄存器); 三、關鍵圖/命令 3.1 運行時數據區內部結構3.2 JVM中的線程說明3.3 程序計數器(PC寄存器&#xff…

Java增強for循環(小白友好版)

前言&#xff1a;為什么需要增強for循環&#xff1f;作為Java初學者&#xff0c;你或許已經學會使用傳統for循環來遍歷數組或集合&#xff1a;for (int i 0; i < array.length; i) {System.out.println(array[i]); }這種寫法需要手動維護索引變量i&#xff0c;對于集合還需…

【OLAP】trino安裝和基本使用

目錄 ?一、概述 1.1Trino不是什么 1.2Trino是什么 二、Trino特點 三、Trino架構 3.1架構和服務節點 3.2Trino數據模型 四、Trino安裝部署 4.1配置JDK 4.2單機版&#xff08;Coordinator和Worker同進程&#xff09; 4.2.1啟動服務 4.2.2下載客戶端 五、配置HTTPS&…