Java Web技術經(jīng)驗總結(一)

1.接口的權限認證,使用攔截器(HandlerInterceptorAdapter),參考:第五章 處理器攔截器詳解——跟著開濤學SpringMVC。注意:推薦能使用servlet規(guī)范中的過濾器Filter實現(xiàn)的功能就用Filter實現(xiàn),因為HandlerInteceptor只有在Spring Web MVC環(huán)境下才能使用,因此Filter是最通用的、最先應該使用的

2.“@Autowired”的含義是:ListableBeanFactory接口定義的 Map getBeansOfType(Class var1) throws BeansException;,即獲取類型T的所有實例,并存放在一個Map中:key集合是這些實例的包名、value集合是這些實例本身。

3.接口層應該實現(xiàn)如下目標(參考:SpringMVC4.1之Controller層最佳實踐):

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

統(tǒng)一的錯誤信息

統(tǒng)一的請求數(shù)據(jù)校驗

統(tǒng)一的接口異常捕獲

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

表名,以及備注

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

id,主鍵,自增

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

可為空的字段要提供默認值;

修改時間(mtime)

創(chuàng)建時間(ctime)

索引和約束(強文推薦:如何應對并發(fā)(1):關于數(shù)據(jù)索引

唯一鍵(對于有唯一約束的表,插入數(shù)據(jù)時應使用insert ... on duplicate語句,參考insert on duplicate語法

普通索引

組合索引

5.使用@Async注解,可限定某個類的所有方法或者某個方法進行異步處理,屬于對線程池技術的封裝。參考官方文檔:Annotation Support for Scheduling and Asynchronous Execution,另外,CSDN這篇博文也不錯:Spring異步任務處理,@Async的配置和使用。

標簽對應的實現(xiàn)類是ThreadpoolExecutor

pool-size(core-size和max-size):有異步請求到達時,如果當前線程數(shù)小于core-size時,則啟動一個新線程提供服務;如果當前線程數(shù)達到core-size,則將新請求放入Blockqueue;如果BlockQueue也滿了,則啟動新線程提供服務,直到線程池內(nèi)的線程數(shù)達到max-size;

queue-capacity:BlockQueue的大小

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

rejection-policy:線程池內(nèi)線程超過max-size之后,對于新來的服務請求的處理策略(忽略、拋異常或者改為同步調(diào)用)。

線程池的大?。嚎筛鶕?jù)Little定律(隊列中任務的平均數(shù)量等于進入速率和平均停留時間的乘積)估算。

需要通過日志打印驗證@Async確實起作用了,可能有三個坑:(1)內(nèi)部調(diào)用不能異步;(2)不能重復掃描,確保帶@Async注解的方法所在的類只被Component-Scan掃一次;(3)必須是public的,不能是public static的。參考文章如下:

Spring的兩種任務調(diào)度Scheduled和Async

Spring Async not working

6.Spring中的xxxAware接口是spring框架中的常用模式,經(jīng)常用于在spring啟動階段通過這類接口提供的setXxx方法給spring管理的bean賦值。Aware接口有點監(jiān)聽者、回調(diào)函數(shù)或者觀察者模式的感覺。在啟動過程中,Spring會檢查每個bean是否實現(xiàn)了某些個xxxAware接口,如果發(fā)現(xiàn)一個,則調(diào)用對應的方法,給bean提供相應的信息。參見stackoverflow答案:BeanNameAware and BeanFactoryAware。常見的xxxAware接口有:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware。

7.工作中的軟件開發(fā),要做到哪些方面?敏捷開發(fā)并不是野蠻開發(fā),最關鍵的特性是小步快跑,作為開發(fā)者,還是要從下列幾個方面考慮問題:

需求評審,產(chǎn)出需求文檔

設計評審,產(chǎn)出設計文檔

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

基本功能開發(fā)

日志記錄

異常處理

入?yún)z查

返回結果生成

異步任務處理

代碼review:自己review => 高級開發(fā)者review;核心代碼需要團隊review

測試

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

性能測試(壓力測試)

穩(wěn)定性測試

發(fā)布

風險評估(影響范圍、后果)

回滾預案(應急處理方案、服務降級等)

灰度發(fā)布(流量灰度、用戶灰度、地域灰度等)

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

9.單元測試,推薦使用Mockito框架,理由有三:(1)可專注于被測試對象;(2)不需要建立復雜的bean依賴關系;(3)DSL描述性語言簡單易懂。參考文章:反模式的經(jīng)典 - Mockito設計解析在項目開發(fā)中,建議配合使用Mockito和Assertj寫單元測試。

10.實現(xiàn)定時任務,可使用Quartz框架,參考:Spring 調(diào)度工具Quartz cron 表達式的格式

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容