Java開發(fā)手冊黃山版新增規(guī)約摘錄
早期文章
? ? ????在 2020 年 8 月 3 日 推出的《Java 開發(fā)手冊嵩山版》后歷經(jīng)了 18 個月阿里又推出了《Java 開發(fā)手冊黃山版》。想必每個 Java 程序員應(yīng)該都會關(guān)注阿里推出的《Java 開發(fā)手冊》,個人覺得這份開發(fā)手冊短小精干,非常實用。在整個手冊中可以逐步地學(xué)到知識(手冊背不下來,只能逐步的吸收,并盡量付諸實踐),也可以從知識的表面理解一些更深層的思想。其實之前我做 PHP 的時候,就對這份手冊非常的喜歡。因此手冊有更新,我把更新的規(guī)約摘錄在這里,方便閱讀,方便學(xué)習(xí)。
? ? ????按照《手冊》中《附1》來看,黃山版比嵩山版新增了 11 條規(guī)約,修改了描述 22 處,具體如下:
1)新增 11 條新規(guī)約。比如,浮點數(shù)的后綴統(tǒng)一為大寫;枚舉的屬性字段必須是私 有且不可變;配置文件中的密碼需要加密等。2)新增描述中的正反例 2 條。比如,多個構(gòu)造方法次序、NoSuchMethodError 處 理;新增擴展說明 5 條。比如,父集合元素的增加或刪除異常等。3)修改描述 22 處。比如,魔法值的示例代碼、ScheduledThreadPool 問題等。4)修正嵩山版中部分代碼格式錯誤和描述錯誤。
《Java 開發(fā)手冊》(黃山版)
? ? ? ? 以上部分引自《Java 開發(fā)手冊》(黃山版),截圖如下:

? ? ? ? 本文整理了新增的 11 條規(guī)約,這里都列舉出來,具體內(nèi)容如下:
一、編程規(guī)約
(二)常量定義(P3)
3.【強制】浮點數(shù)類型的數(shù)值后綴統(tǒng)一為大寫的 D 或 F。
正例:public static final double HEIGHT = 175.5D;
?public static final float WEIGHT = 150.3F;
?
?(十一) 其他(?p23)
?6.【強制】枚舉 enum(括號內(nèi))的屬性字段必須是私有且不可變
?
?二、異常日志
?(三) 日志規(guī)約(?p28)
?14.【推薦】為了保護用戶隱私,日志文件中的用戶敏感信息需要進行脫敏處理。
說明:日志排查問題時,推薦使用訂單號、UUID 之類的唯一編號進行查詢。
?四、安全規(guī)約(p31)
?9.【強制】對于文件上傳功能,需要對于文件大小、類型進行嚴(yán)格檢查和控制。
說明:攻擊者可以利用上傳漏洞,上傳惡意文件到服務(wù)器,并且遠(yuǎn)程執(zhí)行,達(dá)到控制網(wǎng)站服務(wù)器的目的。
10.【強制】配置文件中的密碼需要加密。
五、MySQL 數(shù)據(jù)庫
(一) 建表規(guī)約(p32)
10.【強制】在數(shù)據(jù)庫中不能使用物理刪除操作,要使用邏輯刪除。
說明:邏輯刪除在數(shù)據(jù)刪除后可以追溯到行為操作。不過會使得一些情況下的唯一主鍵變得不唯一,需要根據(jù)情況來酌情解決。
六、工程結(jié)構(gòu)
(二) 二方庫依賴(p38)
6.【強制】二方庫定制包的命名方式,在規(guī)定的版本號之后加“-英文說明[序號]”,英文說明可以是部門簡稱、業(yè)務(wù)名稱,序號直接緊跟在英文說明之后,表示此定制包的順序號。
說明:fastjson 給 SCM 定制的版本號:1.0.0-SCM1。注:請盡可能在應(yīng)用端來解決類沖突和加載問題,避免隨意發(fā)布此類定制包。
(三) 服務(wù)器(p39)
1.【強制】調(diào)用遠(yuǎn)程操作必須有超時設(shè)置。
說明:類似于 HttpClient 的超時設(shè)置需要自己明確去設(shè)置 Timeout。根據(jù)經(jīng)驗表明,無數(shù)次的故障都是因為沒有設(shè)置超時時間。
2.【推薦】客戶端設(shè)置遠(yuǎn)程接口方法的具體超時時間(單位 ms),超時設(shè)置生效順序一般為:1)客戶端 Special Method;2)客戶端接口級別;3)服務(wù)端 Special Method;4)服務(wù)端接口級別。
7.【推薦】了解每個服務(wù)大致的平均耗時,可以通過獨立配置線程池,將較慢的服務(wù)與主線程池隔離開,免得不同服務(wù)的線程同歸于盡。
七、設(shè)計規(guī)約(p40)
7.【強制】系統(tǒng)設(shè)計時要準(zhǔn)確識別出弱依賴,并針對性地設(shè)計降級和應(yīng)急預(yù)案,保證核心系統(tǒng)正??捎谩?/span>
說明:系統(tǒng)依賴的第三方服務(wù)被降級或屏蔽后,依然不會影響主干流程繼續(xù)進行,僅影響信息展示、或消息通知等非關(guān)鍵功能,那么這些服務(wù)稱為弱依賴。
正例:當(dāng)系統(tǒng)弱依賴于多個外部服務(wù)時,如果下游服務(wù)耗時過長,則會嚴(yán)重影響當(dāng)前調(diào)用者,必須采取相應(yīng)降級措施,比如,當(dāng)調(diào)用鏈路中某個下游服務(wù)調(diào)用的平均響應(yīng)時間或錯誤率超過閾值時,系統(tǒng)自動進行降級或熔斷操作,屏蔽弱依賴負(fù)面影響,保護當(dāng)前系統(tǒng)主干功能可用。
反例:某個疫情相關(guān)的二維碼出錯:“服務(wù)器開了點小差,請稍后重試”,不可用時長持續(xù)很久,引起社會高度關(guān)注,原因可能為調(diào)用的外部依賴服務(wù) RT 過高而導(dǎo)致系統(tǒng)假死,而在顯示端沒有做降級預(yù)案,只能直接拋錯給用戶。
? ? ? ? 我在每個分類后都增加了具體的頁碼,大家可以自行查閱。
? ? ? ? 從上面的列舉可以看出,黃山版《手冊》中“編程規(guī)約”增加了 2 條,“異常日志”增加了 1 條,“安全規(guī)約”增加了 2 條,“MySQL 數(shù)據(jù)庫”規(guī)約增加了 1 條,“工程結(jié)構(gòu)”增加了 4 條,“設(shè)計規(guī)約”增加了 1 條,一共剛好 11 條規(guī)約。11 條規(guī)約當(dāng)中強制的 8 條,推薦的 3 條。摘錄的不多不少。
? ? ? ? 廢話不多說了,覺得有用就點贊、關(guān)注、在看吧??!
? ? ? ??
? ? ? ??回復(fù)【java開發(fā)手冊】獲取《Java開發(fā)手冊》黃山版。

公眾號內(nèi)回復(fù)?【mongo】 下載 SpringBoot 整合操作 MongoDB 的文檔。
公眾號內(nèi)回復(fù)?【cisp知識整理】 下載 CISP 讀書筆記。
? ? ? ? 之前整理的關(guān)于 Redis 的文章:
Redis | Redis Pub/Sub相關(guān)命令
Redis | 基礎(chǔ)數(shù)據(jù)類型應(yīng)用場景
