古詩詞大全網 - 個性簽名 - 為什麽阿裏工程師的代碼寫得好?看看他的代碼規範就知道了。

為什麽阿裏工程師的代碼寫得好?看看他的代碼規範就知道了。

我曾經和壹個阿裏的Java工程師合作過壹段時間。他的技術不是很厲害,但是他的代碼寫得很好,所有的函數都很少有bug。我很好奇,就經常問他壹些代碼設計的原理,然後他就給我講阿裏Java手冊。而且他修改了這個手冊,成為我們Java程序員的開發手冊。在本文中,讓我們來看看本手冊中更重要的原則。

強制性代碼中的命名不能以下劃線或美元符號開頭或結尾。

反例:_ name/_ _ name/$ name/name _/name $/name _ _

強制類型立即用括號連接起來表示數組。

正例:定義整數數組int[]array demo;反例:在主參數中,使用字符串args[]來定義。

強制POJO類中的布爾變量不要以is為前綴,否則某些幀解析會導致序列化錯誤。

註意:表示是或否的值命名為is_xxx,所以需要設置is_xxx到xxx的映射關系。

反例:定義為基本數據類型Boolean的屬性被刪除,其方法也被isDeleted()。RPC框架逆向解析時“誤以為”對應的屬性名被刪除,導致屬性未被獲取,然後拋出異常。

建議在命名常量和變量時,將表示類型的名詞放在詞末,以提高識別度。

建議接口類中的方法和屬性不要用任何符號修飾(也不應該是公共的),保持代碼簡潔,並添加有效的Javadoc註釋。盡量不要在接口中定義變量。如果必須定義變量,那麽變量必須與接口方法相關,並且是整個應用程序的基本常量。

正例:接口方法簽名void commit();

接口基本常量字符串COMPANY = " alibaba

反例:接口方法定義公共抽象void f();

描述:JDK8中的接口允許有壹個默認實現,所以這個默認方法對於所有實現類來說都是壹個有價值的默認實現。

引用枚舉類名的後綴是enum,枚舉成員的名字需要全部大寫,單詞之間用下劃線隔開。

描述:枚舉實際上是壹個特殊的類,域成員是常量,構造函數默認強制為私有。

正例:枚舉名為ProcessStatusEnum:SUCCESS/UNKNOWN _ REASON的成員名稱。

參考每層的命名約定:

1)獲取單個對象的方法以get為前綴。

2)獲取多個對象的方法以list為前綴,復數形式以:listObjects結尾。3)獲取統計值的方法以count為前綴。

4)插入方法以保存/插入為前綴。

5)刪除方法以remove/delete為前綴。

6)修改後的方法以update為前綴。

1)數據對象:xxxDO,xxx是數據表的名稱。

2)數據傳輸對象:xxxDTO,xxx是與業務領域相關的名稱。

3)顯示對象:xxxVO,xxx壹般是網頁的名稱。

4) POJO是DO/DTO/BO/VO的統稱,禁止命名為xxxPOJO。

強制代碼中不直接出現幻值(即未定義的常數)。

強制避免通過類的對象引用訪問類的靜態變量或靜態方法,這不必要地增加了編譯器的解析成本,可以直接用類名訪問。

只有強制參數類型相同,業務意義相同,才能使用Java變量參數,避免使用Object。

註意:變量參數必須放在參數列表的末尾。(鼓勵學生盡量不要用可變參數編程)

強制比較所有整數包裝類對象之間的值,並且它們都使用equals方法。

註:對於整數var =?對於-128到127範圍內的賦值,IntegerCache.cache中生成整數對象,現有對象將被重用。這個區間內的整數值可以用= =直接判斷,但是這個區間外的數據都會在堆上生成,現有對象不會被重用。這是個大坑,推薦equals法判斷。

基本數據類型和打包數據類型的使用標準如下:

註意:POJO類屬性沒有初始值,提醒用戶需要使用時必須進行顯式賦值。任何NPE問題或入庫檢查都由用戶擔保。

正例:數據庫的查詢結果可能為空,因為用基本數據類型自動拆包接收存在NPE風險。

反例:比如顯示總成交量的波動,即正負x%,其中x為基本數據類型。RPC服務調用不成功時,返回默認值,頁面顯示為0%,不合理,應該顯示為破折號。因此,包裝數據類型的空值可以表示附加信息,例如遠程調用失敗和異常退出。

強制POJO類編寫toString方法。

使用IDE中的工具:source & gt生成toString時,如果繼承了另壹個POJO類,註意在前面加上super.toString。

註意:當壹個方法拋出異常時,可以直接調用POJO的toString()方法打印其屬性值,方便故障排除。

強制處理hashCode和equals遵循以下規則:

描述:String覆蓋了hashCode和equals方法,所以我們可以愉快地使用String對象作為鍵。

強制線程資源必須通過線程池提供,不允許在應用程序中顯式創建線程。

說明:線程池的好處是減少創建和銷毀線程的時間和系統資源的開銷,解決資源不足的問題。如果不使用線程池,可能會導致系統創建大量相似的線程,從而導致內存耗盡或“過度切換”的問題。

不允許使用Executors創建強制線程池,而是使用ThreadPoolExecutor。這樣寫的同學可以更清楚線程池的運行規則,避免資源耗盡的風險。

上述規範是設計代碼的重要原則。如果在編碼的過程中能夠遵循以上原則,那麽代碼的可讀性和可維護性將會大大提高。