項目學習總結001

1. 策略模式和工廠模式

https://mp.weixin.qq.com/s/RG-h7r69JyKUlBZylJJIFQ
在軟件開發中也常常遇到類似的情況,實現某一個功能有多個途徑,此時可以使用一種設計模式來使得系統可以靈活地選擇解決途徑,也能夠方便地增加新的解決途徑。這就是策略模式。

策略模式(Strategy Pattern),指的是定義一系列算法,將每一個算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨立于使用它的客戶而變化。

從上面的示例可以看出,策略模式僅僅封裝算法,提供新的算法插入到已有系統中,策略模式并不決定在何時使用何種算法。在什么情況下使用什么算法是由客戶端決定的。

但是,上面還遺留了一個問題,那就是UserPayServiceStrategyFactory中用來保存所有的策略類的實例的Map是如何被初始化的?各個策略的實例對象如何塞進去的呢?

Spring Bean的注冊
還記得我們前面定義的UserPayServiceStrategyFactory中提供了的register方法嗎?他就是用來注冊策略服務的。

接下來,我們就想辦法調用register方法,把Spring通過IOC創建出來的Bean注冊進去就行了。

這種需求,可以借用Spring種提供的InitializingBean接口,這個接口為Bean提供了屬性初始化后的處理方法,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在bean的屬性初始化后都會執行該方法。

只需要每一個策略服務的實現類都實現InitializingBean接口,并實現其afterPropertiesSet方法,在這個方法中調用UserPayServiceStrategyFactory.register即可。

這樣,在Spring初始化的時候,當創建VipPayService、SuperVipPayService和ParticularlyVipPayService的時候,會在Bean的屬性初始化之后,把這個Bean注冊到UserPayServiceStrategyFactory中。

2、抽象類和接口

分為兩個層次:語法層面和設計層面;
語法層面:接口是多繼承,抽象類是單繼承,
抽象類有構造方法,接口沒有,
抽象類中可以有成員方法的具體實現細節,接口只能有抽象方法
成員變量
設計層面:抽象類是對事物的抽象,整體類,接口是針對一種行為規范,是部分類(行為)的抽象,
抽象類是模版設計,接口類是輻射式設計,如果增加一個方法,抽象類只需要改它本身,而對接口而言,繼承該接口的所有實現類都需要改動。

3. websocket實現web消息推送(基于Java注解實現websocket服務終端)

添加鏈接描述

4. 分布式事務和分布式鎖

目標不同
分布式事務旨在保證跨服務操作的ACID屬性,確保所有操作要么全部成功,要么全部失敗。
分布式鎖旨在解決并發訪問共享資源的問題,保證資源的互斥訪問。
實現機制不同
分布式事務通常涉及到多個服務之間的協調和通信,可能需要使用復雜的協議來達成一致。
分布式鎖則更加關注于資源訪問的控制,通常通過鎖的獲取和釋放來實現。
應用場景不同
分布式事務適用于需要跨服務進行數據一致性的場景。
分布式鎖適用于保護單一資源免受并發訪問的場景。

5. JUC(Java并發工具包)是Java提供的一個用于處理線程的工具包。

JUC(Java并發工具包)是Java提供的一個用于處理線程的工具包,它包含了多種常用的并發工具類,這些工具類可以幫助開發人員更加高效地編寫多線程程序。下面將介紹一些JUC中的常用工具類:

CountDownLatch
CountDownLatch是一個同步工具類,用于協調多個線程之間的同步操作。它允許一個或多個線程等待其他線程完成各自的操作。CountDownLatch的構造函數接受一個整數參數,表示計數器的初始值。每個線程在完成自己的操作后,會調用CountDownLatch的countDown()方法,將計數器減一。當計數器減到0時,等待在CountDownLatch上的線程就可以恢復執行。

6. ?并發和多線程關系緊密,多線程是實現并發編程的重要技術途徑,通過創建多個線程并行執行任務,可以實現系統級別的并發運行。

