原创 MySQL系列3:緩衝池Buffer Pool的設計思想

1. 回顧 上一篇我們主要講了InnoDB的存儲引擎,其中主要的一個組件就是緩存池Buffer Pool,緩存了磁盤的真實數據,然後基於緩存做增刪改查操作,同時配合了後續的redo log、刷磁盤等機制和操作。如下圖: 這一篇,深入該組件

原创 MySQL系列2:InnoDB存儲引擎

1. 架構回顧 上一篇我們講解了MySQL的邏輯架構,重新回顧一下,用一張新的圖來認識一下該架構。 整體架構分爲service層與存儲引擎層,請求交給連接池後,由後臺線程處理,並將請求轉發給SQL接口,隨後交給解析器執行,如果解析器發現命

原创 MySQL體系架構

1. 背景 剛入行時,大部分Java工程師對MySQL停留在一個黑盒的認識,包括我自己。最近一段時間,這幾年通過項目實踐與不斷反思,對MySQL的新認知提升到一個新層次,供大家分享。 下圖是初始階段的認識,就是對數據庫建庫、建表、建索引,然

原创 分佈式事務模型與常見解決方案

1. 背景 首先拋出一個問題,如果在一臺機器上,數據庫是如何解決事務問題的?很容易想到,數據庫的ACID四個特性來保證的,原子性、一致性、隔離性和持久性。 原子性(Atomicity):一個事務內的所有操作看成一個原子操作,要麼全部執行,

原创 【spring源碼系列】之【FactoryBean類型的接口】

1.概述 目前我們知道,spring創建bean有多種方式,比如xml方式創建,比如@Component,@Service,@Controler,@Repository註解創建,比如@Autowired依賴注入創建,後續還有通過spring

原创 【多線程與高併發原理篇:4_深入理解synchronized】

1. 前言 越是簡單的東西,在深入瞭解後發現越複雜。想起了曾在初中階段,語文老師給我們解說《論語》的道理,順便給我們提了一句,說老子的無爲思想比較消極,學生時代不要太關注。現在有了一定的生活閱歷,再來看老子的《道德經》,發現那纔是大智慧,《

原创 【多線程與高併發原理篇:3_java內存模型】

1. 概述 Java 內存模型即 Java Memory Model,簡稱 JMM。從抽象的角度來看,JMM 定義了線程和主內存之間的抽象關係,線程之間的共享變量存儲在主內存中,每個線程都有一個私有的工作內存,工作內存中存儲了該線程以讀/寫

原创 分佈式緩存--緩存與數據庫強一致場景下的方案

1. 概述 緩存與數據庫的強一致性,也稱線性一致性,核心要求是:數據庫中的值發生變更,緩存數據要實現同步複製,並且一旦操作完成,隨後任意客戶端的查詢都必須返回這一新值。以下圖爲例,一旦寫入b完成,必須保證讀到;而寫入過程中,認爲值的跳變可能

原创 分佈式緩存--緩存與數據庫一致性方案

1. 概述 緩存設計是應用系統設計中重要的一環,是通過空間換取時間的一種策略,達到高性能訪問數據的目的;但是緩存的數據並不是時刻存在內存中,當數據發生變化時,如何與數據庫中的數據保持一致,以滿足業務系統要求,本篇將給出具體分析。 2. 強一

原创 【spring源碼系列】之【Bean的銷燬】

以“冬奧之光,多彩冰燈”爲主題的第四十一屆全國專業冰雕比賽在冰城哈爾濱市進入第二天,60名冰雕高手在哈爾濱冰燈藝術遊園會園區展開激烈的競技比拼。 冰雕藝術 1. 概述 Bean的銷燬是Bean的生命週期中最後一步,比如在Tomcat等容器

原创 【趣味設計模式系列】之【組合模式】

1. 簡介 組合模式(Composite Pattern):將對象組合成樹形結構以表示部分-整體的層次關係。 2. 示例 假設要設計一個文件系統的目錄,需要靈活的在某個目錄下添加、刪除目錄或文件,統計指定目錄下的文件個數,計算指定目錄下的文

原创 【多線程與高併發原理篇:1_cpu多級緩存模型】

1. 背景 現代計算機技術中,cpu的計算速度遠遠高於主內存的讀寫速度。爲了解決速度不匹配問題,充分利用cpu的性能,在cpu與主內存之間加入了多級緩存,也叫高速緩存,cpu讀取數據直接從高速緩存中讀取,寫數據也類似,最後將數據從高速緩存同

原创 【多線程與高併發原理篇:2_緩存一致性的解決方案】

1. 概述 上一篇拋出了一個緩存不一致問題,即多線程在多cpu執行過程中,各cpu高速緩存之間會出現數據不一致,或者cpu高速緩存與主內存數據不一致。從計算機的發展歷史看,解決緩存數據不一致,先後出現了兩種方案,一種是總線加鎖,該方案現在基

原创 【spring源碼系列】之【Bean的循環依賴】

希望之光永遠向着目標清晰的人敞開。 1. 循環依賴概述 循環依賴通俗講就是循環引用,指兩個或兩個以上對象的bean相互引用對方,A依賴於B,B依賴於A,最終形成一個閉環。 Spring循環依賴的場景有兩種: 構造器的循環依賴 fi

原创 【spring源碼系列】之【Bean的初始化】

只要不放棄,希望遲早都會到來! 1. Bean的初始化 如果把bean的生命週期看作一個嬰兒誕生過程的,那麼創建實例相當於嬰兒從母體出來,一絲不掛光禿禿;屬性賦值相當於給寶寶的頭帶帽子,上身穿衣服、下神穿褲子、還有腳丫穿襪子;而初始化