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

JavaWeb技術經驗總結(一)

  1. 介面的許可權認證,使用攔截器(HandlerInterceptorAdapter),參考:第五章 處理器攔截器詳解——跟著開濤學SpringMVC。註意:推薦能使用servlet規範中的過濾器Filter實現的功能就用Filter實現,因為HandlerInteceptor只有在Spring Web MVC環境下才能使用,因此Filter是最通用的、最先應該使用的。

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

  3. 介面層應該實現如下標的(參考:SpringMVC4.1之Controller層最佳實踐):

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

  • 統一的錯誤資訊

  • 統一的請求資料校驗

  • 統一的介面異常捕獲

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

  • id,主鍵,自增

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

  • 可為空的欄位要提供預設值

  • 修改時間(mtime)

  • 建立時間(ctime)

  • 唯一鍵(對於有唯一約束的表,插入資料時應使用insert … on duplicate陳述句,參考insert on duplicate語法

  • 普通索引

  • 組合索引

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

  • Spring的兩種任務排程Scheduled和Async

  • Spring Async not working

  • 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之後,對於新來的服務請求的處理策略(忽略、拋異常或者改為同步呼叫)。

  • task:executor/標簽對應的實現類是ThreadpoolExecutor

  • 執行緒池的大小:可根據Little定律(佇列中任務的平均數量等於進入速率和平均停留時間的乘積)估算。

  • 需要透過日誌列印驗證@Async確實起作用了,可能有三個坑:(1)內部呼叫不能非同步;(2)不能重覆掃描,確保帶@Async註解的方法所在的類只被Component-Scan掃一次;(3)必須是public的,不能是public static的。參考文章如下:

  • Spring中的xxxAware介面是spring框架中的常用樣式,經常用於在spring啟動階段透過這類介面提供的setXxx方法給spring管理的bean賦值。Aware介面有點監聽者、回呼函式或者觀察者樣式的感覺。在啟動過程中,Spring會檢查每個bean是否實現了某些個xxxAware介面,如果發現一個,則呼叫對應的方法,給bean提供相應的資訊。參見stackoverflow答案:BeanNameAware and BeanFactoryAware。常見的xxxAware介面有:BeanNameAware、BeanClassLoaderAware、BeanFactoryAware。

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

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

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

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

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

    • 效能測試(壓力測試)

    • 穩定性測試

    • 基本功能開發

    • 日誌記錄

    • 異常處理

    • 入參檢查

    • 傳回結果生成

    • 非同步任務處理

    • 需求評審,產出需求檔案

    • 設計評審,產出設計檔案

    • 程式碼開發(儘量使用最佳實踐,註意要寫基本的單元測試)

    • 程式碼review:自己review => 高階開發者review;核心程式碼需要團隊review

    • 測試

    • 釋出

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

  • 單元測試,推薦使用Mockito框架,理由有三:(1)可專註於被測試物件;(2)不需要建立複雜的bean依賴關係;(3)DSL描述性語言簡單易懂。參考文章:反樣式的經典 – Mockito設計解析 在專案開發中,建議配合使用Mockito和Assertj寫單元測試。

  • 實現定時任務,可使用Quartz框架,參考:Spring 排程工具Quartz cron 運算式的格式

    贊(0)

    分享創造快樂