個人工作開發(fā)規(guī)范總結(jié)捞附,慢慢積累巡揍,慢慢進步源内,寫出無可挑剔的代碼
1 java 開發(fā)規(guī)范
? ? ? 1.1 校驗規(guī)范? ? ?字符串判空:org.apache.commons.lang3.StringUtils.isBlank(str); 字符串處理使用StringUtils包處理
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?對象拷貝:BeanUtils#copyProperties? ? ?對象拷貝使用BeanUtils處理
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數(shù)組校驗:CollectionUtils.isEmpty()
? ? ? ? 1.2 批量查詢? 批量查詢接口必須對傳入的數(shù)組或者不定長度的變量進行校驗毯炮,避免出現(xiàn)一些惡意查詢的情況出現(xiàn)省咨。
? ? ? ? 1.3? 當實體類里面使用了枚舉肃弟,必須對在實體類中對使用了枚舉的字段添加@See注解
? ? ? ? ?1.3 代碼提交之前必須對代碼進行格式化,(ctrl+alt+l )? ?并且必須對代碼的導(dǎo)包進行優(yōu)化 快捷鍵(ctrl+alt+o)或者使用idea的默認配置實
? ? ? ? ? ? ? 現(xiàn)
? ? ? ? ? ?1.4? java開發(fā)編碼環(huán)境設(shè)置統(tǒng)一設(shè)置為utf-8? ?
? ? ? ? ? ?1.5? 命名要有節(jié)操零蓉,不能中英文混用笤受,不要首字母縮寫,單詞要移動有實際意義敌蜂。駝峰命名
? ? ? ? ? ? 1.6? 未使用的包不要引用(ctrl+alt+o 刪除未引用的導(dǎo)包)
? ? ? ? ? ? 1.7? 盡量減少循環(huán)嵌套層次箩兽。盡量少,不可避免時章喉,應(yīng)該通過注釋表明每一個循環(huán)的開始和結(jié)尾分別在什么地方
? ? ? ? ? ? 1.8? ?使用泛型必須指明具體類型
? ? ? ? ? ? 1.9? ?拼接字符串汗贫,有節(jié)操的都不會使用string+(String的不可變性)
? ? ? ? ? ? ?1.10 map遍歷,使用entrySet遍歷map集合kv秸脱,不要使用keySet方式進行遍歷落包。
? ? ? ? ? ? ?1.11? 使用spring框架進行對象注入時候,需要清楚 #Autowired和Resource的區(qū)別摊唇,建議使用@Resource
? ? ? ? ? ? 1.12? 當構(gòu)造函數(shù)參數(shù)過多時咐蝇,建議使用builder模式
? ? ? ? ? ? 1.13? 避免創(chuàng)建不必要的對象,比如在使用正則表達式時遏片,將 Pattern.compile 方法設(shè)置為靜態(tài)方? ? ? ? ? ? ? ? ? ? ? 法嘹害,避免重復(fù)編譯撮竿,使其只在方法區(qū)中編譯成一個對象吮便。
? ? ? ? ? ? 1.14 盡量使用try-with-resources代替try-cache-finally
? ? ? ? ? ? 1.15? 設(shè)計類的成員可訪問性最小化
2 數(shù)據(jù)庫開發(fā)規(guī)范
? ? ? ?2.1更新操作:數(shù)據(jù)庫干的更新操作必須 按照功能來區(qū)分,不能混用幢踏,一般一個update只進行一個更新操作
? ? ? 2.2? 使用持久層框架時候髓需,需要明白# {}${}的區(qū)別,一般不到不得已的時候都是用#{}? ?當需要使用${} 的時候房蝉,必須要對傳入的參數(shù)進行過濾
? ? ? 2.3? 一般來說僚匆,一張表對根據(jù)需求建立一個索引,(建議一張表的額索引不要超過五個)搭幻,sql編寫的時候一定要注意盡量命中索引咧擂。
? ? ? 2.4? 模糊查詢,注意要命中索引哦? 附檀蹋,建議每一條重要的sql都要在終端explain一下松申,查看一下執(zhí)行計劃,sql出現(xiàn)問題都會是重大問題、
3 緩存使用規(guī)范? ? ??
? ? ? ?3.1:對某個表內(nèi)的數(shù)據(jù)進行緩存時候贸桶,需要慎重舅逸,因為在大型項目里面,你可能不知道有多少個地方對這個表進行了crud操作皇筛,需要在這? ? ? ? ? ? ? ? ? ? 些 操作的地方都添加上刪除緩存的操作琉历,不然很容易產(chǎn)生數(shù)據(jù)不能及時更新的bug
? ? ? ?3.2:緩存批量請求key的時候,service需要對請求的key的長度進行限制水醋。
4 異常處理規(guī)范
? ?1 rpc調(diào)用時旗笔,必須進行異常捕獲。
? ? 2??異常信息不允許返回給前端??
? ? 3? 異常信息記錄時候拄踪,必須同時記錄接口參數(shù)换团,讓異常能夠準確定位到某一個用戶。?
? ? 4 當涉及到有資源比如inputstream需要關(guān)閉時宫蛆,必須使用finally進行關(guān)閉艘包,(確保任何狀態(tài)下資源都會被正常關(guān)閉)
? ? 5? 異常記錄
5 日志規(guī)范
? ? 1.避免無效日志打印
? ? ?2 日志記錄必須帶著類名+方法名+入?yún)?異常日志
? ? ?3 大量無用日志會拖慢系統(tǒng)性能,也會增加我們查找日志的難度耀盗。日志記錄想虎,要明確為什么記錄日志,這個日志能解決什么問題叛拷,哪些地方可 能會出?現(xiàn)這些問題舌厨,在這個基礎(chǔ)上,盡量少記日志忿薇,
? ? 4? 不要在循環(huán)中記錄日志
? ?5? 生產(chǎn)環(huán)境需要關(guān)閉debug日志裙椭,我遇到過這個問題,自己買的服務(wù)器上線一個demo,一個月自動產(chǎn)生40G垃圾日志文件署浩,系統(tǒng)出現(xiàn)異常揉燃。
6 備注規(guī)范
? ?1 給每個方法都添加必要的注釋,主要應(yīng)包括? 創(chuàng)建時間筋栋,創(chuàng)建人炊汤,主要功能描述,相關(guān)文檔地址
2 給每一個方法都添加注釋 建議使用 使用Idea提供的代碼模板進行備注(注釋模板需要在方法體內(nèi)進行使用才能獲得正確的信息)
? ? ? ?模板:
/**
??* Method: $methodName$
? ?* Param: $param$
? ?* Return: $return$
? ?* Author: $user$
? ?* Creation: $date$ $time$
? ?* Description: $END$
?*/
3 實體類每一個字段都需要有中文注釋
?4? 有手動編寫的構(gòu)造函數(shù)時候弊攘,建議給構(gòu)造函數(shù)添加注釋
? 5
項目模塊結(jié)構(gòu)
編碼規(guī)范(EOS)\SQL規(guī)范
數(shù)據(jù)庫(連接池配置抢腐,mybatis配置)
事務(wù)使用
異常處理
分布式鎖
并發(fā)框架
讀寫分離組件
監(jiān)控使用
上傳下載組件
唯一ID生成器
JSON序列化組件
參數(shù)校驗組件
單元測試使用
安全規(guī)范