原创 源碼分析Jedis配置的TestOnBorrow實現原理及對應的lettuce配置

概述 Jedis的設置項中有一個testOnBorrow的配置項,這個配置項其實來自於Apache CommonPools,意思是從連接池中取出是檢查連接是否失活。 最近需要把項目中的Redis客戶端從Jedis切換成Lettuc

原创 《Redis深度歷險》讀書筆記

文章目錄1. Redis 的用途2. 字符串的實現3. 列表list3.1. quicklist4. 字典hash4.1. rehash5. 對象的過期時間6. 應用:分佈式鎖7. 應用:限流(zset,漏斗限流)8. 使用標準結

原创 openjdk11源碼從編譯到clion調試

1. 概述 先聲明環境: Ubuntu18 安裝並配置好JDK11(openjdk version “11.0.1” 2018-10-16) Clion2019.2 可以在docker裏面編譯,利用ubuntu的鏡像,然後安裝

原创 JDK11版HashMap源碼全部解析(詳細)-一文覆蓋各方面

1. 概述 本文很長,詳細描述了HashMap源碼級別的實現原理,並討論了包括擴容,hash計算,新建HashMap的開銷等問題,同時還提供了一些外部資料。由於內容太多,建議閱讀時結合目錄快速跳轉查看。 Java源碼閱讀最好採用

原创 一文搞懂Java8中表示當前的時間類Date、Instant、LocalDateTime、ZonedDateTime

1. 概述 Java8中的時間類主要有:Date、Instant、LocalDateTime(LocalDate、LocalTime)、ZonedDateTime,除去Date,java.time包下的那些時間類都是不可變類,也就

原创 解決JRebel進行代碼熱加載時FastJson的JsonField的緩存無法刷新問題

問題原因 FastJson爲了快速解析對象,會將已經解析過的對象的元信息緩存起來,所以關鍵就是清除其緩存,在沒有緩存的情況下其會再次生成。 相關Issue: jrebel修改後調用toString方法報錯問題 問題:修改屬性的類

原创 記錄下自己編譯Spring5源碼的過程(一)之處理依賴問題

緣起 這段時間一直接觸Spring,我這人就喜歡沒事看看源碼,搗鼓搗鼓寫東西,於是就想着研究下Spring的源碼,於是到Github下載了Spring5的源碼,嘗試着編譯,不過總是碰到些問題。比如:Gradle同步是老師報PKIX

原创 https的連接過程及數字證書詳解

文章目錄1. 概述2. 數字證書3. 連接過程3.1. 過程概括3.2. 具體過程4. 參考資料4.1. 推薦資料 1. 概述 https是http+SSL(TLS)的結合體,SSL(現在升級爲TLS了)是一種獨立的協議,可以與其

原创 劍指offer-重建二叉樹-Java版題解

概述 本題來自牛客網-劍指offer在線測評 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍

原创 快速排序的原理及其實現(C++及Java版)淺析

快速排序原理 時間複雜度:O(nlog n),最壞情況下是n^2。值得一提的是對於所有基於比較的排序,其能取得的最好時間複雜度爲O(nlog n),可以從數學上證明它。而不基於比較的排序(如桶排序),可以突破這個極限。 快速排序是

原创 如何打亂一個數組--數組shuffle實現及常見錯誤

定義打亂:對於一個數,它隨機跟其它位置或其本身位置交換 定義一個數組的打亂:數組中每一個數都被打亂成爲數組的打亂 import java.util.Random; /** * 參考自Java Collection源碼 * 定

原创 全排列算法本質與實現

本質 解決全排列問題本質是:二分法。 將某個數組的全排列看成是由第0個元素與其後所有元素的全排列組成。 做法是每次只需要挑選某個元素作爲當前排列的第0個元素,然後剩下的變成子問題遞歸來解決。 原理 設一個數組的長度爲n,則其全排列

原创 劍指offer-二維數組查找題解-本質與實現

概述 從左下開始找。 本質是利用:有序序列中最小的元素比target(目標元素)大,那麼target必然不在此序列中。因此也可以從右上找。 題目描述 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,

原创 wireshark過濾器語法全面解析

1. 概述 本文全面介紹了wireshark過濾器語法,wireshark包括捕獲過濾器和顯示過濾器,其中顯示過濾器的語法十分豐富,其實顯示過濾器的語法可以簡單概括爲:基本數據類型,協議對象,比較運算符,結合運算符,字符串函數與正

原创 Java通過註解實現一個接口--利用反射與代理

概述 傳統實現接口的方式需要implement才行,通過註解實現一個接口可以減輕每次都要implement的繁瑣。本文實現一個Demo來展示如何通過註解實現一個接口。 Code import java.lang.annotatio