小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一網打盡CodeReview要點(JAVA)

 codingparty 2019-08-17

常規(guī)檢查

業(yè)務

1. 根據需求檢查業(yè)務邏輯代碼是否正確
2. 檢查代碼是否符合編碼規(guī)范
3. 檢查代碼是否存在潛在bug或內存泄露
4. 檢查代碼是否存在性能瓶頸

常見BUG

1. 空指針異常,如使用對象時為保證其非null
2. 類型轉換異常,如強制轉換
3. 算術異常,如除數為0
4. 越界異常,如數組越界
5. 內存溢出異常,如棧溢出(遞歸)、堆溢出等
    例如:遞歸函數必須有閉環(huán)條件即終止條件,或遞歸層級建議1000以內
6. 對象隱式更新造成業(yè)務錯誤,如更新對象時未考慮其他業(yè)務正在使用

檢驗


1. API入口參數必須有常規(guī)及業(yè)務性校驗
2. JAVA中對象使用之前必須有非空(null)校驗,
  注意:在業(yè)務流程上有非空校驗即可,例如一個對象之前已經做過校驗,不做變更的情況下,再次使用則無需校驗
3. 數值類型在做除數計算之前必須進行非0校驗

編碼風格


1. JAVA控制層訪問路徑,均以小寫命名多個單詞則以下劃線相連,層級保持在5級以內
2. JAVA類名以大駝峰命名(例如:ClassName)
3. 函數及變量名以小駝峰命名(例如:functionName)
4. 常量名以全大寫命名多個單詞則以下劃線相連(例如:NAME_TYPE)
5. 函數參數個數保持在5個以內
6. 函數返回值要以具有業(yè)務含義的對象返回,禁止使用Map作為返回值
7. 魔術數字必須以枚舉的方式統(tǒng)一定義并描述其業(yè)務含義
9. 代碼單行長度不易超過100個字符
10. 單個類文件總代碼行數不可超過500行,推薦200以內
11. 單行代碼不易出現(xiàn)多層括號嵌套,例如:(),{},[]的多層嵌套
12. 字符串比較將常量放在左邊,例如 “a”.equals(name)
13. if..else嵌套不可大于3層

異常處理


