原创 重構小記

半年前入職新公司以來,一直參與一個維護型的大型JAVA項目。項目是一個交易系統,基於一個非常老的框架搭建的(大概98年的一個框架),框架本身的設計思想不錯,沒有應用任何開源框架,簡單明瞭。但是公司平時在設計和代碼質量把控方面做得不夠到位,

原创 ThreadLocal深入研究

不久前我寫過一篇關於ThreadLocal用法的文章,但最近項目上出現了Memory Leak,調查後發現可能與ThreadLocal的使用有關,在此對ThreadLocal的使用作一些補充。 在ThreadLocal內部,其實是通過一

原创 ThreadLocal Memory Leak

PermGen exhaustions in combination with ThreadLocal are often caused by classloader leaks. An example:  Imagine an a

原创 MySQL InnoDB鎖機制(一)

MySQL InnoDB一共有四種鎖:共享鎖(讀鎖,S鎖)、排他鎖(寫鎖,X鎖)、意向共享鎖(IS鎖)和意向排他鎖(IX鎖)。其中共享鎖與排他鎖屬於行級鎖,另外兩個意向鎖屬於表級鎖。   共享鎖(讀鎖,S鎖):若事務T對數據對象A加上S

原创 深入淺出Redis(二)高級特性:事務

第一篇中介紹了Redis是一個強大的鍵-值倉儲,支持五種靈活的數據結構。事實上,Redis還支持其它的一些高級特性:事務、發佈與訂閱、管道、腳本等,本篇我們來看一下事務。 前一篇中我們提到,在Redis中每個命令都是原子性的,因爲Red

原创 When I was a young man

When I was a young man, I wanted to change the world. I found it was diffficult to change the world, so I tried to chan

原创 深入淺出Redis(三)高級特性:管道

Redis是一個響應式的服務,當客戶端發送一個請求後,就處於阻塞狀態等待Redis返回結果。這樣一次命令消耗的時間就包括三個部分:請求從客戶端到服務器的時間、結果從服務器到客戶端的時間和命令真正執行時間,前兩個部分消耗的時間總和稱爲RTT

原创 深入淺出Redis(一)簡介

Redis是什麼 官方描述Redis是一個開源的,支持網絡、基於內存亦可持久化的日誌型鍵-值倉儲。個人認爲這樣描述過於簡單,不足以體現出Redis的強大。Redis比起傳統的鍵-值倉儲要強大許多,事實上Redis支持五種數據結構,而傳統的

原创 You say that you love rain

You say that you love rain, but you open your umbrella when it rains... You say that you love the sun, but you find a s

原创 MySQL InnoDB隔離級別

上篇文章討論了事務隔離級別,隔離級別這個東西在不同的數據庫產品上,是有一些區別的,本篇重點講講mysql數據庫。 四種標準的隔離級別MySQL數據庫都支持,下面我們一個一個看過來先。 首先我們先創建一個簡

原创 MySQL InnoDB鎖機制(二)

上一篇文章我們提到MySQL InnoDB對數據行的鎖定類型一共有四種:共享鎖(讀鎖,S鎖)、排他鎖(寫鎖,X鎖)、意向共享鎖(IS鎖)和意向排他鎖(IX鎖),今天我們要討論的是MySQL InnoDB對數據行的鎖定方式。   MySQ

原创 《設計模式》- 模板模式

模板模式在諸多模式中算是比較簡單的一個,即便一個新手,也能很快的上手和使用。雖然簡單,但合理的在項目中使用帶來的好處可不小。軟件設計中有個很重要的原則:DRY(Don't Repeat Yourself),重複有很多種,比如代碼重複,邏輯

原创 vim 筆記

遞增、遞減序列 :let i=1|g/${value}/s//\=‘${value}’.i/|let i=i+1 其中value是要查找和替換的值 s命令中\=表示後面是表達式,表達式中的.表示連接符 插入行號 :g/^/s//\=

原创 MySQL InnoDB非阻塞式讀的實現原理

以前在學習《數據庫概論》這門課程的時候,瞭解到在可重複讀這個隔離級別下,一個事務內同一個SELECT查詢的多次執行會返回相同的結果,而這個是對查詢返回的記錄加共享鎖來實現的。這樣,別的事務如果要更新相同的記錄的話就必要要等前一個事務先釋

原创 MySQL InnoDB鎖機制(三)

前面兩篇文章討論了MySQL InnoDB的鎖類型與加鎖方式,這次,我們來看看在不同的場景下,不同的SQL會以什麼樣的方式加什麼類型的鎖。   在開始之前,我們先了解一下什麼是聚族索引?   每一張InnoDB表都有且僅有一表特殊的索引