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
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 表達式的格式