原创 Java數據結構篇五:Hashtable

前言 HashTable:(1)不允許null鍵null值 (2)線程安全 (3)Hashtable默認的初始大小爲11,之後每次擴充,容量變爲原來的2n+1 第1部分 Hashtable介紹 Hashtable 簡介 和HashM

原创 Java併發基礎四:CAS詳解

前言 大家可能都聽說說 Java 中的併發包,如果想要讀懂 Java 中的併發包,其核心就是要先讀懂 CAS 機制,因爲 CAS 可以說是併發包的底層實現原理。本篇就帶大家讀懂 CAS 是如何保證操作的原子性的。 背景:在JDK 5之前J

原创 Java併發基礎一:線程池詳解

前言 假如沒有線程池,當存在較多的併發任務的時候,每執行一次任務,系統就要創建一個線程,任務完成後進行銷燬,一旦併發任務過多,頻繁的創建和銷燬線程將會大大降低系統的效率。線程池能夠對線程進行統一的分配,通過固定數量的線程來負責處理

原创 Java併發基礎三:Java內存模型(JMM)

前言 在併發編程需要處理的兩個關鍵問題是:線程之間如何通信 和 線程之間如何同步。通信 是指線程之間以何種機制來交換信息。在命令式編程中,線程之間的通信機制有兩種:共享內存 和 消息傳遞。同步: 是指程序用於控制不同線程之間操作發

原创 Java數據結構篇七:HashSet詳解

HashSet介紹 HashSet繼承自AbstractSet,HashSet基於HashMap實現的,HashSet 底層使用HashMap 來保存所有元素。將HashSet的數據作爲HashMap的Key值保存,利用HashM

原创 Java併發基礎八:深入理解Synchronized

前言 synchronized,是Java中用於解決併發情況下數據同步訪問的一個很重要的關鍵字。當我們想要保證一個共享資源在同一時間只會被一個線程訪問到時,我們可以在代碼中使用synchronized關鍵字對類或者對象加鎖。在JDK1.6

原创 Java併發基礎六:併發工具類(2)CyclicBarrier

CyclicBarrier是什麼 CyclicBarrier是JDK1.5開始提供的併發編程,輔助工具類。用於併發編程的。在源碼中使用 ReentrantLock 和 Condition 的組合來使用,CyclicBarrier字面意思是

原创 Java併發基礎七:深入理解ThreadLocal

ThreadLocal是什麼? ThreadLocal是線程本地變量,可以爲多線程的併發問題提供一種解決方式,當使用ThreadLocal維護變量時,ThreadLocal爲每個使用該變量的線程提供獨立的變量副本,所以每一個線程都可以獨立

原创 Java虛擬機三:JVM的類加載機制

1.什麼是類的加載 類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法區內,然後在堆區創建一個java.lang.Class對象,用來封裝類在方法區內的數據結構。類的加載的最終產品是位於堆區中的Cl

原创 Java併發基礎六:併發工具類(3)Semaphore

Semaphore是什麼? Semaphore中文意思是信號量,也是一個線程併發的輔助類,Semaphore實現了線程同步框架AQS,它的本質是一個"共享鎖",使用Semaphore可以控制同時訪問資源的線程個數,但是不保證線程執行順序。

原创 Java併發基礎二:CPU內存結構與MESI緩存一致性詳解

前言 在單核電腦中,處理問題要簡單的多。對內存和硬件的要求,各種方面的考慮沒有在多核的情況下複雜。電腦中,CPU的運行計算速度是非常快的,而其他硬件比如IO,網絡、內存讀取等等,跟cpu的速度比起來是差幾個數量級的。而不管任何操作

原创 Java數據結構篇六:List集合詳解

前言 Java集合就像一個容器,可以存儲任何類型的數據,也可以結合泛型來存儲具體的類型對象。在程序運行時,Java集合可以動態的進行擴展,隨着元素的增加而擴大。在Java中,集合類通常存在於java.util包中。 Java集合

原创 Java虛擬機二:JVM性能調優

堆空間的劃分 Java中的堆是JVM所管理的最大的一塊內存空間,主要用於存放各種類的實列對象。這樣劃分的目的是爲了使JVM能夠更好的管理堆內存中的對象。堆的內存劃分如圖: Java堆的內存劃分如圖所示,分別爲年輕代、Old Memory

原创 Spring基礎框架四:常見高頻Spring面試題

10道Spring核心面試題 Spring IoC、AOP 原理 Spring Bean 生命週期 Spring Bean 注入是如何解決循環依賴問題的 怎樣用註解的方式配置 Spring? Spring 事務爲何失效了 SpringMV

原创 面試算法:1.無重複字符的最長子串

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。 來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeatin