原创 記一次AOP問題排查

背景和問題 情況是這樣的:由於某業務上的需求,需要數據庫表T的數據發生變化時,通知給其它系統。改造前,在各數據發生變化的業務節點,直接調用通知方法,將數據同步給其它系統;改造後,使用了spring aop,基於抽象出的update方法,進行

原创 程序員樓下閒聊:某次jvm崩潰排查

大望路某寫字樓下。 猿A:上家公司的時候,我們組那個項目,每天半夜會跑個大批量數據處理的定時任務,然後程序經常崩潰。 我:哦?那怎麼處理的 猿A:當時的架構有點水,說讓調整“伊甸園”和“from-to”的比例……崩潰和這個就沒關係 我:少

原创 AQS系列二:源碼分析“公平”ReentrantLock和Condition

上篇文章 AQS系列一:源碼分析非公平ReentrantLock 中,我們分析了ReentrantLock的非公平實現,本篇會承接上文,繼續分析ReentrantLock的公平鎖實現(以及Condition的實現)。 在此之前我們要先弄明白

原创 AQS系列一:源碼分析非公平ReentrantLock

加 / 解鎖史 早些時候(jdk 1.5之前),併發環境下做同步控制,你的選擇不多,多半是使用synchronized關鍵字。不管是同步方法還是同步塊,總之遇到這個關鍵字,未獲取鎖線程就會乖乖等候,直到已獲取鎖的線程釋放掉鎖。 而jdk 1

原创 怎麼獲取Thread返回值?(FutureTask解讀)

墮落的人生啊…… 如何獲取Thread返回值? 偶然間看到這個問題,對於標配jdk1.8的我們是不是分分鐘拍出答案?答曰:簡單,Callable,完美解決,下一題…… 可是,身處jdk1.4(甚至更早)的前輩們,要怎麼做才能拿到線程返回值呢

原创 單例終極分析(一)

單例的用處 如果你看過設計模式,肯定會知道單例模式,實際上這是我能默寫出代碼的第一個設計模式,雖然很長一段時間我並不清楚單例具體是做什麼用的。這裏簡單提一下單例的用處。作爲java程序員,你應該知道spring框架,而其中最核心的IOC,在

原创 【源】終於明白JDK8 HashMap底層數組長度,取值2次冪的原因

jdk1.8中的hashmap作了很多改進:紅黑樹的引入,鏈表尾插,以及底層數組長度保持2的次冪。本文專注於分析2次冪設定的原因,且聽我慢慢道來…… 與“取餘”等價的算法 衆所周知,hashmap是數組鏈表結構:hash算法用於將key散列

原创 【源】ArrayDeque,Collection框架中不起眼的一個類

最近盯上了java collection框架中一個類——ArrayDeque。很多人可能沒用過甚至沒聽說過這個類(i'm sorry,what's fu*k this?),畢竟你坐在面試官面前的時候,關於數組鏈表的掌握情況,99%的可能性聽

原创 【算】鏈表反轉

問題 最近研究算法,遇到的一道很有意思的問題——怎麼把一個鏈表反轉?很容易想到一個方法:遍歷鏈表,數組作棧存儲路徑,元素逐個出棧得到的就是反轉後的鏈表!查找資料發現,有更好的方式實現。 仔細研究後,終於明白了其中的奧妙。小僧掌握了兩種方法,

原创 【樹結構2】樹打印

載一棵小樹苗,精心培育,總有一天會長成參天大樹                比如查找二叉、AVL、B + *、紅黑…… 但是,今天不種樹,改成畫樹…… 事情時這樣的:在搞懂簡單二叉樹的過程中,經常需要驗證自己的代碼有沒有問題,我之前的做法

原创 【結構】查找二叉樹

載一棵小樹苗,精心培育,總有一天會長成參天大樹                比如查找二叉、AVL、B+ - *、紅黑…… 結構 繼線性結構之後,人們之所以又發明了樹形結構,是爲了方便查找。普通樹隨便生長,看着就眼暈,除了和自然界的樹結構相