阿里巴巴代码规范-note
生活随笔
收集整理的這篇文章主要介紹了
阿里巴巴代码规范-note
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
阿里巴巴在之前的云棲大會(huì)上正式發(fā)出了?阿里巴巴Java開(kāi)發(fā)手冊(cè). 并發(fā)布相關(guān)的Idea插件. 具體的信息可以到Github主頁(yè)?p3c查看. 最近將手冊(cè)重新學(xué)習(xí)了一遍, 發(fā)現(xiàn)在之前的工程項(xiàng)目里面, 有太多不規(guī)范的地方. 將特別注意的地方, 重點(diǎn)標(biāo)記出來(lái).
- Object 的 equals 方法容易拋空指針異常. 盡量使用, Objects.equals(JDK7進(jìn)行比較, 匹配).
- 所有的相同類(lèi)型的?包裝類(lèi)對(duì)象之間值的比較,全部使用 equals 方法比較. 否則超過(guò)128的時(shí)候, 會(huì)出現(xiàn)bug.
- RPC方法的返回值和參數(shù)必須使用包裝數(shù)據(jù)類(lèi)型?. 防止初始化, 設(shè)置了相應(yīng)的默認(rèn)值. 這點(diǎn)非常重要
- 在?getter/setter?方法中,不要增加業(yè)務(wù)邏輯,增加排查問(wèn)題的難度. 可以使用lombok依賴(lài)包.
- 循環(huán)體內(nèi),字符串的連接方式,使用 StringBuilder 的 append 方法進(jìn)行擴(kuò)展
- ArrayList的subList結(jié)果不可強(qiáng)轉(zhuǎn)成ArrayList,否則會(huì)拋出ClassCastException?異常,即java.util.RandomAccessSubList cannot be cast to java.util.ArrayList.
- 集合初始化時(shí),指定集合初始值大小。
- 創(chuàng)建線(xiàn)程或線(xiàn)程池時(shí)請(qǐng)指定有意義的線(xiàn)程名稱(chēng),方便出錯(cuò)時(shí)回溯.
- 線(xiàn)程資源必須通過(guò)線(xiàn)程池 供,不允許在應(yīng)用中自行顯式創(chuàng)建線(xiàn)程. 需要通過(guò)線(xiàn)程池進(jìn)行資源定位.
- 線(xiàn)程池不允許使用 Executors 去創(chuàng)建,而是通過(guò) ThreadPoolExecutor 的方式,這樣 的處理方式讓寫(xiě)的同學(xué)更加明確線(xiàn)程池的運(yùn)行規(guī)則,規(guī)避資源耗盡的風(fēng)險(xiǎn)。
- 在一個(gè) switch 塊內(nèi),都必須包含一個(gè) default 語(yǔ)句并且 放在最后,即使它什么代碼也沒(méi)有
- 盡量避免 if else else if.?超過(guò)三層的嵌套使用 衛(wèi)語(yǔ)句來(lái)進(jìn)行編程.
- 類(lèi)、類(lèi)屬性、類(lèi)方法的注釋必須使用 Javadoc 規(guī)范,使用/*內(nèi)容/格式,不得使用 // xxx 方式.
- 方法內(nèi)部單行注釋,在被注釋語(yǔ)句上方另起一行,使用//注釋
- 獲取當(dāng)前毫秒數(shù) System.currentTimeMillis(); 而不是 new Date().getTime();
- 任何數(shù)據(jù)結(jié)構(gòu)的構(gòu)造或初始化,都應(yīng)指定大小,避免數(shù)據(jù)結(jié)構(gòu)無(wú)限增長(zhǎng)吃光內(nèi)存。
- 及時(shí)清理不再使用的代碼段或配置信息
- 對(duì)大段代碼進(jìn)行 try-catch,這是不負(fù)責(zé)任的表現(xiàn)
- 有 try 塊放到了事務(wù)代碼中,catch 異常后,如果需要回滾事務(wù),一定要注意手動(dòng)回 滾事務(wù).?這個(gè)需要確定如何執(zhí)行?
- 防止NPE是調(diào)用者的責(zé)任. 明確出來(lái). 要考慮你使用的對(duì)象是否可能為空指針.
- 遠(yuǎn)程調(diào)用的時(shí)候, 一律要求進(jìn)行空指針判斷. 防止NPE問(wèn)題的產(chǎn)生. 防止NPE問(wèn)題, 可以使用JDK8的 optional.?http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html.
- 異常信息應(yīng)該包括兩類(lèi)信息:案發(fā)現(xiàn)場(chǎng)信息和異常堆棧信息.
- 大量地輸出無(wú)效日志,不利于系統(tǒng)性能 升,也不利于快速定位錯(cuò)誤點(diǎn).
- 好的單元測(cè)試必須遵守AIR原則. 必須執(zhí)行AIR.
- A 自動(dòng)化
- I 獨(dú)立性
- R 可重復(fù)
- 單元測(cè) 試中不準(zhǔn)使用 System.out 來(lái)進(jìn)行人肉驗(yàn)證,必須使用 assert 來(lái)驗(yàn)證. 單元測(cè)試, 是一個(gè)重要而不緊急的事情.
- 核心業(yè)務(wù)、核心應(yīng)用、核心模塊的?增量代碼確保單元測(cè)試通過(guò)
- 在工程規(guī)約的應(yīng)用分層中 到的 DAO 層,Manager 層,可重用度高的 Service,都應(yīng)該?進(jìn)行單元測(cè)試。
- 和數(shù)據(jù)庫(kù)相關(guān)的單元測(cè)試,可以設(shè)定自動(dòng)回滾機(jī)制,不給數(shù)據(jù)庫(kù)造成臟數(shù)據(jù)
- 小數(shù)類(lèi)型為 decimal,禁止使用 float 和 double
- 表必備三字段:id, create_time, mod_time. 自增ID, 創(chuàng)建時(shí)間, 修改時(shí)間.
- 不過(guò)過(guò)早的進(jìn)行分表, 單表行數(shù)超過(guò) 500 萬(wàn)行或者單表容量超過(guò) 2GB,才推薦進(jìn)行分庫(kù)分表。
- 業(yè)務(wù)上具有唯一特性的字段,即使是多個(gè)字段的組合,也必須建成唯一索引.(建立唯一索引)
- SQL操作消小心: 數(shù)據(jù)訂正時(shí),刪除和修改記錄時(shí),要先 select,避免出現(xiàn)誤刪除,確認(rèn)無(wú)誤才能執(zhí) 行更新語(yǔ)句
- @Transactional 事務(wù)不要濫用. 事務(wù)會(huì)影響數(shù)據(jù)庫(kù)的 QPS,另外使用事務(wù)的地方需 要考慮各方面的回滾方案,包括緩存回滾、搜索引擎回滾、消息補(bǔ)償、統(tǒng)計(jì)修正
- 在?Service 層出現(xiàn)異常時(shí),必須記錄出錯(cuò)日志到磁盤(pán),盡可能帶 上參數(shù)信息,相當(dāng)于保護(hù)案發(fā)現(xiàn)場(chǎng). 一定要保留請(qǐng)求參數(shù). 保留案發(fā)現(xiàn)場(chǎng).
- 線(xiàn)上應(yīng)用不要依賴(lài) SNAPSHOT 版本(安全包除外).
- 給 JVM?設(shè)置-XX:+HeapDumpOnOutOfMemoryError 參數(shù),讓 JVM 碰到 OOM 場(chǎng)景時(shí)輸出 dump 信息.
- 在線(xiàn)上生產(chǎn)環(huán)境,JVM的Xms和Xmx設(shè)置一樣大小的內(nèi)存容量,避免在GC 后調(diào)整堆 大小帶來(lái)的壓力。
總結(jié)
以上是生活随笔為你收集整理的阿里巴巴代码规范-note的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Spring Validation(使用
- 下一篇: 脏读、幻读和不可重复读 + 事务隔离级别