原创 Spring探祕1:BeanFactory與FactoryBean

        BeanFactory和FactoryBean都是Spring框架中重要的接口,名字很像,但是功能上是有很大的不同的。 先上結論 相同點 都是接口 都沒有父接口,是Spring框架中比較基礎的接口 不同點 B

原创 Java筆記3:Collection接口

Java集合     Java中集合類主要用於保存、盛裝其他類型的數據,因此集合類也稱爲容器類。所有的集合類都位於java.util包下,容器類只能保存引用類型。Java中的集合類主要有兩個接口:Collection和Map,本文

原创 JVM筆記2:垃圾收集器

JVM的垃圾收集器(Garbage Collector)管理的是Java堆和方法區的垃圾回收。 GC需要完成三件事:哪些內存需要回收(即判定垃圾)?什麼時候回收?如何回收(垃圾收集算法)? 垃圾判定算法 引用計數算法 對指向

原创 算法筆記:動態規劃(2)

問題類型        在LeetCode上目前共有200道左右的動態規劃相關的題,根據現有題目可以總結出一些題型,熟悉題型以及相關的描述能夠幫助我們更準確地判斷動態規劃使用的場景。 通向目標點的最小(最大)路徑 不同方法數 區

原创 Java筆記2:String,StringBuilder,StringBuffer

String、StringBuilder和StringBuffer的區別 String StringBuilder StringBuffer 是否可變 不可變 可變 可變 線程安全 安全1 不安全 安全 拼

原创 Java筆記1:Object類源碼

Object類是Java類層次結構的根節點,定義了一些最抽象的方法。 registerNatives() private static native void registerNatives(); static { re

原创 算法筆記:並查集(union-find算法)

問題建模 動態連通性問題        對於一類問題,問題的輸入是一些對象兩兩之間的“相連關係”,並且這種“相連關係”是一種等價關係,即它具有以下性質: 自反性:任何對象和其自身都是相連的; 對稱性:如果p和q是相連的,那麼q和

原创 Java筆記4.1:HashMap源碼探索

基本數據模型     在HashMap的實現中,最基本的數據模型有兩個,分別是用來表示一個鍵值對的類Node<K, V>和用於保存所有鍵值對的數組transient Node<K,V>[] table;。Node<K, V>的部分

原创 JVM筆記3:線程安全與鎖優化

線程安全     給“線程安全”下一個嚴謹且可操作的定義:當多個線程同時訪問一個對象時,如果不用考慮這些線程在運行時環境下的調度和交替執行,也不需要進行額外的同步或者在調用方進行任何其他的協調操作,調用這個對象的行爲都可以獲得正確

原创 Java筆記4:Map接口

Map接口     Map用於保存鍵值對(key-value),其中key不允許重複。Map接口的繼承樹如下: 可以看到,Map的子類層次與Set很像,Set接口下有HashSet,LinkedHashSet,SorterdSe

原创 Spring探祕0:源碼構建

       從源碼構建出Spring框架運行,方便探索Spring源碼。 構建環境 OS: MacOS 10.15.2 JDK 1.8 Spring 源碼版本:5.1.x Gradle: 項目源碼自帶的Gardle Wrapp

原创 Spring探祕2.1:容器啓動中的refresh方法

    在前一篇文章Spring探祕2:ApplicationContext啓動流程中提到了Spring容器啓動的最後一步是refresh,即配置的刷新,這是容器啓動過程中一個核心的步驟,實現了啓動容器的主要的功能。本文會簡單介紹

原创 Spring探祕2:ApplicationContext啓動流程

     ApplicationContext是Spring框架中最基礎的接口之一,可以認爲其實現類就是一個Spring的環境(容器),而一個簡單的Spring應用的啓動過程就是一個ApplicationContext的實現類的實

原创 JVM筆記1:Java內存區域

運行時數據區域        在Java程序運行時,Java虛擬機將其管理的內存劃分爲不同的運行時數據區域: 程序計數器        如果對計算機組成有所瞭解的話,應該很容易理解程序計數器(PC),可以認爲其中的數據就是下一條

原创 算法筆記:動態規劃(1)

何時能夠使用動態規劃        動態規劃(Dynamic Programming, DP)與其說是一種算法,更準確地說是一種解決問題的思維方式,因爲其並沒有對所有相關問題抽象出一種通用的算法程序,而是要在解題時根據具體的問題運