java 代码走查_Java代码走查具体考察点
代碼走查具體考察點(diǎn)
一、參數(shù)檢驗(yàn)
公共方法都要做參數(shù)的校驗(yàn),參數(shù)校驗(yàn)不通過,需要明確拋出異?;?qū)?yīng)響應(yīng)碼。
在接口中也明確使用驗(yàn)證注解修飾參數(shù)和返回值,作為一種協(xié)議要求調(diào)用方按注解約束傳參,返回值驗(yàn)證注解約束提供方按注解要求返回結(jié)果。
二、魔法數(shù)字(幻數(shù))
在代碼中要杜絕幻數(shù),幻數(shù)可定義為枚舉或常量以增強(qiáng)其可讀性。
三、空指針檢驗(yàn)
不確定返回集合是否可為空時(shí),要先做非空判斷,再做for循環(huán)。
盡量返回空對象,或者空集合,而不是null。
判斷字符串為空時(shí),先判斷是否為空,再判斷是否空串,最好將其提出公共方法。
使用a.equal(b)時(shí),把常量放在左邊。
四、下標(biāo)越界
如果方法傳入數(shù)組下標(biāo)作為參數(shù),要在一開始就做下標(biāo)越界的校驗(yàn),避免下標(biāo)越界異常。
五、重復(fù)代碼檢驗(yàn)
不允許寫重復(fù)代碼(四行左右重復(fù)計(jì)算重復(fù)代碼),重復(fù)代碼要使用重構(gòu)工具提取重構(gòu)。
六、命名規(guī)范
包、類、方法、字段、變量、常量的命名要遵循規(guī)范。
命令要名副其實(shí),一方面增加可讀性,另一方面促使我們在起名的過程中思考方法、變量、類的職責(zé)是否合適。
盡量不要在循環(huán)中調(diào)用服務(wù),不要在循環(huán)中做數(shù)據(jù)庫等跨網(wǎng)絡(luò)操作。
循環(huán)或者遞歸,要注意其是否一定包含了停止循環(huán)/遞歸的條件。
盡量避免while(true),一定要寫的話,循環(huán)開始要加一個(gè)sleep,這樣避免一上來就異常,跑死CPU。
七、注意循環(huán)
八、關(guān)心頻率
寫每一個(gè)方法時(shí)都要關(guān)心這個(gè)方法的調(diào)用頻率,一天多少,一分多少,一秒多少,峰值可能達(dá)到多少,調(diào)用頻率高的一定要考慮性能指標(biāo),考慮是否會(huì)打垮數(shù)據(jù)庫、緩存等。
九、差錯(cuò)控制
避免過大的 try 塊,不要把不會(huì)出現(xiàn)異常的代碼放到 try 塊里面,盡量保持一個(gè) try 塊對應(yīng)一個(gè)或多個(gè)異常。
細(xì)化異常的類型,不要不管什么類型的異常都寫成 Excetpion。
catch 塊盡量保持一個(gè)塊捕獲一類異常,不要忽略捕獲的異常,捕獲到后要么處理,要么重新拋出新類型的異常。
方法內(nèi)部,不要把自己能處理的異常拋給別人。
不要用 try...catch 參與控制程序流程,異??刂频母灸康氖翘幚沓绦虻姆钦G闆r。
十、關(guān)于長度
如果一行代碼過長,要分解開來;如果一個(gè)方法過長,要重構(gòu)方法;如果一個(gè)類過長要考慮拆分類
十一、外部依賴的性能
如果調(diào)用了外部依賴,要搞清楚這個(gè)外部依賴可以提供的性能指標(biāo),考量其是否能夠提供符合我們使用場景的服務(wù)。
十二、避免重復(fù)造輪子
不要重復(fù)造輪子,如果已經(jīng)有成熟類庫實(shí)現(xiàn)了類似功能,要優(yōu)先使用成熟類庫的方法,這是因?yàn)槌墒祛悗熘械姆椒ǘ冀?jīng)過很多人的測試驗(yàn)證,已經(jīng)非常可靠了。
十三、注意多線程
多線程環(huán)境中,要注意數(shù)據(jù)的原子性與可見性等線程安全問題,最典型的HashMap,SimpleDateFormat,ArrayList是非線程安全的,另外如果使用Spring自動(dòng)掃描服務(wù),那么這個(gè)服務(wù)默認(rèn)是單例,其內(nèi)部成員是多個(gè)線程共享的,如果直接用成員變量是有線程不安全的。
十四、日志打印
打印日志要設(shè)定合理的日志級別。
生成長字符串的toString()時(shí),通過日志級別和if語句達(dá)到控制打印量的目的。原因是,長字符傳拼接會(huì)占用很多gc年輕代內(nèi)存。
要通過log4j打印日志而不是直接把日志打印到控制臺。
十五、方法實(shí)現(xiàn)的簡潔
這個(gè)無法說的太細(xì),總之是不要啰里啰嗦的寫代碼,具體問題要具體分析。
十六、正向依賴
不能讓底層模塊依賴于上層模塊;不能讓數(shù)據(jù)層依賴于服務(wù)層;也不能讓服務(wù)層依賴于UI層;更不能在模塊之間形成循環(huán)依賴關(guān)系。
十七、分治
分而治之,復(fù)雜的問題要分解成幾個(gè)相對簡單的問題來解決,首先要分析出核心問題,然后分析出核心的入?yún)⑹鞘裁?#xff0c;結(jié)果是什么,入?yún)⑼ㄟ^幾步變化可以得出結(jié)果。(該條與第十條:關(guān)于長度,有一定的重合)
十八、代碼健壯性意識
該條是前面幾條的整合,比較綜合??紤]各種邊界條件(例如第四條下標(biāo)越界、用戶輸入數(shù)據(jù)超出最大值等)、處理失敗或出異常的方法(參考第九條、差錯(cuò)控制)、校驗(yàn)入?yún)⒑头祷刂?參考第一條參數(shù)校驗(yàn))
總結(jié)
以上是生活随笔為你收集整理的java 代码走查_Java代码走查具体考察点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Windows客户端访问vsftpd
- 下一篇: 关于Java中的HashMap