在CopyOnWriteArrayList 和ArrayList 的構造函數中:
6260652 這個編號代表JDK bug庫中的編號
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6260652
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6515694
這2個bug是同一個問題。這個bug是什麼意思呢?
test1
SubClass 繼承自BaseClass,由於SubClass數組中每一個元素都是SubClass對象,所以BaseClass[] baseArray = subArray;這種強制類型轉換不會報錯。這其實就是java對象的向上轉型,子類數組轉換成父類數組是允許的。但是由於數組中元素類型都是SubClass類型的,所以 baseArray[0] = new BaseClass();會報錯java.lang.ArrayStoreException。這也就是說假如我們有1個Object[]數組,並不代表着我們可以將Object對象存進去,這取決於數組中元素實際的類型。
test2
List<String> list = Arrays.asList("abc");需要注意,可以知道返回的實際類型是java.util.Arrays$ArrayList,而不是ArrayList。我們調用
Object[] objArray = list.toArray();返回是String[]數組,所以我們不能將Object對象,放到objArray數組中。
test3
ArrayList對象的toArray()返回就是Object[]數組,所以我們可以將任意對象存放到返回的Object[]數組中。
通過test2和test3可以看出,如果我們有1個List<String> stringList對象,當我們調用Object[] objectArray = stringList.toArray();的時候,objectArray 並不一定能夠放置Object對象。這就是源碼中的註釋:c.toArray might (incorrectly) not return Object[] (see 6260652)。爲了考慮這種情況,所以源碼中進行了if判斷,來防止錯誤的數組對象導致異常。Arrays.copyOf(elementData, size, Object[].class);這個方法就是用來創建1個Object[]數組,這樣數組中就可以存放任意對象了。
一份文檔可以助你漲薪10K,你信嗎?我信了,你精通,你也可以
靠這份文檔,跳槽漲薪10K
去年,也就是2019年,有一個朋友,整天纏着我跟我要面試題,這位仁兄,屬於那種佛系生活,耐心極高(軟磨硬泡)的,真的是給我磨得沒有任何的辦法了,正好,從網上找到一份面試文檔,然後我就順手給了他,沒想到,幾個月之後,就在疫情剛剛好轉的時候,他突然要請我吃飯,還要親自下廚,我一臉懵的去了,然後他跟我說,他除了自己的技術之外,面試的時候,好多知識點問的都是我給他的文檔中的,然後他就順利進了一家公司,漲薪接近10K,成功逆轉全壘打,所以來請我吃飯。
成功升職加薪,10K可以說不算是一個小的漲幅,除了在替他開心的同時,也在驚歎,就隨手的一份文檔,居然幫了他這麼大的忙,當然,不得不說,在程序員這一行,技術還是硬道理,技術不行,再牛逼的文檔,也只是花架子,真的在面試的時候,破綻百出,所以,學習還是很重要的,活到老學到老啊
但是學習,也是有技巧的,我總結了如下幾點
1、有自己的規劃,給自己制定一個學習時間,在什麼時間學完什麼東西,可以以跳槽作爲學習目標和檢測學習結果的實踐.
2、有相應的學習架構,現在很多的人感覺都在學習,但是學的知識比較小衆或者在市面上已經接近被淘汰,這樣的學習基本都是浪費時間
3、貪多不爛,最好有精準的學習,這個時候,有一個老師傅帶你,他的經驗會幫你節省很多時間,也可以幫你少走很多彎路
4、堅持不懈,真的,應爲Java算是老牌編程語言,雖然有python這樣異軍突起的語言,但是短時間內,java的能量還是相當的大的,但是這樣也導致,想要進軍java或者有更好的發展,對你的考驗也會隨之提升,所以,在學習的時候,需要學到的東西的很多,這樣的話就要你堅持不懈,一直學習,每天積累一點,日積月累,就會有很顯著的效果的
好了,說了這麼多,接下來,我就把那份幫助朋友漲薪10K的文檔貢獻出來和大家分享,有需要的朋友可以私信“架構資料”獲取
接下來展示一下文檔中的解析部分
關注我後,在手機,點進頭像進我的主頁,主頁上方右上角有個私信,點擊私信,如何回覆關鍵字“架構資料”即可
一,JVM
JVM 是可運行 Java 代碼的假想計算機 ,包括一套字節碼指令集、一組寄存器、一個棧、一個垃圾回收,堆 和 一個存儲方法域。JVM 是運行在操作系統之上的,它與硬件沒有直接的交互。
二,Spring 原理
它是一個全面的、企業應用開發站式的解決方案, 貫穿表現層、業務層、持久層。但是Spring仍然可以和其他的框架無縫整合
三,微服務
四、RabbitMQ
RabbitMQ 是一個由 Erlang 語言開發的 AMQP 的開源實現。
數據庫
數據庫存儲引擎是數據庫底層軟件組織,數據庫管理系統(DBMS)使用數據引擎進行創建、查詢、更新和刪除數據。不同的存儲引擎提供不同的存儲機制、索引技巧、鎖定水平等功能,使用不同的存儲引擎,還可以 獲得特定的功能。現在許多不同的數據庫管理系統都支持多種不同的數據引擎。存儲引擎主要有: 1. MyIsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated
由於頭條篇幅有限,我只是截取一部分文檔中會含有的知識點,接下來會截取出文檔中含有的知識點,有需要的可以私信我獲取到
評論留言+轉發文章+關注我後私信回覆【架構資料】即可免費獲取到
目錄:
Java基礎:
微服務
文檔目錄總共283頁涵蓋了目前Java的所有知識點的解析,這份文檔的獲取方式:
如何獲取?
推薦閱讀:
資深架構師馬士兵讀解多線程、線程池原理,給Java程序員職業把脈,讓你薪資翻倍
https://www.bilibili.com/video/BV1BE411A78Z/
阿里P9架構師120分鐘帶你掌握線程池,不在爲線程而煩惱
https://www.bilibili.com/video/BV1GE411N7sc/