原创 如何保證db與緩存的數據一致性

爲了提升性能,緩存在系統開發中具有普遍的應用。常見的模式是先查詢/更新db後再去更新緩存,那麼如何保證db和緩存的數據一致性的問題是實際開發中經常遇到的問題。這種場景下容易造成數據不一致的問題主要是緩存雙寫。   一、緩存雙寫問題  

原创 你必須要掌握的測試利器--TestNG

是時候告別Junit了! 一、 青出於藍而勝於藍 TestNG是一款脫胎於JUnit和NUnit的測試框架,借鑑了後者的設計思想,在此基礎上又引入了新的功能,比如分組測試、依賴測試、多線程測試等。 TestNG除了支持單元測試外,還

原创 Spring聲明式事務實現源碼解析(1):事務屬性的初始化

開發者如果要正確使用Spring事務,必須對其背後的實現機制有一個深入的理解,知其然,知其所以然。本文將從源碼實現分析的角度來解讀Spring事務的運行機制,行文以TransactionAttributeSourceAdvisor、Tra

原创 【高質量代碼系列2】switch 語句重構技巧總結

switch 語句在日常開發中,常常用來根據不同的類型,執行不同的操作。如果類型很多,整個swtich代碼會變得很臃腫,代碼可擴展性、可閱讀性都很差。針對這個問題,我們可以考慮使用多態來解決,將每個類型的行爲封裝到一個子類中。下面以加減等

原创 spring 事務應用誤區總結:那些導致事務不回滾的坑

基於JDBC的 Spring事務在項目中常用來保證數據的一致性, 想要正確的使用,絕不是加一個@Transactional那麼簡單。最近團隊內在排查事務不生效的問題時,就遇到了一個很典型的錯誤應用的場景。本文就幾個容易遇到的導致事務不生效

原创 Mybatis selectKey 採坑筆記

1.現象描述觀察某張表的數據時,發現設置了自增屬性的AutoId,在插入數據後並不是自增的,而是數值跳躍着增加的。2.問題排查在確認AutoId的自增屬性設置沒有問題後,開始懷疑是不是insert語句的問題,insert語句是MyBati

原创 【高質量代碼系列1】過多的if else 代碼重構技巧總結

一、if else 的濫用在實際業務開發中,常常面臨多個條件判斷的情況,如果不加思索就寫代碼,很容易出現一堆if else 的代碼,導致代碼邏輯不清晰,可閱讀性很差,筆者現在改造中的一個歷史遺留項目,大片大片的if else,給後來人帶來

原创 DBUnit--測試數據準備與驗證的利器

單元測試時數據的準備與驗證是一個很繁瑣的過程,DBUnit爲之提供了一套優雅的解決方案,可以幫我們從中解脫出來。 DBUnit數據準備 DBUnit支持將準備的數據放置在一個xml文件中,在執行測試用例之前自動同步到數據庫中,執行完成

原创 重新認識單元測試

單元測試是對系統中最小可測試單元的功能進行自動化測試,來驗證代碼功能是否符合預期。單元測試的意義雖說都很清楚,但是實際開發中寫出真正有意義的單元測試並不多或者說並不那麼容易,甚至很多項目是根本沒有單元測試的,本文旨在讓大家對單元測試有

原创 java BigDecimal :注意,這是你可能會踩到的坑

在BigDecimal 應用的過程中,有兩個坑是我們比較容易遇到的,使用不當會出現莫名其妙的錯誤。 1.構造函數的坑 先看下面這段代碼: public void constructTest(){ BigDecimal valu

原创 不依賴第三方環境和服務

一切依賴於第三方環境和服務的測試都不能叫做單元測試 單元測試的粒度 單元測試的是圍繞着一個單點的功能來展開的,如果加入其他依賴因素,就會對單元測試的結果造成干擾,所以單元測試一定要把依賴因素給排除掉。 如何消除依賴 組件本地化

原创 設計模式系列(1)---觀察者模式解析與應用

在實際開發中,有時候會遇到多個不同類依賴某個目標類的情況,當目標類發生發生變化時,依賴目標類的其他類也要做出相應的調整,若要目標類和依賴類之間鬆耦合,則可以應用觀察者模式。 1.什麼是觀察者模式 Head First設計模式是這樣定

原创 技術人的軟實力(0)不可忽視的軟實力培養

作爲一個開發者,我們常常更喜歡專研技術,研究一個框架,看個源碼等等,這是我們的硬實力,無可厚非,可是我們卻也常常忽視了軟實力的培養,很多時候,一個項目的進度,代碼質量,線上故障等不僅僅取決於開發者的技術實力,也和軟實力息息相關。軟實力其實

原创 java項目部署總結(二)tomcat安裝與配置Native APR 模式

APR是Apache HTTP服務器的支持庫,提供了一組映射到下層操作系統的API。通過 tomcat-native 庫,使tomcat運行時通過APR更多的調用本地API,達到提升性能的目的。而tomcat-native依賴於三個組件

原创 bootstrap-datetimepicker和uploadify應用總結

bootstrap-datetimepicker是一款輕便的時間選擇插件,支持Time選擇,國際化,應用起來相當簡單。而uploadify則是一款支持多文件上傳的插件。最近應用這兩個插件做了些小應用,感覺不錯,簡單做個總結。 1.引入