入職第一天,行業1部,主要負責石油,政府項目等
java代碼規范:
命名規范:代碼中的不能以_和$開始和結束
禁止使用拼音和英文混合。
類名使用駝峰命名,首字母大寫
方法名首字母不大寫,駝峰命名
常量名全部大寫,單詞間下劃線隔開
抽象類用Abstract或Base開頭;
異常類使用Exception結尾;
測試類使用類名開頭Test結尾
boolean命名前不加is
包名統一使用小寫,單數
避免不規范的縮寫
如果使用到了設計模式,建議在類名中體現出具體模式
接口類中的方法和屬性不要加任何修飾符并加上有效的javadoc注釋
接口和實現類的命名有2種規則
Service和Dao類暴露的接口,實現類使用Impl的后綴實現
對形容能力的接口名稱,取對應的形容詞做接口名
枚舉類名建議帶上Enum后綴,枚舉成員名稱全大寫,單詞間使用下劃線隔開
各層命名規范:service/dao:
獲取單個對象get前綴
獲取對個對象list前綴
獲取統計值count前綴
插入方法用save前綴
刪除方法remove前綴
修改update前綴
數據對象xxxDo xxx為表名
常量值long類型的賦值必須使用大寫例如:Long a = 1L;
不能使用一個常量類維護所用常量,應該按常量的功能分類
格式規范:
大括號內為空{};
否則 {
1
} else {
2
}
if / for / while / switch / do 等保留字與左右括號之間必須加空格
任何一個運算符最有必須加一個空格
縮進采用4空格,禁止使用tab
單行字符數不超過120,超出換行,且:
第二行相對第一行縮進4個空格
運算符與下文一起換行
方法調用的點符號與下文一起換行。
多個參數超長,逗號后換行
在括號前不要換行
方法參數在定義和傳入時,多個參數逗號后必須加空格
不能使用過時的類和方法
Object的equals方法容易空指針,應該使用常量或確定有值的對象來調用.equal
使用索引訪問用String的split方法得到的數組時,需做最后的一個分隔符有無的檢查
當一個類有多個工造方法,或者多個同名方法,這些方法應該按順序放在一起
循環體內,字符串的聯接方式使用StringBuilder的append方式進行擴展
聲明final的情況:
不需要重新賦值的變量,包含類屬性,局部變量
對象參數前final表示不永續修改引用的指向
類方法確定不允許被重寫
控制語句
if-else中盡量不適用else
多次if-else使用狀態設計模式
循環體內不使用耗時操作
注釋規約:
類,類屬性,類方法的注釋必須使用javadoc規范,使用/*內容/
所有的抽象方法學習要用javadoc注釋,除了返回值,參數,異常說明外,還應該指出做什么,實現什么
所有類都必須添加創建者信息
方法內部單行注釋,再被注釋語句上方另起一行,使用//注釋
所有的枚舉類型字段必須要有注釋,說明每個數據的用途
其他:
使用正則表達式時,利用好其預編譯功能
velocity調用POJO類的屬性時,建議直接使用屬性名取值即可,模板引擎會自動調用。
后臺傳輸給頁面的變量必須加$!{}否則當值為空時會直接顯現到頁面
Math.random()這個方面返回值是double獲取整數是使用Random對象的NextInt或者nextLong
獲取當前毫秒數System.currentTimeMillis()
獲取納秒數System.nanoTimer()推薦使用Instant類
盡量不要在velocity模板中加入變量聲明,邏輯運算及復雜邏輯
任何數據結構的構造和初始化都應該指定大小
異常處理:
不捕獲運行時異常
異常不要用來最流程控制,條件控制,以為異常的處理效率比較低
對于非穩定的代碼catch盡可能區分異常類型,在做處理
不能再finally塊中使用return,finally塊中的return返回方法結束執行不再執行try中的return語句
方法返回值可以為null但必須聲明為什么會返回null
定義時區分unchecked / checked異常,避免直接使用exception,應該使用自定義異常
使用日志框架slf4j中的api
日志文件至少保存15天,日志輸出必須使用條件輸出形式或者使用占位符的方式
避免打印重復日志,在log4j.xml中設置additivity = false.
MySQL規約:
表達是否的概念必須使用is _ xx的方式命名,數據類型為unsigned tinyint 非負數必須使用unsigned
表名,字段名必須使用小寫字母和數字;禁止出現數字開頭,禁止雙下滑線中間只出現數字
表名不使用負數名詞
禁用關鍵字
唯一索引名用uk _ 字段名;普通索引用idx_字段名
小數類型用decimal 禁止使用float和double.,如果存儲數據擦超出decimal的范圍,建議將數據拆成整數和小數分開存儲。
如果存儲的字符串長度幾乎相等,使用char 定長字符串類型
varchar長度不要超過5000,如果存儲長度大于5000,定義字段類型為text,獨立出來一張表,用主鍵來對用,避免影響其他字段索引效率。
表必備三個字段,id,gmt _ create,gmt _ modified.
id為主鍵,類型為unsigned bigint,單表自增,步長為1.gmt_create,gmt_modified的類型均為date_time類型
表的命名最好是加上“業務名稱_表的作用”
數據庫名與應用名一致
字段允許適當冗余提高性能,冗余字段應遵守:
不是頻繁修改的字段
不是varchar等超長字段
單表行數超過500萬或者單表容量超過2GB才推薦使用分庫分表
業務上具有唯一特性的字段即使是組合字段,也必須建成唯一索引
超過三個表禁止join。需要join的字段,數據類型保持絕對一致;多表關聯查詢時,保證保證被關聯的字段需要有索引。
在varchar字段上簡歷索引時,必須指定索引長度,沒必要對全字段建立索引,根據實際文本區分度決定索引長度。
頁面搜索嚴禁左或者全模糊查詢,如果需要使用搜索引擎查詢。索引文件具有B-Three的最左前綴匹配特性,若果左邊的值未確定那么無法使用此索引。
如果有order by 的場景,請注意利用索引的有序性。
利用覆蓋索引來進行查詢操作,來避免回表操作。
利用延遲關聯或者子查詢優化超多分頁場景
sql性能優化的目標:至少達到range級別,正常ref,最好consts
consts單表中最多只有一個匹配行,在優化階段即可讀取到數據。
ref指的是使用普通的索引
range對索引進行范圍搜索
建組合索引的時候,區分度最高的在最左邊
創建索引時注意:
誤認一個查詢要建一個索引
誤認索引會消耗空間,嚴重拖慢更新和新增速度
誤認唯一索引一律需要在應用層先查后插
count(*)統計值為null的行
count (distinct col)計算該列除null外的不重復數量
注:count(distinct col 1,col 2)如果其中一列全為null,那么即使另一列有不同的值,也返回0
當一列全為null時sum(m)返回null,所以使用sum()時注意NPE問題:select if(isnull(sum(g)),0,sum(g)) from table;
使用isNULL()來判斷字段是否為空,null與任何值比較都為null
在代碼中寫分頁查詢邏輯時,若count為0應該直接返回,避免執行后面的分頁語句。
不得使用外鍵與級聯,一切外鍵概念必須在應用層解決。
禁止使用存儲過程,存儲過程難以調試和擴展,更沒有可移植性
數據修定時,刪除和修改記錄時,要先select避免誤刪除
in操作盡量避免,無法避免保證in后面的集合元素數量控制在1000以內
全球化需要,所有的字符存儲與表示都用utf-8
存儲表情時,使用utfmb 4來存儲