歡迎光臨
每天分享高質量文章

Java Web技術經驗總結(十一)

1. Git工作流

連結:http://www.ruanyifeng.com/blog/2015/12/git-workflow.html

2. Maven版本管理

連結:http://juvenshun.iteye.com/blog/376422

3. lombok的使用

在Java開發中,我們常常需要寫很多令人厭煩的getter/setter程式碼、需要自己改寫equals、toString和hashcode等方法,不勝其煩且容易出錯。lombok就是為此而生的,透過給bean類新增一些註解,可以自動生成上述函式。不過在我過去的開發中,如果需要定製自己的equals方法,我常常使用Apache Commons中提供的EqualsBuilder和HashCodeBuilder兩個類,參考:Java 中正確使用 hashCode 和 equals 方法。PS:lombok我剛剛接觸,還不清楚它是否也有定製具體實現的功能;PS2:在IDEA中使用lombok需要安裝對應的外掛,參考:lombok在IntelliJ IDEA下的使用

4. MySQL的主從延遲和解決方案

連結:https://yq.aliyun.com/articles/42638

5. 來自《Effective Java》中的第6條規則

記憶體洩漏的另一個來源是快取。一旦你將物件取用放在快取中,它就很容易被忘掉,從而使得它在不再有用之後很長一段時間仍然留在快取中。這種情況下,可以使用WeakHashMap代表快取,只要在快取外存在某個像的鍵的取用,該項就有意義;當快取項的鍵的生命週期結束後,該項也會自動被刪除。關於WeakHashMap,可以參考這篇文章:深入理解WeakHashMap。

6. 關於Code Review的一篇文章

說說 Code Review,文中不僅講了code review,還講了帶新人的方法。另外,關於這個主題,可以參考《Clean Code》和《重構》這兩本書。

7. 實現分散式鎖的方法,這篇文章講得很詳細

連結:http://www.cnblogs.com/PurpleDream/p/5559352.html

8. 使用Intelij IDEA中的git外掛進行分支合併的步驟

例如:branch1合併到branch2

  • 切換到標的分支,branch2

  • 在右下角git快捷視窗——>branch1——>merge,就會將branch1合併到branch2。 

9. 經驗總結

這兩天遇到一個業務場景:一個資料庫修改的請求,客戶端由於歷史原因,經常會發出兩個完全相同的請求,導致服務端發生唯一鍵衝突。為瞭解決這個問題,我們決定使用分散式鎖解決這個問題,在進行資料庫插入操作之前要先拿分散式鎖,拿到鎖以後也要先檢查資料庫,沒有的話再插入資料。
我在測試的時候發現分散式鎖不起作用,先是以為自己的鎖有問題,排除這個問題之後,開始回顧之前的程式碼。發現一個坑:原有的程式碼在介面定義層用了@Transactional註解,Spring中的事務是基於AOP實現的,如果在RPC介面使用事務註解,那麼事務會在RPC介面傳回之後才會提交。可以看出,當事務的範圍大於同步程式碼塊的範圍時會有問題。A請求釋放了鎖,但是它的事務還沒有提交;B請求已經拿到了鎖,但是看不到A請求的事務修改的東西,導致臟讀。
關於Spring中的事務,可以參考官方檔案。
我的經驗是:(1)只有某個業務要求同時修改兩張以上的表的資料的時候,再使用事務,並且要在方法級別使用;(2)事務和同步程式碼塊不可巢狀使用。

最後做個投票,這個號後面的發展,有你的一份努力:

贊(0)

分享創造快樂