原创 你說一下對Java中的volatile的理解吧

前言 volatile相關的知識其實自己一直都是有掌握的,能大概講出一些知識,例如:它可以保證可見性;禁止指令重排。這兩個特性張口就來,但要再往深了問,具體是如何實現這兩個特性的,以及在什麼場景下使用volatile,爲什麼不直接用sync

原创 你來講講AQS是什麼吧?都是怎麼用的?

前言 在Java面試的時候,多線程相關的知識是躲不掉的,肯定會被問。我就被問到了AQS的知識,就直接了當的問,AQS知道是什麼吧,來講講它是怎麼實現的,以及哪些地方用到了它。當時自己確實沒有講好,所以這次來總結一下這個知識點。 什麼是AQS

原创 來說說緩存穿透、緩存擊穿、緩存雪崩都是什麼?怎麼解決?

前言 看到題目就知道了,這又是我在面試中遇到的,最近面試,把我的博文質量感覺都提上來了。面一次試感覺夠我總結一週的,但還是每次都能遇到知識盲點,那以後就當面試總結是個掃盲的過程吧。 緩存穿透 面試的時候就被問到了這個問題,具體描述就是,正常

原创 synchronized底層是怎麼實現的?

前言 面試的時候有被問到,synchronized底層是怎麼實現的,回答的比較淺,面試官也不是太滿意,所以覺得要好好總結一下,啃啃這個硬骨頭。 synchronized使用場景 我們在使用synchronized的時候都知道它是可以使用在方

原创 來講講你對ThreadLocal的理解

前言 面試的時候被問到ThreadLocal的相關知識,沒有回答好(奶奶的,現在感覺問啥都能被問倒),所以我決定先解決這幾次面試中都遇到的高頻問題,把這幾個硬骨頭都能理解的透徹的說出來了,感覺最起碼不能總是一輪遊。 ThreadLocal介

原创 ConcurrentHashMap的size方法是線程安全的嗎?

前言 之前在面試的過程中有被問到,ConcurrentHashMap的size方法是線程安全的嗎? 這個問題,確實沒有答好。這次來根據源碼來了解一下,具體是怎麼一個實現過程。 ConcurrentHashMap的原理與結構 我們都知道Has

原创 MySQL是如何實現事務的ACID

前言 最近在面試,有被問到,MySQL的InnoDB引擎是如何實現事務的,又或者說是如何實現ACID這幾個特性的,當時沒有答好,所以自己總結出來,記錄一下。 事務的四大特性ACID 事務的四大特性ACID分別是,A-原子性(Atomicit

原创 深入理解JVM(③)Java的鎖優化

前言 從JDK5到JDK6HotSpot虛擬機開發團隊花費了大量的資源實現了各種鎖優化技術,如適應性自旋(Adaptive Spinning)、鎖消除(Lock Elimination)、鎖膨脹(Lock Coarsening)、輕量級鎖(

原创 深入理解JVM(③)再談線程安全

前言 我們在編寫程序的時候,一般是有個順序的,就是先實現再優化,並不是所有的牛P程序都是一次就寫出來的,肯定都是不斷的優化完善來持續實現的。因此我們在考慮實現高併發程序的時候,要先保證併發的正確性,然後在此基礎上來實現高效。所以線程安全是高

原创 深入理解JVM(③)線程與Java的線程

前言 我們都知道,線程是比進程更輕量級的調度執行單位,線程的引入,可以把一個進程的資源分配和執行調度分開,各個線程既可以共享進程資源調度(內存地址、文件I/O等),又可以獨立調度。 線程的實現 主流的操作系統都提供了線程實現,Jav語言則是

原创 深入理解JVM(③)學習Java的內存模型

前言 Java內存模型(Java Memory Model)用來屏蔽各種硬件和操作系統的內存訪問差異,這使得Java能夠變得非常靈活而不用考慮各系統間的兼容性等問題。定義Java內存模型並非一件容易的事情,從Java出生開始經過長時間的驗證

原创 深入理解JVM(③)Java的模塊化

前言 JDK9引入的Java模塊化系統(Java Platform Module System ,JPMS)是 對Java技術的一次重要升級,除了像之前JAR包那樣充當代碼的容器之外,還包括: 依賴其他模塊的列表。 導出的包列表,即其他模

原创 深入理解JVM(③)虛擬機的類加載器(雙親委派模型)

前言 先解釋一下什麼是類加載器,通過一個類的全限定名來獲取描述該類的二進制字節流,在虛擬機中實現這個動作的代碼被稱爲“類加載器(Class Loader)”。 類與類加載器 類加載器雖然只用於實現類的加載動作,但它在Java程序中起到的作用

原创 深入理解JVM(③)虛擬機的類加載過程

前言 上一篇我們介紹到一個類的生命週期大概分7個階段:加載、驗證、準備、解析、初始化、使用、卸載。並且也介紹了類的加載時機,下面我們將介紹一下虛擬機中類的加載的全過程。主要是類生命週期的,加載、驗證、準備、解析和初始化這五個階段所執行的具體

原创 深入理解JVM(③)虛擬機的類加載時機

前言 Java虛擬機把描述類的數據從Class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這個過程被稱爲虛擬機的類加載機制。 類加載的時機 一個類型從被加載到虛擬機內存中開始,到卸載除內存