阿里Java規(guī)范-02-異常日志

=================(一)異常處理==================
關(guān)于接口使用拋異常還是返回錯(cuò)誤碼,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【ABCD】多選
A .向公司外部提供的http/api接口,推薦使用“錯(cuò)誤碼”方式返回異常或者錯(cuò)誤信息。
B .對于應(yīng)用內(nèi)部的方法調(diào)用,推薦使用“拋出異?!钡姆绞教幚懋惓;蛘咤e(cuò)誤信息。
C .跨應(yīng)用的RPC調(diào)用,推薦使用將“錯(cuò)誤碼”和“錯(cuò)誤簡短信息”封裝成Result的方式進(jìn)行返回。
D .對外提供的接口,一定要保證邏輯健壯性:盡量避免空指針等技術(shù)類異常;對于業(yè)務(wù)類異常要做好錯(cuò)誤碼或者異常信息的封裝。 //這一項(xiàng)容易選掉

關(guān)于異常處理的注意事項(xiàng),下列哪些說法符合《阿里巴巴Java開發(fā)手冊》: 【AB】多選
A、事務(wù)場景中,拋出異常核catch后,如果需要回滾,一定要手動回滾事務(wù)。
B、在finally對文件流進(jìn)行關(guān)閉。
C、推薦在finally使用return語句。
D、在try塊內(nèi),可以不用對可能為null的對象做非空判斷,因?yàn)槿绻麙仈SNPE,會被catch塊捕獲井處理
文檔:【強(qiáng)制】不要捕獲 Java 類庫中定義的繼承自 RuntimeException 的運(yùn)行時(shí)異常類,如:
IndexOutOfBoundsException / NullPointerException,這類異常由程序員預(yù)檢查來規(guī)避,保證程序健壯性。

關(guān)于checked/unchecked exception,下列哪些說法是正確的:【BCD】多選
A .繼承java.lang.Error的類屬于checked exception。
B .checked異常繼承java.lang.Exception類。
C .unchecked異常繼承java.lang.RuntimeException類。
D .NullPointerException , IllegalArgumentException屬于unchecked exception。

關(guān)于異常的處理方式,下列哪些說法是正確的:【BD】多選
A .為防止obj對象本身空指針異常,書寫代碼時(shí)應(yīng)該注意加異常捕獲處理,例如:try { obj.method() } catch(NullPointerException e){……} 。
B .方法簽名中,拋給調(diào)用者的關(guān)鍵字為throws
C .方法內(nèi)部,拋出異常實(shí)例對象為throws
D .自定義異常要做到“認(rèn)知對等”,即:拋出者和接收者要保持對自定義異常的認(rèn)知統(tǒng)一,接收方需要知道這種異常的含義和對應(yīng)的處理方案。

關(guān)于捕獲異常和拋異常,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【BCD】多選
A .如果需要捕獲不同類型異常,為了方便處理,可以使用catch(Exception e){...}。
B .不要捕獲異常后不處理,丟棄異常信息。
C .捕獲異常與拋異常,必須是完全匹配,或者捕獲異常是拋異常的父類。
D .異常定義時(shí)區(qū)分unchecked / checked 異常,避免直接使用RuntimeException拋出。

關(guān)于Java代碼的設(shè)計(jì)和開發(fā)注意事項(xiàng)下列哪些說法符合《集合開發(fā)規(guī)約》:【ABCD】多選
A .禁止將URL、文件名、系統(tǒng)參數(shù)、數(shù)據(jù)庫連接地址、業(yè)務(wù)規(guī)則的可變參數(shù),硬編碼在工程中。
B .long或者Long初始賦值時(shí),必須是大寫的L,不能小寫。
C .當(dāng)一個(gè)類有多個(gè)構(gòu)造方法,或是多個(gè)同名方法,這些方法應(yīng)該按順序放置在一起,便于閱讀。
D .相同參數(shù)類型,同等業(yè)務(wù)含義,才可以使用Java的可變參數(shù),參數(shù)的類型盡量避免使用Object。// 避免強(qiáng)制轉(zhuǎn)換引起RuntimeException的ClassCastException

關(guān)于方法的返回值是否可以為null,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【BC】多選
A. 方法的返回值可以為null,如果是集合,必須返回空集合。
B. 方法的返回值可以為null,不強(qiáng)制返回空集合,或者空對象等。
C. 方法實(shí)現(xiàn)者必須添加注釋,充分說明什么情況下會返回null值。
D. 防止NPE是調(diào)用者的責(zé)任。

關(guān)于異常處理,下列哪些說法是正確的:【ABCD】
A.try塊放到了事務(wù)代碼中,catch異常后,如果需要回滾事務(wù),必須手動回滾事務(wù)
B.在finally塊必須對文件秀進(jìn)行關(guān)閉
C.不能在finally使用return,fanally塊中的return返回方法結(jié)束執(zhí)行,不會再執(zhí)行 try 塊中的 return 語句
D.循壞體中避免不必要的try-catch操作