?異步和多線程也是相互關聯的,多線程編程中可以實現異步操作,例如一個線程執行IO操作(如網絡請求)時不阻塞主線程,而是通過回調或Future機制在操作完成時通知主線程,這就是典型的異步編程場景。

區別:
?并發關注的是任務的執行方式,強調多個任務看起來同時運行的效果,而不論底層是如何實現的(可能是多線程、協程或者其他技術)。
?多線程特指在單一進程中同時運行多個執行線程的技術細節。
?異步關注的是任務執行的流程控制,強調任務之間互不影響,無需等待即可繼續執行的特點,它既可以應用于單線程環境(如事件驅動編程),也可以應用于多線程環境。

7. 在 Java 中,鎖機制是實現線程同步和并發控制的重要手段,它可以確保在多線程環境下對共享資源的安全訪問。

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

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

相關文章

OpenHarmony 5.0版本視頻硬件編解碼適配

一、簡介 Codec HDI(Hardware Device Interface)對上層媒體服務提供視頻編解碼的驅動能力接口,主要功能有獲取組件編解碼能力,創建、銷毀編解碼器對象,啟停編解碼器操作,編解碼處理等。 Codec HDI 2.0接口…

深度解析基于 Web Search MCP的Deep Research 實現邏輯

寫在前面 大型語言模型(LLM)已成為我們獲取信息、生成內容的重要工具。但它們的知識大多截止于訓練數據的時間點,對于需要實時信息、跨領域知識整合、多角度觀點比較的深度研究 (Deep Research) 任務,它們往往力有不逮。如何讓 LLM 突破自身知識的局限,像人類研究員一樣,…

鴻蒙案例---生肖抽卡

案例源碼: Zodiac_cards: 鴻蒙生肖抽獎卡片 效果演示 初始布局 1. Badge 角標組件 此處為語雀內容卡片,點擊鏈接查看:https://www.yuque.com/kevin-nzthp/lvl039/rccg0o4pkp3v6nua 2. Grid 布局 // 定義接口 interface ImageCount {url:…

基于RV1126開發板實現自學習圖像分類方案

1. 方案簡介 自學習:在識別前對物體圖片進行模型學習,訓練完成后通過算法分類得出圖像的模型ID。 方案設計邏輯流程圖,方案代碼分為分為兩個業務流程,主體代碼負責抓取、合成圖像,算法代碼負責訓練和檢測功能。 2. 快速…

cat命令查看文件行數

在Linux和Unix-like操作系統中,cat命令主要用于查看文件內容,而不是直接用來查看文件行數。如果你想要查看一個文件的行數,可以使用以下幾種方法: 方法1:使用wc命令 wc(word count)命令可以用…

git清理已經刪除的遠程分支

目錄 命令作用 使用場景 示例流程 注意事項 常見問題 git remote update origin --prune git remote update origin --prune 是一個 Git 命令,用于 更新本地遠程跟蹤分支 并 清理(刪除)本地已失效的遠程分支引用。以下是詳細分解&#…

NLP高頻面試題(四十)——什么是 BitFit?

BitFit(Bias-term Fine-tuning)是一種參數高效的微調方法,專注于在預訓練模型中僅調整偏置項(bias term),而將其他參數保持不變。這種方法在自然語言處理領域,尤其是在中小規模數據集上,展現出了與全量微調相媲美的性能,同時顯著減少了計算資源的消耗。 什么是 BitFi…

Java-servlet(完結篇)過濾器亂碼解決與監聽器

Java-servlet(完結篇)過濾器亂碼解決與監聽器 前言一、過濾器亂碼解決二、監聽器1. HttpSessionListener2. ServletContextListener3. ServletRequestListener 三、監聽器的使用場景Java-servlet 結語 前言 在之前的 Java Servlet 學習中,我…

為了避免unboundLocalError和為什么X的值一直不變呢?

## 1.為了避免unboundLocalError 發生unboundLocalError! def generate_integer(level):if level 1:X randint(1,9)return X這里出錯的原因在于,一旦if 后面的條件沒有成立,然后X根本沒出生,然后你去使用它,這是有…

