原创 RAFT算法

參考資料: http://thesecretlivesofdata.com/raft/ RAFT算法1. 選舉算法:1.1. 粗糙的選舉過程描述1.2. 處理衝突2. 日誌同步3. 成員變更 1. 選舉算法: 我們來模擬一下

原创 Safepoint和OopMap

參考資料: https://www.iteye.com/blog/rednaxelafx-1044951 《深入理解Java虛擬機(周志明)》 1. 預備知識: 1.1 虛擬機棧的內存模型 略 1.2 GCRoots GC

原创 記一次@Component無效的問題

1. 問題描述 具體的業務就不說了 抽象出來的問題是, 有一個類 標記了 @Aspect 和 @Component ,但是切面卻沒有起作用 applicationContext.getBean(XXX.class); //找不到這

原创 字符串匹配算法BF(BruteForce)算法

代碼實現 /** * 暴利搜索的算法 * 找到第一個匹配的位置 * 時間複雜度爲O(n*m) * * @param str 主串 * @param regex 模式串 * @return -1表示沒找到,如果爲正

原创 BoyerMoore字符串算法(壞字符實現)

public class BoyerMooreDemo { public static void main(String[] args) { // String str = "1234567

原创 tar打包壓縮命令

打包壓縮命令 tar cf xxx.tar yyy 打包指定目錄, xxx表示打包好的文件名, yyy表示需要將哪個文件打包 tar czf xxx.tar.gz yyy 打包的同時進行壓縮,建議打包的名字最好.tar.gz作爲

原创 MySQL的InnoDB中的各種鎖是怎麼工作的

參考 https://dev.mysql.com/doc/refman/8.0/en/innodb-locking.html MySQL各種鎖0. 預備知識1. 行級鎖1.1. 共享鎖`Shared Locks` (`S`)1

原创 JVM PC(程序計數器 program counter)

The pc Register 官方原文: The Java Virtual Machine can support many threads of execution at once (JLS §17). Each Java

原创 如何用ZK實現分佈式鎖

如何用ZK實現分佈式鎖 我們這裏用最基礎的ZK的API來模擬一個分佈式鎖競爭的場景: 假設現在有兩個角色: Node1, Node2 時刻1: #Node1 獲取鎖 create -e /lock 時刻2: #N

原创 學習MySQL的redo log

MySQL學習筆記 redo log1. 什麼是WAL(Write-Ahead Logging)1.1 百度百科:1.2 大白話說就是:舉個例子:2. 什麼是redo log3. 爲什麼要用redo log3.1. 提高寫效率

原创 爲什麼MySQL要用B+Tree來做索引

爲什麼MySQL要用B+Tree0. 預備知識1. 存儲介質1.1 機械硬盤名詞解釋1.1.1 盤面1.1.2 磁道1.1.3 扇面1.1.4 扇區1.1.5 簇(linux叫塊)1.2 爲什麼操作系統操作磁盤的最小單位是簇1.

原创 linux文件件權限

權限限制是針對非root用戶的 root用戶是不受權限限制的 1. 查看文件權限的方法 ls -l [文件路徑] 1.類型: -普通文件,d表示目錄文件,b塊特殊文件(設備),c字符特殊文件(終端),l符號鏈接(快捷方式

原创 redis緩存擊穿問題解決

網上看了很多解決緩存擊穿的方案, 我覺得不夠好,自己總結了一番 本文儘量使用大白話,儘量不寫代碼,請認真讀 希望能讓你們滿意 徹底解決redis緩存擊穿問題1. redis的緩存擊穿是什麼?2. 如何解決緩存擊穿2.1 普通的

原创 JVM指令學習

預備知識: class文件結構(todo) 操作數棧(todo) 局部變量表(todo) 本文粗略給JVM指令進行分類 關於指令集的官方文檔(JAVA8) 關於指令集的詳細使用方式請參閱: oracle官方指令集詳細文檔

原创 java中的volatile詳解

參考資料: 《深入理解java虛擬機》(周志明) java中的volatile詳解1. JAVA爲什麼要有一個volatile修飾符?2. 代碼不符合預期的問題2.1 工作內存帶來的`可見性`問題2.1.1 jvm內存模型2.1