原创 redis 系列——1、redis 字符串原理

概述 redis 作爲目前市面上應用最廣泛的 key-value 非關係型數據庫經常在項目中使用,它的高性能以及線程安全等優勢可以在很多場景中大放異彩。從本篇開始,我將通過一個系列的博客系統的整理 redis 相關的知識。本篇先從

原创 redis 系列——4、redis 字典

概述 上篇博客我簡單介紹了 redis 哈希表相關知識,本篇博客我打算在哈希表的基礎上,簡單整理一下 redis 字典的實現原理 字典 字典又稱爲符號表、關聯數組,映射等,它是一種保存鍵值對的抽象數據結構。 字典中的鍵是獨一無二

原创 redis 系列——3、redis 哈希表原理

概述 上篇博客我簡單整理了 redis 中鏈表的實現原理。本篇博客我打算就哈希類型簡單整理一下。 redis 數據類型 redis 有以下五種常用的數據類型: String:字符串類型 Hash:哈希類型 list:鏈表類型

原创 redis 系列——2、redis 鏈表原理

概述 上篇博客我簡單介紹了 redis 字符串的實現原理。除了字符串外,鏈表作爲一種常用的數據結構,提供了高效的節點重排能力以及順序性的節點訪問。redis 使用的C語言沒有內置鏈表結構,本篇博客我就來整理下 redis 鏈表類型

原创 透過源碼看本質——1、HashMap

概述 HashMap 作爲平時開發過程中常見的數據結構經常被用到,網上關於它的博文已經有非常多,爲了加深我對它的理解,我計劃就 JDK1.8 版本,通過源碼的形式整理下它的原理。 HashMap HashMap在源碼中是這樣定義

原创 最長迴文串問題(letCode 5)

問題描述 給定一個字符串 s,找到 s 中最長的迴文子串。你可以假設 s 的最大長度爲 1000。 示例 輸入: "babad" 輸出: "bab" 注意: "aba" 也是一個有效答案。 問題分析 迴文串的意思是“從前往後讀

原创 5、Java 線程類常用方法

概述 線程在運行過程中可以通過調用方法來修改狀態和屬性。本篇我們主要介紹 Java 線程常用的方法 Java 線程常用方法 我打算從以下三個模塊出發,依次介紹常用的線程方法: 實例方法 靜態方法 Object 繼承方法 1

原创 抽象理解進程和線程

概述 在前幾篇博客中,我係統的整理了上下文切換和用戶態以及內核態相關的知識,在整理過程中多次出現進程以及線程的概念。在學習其它博客時,我發現大部分博客內容前後矛盾,無法做到自圓其說,作爲讀者我也看得雲裏霧裏,完全搞不清楚線程和進程

原创 8、java 線程模型

概述 前面幾篇博客我係統的整理了 java 線程類 Thread 的使用、線程狀態及併發安全性問題。本篇博客我打算簡單的介紹一下 java 線程和操作系統線程之間的關聯,以及 java 線程如何被調度。 java 線程模型 本篇

原创 JAVA線程池源碼系列——1、線程池如何執行任務

概述 之前我寫了一篇博客,系統的介紹了線程池相關知識。感興趣的讀者可以點擊這裏查看之前的博客。 最近我打算實現一個簡單的線程池,在實現過程遇到很多問題,從中發現很多之前沒有搞懂的知識點。爲了查缺補漏,我打算整理一遍線程池核心功能的

原创 Java無鎖系列——2、CAS 實現原理 Unsafe 類簡單介紹

概述 在上篇博客中,我簡單介紹了無鎖同步 CAS 如何使用以及部分它的特性。本篇我打算整理一下 CAS 的實現原理即 Unsafe 類相關的知識。 Unsafe 本篇博客分以下幾個模塊展開: Unsafe 類簡單介紹 CAS

原创 “==”、equals() 和 hashCode()

概述 本篇博客簡單介紹一下 equals() 方法和 “==” 的區別,順帶解釋一下爲什麼在重寫 equals() 方法後還需要重寫 hashCode() 方法。 equals() 和 == 在 java 代碼中,一般通過 ==

原创 Java無鎖系列——1、CAS 簡單介紹及使用

概述 在前一個系列中,我簡單整理了 synchronized 鎖的使用和原理,即採用 Monitor 管程對象控制同時只能有一個線程佔有鎖對象,以此來保證多線程場景下的線程安全。除了這種通過鎖對象實現的同步,還有一種在不使用鎖的情

原创 6、Java 線程狀態切換圖

概述 上一篇博客我整理了 Java 線程常用的方法,其中提到 getState() 方法可以獲取線程的狀態。本篇博客主要通過流程圖的方式整理線程狀態的轉換方式: 線程狀態切換圖 本篇博客主要從以下兩個模塊展開: Java 線程

原创 Java鎖系列——1、Synchronized 簡單介紹及使用

概述 在前面的多線程專欄中,我們提到線程併發所帶來的安全性問題。導致安全性問題的主要原因是多個線程同時操作同一塊內存空間。在如何解決該問題時,我們提到:通過 鎖 的方式強制同時只能有一個線程操作共享內存,其他線程在該線程釋放鎖後進