Nov 03 2025
程序員Seven -
【設計模式】探索狀態模式在現代軟件開發中的應用
概述
【例】通過按鈕來控制一個電梯的狀態,一個電梯有開門狀態,關門狀態,停止狀態,運行狀態。每一種狀態改變,都有可能要根據其他狀態來更新處理。例如,如果電梯門現在處於運行時狀態,就不能進行開門操作,而如果電梯門是停止狀態,就可以執行開門操作。
類圖如下:
代碼如下:
public interface ILift {
//電梯的4個狀態
//開門狀態
public fina
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
【設計模式】使用中介者模式實現鬆耦合設計
概述
一般來説,同事類之間的關係是比較複雜的,多個同事類之間互相關聯時,他們之間的關係會呈現為複雜的網狀結構,這是一種過度耦合的架構,即不利於類的複用,也不穩定。例如在下左圖中,有六個同事類對象,假如對象1發生變化,那麼將會有4個對象受到影響。如果對象2發生變化,那麼將會有5個對象受到影響。也就是説,同事類之間直接關聯的設計是不好的。
如果引入中介者模式,那麼同事類之間的關係將變為星型結構,從下右
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
【設計模式】遍歷集合的藝術:深入探索迭代器模式的無限可能
概述
定義:提供一個對象來順序訪問聚合對象中的一系列數據,而不暴露聚合對象的內部表示。
結構
迭代器模式主要包含以下角色:
抽象聚合(Aggregate)角色:定義存儲、添加、刪除聚合元素以及創建迭代器對象的接口。
具體聚合(ConcreteAggregate)角色:實現抽象聚合類,返回一個具體迭代器的實例。
抽象迭代器(Iterator)角色:定義訪問和遍歷聚合元素的接口,通常包含 ha
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
【設計模式】通過訪問者模式實現分離算法與對象結構
概述
定義:封裝一些作用於某種數據結構中的各元素的操作(將數據結構於元素進行分離),它可以在不改變這個數據結構的前提下定義作用於這些元素的新的操作。
結構
訪問者模式包含以下主要角色:
抽象訪問者(Visitor)角色:定義了對每一個元素(Element)訪問的行為,它的參數就是可以訪問的元素,它的方法個數理論上來講與元素類個數(Element的實現類個數)是一樣的,從這點不難看出,訪問者模式
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
【設計模式】備忘錄模式教你如何優雅地處理狀態快照
概述
備忘錄模式提供了一種狀態恢復的實現機制,使得用户可以方便地回到一個特定的歷史步驟,當新的狀態無效或者存在問題時,可以使用暫時存儲起來的備忘錄將狀態復原,很多軟件都提供了撤銷(Undo)操作,如 Word、記事本、Photoshop、IDEA等軟件在編輯時按 Ctrl+Z 組合鍵時能撤銷當前操作,使文檔恢復到之前的狀態;還有在瀏覽器中的後退鍵、數據庫事務管理中的回滾操作、玩遊戲時的中間結果存檔
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
【設計模式】使用解釋器模式簡化複雜的語法規則
概述
如上圖,設計一個軟件用來進行加減計算。我們第一想法就是使用工具類,提供對應的加法和減法的工具方法。
//用於兩個整數相加
public static int add(int a,int b){
return a + b;
}
//用於兩個整數相加
public static int add(int a,int b,int c){
return a + b + c;
}
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
SpringCloud帶你走進微服務的世界
認識微服務
隨着互聯網行業的發展,對服務的要求也越來越高,服務架構也從單體架構逐漸演變為現在流行的微服務架構。這些架構之間有怎樣的差別呢?
單體架構
單體架構:將業務的所有功能集中在一個項目中開發,打成一個包部署。
單體架構的優缺點如下:
優點:
架構簡單
部署成本低
缺點:
耦合度高(維護困難、升級困難)
分佈式架構
分佈式架構:根據業務功能對系統做拆分,每個業務功能模塊作為獨立
設計模式
,
JAVA
,
後端
Nov 03 2025
程序員Seven -
一文帶你瞭解緩存和數據庫一致性問題
概述
緩存作為持久化存儲(如數據庫)的輔助存在,畢竟屬於兩套系統。理想情況下是緩存數據與數據庫中數據完全一致,但是業務最常使用的旁路緩存架構下,在一些分佈式或者高併發的場景中,可能會出現緩存不一致的情況。
在分佈式系統中,數據一致性是一個核心問題。根據系統的設計與需求,可以選擇實時強一致性(Strong Consistency)或最終一致性(Eventual Consistency)。
實時強一致
redis
,
MySQL
,
後端
Nov 03 2025
程序員Seven -
Redis有哪些部署方案?瞭解哨兵機制嗎?
Redis有哪些部署方案?
單機版*:單機部署,單機redis能夠承載的 QPS 大概就在上萬到幾萬不等。這種部署方式很少使用。存在的問題:1、內存容量有限 2、處理能力有限 3、無法高可用。
主從模式:一主多從,主負責寫,並且將數據複製到其它的 slave 節點,從節點負責讀。所有的讀請求全部走從節點。這樣也可以很輕鬆實現水平擴容,支撐讀高併發。master 節點掛掉後,需要手動指定新的
redis
,
後端
Nov 03 2025
程序員Seven -
Redis是如何高效管理有限內存的?
過期刪除策略的深度剖析
Redis 可以對 key 設置過期時間的,為了防止過期的key長期佔用內存,需要相應的過期刪除策略將過期的key刪除
基礎操作
Redis設置過期時間
setex key1 5 value1:創建記錄的時候指定過期時間,設置key1在5秒後過期
其實Redis這是一種基於創建時間來判定是否過期的機制,也即常規上説的TTL策略,當設定了過期時間之後不管有沒有被使用都會
redis
,
後端
Nov 03 2025
程序員Seven -
Redis容量評估模型
計算Redis容量,並不只是僅僅計算key佔多少字節,value佔多少字節,因為Redis為了維護自身的數據結構,也會佔用部分內存,本文章簡單介紹每種數據類型(String、Hash、Set、ZSet、List)佔用內存量,供做Redis容量評估時使用。當然,大多數情況下,key和value就是主要佔用,能解大部分問題
在看這裏之前,可以先看一下底層 - 數據結構 這篇文章
jemalloc內存分
redis
,
後端
Nov 03 2025
程序員Seven -
Redis是如何進行內存管理的?緩存中有哪些常見問題?如何實現分佈式鎖?
Redis內存管理
Redis的內存用完了會怎樣?
如果達到設置的上限,Redis的寫命令會返回錯誤信息(但是讀命令還可以正常返回)。
也可以配置內存淘汰機制,當Redis達到內存上限時會沖刷掉舊的內容。
Redis如何做內存優化?
可以好好利用Hash,list,sorted set,set等集合類型數據,因為通常情況下很多小的Key-Value可以用更緊湊的方式存放到一起。儘可能使用散列表(h
redis
Oct 26 2025
程序員Seven -
Springboot 常見面試題彙總
SpringBoot基礎
什麼是 Spring Boot?
SpringBoot是一個簡化 Spring 應用程序開發的框架,它的主要目標是減少 Spring 應用程序的配置和開發複雜性,使我們能夠更快地構建、測試和部署 Spring 應用。簡單來説,它通過提供默認配置、自動化配置和嵌入式服務器等功能,簡化了傳統Spring 應用的繁瑣配置過程。有人將一些依賴關係、默認配置都梳理好了,我們直接一個
springboot
,
JAVA
Apr 15 2025
程序員Seven -
ZooKeeper實現分佈式鎖
基礎
ZooKeeper的4個節點
持久節點:默認的節點類型,一直存在於ZooKeeper中
持久順序節點:在創建節點時,ZooKeeper根據節點創建的時間順序對節點進行編號
臨時節點:當客户端與ZooKeeper斷開連接後,該進程創建的臨時節點就會被刪除
臨時順序節點:按時間順序編號的臨時節點
ZK分佈式鎖相關基礎知識
zk分佈式鎖一般由多個節點構成(單數),採用 zab 一致
zookeeper
,
JAVA
,
後端