MyBatis 源碼分析

其實很早就想寫一篇 iBatis 的源碼分析了, 不過有段時間去學習 Go 了, Java 就放下了, 最近 重新撿起 Java 就把以前沒填的坑,填一下. Init 現在開始正片. 首先是 iBatis 的初始化工作.我們看下面的代碼: 1// `BlogDataSourceFactory`的主要作用: 通過你的配置文件, 初始化一個DataSource 2DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); 3// JdbcTransactionFactory一個New就能得到, 沒什麼依賴條件 4TransactionFactory transactionFactory = new JdbcTransactionFactory(); 5// Environment要你交出數據源和事務工廠還有你的環境是開發還是生產 6Environment environment = new Environment("development", transactionFactory, dataSource); 7// Configuration有基本上你所有的配置 8Configuration configuration = new Configuration(environment); 9// 添加你的mapper到配置列表中, 等會我們去分析它 10configuration.addMapper(BlogMapper.class); 11// 通過你的配置類,讓我們初始化一個SqlSessionFactory! 我們終於進入正題了!! 12// 可能你覺得很快... 其實本人在這裡面分析還是花了很長時間 13SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); 好, 上文有說configuration.addMapper(BlogMapper.class)這個方法, 現在我們來分析一下它. ...

2020年09月10日 · 9 分钟 · 4031 字 · sdttttt

GoSyncPool

今天在看Sentinel-golang源碼的時候發現sentinel在內部使用了sync.Pool該結構體.看到Sync和Pool的我第一反應想到應該是線程池之類的東西.在實際看過原理之後發現並不是這樣的. ...

2020年09月03日 · 2 分钟 · 578 字 · sdttttt

B Tree

這篇文章以數據庫存儲的數據結構來引出本文的重點B樹,以及後面還有另一種數據結構B+樹. 試想, 如果你想持久化大量的數據在硬盤上, 同時還希望能高效的查詢和修改他們, 你會怎麼做, 使用哪種數據結構. 數組和鏈表, 他們的缺點很明顯, 我們尋找數據需要遍歷整個數據結構, 試想一下你的數據庫中有50PB的數據, 這個開銷是我們無法接受的. ...

2020年08月30日 · 2 分钟 · 999 字 · sdttttt

Blog Upgrade

這幾天修改了這個Blog的主題, 加載速度應該是更快了, 而且優化了整個項目的自動部署. 取消了雙倉庫的部署策略, 在部署任務的執行上也用上了異步. 現在每次修改完成後的生成以及部署的速度比以前快了大概40%左右.但是訪問Github Page的速度還是一如既往的的滿.

2020年08月29日 · 1 分钟 · 129 字 · sdttttt

Thread Pool Executor 運行細節

先說說線程池本身, 由於線程資源本身在計算機中比較昂貴, 創建和銷燬都有相當的開銷, 所以在一些處理簡單但是併發量大的場景使用一個請求對應一個線程的是不明智的選擇. ThreadPoolExecutor是Java中線程池的一種實現. 構造函數如下: ...

2020年08月25日 · 1 分钟 · 418 字 · sdttttt

Raft實現的思考

比較Raft算法和Paxos算法之後,確實能感受到Raft算法更加接近正常人的思維邏輯, Paxos反而比較專業? 本文會說一些Raft算法實現上的一些考量, 我目前還沒有正式開始開發Raft的實現. 文中所有的內容僅供參考. ...

2020年06月25日 · 1 分钟 · 290 字 · sdttttt

Red Black Tree

半年前在研究HashMap的時候已經學習過紅黑樹的規則原理了. 不過現在又遇到就忘記是怎麼實現的了.(只知道這玩意是用來平衡樹的) 這次就把這個數據結構做一個了斷. 性質 性質1:每個節點要麼是黑色,要麼是紅色。 性質2:根節點是黑色。 性質3:每個葉子節點(NIL)是黑色。 性質4:每個紅色結點的兩個子結點一定都是黑色。 性質5:任意一結點到每個葉子結點的路徑都包含數量相同的黑結點。 滿足這5個性質就能保證紅黑樹是平衡的. ...

2020年05月25日 · 2 分钟 · 924 字

Stack by Rust implement

2020年05月20日 · 0 分钟 · 0 字

Tree by Rust implement

2020年05月20日 · 0 分钟 · 0 字

一致性哈希算法

第一代分佈式系統採用的是中心化的系統,對於存貯大量數據的分佈式系統來說它的缺點就是中央節點成為了整個個分佈式系統的單點故障. 第二代分佈式系統,節點之間通行採用的是廣播,每個節點都向自己相連的所有節點進行詢問,被詢問的節點如果不知道這個文件在哪裡,就再次進行廣播……如此往復,直至找到所需文件。請求變多就意味著會產生廣播風暴,這會嚴重佔用帶寬和系統資源。 ...

2020年04月27日 · 5 分钟 · 2120 字