opencv-python基礎

一.opencv-python簡述 其使用Numpy,所有OpenCV數組結構都轉換為Numpy數組,是一個高度優化的數據庫操作庫。 二.環境安裝 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python 三.基本概念 - 像素是圖像的基本單元,每個…

ReentrantLock 實現公平鎖和非公平鎖的原理!

🌟我的其他文章也講解的比較有趣😁,如果喜歡博主的講解方式,可以多多支持一下,感謝🤗! 🌟了解 ThreadLocal請看: ThreadLocal有趣講解,小白也能聽懂&#xff…

NLP高頻面試題(四十一)——什么是 IA3 微調?

隨著大型語言模型的廣泛應用,如何高效地將這些模型適配到特定任務中,成為了研究和工程實踐中的重要課題。IA3(Infused Adapter by Adding and Adjusting)微調技術,作為參數高效微調的一種新穎方法,提供了在保持模型性能的同時,顯著減少可訓練參數數量的解決方案。 IA3 …

swift菜鳥教程14(閉包)

一個樸實無華的目錄 今日學習內容:1.Swift 閉包1.1閉包定義1.2閉包實例1.3閉包表達式1.3.1sorted 方法:據您提供的用于排序的閉包函數將已知類型數組中的值進行排序。1.3.2參數名稱縮寫:直接通過$0,$1,$2來順序調用閉包的參數。1.3.3運算符函…

藍橋杯-藍橋幼兒園(Java-并查集)

并查集的核心思想 并查集主要由兩個操作構成: Find:查找某個元素所在集合的根節點。并查集的特點是,每個元素都指向它自己的父節點,根節點的父節點指向它自己。查找過程中可以通過路徑壓縮來加速后續的查找操作,即將路…

ruby內置全局變量

以下是 Ruby 中常見的 內置全局變量 及其用途的詳細說明。這些變量以 $ 開頭,由 Ruby 解釋器自動管理,用于訪問系統狀態、異常、輸入輸出等核心信息。 一、異常處理相關 全局變量說明示例$!當前作用域最后拋出的異常對象(等同于 rescue >…

tcp轉串口

windows 在 Windows 系統上,可以使用以下成熟的串口轉 TCP 工具: HW VSP3 (HW Virtual Serial Port) 提供串口到 TCP/IP 的映射功能。支持虛擬串口和網絡通信。下載地址:HW Group com0com com2tcp 開源工具,支持虛擬串口和 TCP…

HTML視頻和音頻

<video>元素 <video>元素用于在HTML文檔中嵌入視頻內容。 <video controls><source src"movie.mp4" type"video/mp4"><source src"movie.ogg" type"video/ogg">您的瀏覽器不支持 HTML5 video 標簽。 …

DeepSeek:重構辦公效率的AI新范式

目錄 一、效率躍遷的三重引擎 二、效率提升的量級突破 三、智能辦公的范式轉移 四、未來辦公的效率奇點 當企業主面對堆積如山的文件審批、跨時區協作的溝通損耗、重復機械的數據整理時&#xff0c;是否想過這些場景正在吞噬團隊的生產力&#xff1f;據麥肯錫研究顯示&…

redis 延遲雙刪

Redis延遲雙刪是一種用于解決緩存與數據庫數據一致性問題的策略&#xff0c;通常在高并發場景下使用。以下是其核心內容&#xff1a; 1. 問題背景 當更新數據庫時&#xff0c;如果未及時刪除或更新緩存&#xff0c;可能導致后續讀請求仍從緩存中讀取舊數據&#xff0c;造成數…

Python設計模式:策略模式

1. 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是一種行為型設計模式&#xff0c;它定義了一系列算法&#xff0c;將每個算法封裝起來&#xff0c;并使它們可以互換。策略模式使得算法的變化獨立于使用算法的客戶。換句話說&#xff0c;策略模式允許在運…