天道不一定酬所有勤
但是,天道只酬勤

阿里巴巴Java開發手冊的正確學習姿勢是怎樣的?

開發十年,就只剩下這套架構體系了??!

很多人都知道,阿里巴巴在2017發布了《阿里巴巴Java開發手冊》,前后推出了很多個版本,并在后續推出了與之配套的IDEA插件和書籍。

相信很多Java開發都或多或少看過這份手冊,這份手冊有7個章節,覆蓋了編程規約、異常日志、單元測試、安全規約、MySQL數據庫、工程結構以及設計規約等方面。

這份規約可以說是覆蓋了Java開發的方方面面,如果還有人沒看的話,強烈建議大家好好看看,并且仔細研讀。

手冊中,有那么一些規則,是比較容易理解的。比如一些變量命名規范,有另外一些規則,是不太容易理解的,背后是有很多思考的,有一些則是阿里這么多年來遇到的坑的總結。

這份手冊在誕生之初,是在阿里內部的,那時候就引起了廣泛的討論。最終外界看到的那份手冊,是阿里無數工程師”挑剔”后的結果,可以說是凝聚了無數工程師成功的經驗、踩過的坑等。

其實,規約最大的價值,應該是促使人去思考規約制定背后的思考。真的去探查規約背后的原理,這個過程中可以學習到很多東西。

我寫過幾篇關于規約中部分規則的自己理解。這里面簡單做個總結,這個系列并沒有完結,我后面還會繼續完善。

一、為什么阿里巴巴禁止工程師直接使用日志系統(Log4j、Logback)中的 API

?

在Java生態體系中,圍繞著日志,有很多成熟的解決方案。關于日志輸出,主要有兩類工具。

一類是日志框架,主要用來進行日志的輸出的,比如輸出到哪個文件,日志格式如何等。 另外一類是日志門面,主要一套通用的API,用來屏蔽各個日志框架之間的差異的。

所以,對于Java工程師來說,關于日志工具的使用,最佳實踐就是在應用中使用如Log4j + SLF4J 這樣的組合來進行日志輸出。

這樣做的最大好處,就是業務層的開發不需要關心底層日志框架的實現及細節,在編碼的時候也不需要考慮日后更換框架所帶來的成本。這也是門面模式所帶來的好處。

詳解:為什么阿里巴巴禁止工程師直接使用日志系統(Log4j、Logback)中的 API

二、為什么阿里巴巴建議集合初始化時,指定集合容量大???

?

HashMap有擴容機制,就是當達到擴容條件時會進行擴容。如果我們沒有設置初始容量大小,隨著元素的不斷增加,HashMap會發生多次擴容,而HashMap中的擴容機制決定了每次擴容都需要重建hash表,是非常影響性能的。

默認情況下,當我們設置HashMap的初始化容量時,實際上HashMap會采用第一個大于該數值的2的冪作為初始化容量。

但是,為了最大程度的避免擴容帶來的性能消耗,我們建議可以把默認容量的數字設置成expectedSize / 0.75F + 1.0F 。在日常開發中,可以使用

Map<String, String> map = Maps.newHashMapWithExpectedSize(10);

來創建一個HashMap,計算的過程guava會幫我們完成。

但是,以上的操作是一種用內存換性能的做法,真正使用的時候,要考慮到內存的影響。

詳解:為什么阿里巴巴建議集合初始化時,指定集合容量大???

三、為什么阿里巴巴禁止在 foreach 循環里進行元素的 remove/add 操作

Hollis為了防爬蟲以及未經授權的惡意轉載,此處內容已被作者隱藏,請輸入驗證碼查看內容
驗證碼:
請關注本站微信公眾號,回復“驗證碼”,獲取驗證碼。在微信里搜索“Hollis”或者“hollischuang”或者微信掃描右側二維碼都可以關注本站微信公眾號。

(全文完) 歡迎關注『Java之道』微信公眾號
贊(2)
如未加特殊說明,此網站文章均為原創,轉載必須注明出處。HollisChuang's Blog » 阿里巴巴Java開發手冊的正確學習姿勢是怎樣的?
分享到: 更多 (0)

評論 搶沙發

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址

HollisChuang's Blog

聯系我關于我
网上设计赚钱的网站有哪些