1. API接口調用、庫函數調用、系統(tǒng)服務調用必須進行異常處理或將異常拋至調用者,不可將異常信息吞掉,例如try{//業(yè)務處理}catch(Exception e){//不做任何處理}
2. 處理異常禁止如下操作,通過日志工具記錄異常信息
    try{//業(yè)務處理}catch(Exception e){ e.printStackTrace(); }
3. 禁止異常處理出現(xiàn)在迭代里面,例如:for 、while、 foreach里面

日志規(guī)范


1. ERROR 記錄造成業(yè)務異常的日志,WARN記錄不影響業(yè)務流程的異常日志,INFO記錄業(yè)務流程狀態(tài)日志,DEBUG詳細的操作或數據日志
2.  關鍵業(yè)務節(jié)點及業(yè)務流程發(fā)生狀態(tài)變化時必須記錄日志,關鍵函數或服務調用必須記錄日志
3. 統(tǒng)一日志工具,例如:slf4j
4. 統(tǒng)一日志格式,DEBUG,INFO,WARN,ERROR,此四類級別日志
   常規(guī)日志,例如:時間 日志級別 業(yè)務類型 日志內容
   審計日志INFO級別,記錄在控制層,統(tǒng)一日志內容格式,例如:“用戶id,業(yè)務模塊,操作類型,資源名稱,發(fā)起地址”
5. 日志內容禁止字符串拼接,建議統(tǒng)一以下格式
   logger.debug("illegalCode[{}]'s pattern is null", request.getIllegalCode())
6. 在一個對象中通常只使用一個Logger對象,Logger應該是static final的,只有在少數需要在構造函數中傳遞logger的情況下才使用private final。
7. 輸出Exceptions的全部Throwable信息,因為logger.error(msg)和logger.error(msg,e.getMessage())這樣的日志輸出方法會丟失掉最重要的StackTrace信息。
8. 不允許記錄日志后又拋出異常,因為這樣會多次記錄日志,只允許記錄一次日志。
9. 不允許出現(xiàn)System print(包括System.out.println和System.error.println)語句。
10. 不允許出現(xiàn)printStackTrace。
11. 不允許出現(xiàn)調試用的Systom.out.pritln("")日志
12. 日志性能的考慮,如果代碼為核心代碼,執(zhí)行頻率非常高,則輸出日志建議增加判斷,尤其是低級別的輸出<debug、info、warn>,至少INFO以下級別必須判斷,
    if(logger.isDebugEnabled()){
        logger.debug("illegalCode[{}]'s pattern is null", request.getIllegalCode())
    }

冗余代碼


1. 清除冗余導入,例如:import javax.servlet.ServletContext;導入了卻沒有使用
2. 清除冗余注釋代碼,即注釋掉且不用的代碼
3. 清除業(yè)務代碼中冗余的“main”函數及System.out.println(),如需測試建議在單元測試用測試
4. 重復性代碼,若業(yè)務功能一致,必須抽離為公共模塊
5. 避免冗余的導入,如:import java.util.*;
6.代碼邏輯的冗余
    6.1. 業(yè)務邏輯上能提前終止的盡量提前終止,避免執(zhí)行過多的代碼,如:
         參數校驗-->下載圖片-->校驗數據是否重復-->保存數據
         以上流程可以改為如下:
         參數校驗-->校驗數據是否重復-->下載圖片-->保存數據

性能


1. 使用合適的數據類型及初始化大小
   例如:
   a. 多字符串的拼接單線程情況下使用StringBuilder
   b. 數據量固定且讀操作頻繁的話選擇數組存儲數據
   c. 集合的使用根據實際情況盡量初始化其容量
2. 資源使用完畢及時釋放
   例如:
   a. 對象使用完畢,及時給變量賦值為null
   b. IO使用完畢要及時在finally中關閉掉
3. 使用合適的數據處理方式:懶加載,異步和并行處理
4. 使用合適的方式提升響應速度:緩存、隊列
5. 使用對象池,處理大量對象創(chuàng)建的問題
6. 數組的拷貝建議使用系統(tǒng)函數System.arraycopy();
7. synchronized、Lock,達到需求加鎖的代碼范圍或對象粒度越小越好,或不適用!
    例如:
    Set<String> recordIds = new HashSet<>()
    String recordIdKey = genKey();
    synchronized (recordIds) {
        if (!recordIds.contains(recordIdKey)) {
            //TODO 1 ...
            //TODO 2 ...
            recordIds.add(recordIdKey);
        }
     }
     方案1:
     Map<String,String> recordIds = new ConcurrentHashMap<>()
     String recordIdKey = genKey();
     if(recordIds.putIfAbsent()!=null){
       //TODO 1 ...
       //TODO 2 ...
     }
    方案2:
        可使用鎖池,recordIdKey獲取鎖之后再操作
8. 迭代(for、foreach、while)嵌套不可大于3層,且在迭代中不可try...catch異常

安全檢查

接口

1. 上傳資源接口,必須進行資源類型、大小校驗(如非必要禁止文件的執(zhí)行權限)
2. 下載資源接口,必須進行下載目錄校驗且進行唯一性資源下載限制
3. 直接執(zhí)行系統(tǒng)指令的API,避免指令拼接的安全隱患

業(yè)務


1. 業(yè)務層面權限校驗,對資源的訪問必須有權限的限制

密碼


1. 密碼規(guī)則應數字、字母、特殊字符組合,長度至少大于6位
2. 密碼的加密規(guī)則盡量使用:AES256+IV
3. 數據庫存儲及配置文件中的密碼應進行加密

SQL


1. sql編碼,必須處理sql注入的問題
2. 請求參數必須進行特殊字符的處理(參數進入業(yè)務之前)

并發(fā)


1.  并發(fā)情況下,公共屬性、對象、數據必須進行一致性處理(即并發(fā)安全處理)

文檔檢查

注釋


1. API接口必須有功能描述,字段必須有業(yè)務描述
2. API說明文檔必須和實際API接口保持一致
3. 公共函數必須有功能描述,字段必須有業(yè)務描述
4. 數據庫表必須有功能描述,字段必須有業(yè)務描述
5. 常量(編碼)必須有業(yè)務描述

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多