原创 基於源碼的Java集合框架學習⑥ Map接口

接口 Map<K,V> 將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射一個值。 此接口代替 Dictionary 類,後者完全是一個抽象類,而不是一個接口。 Map 接口提供三種collection 視圖,允許以鍵集、值

原创 基於源碼的Java集合框架學習⑬ TreeMap

類 TreeMap<K,V> SortedMap 接口的基於紅黑樹的實現。此類保證了映射按照升序順序排列關鍵字,根據使用的構造方法不同,可能會按照鍵的類的自然順序 進行排序(參見 Comparable),或者按照創建時所提供的比較

原创 JVM學習筆記① 類的生命週期以及類加載機制

類的生命週期 這 7 個階段中的:加載、驗證、準備、初始化、卸載的順序是固定的。但它們並不一定是嚴格同步串行執行,它們之間可能會有交叉,但總是以“開始”的順序總是按部就班的。至於解析則有可能在初始化之後纔開始,這是爲了支持Jav

原创 基於源碼的Java集合框架學習⑨ WeakHashMap

類 WeakHashMap<K,V> 以弱鍵 實現的基於哈希表的 Map。在 WeakHashMap 中,當某個鍵不再正常使用時,將自動移除其條目。更精確地說,對於一個給定的鍵,其映射的存在並不阻止垃圾回收器對該鍵的丟棄,這就使該

原创 基於源碼的Java集合框架學習⑩ Hashtable

類 Hashtable 此類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非 null 對象都可以用作鍵或值。 爲了成功地在哈希表中存儲和檢索對象,用作鍵的對象必須實現 hashCode 方法和 equals 方法。 Hasht

原创 基於源碼的Java集合框架學習⑪ IdentityHashMap

類 IdentityHashMap<K,V> 此類利用哈希表實現 Map 接口,比較鍵(和值)時使用引用相等性代替對象相等性。換句話說,在 IdentityHashMap 中,當且僅當 (k1 == k2) 時,才認爲兩個鍵 k1

原创 基於源碼的Java集合框架學習⑫ SortedMap接口

接口 SortedMap<K,V> 保證按照鍵的升序排列的映射,可以按照鍵的自然順序(參見 Comparable 接口)進行排序,或者通過創建有序映射時提供的比較器進行排序。對有序映射的集合視圖(由 entrySet、keySet

原创 基於源碼的Java集合框架學習⑮ Set接口

接口 Set 一個不包含重複元素的 collection。更正式地說,set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2,並且最多包含一個 null 元素。正如其名稱所暗示的,此接口模仿了數學上的 set 抽

原创 JVM學習筆記② JVM運行時數據區域

JVM所管理的內存將會包括以下幾個運行時數據區域: 方法區(Method Area) 方法區是各個線程共享的區域,存放類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。雖然Java虛擬機規範把方法區描述爲堆的一個邏輯部分,但

原创 基於源碼的Java集合框架學習⑯ HashSet以及TreeSet

類 HashSet 此類實現 Set 接口,由哈希表(實際上是一個 HashMap 實例)支持。它不保證集合的迭代順序;特別是它不保證該順序恆久不變。此類允許使用 null 元素。 此類爲基本操作提供了穩定性能,這些基本操作包括

原创 nginx的安裝以及配置

一、安裝 官網 https://nginx.org/en/download.html 命令 # 下載 wget https://nginx.org/download/nginx-1.14.2.tar.gz # 解壓 tar -zx

原创 hexo的安裝以及配置

一、前言 使用markdown寫東西比較多,所以決定棄掉之前自己用java寫的一個blog網站,改用hexo。 二、開始 1、安裝git以及node # 安裝git yum install git # 安裝node cd /usr

原创 委派模式

一、定義 委託模式是軟件設計模式中的一項基本技巧。在委託模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。委託模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採

原创 java 鎖框架

一、鎖框架結構 Lock接口:Lock接口支持那些語義不同(重入、公平等)的鎖規則。 ReadWriteLock接口:ReadWriteLock接口定義了一些讀取者可以共享而寫入者獨佔的鎖。 AbstractOwnableSynch

原创 線程池原理(ThreadPoolExecutor)

一、創建一個線程池對象 使用Executors創建一個線程池常用的方法如下: 1、newFixedThreadPool() 說明:初始化一個指定線程數的線程池,其中 corePoolSize == maxiPoolSize,使用 Li