簡介: 《〈Java開發手冊(嵩山版)〉靈魂15問》重磅來襲!“一線大廠如何用Java” 解讀再升級,千萬閱讀量博主深究Java規約背后的原理,規范學好Java還不來看一看?
隨著《Java開發手冊(嵩山版)》的發布,解讀再升級!《Java開發手冊(泰山版)靈魂13問》隨新版JAVA開發手冊重岸訓歸,一線大廠怎么用JAVA?千萬閱讀量技術博主15問為你全面剖析,
轉發+關注,然后掃碼添加VX獲取《Java開發手冊(嵩山版)靈魂十五問》解讀手冊電子書,

導讀目錄
一、為什么禁止使用Apache Beanutils進行屬性的copy?
市面上有很多類似的屬性拷貝工具類,比較常用的有
1、Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer
那么,我們到底應該選擇哪種工具類更加合適呢?為什么Java開發手冊中提到禁止使用Apache BeanUtils呢?
接下來就聚焦于對比這幾個類別庫的性能問題來分析,(獲取完整版解讀手冊查看詳情)
二、為什么要求日期格式化時必須有使用y表示年,而不能用Y?
在Java中進行日期處理大家一定都不陌生,我們經常會需要在代碼中進行日期的轉換、日期的格式化等操作,
而一般我們進行日期格式化的時候都會使用SimpleDateFormat工具,之前我們有一篇文章介紹過SimpleDateFormat的執行緒安全問題,這一篇文章再來介紹一個和SimpleDateFormat有關,很容易被忽視,而一旦忽視可能導致大故障的問題,(獲取完整版解讀手冊查看詳情)
三、《 Java 開發手冊-泰山版》提到的三目運算子的空指標問題到底是個怎么回事?
手冊中有一條規約引起了作者的關注,那就是手冊中提到在三目運算子使用程序中,需要注意自動拆箱導致的NullPointerException(后文簡稱:NPE)問題:
具體是怎樣的呢?(獲取完整版解讀手冊查看詳情)
四、為什么建議初始化HashMap的容量大小?
我們之前提到過,《Java 開發手冊》中建議我們設定 HashMap 的初始化容量,
那么,為什么要這么建議?(獲取完整版解讀手冊查看詳情)
五、Java開發手冊建議創建HashMap時設定初始化容量, 但是多少合適呢?
HashMap 有擴容機制,就是當達到擴容條件時會進行擴容,HashMap 的擴容條件就是當 HashMap 中的元素個數(size)超過臨界值(threshold)時就會自動擴容,在 HashMap 中,threshold = loadFactor * capacity,
所以,如果我們沒有設定初始容量大小,隨著元素的不斷增加,HashMap 會發生多次擴容,而 HashMap 中的擴容機制決定了每次擴容都需要重建 hash 表,是非常影響性能的,(獲取完整版解讀手冊查看創建HashMap時設定初始化容量多少合適)
六、為什么禁止使用Executors創建執行緒池?
為什么說可以通過Executors靜態工廠構建執行緒池,但一般不建議這樣使用,
本節我們就來圍繞這個問題來分析一下為什么JDK自身提供的構建執行緒池的方式并不建議使用?到底應該如何創建一個執行緒池呢?(獲取完整版解讀手冊查看詳情)
七、為什么要求謹慎使用ArrayList中的subList方法?
集合是Java開發日常開發中經常會使用到的,
關于集合類,《Java開發手冊》中其實還有另外一個規定:
本節就來分析一下為什么會有如此建議?其背后的原理是什么?(獲取完整版解讀手冊查看詳情)
八、為什么不建議在for回圈中使用“+”進行字串拼接?
使用+拼接字串,其實只是Java提供的一個語法糖,那么他的內部原理到底是如何實作的,(獲取完整版解讀手冊查看詳情)
語法糖:語法糖(Syntactic sugar),也譯為糖衣語法,是由英國計算機科學家彼得·蘭丁發明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能沒有影響,但是更方便程式員使用,語法糖讓程式更加簡潔,有更高的可讀性,
九、為什么禁止在for each回圈里進行元素的remove/add操作?
在Java開發手冊中,有這樣一條規定:
本節就來深入分析一下該規定背后的思考,(獲取完整版解讀手冊查看詳情)
十、為什么禁止工程師直接使用日志系統(Log4j、Log back) 中的API?
作為Java程式員,我想很多人都知道日志對于一個程式的重要性,尤其是Web應用,很多時候,日志可能是我們了解應用程式如何執行的唯一方式,
所以,日志在Java Web應用中至關重要,但是,很多人卻以為日志輸出只是一件簡單的事情,所以會經常忽略和日志相關的問題,(獲取完整版解讀手冊查看詳情)
十一、為什么禁止把SimpleDateFormat定義成static變數?
在日常開發中,我們經常會用到時間,我們有很多辦法在Java代碼中獲取時間,但是不同的方法獲取到的時間的格式都不盡相同,這時候就需要一種格式化工具,把時間顯示成我們需要的格式,
最常用的方法就是使用SimpleDateFormat類,這是一個看上去功能比較簡單的類,但是,一旦使用不當也有可能導致很大的問題,本節就圍繞SimpleDateFormat的用法、原理等來深入分析下如何以正確的姿勢使用它,(獲取完整版解讀手冊查看詳情)
十二、為什么禁止開發人員使用is Success作為變數名?
在日常開發中,我們會經常要在類中定義布爾型別的變數,比如在給外部系統提供一個RPC介面的時候,我們一般會定義一個欄位表示本次請求是否成功的,
關于這個”本次請求是否成功”的欄位的定義,其實是有很多種講究和坑的,稍有不慎就會掉入坑里,作者在很久之前就遇到過類似的問題,本節就來圍繞這個簡單分析一下,到底該如何定一個布爾型別的成員變數,(獲取完整版解讀手冊查看詳情)
十三、為什么禁止開發人員修改serialVersionUID欄位的值?
關于serialVersionUID ,這個欄位到底有什么用?如果不設定會怎么樣?為什么《Java開發手冊》中有以下規定:
本節帶你一探究竟,(獲取完整版解讀手冊查看詳情)
十四、為什么建議開發者謹慎使用繼承?
對于很多開發者來說,繼承肯定都是不陌生的,但是,繼承一定適合所有的場景嗎?毫無忌諱的使用繼承來做代碼擴展真的好嗎?
為什么《Java開發手冊》中有一條規定:謹慎使用繼承的方式進行擴展,優先使用組合的方式實作,(獲取完整版解讀手冊查看詳情)
十五、為什么禁止使用count(列名) 或count(常量) 來替代count(*)?
除了COUNT(id)和COUNT(*)以外,還可以使用COUNT(常量)(如COUNT(1))來統計行數,那么這三條SQL陳述句有什么區別呢?到底哪種效率更高呢?為什么《Java開發手冊》中強制要求不讓使用 COUNT(列名)或 COUNT(常量)來替代 COUNT(*)呢?
本節就這些問題帶來解答,(獲取完整版解讀手冊查看詳情)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/131911.html
標籤:其他
上一篇:JUC并發系列(四):【面試常問】多種方法解決ArrayList非執行緒安全,詳解CopyOnWriteArrayList(代碼示例)
