原创 設計模式:創建型 - 建造者模式(生成器)

創建者模式,將一個複雜對象的結構與它的表示分離,使得通用的構建過程可以創建不同的表示 好處:使得建造代碼與表示代碼分離,由於建造者隱藏了該產品是如何組裝的,所以若需要改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了   UML

原创 設計模式:結構型 - 適配模式

適配器:將一個類的接口轉換成客戶希望的另外一個接口。適配器模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作   UML:   JAVA: public class AdapterTest { public sta

原创 設計模式:結構型 - 組合模式

什麼時候用組合模式? 需求中體現部分與整體層次的結構時,以及你希望用戶可以忽略組合對象與單個對象的不同,統一得使用組合結構中的所有對象時。   透明方式:Component中聲明所有用來管理子對象的方法,其中包括Add,Remove等。這

原创 設計模式:行爲模式 - 職責鏈模式

職責鏈模式:使多個對象都有機會處理請求,從而避免請求的發送者和接收者之間的耦合關係。將這個對象連成一條鏈,並沿着這條鏈傳遞該請求,直到有一個對象處理它爲止 職責鏈模式適合 當客戶提交一個請求時,請求是沿鏈傳遞直至有一個ConcreteHa

原创 設計模式:結構型 - 享元模式

享元模式:運用共享技術有效地支持大量細粒度的對象 如果一個應用程序使用了大量的對象,而大量的這些對象造成了很大的存儲開銷時就應該考慮使用;還有對象的大多數狀態可以外部狀態,如果刪除對象的外部狀態,那麼可以用相對較少的共享對象取代很多組對象

原创 緩存穿透 - 布隆過濾器

一:緩存擊穿問題   緩存擊穿表示惡意用戶模擬請求很多緩存中不存在的數據,由於緩存中都沒有,導致這些請求短時間內直接落在了數據庫上,導致數據庫異常。這個我們在實際項目就遇到了,有些搶購活動、秒殺活動的接口API被大量的惡意用戶刷,導致短時

原创 設計模式:行爲模式 - 解釋器模式

解釋器模式:給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子   UML:   JAVA: public class InterpreterTest { public static

原创 設計模式:行爲模式 - 中介者模式

中介者模式:用一箇中介對象來封裝一系列的對象交互。中介者使各對象不需要顯示德相互引用,從而使其鬆散,而且可以獨立得改變它們之間的交互 中介者模式很容易在系統中應用,也很容易在系統中誤用。當系統出現了“多對多”交互複雜的對象羣時,不要急於使

原创 將一個大文件拆分成小文件的小題目:Hash拆分小文件

題目一: 兩個30G的大文件,裏面存儲URL地址,現在有一臺8G內存的服務器,找出兩個文件中相同的值 根據hash值分成小文件(字符串或者數字,值相同則hash值相同 :  ss.get(0).hashCode()),然後兩個文件比較相同

原创 設計模式:行爲模式 - 備忘錄模式

備忘錄模式比較適用於功能複雜的,但需要維護或記錄屬性歷史的類,或需要保存的屬性只是衆多屬性中的一小部分時。發起者可以根據保存的記錄信息還原到前一個狀態 例如:當某個系統追蹤使用命令模式,需要實現命令的撤銷功能,那麼命令模式可以使用備忘錄模

原创 設計模式:行爲模式 - 狀態模式

狀態模式:當一個對象的內在狀態改變時允許改變其行爲,這個對象看起來像是改變了其類   主要解決: 當控制一個對象狀態轉換的條件表達式過於複雜時,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的邏輯簡化。  (當然,如果這個狀

原创 設計模式:結構型 - 橋接模式

橋接模式: 將抽象部分與它的實現部分分離,使他們都可以獨立得變化 系統可能有多角度分類,每一種分類都有可能變化,那麼就將這種多角度分離出來讓它們獨立變化,減少它們之間的耦合     UML: JAVA: public class Br

原创 分佈式鎖三種方法

實現分佈式鎖的三種方法:     基於數據庫實現分佈式鎖;      基於緩存(Redis等)實現分佈式鎖;      基於Zookeeper實現分佈式鎖; https://blog.csdn.net/wuzhiwei549/articl

原创 設計模式:創建型 - 單例模式

單例模式(Singleton):保證一個類僅有一個實例,並提供一個訪問它的全局訪問點   UML: JAVA: public class SingletonTest { public static void main(Stri

原创 設計模式:行爲模式 - 訪問者模式

訪問者模式:表示一個作用於某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作   UML:   JAVA: import java.util.LinkedList; import java.ut