原创 CountDownLatch詳解

功能描述 一個同步輔助類,在完成一組正在其他線程中執行的操作之前,它允許一個或多個線程一直等待。 常見用法 多個人等一個信號後繼續執行操作。例如5個運動員,等一個發令員的槍響。 一個人等多個人的信號。旅遊團等所有人簽到完成纔開始出發。我們最

原创 kafka之重複消費數據 頂 原

在進入主題之前,我們先思考一個問題。 問題 kafka消費者使用自動提交的模式,提交間隔爲2s,消費者在獲取數據的時候處理0.5s,從kafka拉取過來的數據只夠處理1秒。那麼消費者下次拉取過來的數據是否是已經消費完的數據?或者說由於數據

原创 hbase查詢解析 頂 原 薦

hbase查找流程圖 流程說明 從zk獲取meta地址 客戶端查詢一個數據,先根據zookeeper獲取meta表所在的region信息,meta表裏存着region的各種信息,但是他也是在region裏的,會被一個regionserve

原创 從hashmap說起 頂 原

說到hashmap我們能想到什麼呢 hash hashmap的hash方法極大的避免了hash衝突。他通過高16位和低16位做異或操作。保證了32位都參加運算。 static final int hash(Object key) {

原创 jmx的垃圾回收器次數揭祕 頂 原

對於jmx提供的垃圾回收器的次數,很多人的疑問點都是老年代的回收次數是否等於FGC的次數。下面我們就圍繞這個問題來進行分析。 jmx的提供以及用法 api介紹 public interface GarbageCollectorMXBean

原创 aqs速讀 頂 原

說起aqs很多人都感覺很頭疼,下文就從幾個角度瞭解,讓你快速瞭解aqs。 預熱知識 aqs獲取鎖等主要用的cas以及locksupport。對鎖的控制是一個int類型的狀態state。例如獲取鎖就是通過cas把state從0變成1。 獨佔鎖

原创 java spi機制 頂 原

從JDBC說起 java JDBC的代碼用起來其實是比較麻煩的,例如下面的例子 String DBDRIVER = "com.mysql.jdbc.Driver"; String DBURL = "jdbc:mysql://localh

原创 聊聊LinkedHashMap 頂 原 薦

LinkedHashMap簡介 LinkedHashMap是一個根據某種規則有序的hashmap。根據名字,我們也可以看出這個集合是有hash散列的功能的同時也有順序。hashmap是無法根據某種順序來訪問數據的,例如放入集合的元素先後的順

原创 jstat的小夥伴---找出system.gc的調用的小工具 頂 原 薦

場景分析 現場環境中,造成gc頻繁的可能性之一就是通過system.gc主動調用了gc。這種情況出現在開發人員業務代碼,或者是jdk自身的代碼中(例如nio)。我們可以通過jstat -gccause查看gc的原因,如果真的是system.

原创 從classloader說起 頂 原

說起classloader可能最先想到的就是雙親委託。這次就換個角度來談這個。 從classloader到單例 單例是一種設計模式。表明上看好像和classloader沒有什麼關係。所以我們從單例的代碼入手開始考慮。 public clas

原创 優雅的給線上環境打補丁 頂 原

場景 在線上往往會遇到一些比較尷尬的異常,例如空指針。這種操作往往是某些情況校驗不完善,客戶輸入了各種奇怪的內容導致的。當遇到這種情況的時候,修改都很方便,但是如何更新到線上是個問題了。爲一個小問題,重新更換環境就動作有點大了,還得晚上派人

原创 教你一招破解字節碼加密 頂 原

字節碼加密的需求 java的字節碼是可以反編譯的,所以很多時候,做商用產品的時候,防止別人看你的核心代碼是一個必要手段,字節碼加密的需求就誕生了,本質就是防止別人反編譯看代碼。加密的方式有很多,不是本文的主要目的。 如何破解字節碼加密 只要

原创 jvm crash分析工具 頂 原 薦

介紹一款非常好用的jvm crash分析工具,當jvm掛掉時,會產生hs_err_pid.log。裏面記錄了jvm當時的運行狀態以及錯誤信息,但是內容量比較龐大,不好分析。所以我們要藉助工具來幫我們。 CrashAnalysis 這是一款診

原创 zk實戰--rpc框架集羣化 頂 原 薦

在看此篇內容時需要瀏覽下面內容 netty實戰--手寫rpc框架 前文功能簡介以及功能擴充 利用netty來實現一個點對點的rpc調用。客戶端和服務端都是靠手寫地址進行socket同學的,無法1對多,也無法把服務拆分到不同的機器上進行壓

原创 jvm誤區--動態對象年齡判定 頂 原 薦

虛擬機並不是永遠地要求對象的年齡必須達到了MaxTenuringThreshold才能晉升老年代,如果在Survivor空間中相同年齡所有對象大小的總和大於Survivor空間的一半,年齡大於或等於該年齡的對象就可以直接進入老年代,無須等