原创 從spring容器啓動解析webmvc源碼

Spring webmvc啓動流程 本文將從spring容器啓動過程去分析springmvc源碼,首先我們思考一個問題: web容器在啓動的時候是怎麼將bean解析並加載到spring容器中的,像我們自己如果要啓動容器,那是不是要new

原创 rabbitmq高可用集羣搭建踩坑

rabbitmq高可用集羣搭建踩坑 搭建rabbtmq集羣時,執行 rabbitmqctl join_cluster rabbit@rabbit-node1報錯 Clustering node rabbit@slave1 wit

原创 AQS之ReentrantLock

AQS是AbstractQueuedSynchronizer的簡稱,它是java併發包很重要的一個工具類,像比較常見的ReentrantLock、CountDownLatch等都是在AQS的基礎上建立的。本文將從ReentrantLock

原创 AQS之CountDownLatch

CountDownLatch是java併發包中一個常見的類,本文將從源碼的角度來分析CountDownLatch的實現原理,而CountDownLatch是基於AQS的共享鎖模式來實現的,所以需要對AQS有一定的瞭解。

原创 volatile底層原理剖析

在理解volatile之前,我們先來熟悉下計算機執行程序的過程 要執行我們的應用程序,首先將我們的程序從磁盤上讀取到內存中,內存裏這個時候存放了要執行的指令和數據,要執行一條指令的時候,指令寄存器根據程序計數器PC中存放的下一條待執行指

原创 kafka架構和原理分析

目錄 kafka消費模式 kafka架構 kafka生產者消息發送流程 文件存儲機制 kafka生產者分區策略 kafka數據可靠性與一致性 Exactly Once kafka消費者分區策略 consumer offset的維護 kaf

原创 Spring IOC循環依賴源碼解析

目錄 什麼是循環依賴? Bean註冊 Bean實例化 springIOC循環依賴總結 驗證 什麼是循環依賴? 所謂循環依賴就是A依賴B的同時B又依賴A,二者互相依賴,形成環路。試想,SpringIOC在初始化容器的時候,先實例化Bean

原创 kafka API實踐(kafka原理驗證)

kafka生產者API kafka生產者發送消息採用異步發送的方式,我們在寫發送消息的代碼的時候,會調用send方法,整個發送的過程涉及兩個線程:main線程和sender線程,有一個重要的線程共享變量:RecordAccumulator

原创 HashMap和concurrentHashMap解析

HashMap1.7 HashMap是非線程安全的,不支持併發操作,其實現比較簡單。先來看下JDK1.7中HashMap的結構圖 HashMap裏面是一個數組,數組中的每個元素是一個Entry對象,每個Entry對象的next屬性指向下

原创 JVM垃圾回收與調優

首先,第一個問題:什麼是垃圾? 我們說當一個對象,沒有任何引用指向它的時候,那這個對象就是垃圾。 那麼JVM是怎麼知道這個對象已經沒有引用指向它了呢?也就是說JVM是怎麼找到垃圾的? 目前來說有兩種算法:reference count(引

原创 Synchronized筆記

用戶態和內核態 平時我們所寫的java程序是運行在用戶空間的,因爲我們的jvm對於操作系統來講就是一個普通程序。用戶空間的程序要執行讀寫硬盤、讀寫網絡、讀寫內存等重要操作時必須經過操作系統內核來進行。 在JDK早期,Synchronize

原创 shell腳本啓動kafka集羣

前提:kafka集羣之間已配置ssh免密登錄,kafka集羣配置路徑一致 要實現kafka羣起腳本 思路:通過ssh登錄後,循環啓動每臺機器的kafka和zookeeper kafka和zookeeper單機啓動腳本:remote_ser