原创 Spring源碼——聲明式事務流程

前言 最近回顧了一下Spring源碼,準備用思維導圖的方式簡單的將整個源碼內容的流程展示出來,思維導圖、圖片等文件更新在https://github.com/MrSorrow/spring-framework倉庫中,閱讀博客不方便可以

原创 Spring源碼——動態AOP實現流程

前言 最近回顧了一下Spring源碼,準備用思維導圖的方式簡單的將整個源碼內容的流程展示出來,思維導圖、圖片等文件更新在https://github.com/MrSorrow/spring-framework倉庫中,閱讀博客不方便可以

原创 Spring源碼——ClassPathXmlApplicationContext流程

前言 最近回顧了一下Spring源碼,準備用思維導圖的方式簡單的將整個源碼內容的流程展示出來,思維導圖、圖片等文件更新在https://github.com/MrSorrow/spring-framework倉庫中,閱讀博客不方便可以

原创 排序——堆排序和TopK

前言 堆排序與TopK的問題,面試中還是經常問的,索性也整理一下。下面是徒手寫的,供參考. 堆排序 思路 堆的數據結構,本身就是一個二叉樹,二叉樹的每一個根節點始終大於兩個葉子的值,這就是大頂堆;如果始終小於兩個葉子節點的值,這就是小

原创 MySQL——深入理解事務與鎖

前言 本文內容主要參考自《高性能MySQL》、《深入淺出MySQL》、《MySQL DBA 修煉之道》書中的關於事務與鎖相關章節,其中《深入淺出MySQL》講的最爲深入,這篇博客算是幾本書的綜合提煉以及個人理解補充。 上次主要講了My

原创 MySQL——三大範式與數據庫設計

前言 本文內容主要參考自《MySQL DBA 修煉之道》書中的第四章,算是原書的實踐與補充。 上次主要講了MySQL的索引與 EXPLAIN 的用法,是MySQL中非常重要的一部分,這次將進入下一部分,有關數據庫的設計。 I. 三大範

原创 設計模式——單例模式實現

前言 單例模式的寫法有很多種,這裏線程安全的會有√標記,線程不安全的會指明問題。主要是在看完JVM虛擬機之後,從類加載過程、對象產生過程以及併發重排序的角度來分析問題,解釋單例模式的幾種寫法正確與否。 主要看源代碼上的註釋分析,目前本

原创 Jdk源碼——ArrayList解析

前言 本文主要針對 JDK1.8 的 ArrayList 源碼進行解析,主要看源碼註釋,代碼說明了全部實現細節。 I. 繼承結構 ArrayList 的繼承結構如下圖所示,下面我們進行一一解析。 Serializable Seria

原创 Jdk源碼——LinkedList解析

前言 本文主要針對 JDK1.8 的 LinkedList 源碼進行解析,主要看源碼註釋,代碼說明了全部實現細節。 ArrayList 相關解析可以參考 Jdk源碼——ArrayList解析 I. 繼承結構 LinkedList 的繼

原创 掛帆蓄力 破浪前行

往常,我會將這種總結寫在微博中,做個記錄,可能會隨便有陌生的人光顧。最早的時候可能還會發到朋友圈裏,心性太過張揚,彷彿在“叫囂”別人看我一年的成長。現在發在這裏,留下腳印,也算是和當年寫博客的初衷完全吻合。 時至今日才寫這麼一篇年終

原创 Think in Java——多態

多態調用 將 一個方法調用 和 一個方法主體 關聯起來被稱作綁定。綁定分爲前期綁定與後期綁定,多態方法的具體調用依靠前期綁定是不行的,編譯器不知道對象的具體類型無法具體調用,所以只能依靠後期綁定,也叫動態綁定、運行時綁定; Java

原创 Think in Java——複用類

複用類方法 Java複用代碼的思路有兩種: 組合:在新類中產生現有類的對象,再添加新的擴展成員與行爲; 繼承:新類繼承自現有類,擁有現有類的全部特性。 組合一般是將現有類型作爲新類型底層實現的一部分來加以複用,而繼承複用的是接口,

原创 Think in Java——訪問權限控制

包:庫單元 一個Java源代碼文件常被稱爲編譯單元(轉譯單元),一個編譯單元必須有一個後綴名 .java,而在一個編譯單元內只能有一個 public 類,類名與文件名相同。其他非 public 類主要是爲 public 類提供支持的

原创 Jdk源碼——AQS解析

前言 本文主要參考自《Java 併發編程的藝術》第五章內容,結合源碼對書中內容進行分析補充。 I. Lock接口 在 Lock 接口出現之前,Java程序是靠 synchronized 關鍵字實現鎖功能的,而 Java SE 5

原创 Think in Java——操作符

關係操作符 == 與 != 如果是對象比較,比較的是引用,並不是內容; 想要比較內容是否相等,則應該使用 equals() 方法。但對於基本數據類型,沒有 equals() 方法,直接使用 == 與 != ; 上述的應該兩字真正的含