防止NPE,是程序員的基本修養(yǎng),對于可能產(chǎn)生NPE的場景,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【ACD】多選
A. 數(shù)據(jù)庫的查詢結(jié)果可能為null
B. 集合只需要判斷isNotEmpty,對取出的數(shù)據(jù)元素不需要判斷是否為null。
C. 遠(yuǎn)程調(diào)用返回對象,一律要求進(jìn)行NPE判斷
D. 對于Session中獲取的數(shù)據(jù),建議NPE檢查,避免空指針。

關(guān)于try-catch的使用方式,下列哪些說法是正確的:【BD】
A .推薦用try-catch來做流程控制、條件控制。
B .捕獲異常與拋異常,必須是完全匹配,或者捕獲異常是拋異常的父類。
C .對大段代碼進(jìn)行try-catch,利用Throwable來捕捉,萬無一失。
D .對大段代碼進(jìn)行try-catch,這是不負(fù)責(zé)任的表現(xiàn),分清穩(wěn)定代碼和非穩(wěn)定代碼,對非穩(wěn)定的代碼做對應(yīng)的異常處理。

=================(二)日志規(guī)約==================

關(guān)于日志的條件輸出和占位符的方式,下列哪些說法是正確的: 【AD】
A. 對trace/debug/info級別的日志輸出,必須使用條件輸出形式或者使用占位符的方式
B.條件輸出方式可以避免log參數(shù)中字符串拼接的開銷。
C.占位符輸出格式可以和條件輸出一樣避免參數(shù)中字符串拼接開銷。
D.因?yàn)樵O(shè)置了日志輸出級別,所以無需使用條件輸出方式。
文檔:【強(qiáng)制】對 trace/debug/info 級別的日志輸出,必須使用條件輸出形式或者使用占位符的方式。
Trace >debug >info > error
說明:logger.debug("Processing trade with id: " + id + " symbol: " + symbol); 如果日志級別是 warn,上述日志不會打印,但是會執(zhí)行字符串拼接操作,如果 symbol 是對象,會執(zhí)行 toString()方法,浪費(fèi)了系統(tǒng)資源,執(zhí)行了上述操作,最終日志卻沒有打印。
正例:(條件)
if (logger.isDebugEnabled()) {
logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}
正例:(占位符)// ★使用{}占位符。避免字符串連接操作,減少String對象(不可變)帶來的內(nèi)存開銷
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
【強(qiáng)制】異常信息應(yīng)該包括兩類信息:案發(fā)現(xiàn)場信息和異常堆棧信息。如果不處理,那么往上拋。
正例:logger.error(各類參數(shù)或者對象 toString + "_" + e.getMessage(), e);

關(guān)于生產(chǎn)環(huán)境的日志文件,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【ABCD】多選
A .異常信息應(yīng)該包括兩類信息:案發(fā)現(xiàn)場信息和異常堆棧信息。
B .日志文件推薦至少保存15天,因?yàn)橛行┊惓>邆湟浴爸堋睘轭l次發(fā)生的特點(diǎn)。
C .避免重復(fù)打印日志,浪費(fèi)磁盤空間,務(wù)必在log4j.xml中設(shè)置additivity=false。
D .錯(cuò)誤日志和業(yè)務(wù)日志盡量分開存放。

關(guān)于應(yīng)用中可以直接依賴的日志框架,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【BC】多選
A. Log4j。
B. SLF4J。
C. JCL(Jakarta Commons Logging)。
D. Logback。

關(guān)于日志級別的使用,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》;【BCD】多選
A. info日志盡可能多輸出,方便開發(fā)人員排查問題。
B. 如果使用warn來記錄剛上線時(shí)的業(yè)務(wù)行為信息,一定要注意日志輸出量的問題,避免把服務(wù)器磁盤撐爆,并記得及時(shí)刪除這些觀察日志。
C. 生產(chǎn)環(huán)境禁止輸出debug日志。
D. error級別只記錄系統(tǒng)邏輯出錯(cuò)、異?;蛘咧匾腻e(cuò)誤信息。

關(guān)于用日志記錄異常信息,下列哪些說法符合《阿里巴巴Java開發(fā)手冊》:【AB】多選
A. 日志盡量記錄案發(fā)現(xiàn)場信息和異常堆棧信息
B. 如果日志中輸出POJO類,POJO類需要重寫toString方法,避免只輸出hashCode。
C. 不建議輸出任何日志,因?yàn)槿罩居涗浵男阅堋?br> D. 捕獲異常后,一律拋給調(diào)用者去處理。

關(guān)于日志的打印,下列哪些符合《阿里巴巴Java開發(fā)手冊》【D】單選
A. System.out("xxx"+e.getMessage())。
B. System.err("xxx"+e.getMessage())。
C. e.printStackTrace()。
D. logger.error("exception happens product info:"+product.toString()+"_"+e.getMessage())。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容