天天看點

Java Web技術經驗總結(一)

“@autowired”的含義是:listablebeanfactory接口定義的<t> map<string, t> getbeansoftype(class<t> var1) throws beansexception;,即擷取類型t的所有執行個體,并存放在一個map中:key集合是這些執行個體的包名、value集合是這些執行個體本身。

統一的響應體、請求體,規避map、list作參數或者響應結果的方式(尤其是參 - 數用map來包裝,這種代碼有時候看起來真的讓人很沮喪)

統一的錯誤資訊

統一的請求資料校驗

統一的接口異常捕獲

mysql建表的時候,可以按照下列順序考慮

表名,以及備注

字段定義,以及備注,注意按照下列順序定義字段!

id,主鍵,自增

按照字段的使用頻率依次定義(字段的順序為什麼重要:);

可為空的字段要提供預設值;

修改時間(mtime)

建立時間(ctime)

普通索引

組合索引

<task:executor/>标簽對應的實作類是threadpoolexecutor

pool-size(core-size和max-size):有異步請求到達時,如果目前線程數小于core-size時,則啟動一個新線程提供服務;如果目前線程數達到core-size,則将新請求放入blockqueue;如果blockqueue也滿了,則啟動新線程提供服務,直到線程池内的線程數達到max-size;

queue-capacity:blockqueue的大小

keep-alive:超過core-size的那部分線程,任務完成後線上程池中存活的時間;

rejection-policy:線程池内線程超過max-size之後,對于新來的服務請求的處理政策(忽略、抛異常或者改為同步調用)。

線程池的大小:可根據little定律(隊列中任務的平均數量等于進入速率和平均停留時間的乘積)估算。

需要通過日志列印驗證@async确實起作用了,可能有三個坑:(1)内部調用不能異步;(2)不能重複掃描,確定帶@async注解的方法所在的類隻被component-scan掃一次;(3)必須是public的,不能是public static的。參考文章如下:

<a href="http://sanjay-f.github.io/2015/08/24/spring%e7%9a%84%e4%b8%a4%e7%a7%8d%e4%bb%bb%e5%8a%a1%e8%b0%83%e5%ba%a6scheduled%e5%92%8casync/" target="_blank">spring的兩種任務排程scheduled和async</a>

<a href="http://stackoverflow.com/questions/6610563/spring-async-not-working" target="_blank">spring async not working</a>

工作中的軟體開發,要做到哪些方面?靈活開發并不是野蠻開發,最關鍵的特性是小步快跑,作為開發者,還是要從下列幾個方面考慮問題:

需求評審,産出需求文檔

設計評審,産出設計文檔

代碼開發(盡量使用最佳實踐,注意要寫基本的單元測試)

基本功能開發

日志記錄

異常處理

入參檢查

傳回結果生成

異步任務處理

代碼review:自己review =&gt; 進階開發者review;核心代碼需要團隊review

測試

功能測試(正常case、異常case)

性能測試(壓力測試)

穩定性測試

釋出

風險評估(影響範圍、後果)

復原預案(應急處理方案、服務降級等)

灰階釋出(流量灰階、使用者灰階、地域灰階等)

在spring中不能通過new一個執行個體來使用,否則在mockito測試的時候沒法預設行為;在spring中要使用其他元件,必須通過xml或者注解方式,由spring容器負責裝配。