入職第一天,行業(yè)1部,主要負(fù)責(zé)石油犬第,政府項目等
java代碼規(guī)范:
命名規(guī)范:代碼中的不能以_和$開始和結(jié)束
禁止使用拼音和英文混合。
類名使用駝峰命名芒帕,首字母大寫
方法名首字母不大寫歉嗓,駝峰命名
常量名全部大寫,單詞間下劃線隔開
抽象類用Abstract或Base開頭背蟆;
異常類使用Exception結(jié)尾;
測試類使用類名開頭Test結(jié)尾
boolean命名前不加is
包名統(tǒng)一使用小寫鉴分,單數(shù)
避免不規(guī)范的縮寫
如果使用到了設(shè)計模式哮幢,建議在類名中體現(xiàn)出具體模式
接口類中的方法和屬性不要加任何修飾符并加上有效的javadoc注釋
接口和實現(xiàn)類的命名有2種規(guī)則
Service和Dao類暴露的接口,實現(xiàn)類使用Impl的后綴實現(xiàn)
對形容能力的接口名稱志珍,取對應(yīng)的形容詞做接口名
枚舉類名建議帶上Enum后綴橙垢,枚舉成員名稱全大寫,單詞間使用下劃線隔開
各層命名規(guī)范:service/dao:
獲取單個對象get前綴
獲取對個對象list前綴
獲取統(tǒng)計值count前綴
插入方法用save前綴
刪除方法remove前綴
修改update前綴
數(shù)據(jù)對象xxxDo xxx為表名
常量值long類型的賦值必須使用大寫例如:Long a = 1L;
不能使用一個常量類維護(hù)所用常量伦糯,應(yīng)該按常量的功能分類
格式規(guī)范:
大括號內(nèi)為空{(diào)}柜某;
否則 {
1
} else {
2
}
if / for / while / switch / do 等保留字與左右括號之間必須加空格
任何一個運算符最有必須加一個空格
縮進(jìn)采用4空格,禁止使用tab
單行字符數(shù)不超過120舔株,超出換行莺琳,且:
第二行相對第一行縮進(jìn)4個空格
運算符與下文一起換行
方法調(diào)用的點符號與下文一起換行。
多個參數(shù)超長载慈,逗號后換行
在括號前不要換行
方法參數(shù)在定義和傳入時惭等,多個參數(shù)逗號后必須加空格
不能使用過時的類和方法
Object的equals方法容易空指針,應(yīng)該使用常量或確定有值的對象來調(diào)用.equal
使用索引訪問用String的split方法得到的數(shù)組時办铡,需做最后的一個分隔符有無的檢查
當(dāng)一個類有多個工造方法辞做,或者多個同名方法,這些方法應(yīng)該按順序放在一起
循環(huán)體內(nèi)寡具,字符串的聯(lián)接方式使用StringBuilder的append方式進(jìn)行擴(kuò)展
聲明final的情況:
不需要重新賦值的變量秤茅,包含類屬性,局部變量
對象參數(shù)前final表示不永續(xù)修改引用的指向
類方法確定不允許被重寫
控制語句
if-else中盡量不適用else
多次if-else使用狀態(tài)設(shè)計模式
循環(huán)體內(nèi)不使用耗時操作
注釋規(guī)約:
類童叠,類屬性框喳,類方法的注釋必須使用javadoc規(guī)范,使用/*內(nèi)容/
所有的抽象方法學(xué)習(xí)要用javadoc注釋,除了返回值厦坛,參數(shù)五垮,異常說明外,還應(yīng)該指出做什么杜秸,實現(xiàn)什么
所有類都必須添加創(chuàng)建者信息
方法內(nèi)部單行注釋放仗,再被注釋語句上方另起一行,使用//注釋
所有的枚舉類型字段必須要有注釋撬碟,說明每個數(shù)據(jù)的用途
其他:
使用正則表達(dá)式時诞挨,利用好其預(yù)編譯功能
velocity調(diào)用POJO類的屬性時,建議直接使用屬性名取值即可呢蛤,模板引擎會自動調(diào)用惶傻。
后臺傳輸給頁面的變量必須加$!{}否則當(dāng)值為空時會直接顯現(xiàn)到頁面
Math.random()這個方面返回值是double獲取整數(shù)是使用Random對象的NextInt或者nextLong
獲取當(dāng)前毫秒數(shù)System.currentTimeMillis()
獲取納秒數(shù)System.nanoTimer()推薦使用Instant類
盡量不要在velocity模板中加入變量聲明,邏輯運算及復(fù)雜邏輯
任何數(shù)據(jù)結(jié)構(gòu)的構(gòu)造和初始化都應(yīng)該指定大小
異常處理:
不捕獲運行時異常
異常不要用來最流程控制其障,條件控制达罗,以為異常的處理效率比較低
對于非穩(wěn)定的代碼catch盡可能區(qū)分異常類型,在做處理
不能再finally塊中使用return,finally塊中的return返回方法結(jié)束執(zhí)行不再執(zhí)行try中的return語句
方法返回值可以為null但必須聲明為什么會返回null
定義時區(qū)分unchecked / checked異常,避免直接使用exception,應(yīng)該使用自定義異常
使用日志框架slf4j中的api
日志文件至少保存15天粮揉,日志輸出必須使用條件輸出形式或者使用占位符的方式
避免打印重復(fù)日志,在log4j.xml中設(shè)置additivity = false.
MySQL規(guī)約:
表達(dá)是否的概念必須使用is _ xx的方式命名抚笔,數(shù)據(jù)類型為unsigned tinyint 非負(fù)數(shù)必須使用unsigned
表名扶认,字段名必須使用小寫字母和數(shù)字;禁止出現(xiàn)數(shù)字開頭殊橙,禁止雙下滑線中間只出現(xiàn)數(shù)字
表名不使用負(fù)數(shù)名詞
禁用關(guān)鍵字
唯一索引名用uk _ 字段名辐宾;普通索引用idx_字段名
小數(shù)類型用decimal 禁止使用float和double.,如果存儲數(shù)據(jù)擦超出decimal的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)分開存儲膨蛮。
如果存儲的字符串長度幾乎相等叠纹,使用char 定長字符串類型
varchar長度不要超過5000,如果存儲長度大于5000敞葛,定義字段類型為text誉察,獨立出來一張表,用主鍵來對用惹谐,避免影響其他字段索引效率持偏。
表必備三個字段,id,gmt _ create,gmt _ modified.
id為主鍵,類型為unsigned bigint,單表自增氨肌,步長為1.gmt_create,gmt_modified的類型均為date_time類型
表的命名最好是加上“業(yè)務(wù)名稱_表的作用”
數(shù)據(jù)庫名與應(yīng)用名一致
字段允許適當(dāng)冗余提高性能鸿秆,冗余字段應(yīng)遵守:
不是頻繁修改的字段
不是varchar等超長字段
單表行數(shù)超過500萬或者單表容量超過2GB才推薦使用分庫分表
業(yè)務(wù)上具有唯一特性的字段即使是組合字段,也必須建成唯一索引
超過三個表禁止join怎囚。需要join的字段卿叽,數(shù)據(jù)類型保持絕對一致;多表關(guān)聯(lián)查詢時恳守,保證保證被關(guān)聯(lián)的字段需要有索引考婴。
在varchar字段上簡歷索引時,必須指定索引長度井誉,沒必要對全字段建立索引蕉扮,根據(jù)實際文本區(qū)分度決定索引長度。
頁面搜索嚴(yán)禁左或者全模糊查詢颗圣,如果需要使用搜索引擎查詢喳钟。索引文件具有B-Three的最左前綴匹配特性,若果左邊的值未確定那么無法使用此索引在岂。
如果有order by 的場景奔则,請注意利用索引的有序性。
利用覆蓋索引來進(jìn)行查詢操作蔽午,來避免回表操作易茬。
利用延遲關(guān)聯(lián)或者子查詢優(yōu)化超多分頁場景
sql性能優(yōu)化的目標(biāo):至少達(dá)到range級別,正常ref,最好consts
consts單表中最多只有一個匹配行抽莱,在優(yōu)化階段即可讀取到數(shù)據(jù)范抓。
ref指的是使用普通的索引
range對索引進(jìn)行范圍搜索
建組合索引的時候,區(qū)分度最高的在最左邊
創(chuàng)建索引時注意:
誤認(rèn)一個查詢要建一個索引
誤認(rèn)索引會消耗空間食铐,嚴(yán)重拖慢更新和新增速度
誤認(rèn)唯一索引一律需要在應(yīng)用層先查后插
count(*)統(tǒng)計值為null的行
count (distinct col)計算該列除null外的不重復(fù)數(shù)量
注:count(distinct col 1,col 2)如果其中一列全為null匕垫,那么即使另一列有不同的值,也返回0
當(dāng)一列全為null時sum(m)返回null,所以使用sum()時注意NPE問題:select if(isnull(sum(g)),0,sum(g)) from table;
使用isNULL()來判斷字段是否為空虐呻,null與任何值比較都為null
在代碼中寫分頁查詢邏輯時象泵,若count為0應(yīng)該直接返回斟叼,避免執(zhí)行后面的分頁語句偶惠。
不得使用外鍵與級聯(lián),一切外鍵概念必須在應(yīng)用層解決朗涩。
禁止使用存儲過程忽孽,存儲過程難以調(diào)試和擴(kuò)展,更沒有可移植性
數(shù)據(jù)修定時馋缅,刪除和修改記錄時扒腕,要先select避免誤刪除
in操作盡量避免,無法避免保證in后面的集合元素數(shù)量控制在1000以內(nèi)
全球化需要萤悴,所有的字符存儲與表示都用utf-8
存儲表情時瘾腰,使用utfmb 4來存儲