原创 徹底理解紅黑樹(二)之 插入 前言 1. 紅黑樹的定義 2.旋轉 3. 插入平衡 情形3. 父紅-叔紅 情形4. 父紅-叔黑 4. 插入總結與實例

徹底理解紅黑樹(一)之 二叉搜索樹 徹底理解紅黑樹(二)之 插入 徹底理解紅黑樹(三)之 刪除 前言 紅黑樹的插入情況並不算複雜,建議閱讀本文後,自己動手試試,一來印證本文是否正確,二來自己嘗試着摸一些規律,加深印象(文末也有一個簡單的例子

原创 徹底理解紅黑樹(一)之二叉搜索樹 1. 二叉搜索樹的定義 2. 查找 3. 插入 4. 刪除 5. 二叉搜索樹的問題

徹底理解紅黑樹(一)之二叉搜索樹 徹底理解紅黑樹(二)之插入 徹底理解紅黑樹(三)之刪除 1. 二叉搜索樹的定義 二叉搜索樹(Binary Search Tree),(又:二叉查詢樹,二叉排序樹)它或者是一棵空樹,或者是具有下列性質的二叉

原创 徹底理解紅黑樹(三)之 刪除 前言 1.刪除動作 2.刪除後的平衡 情形3 兄弟節點爲紅色(S=紅) 3.刪除總結與實例

徹底理解紅黑樹(一)之 二叉搜索樹 徹底理解紅黑樹(二)之 插入 徹底理解紅黑樹(三)之 刪除 前言 紅黑樹的刪除情況相對插入會複雜一些,這裏以個人認爲較好理解和記憶的方式進行分類,和其他一些文章(比如維基百科)的表達可能不一樣,但是實際上

原创 逐步瞭解Paxos 前言 1. 基本概念 2. Paxos的推導 3. Paxos完整算法 參考資料

前言 Lamport老爺子的那篇《Paxos Made Simple》論述實在太跳脫,像極了高數答案中的“顯然”,“易證”一般,以致於剛開始瞭解Paxos的人看得一臉懵逼。 本文希望能夠通過簡單的圖文,爲大家簡單逐步介紹Paxos涉及的相關

原创 Java內存模型簡析 1. 從CPU到Java內存模型 2. 優化帶來的重排序 3. happends-before 4. volatile與內存屏障

從CPU到Java內存模型 1.1 從CPU內存模型說起 1.2 Java內存模型的引入 優化帶來的重排序 2.1 編譯器優化重排序 2.2 指令級並行重排序 2.3 緩存優化重排序 happends-before 3.1 happend

原创 加密、簽名、證書的作用及運用場景 前言 1. 常見加密類型 2 使用場景

前言 本文主要是簡單介紹了常見的加密類型、各自的運用場景、爲什麼需要數字簽名和數字證書、HTTPS涉及到的加密流程等。這裏主要從使用者的角度出發,對算法本身不做過多介紹。 1. 常見加密類型 對稱加密:一把密鑰,加解密使用同一把密鑰

原创 從HashSet到布隆過濾器 前言 1. 傳統的HashSet 2. 不精準的HashSet 3. 布隆過濾器

前言 魚和熊掌不可兼得的道理在計算機的世界中普遍適用,我們在設計程序時,總是需要做各種各樣的取捨平衡(trade-off),比如用空間換時間,又或者用時間來換空間。 而從HashSet到布隆過濾器,則是時間/空間和程序精準度的一個平衡取捨。

原创 三色標記法與讀寫屏障 前言 1. 垃圾回收的簡單回顧 2. 三色標記法 參考資料

前言 本文主要介紹了三色標記法的基本思路、多標導致的浮動垃圾、漏標的處理方案(讀寫屏障)等。 1. 垃圾回收的簡單回顧 關於垃圾回收算法,基本就是那麼幾種:標記-清除、標記-複製、標記-整理。在此基礎上可以增加分代(新生代/老年代),每代採

原创 MVCC基本實現原理以及與事務隔離級別的關聯 1. 基礎知識 2. MVCC 3. 總結

1. 基礎知識 1.1 常規讀和帶鎖讀 帶鎖讀(當前讀):如select .. lock in share mode、select .. for update、以及隱含當前讀的insert、update、delete等(讀出來才能進行更新

原创 徹底理解紅黑樹(二)之 插入

徹底理解紅黑樹(一)之 二叉搜索樹 徹底理解紅黑樹(二)之 插入 徹底理解紅黑樹(三)之 刪除 前言 紅黑樹的插入情況並不算複雜,建議閱讀本文後,自己動手試試,一來印證本文是否正確,二來自己嘗試着摸一些規律,加深印象(文末也有一個簡單的例子

原创 Java巧用lambda,異步方法優雅寫法

瞭解lambda的基本原理 加入lambda之後,很多寫法都變得簡單起來,如創建一個線程對象,可以: new Thread(new Runnable() { @Override public void run() {

原创 SpringBoot的自動配置玩法,學會寫自己的starter

我們以一個簡單的例子來談談組件中的一個Bean,可以通過怎樣的方式註冊到業務方的Spring容器中; 首先我們來回顧下以前常用的配置方式,然後嘗試着結合@EnableConfiguration達成全自動配置,順帶了解條件註解@Conditi

原创 驗證碼校驗的玩法,從單臺、集羣到分佈式

驗證碼的校驗原理其實很簡單: 客戶端請求驗證碼; 服務端生成校驗碼(code_key-code_value),code_key是一次驗證碼請求和校驗的標識(也有稱會話id),會返回給客戶端;code_value表示正確的驗證碼(通常以字符

原创 MySQL InnoDB和MyISAM索引結構簡析與對比

B+樹 我們這裏關注B+樹的兩個特性: 葉子節點包含數據data(data並不特指數據庫中的某一行數據,也可以是某個數值,指針等) 葉子節點均在同一層,且每個節點均可以直接找到上一個或者下一個節點(雙向指針,比常規的B+樹多了一個指向上

原创 徹底理解紅黑樹(三)之 刪除

徹底理解紅黑樹(一)之 二叉搜索樹 徹底理解紅黑樹(二)之 插入 徹底理解紅黑樹(三)之 刪除 前言 紅黑樹的刪除情況相對插入會複雜一些,這裏以個人認爲較好理解和記憶的方式進行分類,和其他一些文章(比如維基百科)的表達可能不一樣,但是實際上