天天看點

Java Web技術經驗總結(三)

在spring項目中,如果需要配置spring xml檔案,要注意,将頂部的schema資訊中的版本資訊去掉,這樣xml配置檔案就不會跟具體的spring版本耦合;而且還可以避免一些詭異的問題,例如下面這種異常

這種錯誤的原因是:spring xml配置檔案中指定的xsd檔案讀取不到了,原因多是因為斷網或spring的官網暫時無法連接配接導緻的。

在spring + mybatis項目中,寫sql語句的時候,要注意傳回null的情況,例如:

上述sql語句,有可能傳回null,是以resulttype必須用long,且dao層的傳回值也要用long,并且需要在調用方做出判斷和處理,否則會報空指針錯誤。

awk,用于日志分析和資料統計。例如,最近有個資料統計的需求,那麼指令<code>awk -f '[:,]' '{s[$4] += $6; a[$4] += $8}end{for(i in s){print i, s[i], a[i]}}' ofs="\t" odstoolresbak</code>可完成的工作是:将一個json字元串組成的日志檔案,按照冒号和分号切割,并按照第4列分組,分别求第6列和第8列的和,最後每行的結果直接用'\t'分割。參考資料如下:

<a href="http://coolshell.cn/articles/9070.html" target="_blank">awk簡明教程</a>

<a href="http://6226001001.blog.51cto.com/9243584/1659824" target="_blank">資料需求統計常用shell指令---awk分組求和,分組統計次數</a>

<a href="http://blog.csdn.net/ultrani/article/details/6750434#content_t0" target="_blank">日志分析檢視——grep,sed,sort,awk運用</a>

vim,另一個上古神器,要熟悉常用的指令,例如<code>10,100w!&gt;&gt;test.txt</code>,該指令可将10行到100行的内容複制到另一個檔案test.txt中;參考資料如下:

<a href="http://my.oschina.net/yueguanqun/blog/65158" target="_blank">vim多行複制</a>

别傳回null值:當一個方法傳回collection集合的時候,不要傳回null,如果沒有結果則傳回空的集合(例如:collections.emptylist();),這樣該方法的客戶就不需要判斷null的邏輯。這就是java開發中的特例模式的應用。

如何學習開源項目,例如spring?接觸spring近一年了,零零碎碎看了很多資料,看得閱讀,就能将越多零碎的知識點拼接在一起,對spring的整體設計思路也有漸漸加深的體會。整理一點優質材料在這裡吧:

好書

《spring揭秘》,關于spring的技術圖書,這本最好,具體怎麼好?讀了就知道,喜歡探究原理的人讀起來一氣呵成,很hi;

《spring實戰 第4版》,最近國内剛出中文版,這本書的特點就是:知識點整理清楚,例子完整。雖然少了點原理講解,比較适合spring入門;

《spring技術内幕》,這本書去年浏覽過一次,對代碼的走讀不錯,但是有些原理性、設計思想闡述得不夠深刻;

好文

<a href="http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/" target="_blank">spring架構的設計理念和設計模式分析</a>

今天遇到一個應用啟動失敗的例子,一直處在tomcat wait的狀态,查了很多問題沒發現原因,最後才想到要看線程堆棧,用指令<code>jstack pid &gt;&gt; temp.123</code>将線程堆棧dump到檔案中,發現某個bean初始化的時候依賴了第三方服務,而部署的機器跟那個服務屬于兩個獨立環境,是以線程在這裡hold住了。

當發現應用表現為性能低下、啟動卡主時,要使用jstack看線程堆棧;

當發現應用表現為記憶體gc異常,要使用jstat檢視記憶體使用情況

通過抓堆棧發現,那些占用cpu比例過高的線程都是http處理線程:要不就是在等待請求到來;要不就是在處理一個json字元串——string responsecontent = json.tojsonstring(retresponse);,然後我們把這個retresponse列印出來一看,nnd,這個對象得有1kb大小,好的,那就是這個東西占用了大量的cpu時間!

在性能問題上,有兩個低級問題首先要排除:(1)大對象的json序列化;(2)日志級别要調到warn級别,不能在debug級别上進行壓測。

最新的版本:fastjson 1.2.11版本,據說性能比1.1有了很大提升,建議更新。