1. 程式人生 > >svn理解與編碼規範(自己整理)

svn理解與編碼規範(自己整理)

**SVN:**可以看成是一個實現檔案共享管理的軟體,分為伺服器端和客戶端,檔案可以儲存到伺服器端,個人也可以把伺服器端的檔案下載到本地檢視,更新,修改,然後上傳到伺服器端,這樣大家就可以看到最新版的檔案。
一。命名風格
常規的話:包名,專案名全部小寫。
類名採用駝峰命名,首字母大寫。方法名(介面)和變數首字母小寫,第二個英文開始大寫。常量名全部大寫,單詞間用_隔開。
1.程式碼開始和結尾不能為下劃線或美元符號。
(×)_name/Object$
2.抽象類命名以Abstract或Base開頭,異常類以Exception結尾,測試類以Test結尾。
3.對於service類,內部的實現類用Impl的字尾與介面區別。
(√)CacheServiceImpl實現CacheService介面
4.如果模組,介面,類,方法使用了設計模式,在命名時體現出具體模式。
(√)public class OrderFactory
5.各層命名規約:
A)Service/DAO 層方法命名規約
1)獲取物件的方法用 get 做字首。
2)獲取多個物件的方法用 list 做字尾。
3)獲取統計值的方法用 count 做字尾。
4)插入的方法用 save/insert 做字首。
5)刪除的方法用 remove/delete 做字首。
6)修改的方法用 update 做字首。
B)領域模型命名規約
1)資料物件:xxxPO或直接xxx,xxx 即為資料表名。
2)展示物件:xxxVO,xxx 一般為網頁名稱。
3)POJO 是 PO/VO 等的統稱,禁止命名成 xxxPOJO。
二、常量定義
1、long與Long初始賦值時,使用大寫的L,小寫容易和1混淆。
如Long a = 21;不確定是2l還是21
2.按功能歸類常量
例子:快取相關常量放在類CacheConsts下,系統配置相關常量放在類ConfigConsts下。
(三)程式碼格式
1.大括號的使用規定,大括號內為空,簡介寫成{},不用換行;如果非空,左大括號前不換行,後換行;右大括號前換行,後還要else等程式碼不換行,表示終止的右大括號必須換行。
2.小括號和字元之間不出現空格
(√)if(a == b)
3.任何二目、三目運算子的左右兩邊都需要加一個空格。
4.使用tab字元縮排對齊
eg:
public static void mian(String[] args){
String say = “hello”;
int flag = 0;
if (flag == 0) {System.out.println(“world”);
} else {
System.out.println(“OK”);
}
}
5.當行字元數限制不超過120個,超出需要換行。
正例:
StringBuffer sb = new StringBuffer();
// 超過 120 個字元的情況下,換行縮排,點號和方法名稱一起換行
sb.append(“zi”).append(“xin”)…
.append(“huang”)…
.append(“huang”)…
.append(“huang”);
6.一個方法體內的行數不超過200行程式碼
7.方法引數在定義和傳入時,多個引數逗號後邊必須加空格。
eg:method(“a”, “b”, “c”);
四.OOP規約
1.直接通過類名訪問此類的靜態變數或靜態方法。
2.所有的覆寫方法,必須加@Override註解
3.儘量不用可變引數程式設計
4.不要使用過時的類或方法
5.Object的equals方法容易丟擲空指標異常,應使用常量或確定有值的物件來呼叫equals。
(√)“test”.equals(object);
6.所有的相關型別的包裝類物件之間值的比較,全部使用equals方法比較。
eg:Integer在-128至127範圍的賦值,不會出錯,超出範圍出錯。
7.定義pojo類時,不要設定任何屬性預設值。
8.序列化類新增屬性時,請不要修改 serialVersionUID 欄位,避免反序列失敗;如果完全不相容升級,避免反序列化混亂,那麼請修改 serialVersionUID 值。
說明:注意 serialVersionUID 不一致會丟擲序列化執行時異常。
9.pojo類必須重寫toString方法。如果繼承了另一個pojo類,注意在前面加一個super.toString().
(√)重寫後test.toString()輸出的字串“名稱:xxx,年齡:xxx”.
10.使用String中的split方法得到的陣列時,需要對最後一個分隔符後有無內容的檢查,否則會有索引超出邊界異常的風險。
11.字串的連線方式,使用StringBuilder的append方法進行擴充套件。
(×)
String str = “start”;
for (int i = 0; i < 100; i++) {
str = str + “hello”;
}
17.final宣告的類不允許繼承(如String類)。final宣告的方法不允許重寫(如pojo類的setter方法)。final修飾的變數變成了常量,且只能賦值一次。
18.慎用clone方法拷貝物件
19.類成員與方法訪問控制從嚴:
1)如果不允許外部直接通過 new 來建立物件,那麼構造方法必須是 private。
2)工具類不允許有 public 或 default 構造方法。
3)類非 static 成員變數並且與子類共享,必須是 protected。
4)類非 static 成員變數並且僅在本類使用,必須是 private。
5)類 static 成員變數如果僅在本類使用,必須是 private。
6)若是 static 成員變數,必須考慮是否為 final。
7)類成員方法只供類內部呼叫,必須是 private。
8)類成員方法只對繼承類公開,那麼限制為 protected。
五.集合處理
1.關於hashcode和equals的處理,尊徐如下規則:
1)重寫了equals方法,就必須重寫hashCode方法。
2)因為set儲存的是不重複的物件,依據hashcode和equals進行判斷,所以Set儲存的物件必須重寫這兩個方法。
3)如果自定義物件作為map的鍵,必須重寫兩個方法。
注:String內部重寫了兩個方法
4)使用集合轉陣列的方法,必須使用集合的toArray(T[] array),傳入型別一致,大小為list.size().
eg:
//集合轉陣列
List list = new ArrayList(2);
list.add(“teshi”);
list.add(“活躍”);
String[] strList = new String[list.size()];
strList = list.toArray(strList);
for (String string : strList) {
System.out.println(string);
}
注:使用toArray的無參方法,返回值只能是Object[]類,若強轉其他型別陣列會出現ClassCastException錯誤。
2.不要在foreach迴圈裡面進行remove/add操作。remove元素使用迭代器Iterator方式,如果併發操作,需要對Iterator物件加鎖。
eg:
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (刪除元素的條件) {
iterator.remove();
}
}
5.推薦使用entrySet方法遍歷Map集合K-V,而不是keySet方式進行遍歷。
說明:values()返回的是V值集合,是一個list集合物件;keySet返回的是K值集合,是一個set集合物件;entrySet返回的是k-v值組合集合。
6.高度注意Map集合K/V能不能儲存null值的情況。
集合類 Key Value 說明
Hashtable 不允許為 null 不允許為 null 執行緒安全
ConcurrentHashMap 不允許為 null 不允許為 null 鎖分段技術(JDK8:CAS)
TreeMap 不允許為 null 允許為 null 執行緒不安全
HashMap 允許為 null 允許為 null 執行緒不安全
7.合理利用好集合的有序性和穩定性
ArrayList是order/unsort,HashMap是unorder/unsort;TreeSet是order/sort
8利用set元素唯一的特性,可以快速對集合進行去重操作,避免使用List的contains方法進行遍歷。對比和去重操作。
9.除常用方法(如getXxx/isXxx)等外,不要在條件判斷中執行其他複雜的語句。
eg:
// 虛擬碼如下
final boolean existed = (file.open(fileName, “w”) != null) && (…) || (…);
if (existed) {

}
七、註釋規約
1.類、類的屬性和類方法的註釋用Javadoc規範,使用/ ** 內容 * /格式,不能使用//xxx方式。
八、jsp規約
1.檔名採用大小寫混合的方式,第一個單詞的首字母小寫,其後單詞首字母大寫2.檔案編碼使用utf-8格式。
<%@ page language=“java” import="jaa.util." pageEncoding=“utf-8”%>
3.頁面不要寫css與js的內容,只能是引用檔案的形式。
九。
1.在程式碼中寫分頁查詢邏輯時,若count為0應直接返回,避免執行後面的分頁語句。
2.獲取當前毫秒數:System.currentTimeMillis();而不是new Date.getTime();
3.對於暫時被註釋掉的程式碼片段,在註釋程式碼上方,使用三個斜槓來說明註釋掉的理由。
十、異常規約
1、定義時區分unchecked/checked異常,避免直接丟擲new RuntimeException().
注:runtimeException是未檢查異常。
十一。安全規約
1.隸屬於使用者個人的頁面或者功能必須進行許可權控制權限校驗。
2.根據業務場景,使用者敏感資料禁止直接展示。
eg:使用者手機號碼顯示時隱藏中間四位。
3.5.表單、AJAX 提交必須執行 CSRF 安全過濾。(待議)
說明:CSRF(Cross-site request forgery)跨站請求偽造是一類常見程式設計漏洞。對於存在
CSRF 漏洞的應用/網站,攻擊者可以事先構造好 URL,只要受害者使用者一訪問,後臺便在使用者不知情情況下對資料庫中使用者引數進行相應修改。
十二。資料庫
(一)建表規約
1,所有的業務表和和表字段都要加上中文註釋。
2.禁用資料庫保留字
3.住家索引名為pk_欄位名,唯一索引名為uk_欄位名;普通索引名為idx_欄位名。
4.小數型別使用Number,禁止使用float和double
5.表必備三欄位:ID,CREATEDATE,LASTUPDATE
6.單錶行數超過500萬行或者單表容量超過2GB,才推薦進行分庫分表。
(二)SQL語句
1.不要使用count(列名)
來統計數量
2.當某一列的值全是null時,count(col)的返回結果為0,但sum(col)
的返回結果為null,因此使用sum()時需要注意NPE問題。
3.使用ISNULL()來判斷是否為Null值。null與任何值的直接比較都為null
4.in操作能避免就避免,若不能限制在1000個之內。
(三)ORM(物件關係)對映
1.在表查詢時,一律不要使用

作為查詢的欄位列表。
2.sql.xml配置引數時使用:#{,不要使用${}防止SQL注入
3.更新資料庫記錄時,必須同時更新記錄對應的LASTUPDATE欄位值為當前時間。