HashMap的實現(xiàn)原理
1.HashMap概述:HashMap是基于哈希表的Map接口的非同步實現(xiàn)。此實現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類不保證映射的順序,特別是它不保證該順序恒久不變。
2.HashMap的數(shù)據(jù)結(jié)構(gòu):在java編程語言中,最基本的結(jié)構(gòu)就是兩種,一個是數(shù)組,另外一個是模擬指針(引用),所有的數(shù)據(jù)結(jié)構(gòu)都可以用這兩個基本結(jié)構(gòu)來構(gòu)造的,HashMap也不例外。HashMap實際上是一個“鏈表散列”的數(shù)據(jù)結(jié)構(gòu),即數(shù)組和鏈表的結(jié)合體。
當(dāng)我們往Hashmap中put元素時,首先根據(jù)key的hashcode重新計算hash值,根絕hash值得到這個元素在數(shù)組中的位置(下標(biāo)),如果該數(shù)組在該位置上已經(jīng)存放了其他元素,那么在這個位置上的元素將以鏈表的形式存放,新加入的放在鏈頭,最先加入的放入鏈尾.如果數(shù)組中該位置沒有元素,就直接將該元素放到數(shù)組的該位置上.
需要注意Jdk1.8中對HashMap的實現(xiàn)做了優(yōu)化,當(dāng)鏈表中的節(jié)點數(shù)據(jù)超過八個之后,該鏈表會轉(zhuǎn)為紅黑樹來提高查詢效率,從原來的O(n)到O(logn)
你了解Fail-Fast機制嗎?
Fail-Fast即我們常說的快速失敗,
Fail-fast和Fail-safe有什么區(qū)別
Iterator的fail-fast屬性與當(dāng)前的集合共同起作用,因此它不會受到集合中任何改動的影響。Java.util包中的所有集合類都被設(shè)計為fail->fast的,而java.util.concurrent中的集合類都為fail-safe的。當(dāng)檢測到正在遍歷的集合的結(jié)構(gòu)被改變時,F(xiàn)ail-fast迭代器拋出ConcurrentModificationException,而fail-safe迭代器從不拋出ConcurrentModificationException。
SimpleDateFormat是線程安全的嗎?
非常不幸,DateFormat的所有實現(xiàn),包括SimpleDateFormat都不是線程安全的,因此你不應(yīng)該在多線程序中使用,除非是在對外線程安全的環(huán)境中使用,如將SimpleDateFormat限制在ThreadLocal中。如果你不這么做,在解析或者格式化日期的時候,可能會獲取到一個不正確的結(jié)果。因此,從日期、時間處理的所有實踐來說,我強力推薦joda-time庫。
如何格式化日期?
Java中,可以使用SimpleDateFormat類或者joda-time庫來格式日期。DateFormat類允許你使用多種流行的格式來格式化日期。參見答案中的示例代碼,代碼中演示了將日期格式化成不同的格式,如dd-MM-yyyy或ddMMyyyy。
簡單描述java異常體系
相比沒有人不了解異常體系,關(guān)于異常體系的更多信息可以見
什么是異常鏈
詳情直接參見上面的白話異常機制,不做解釋了。
throw和throws的區(qū)別
throw用于主動拋出java.lang.Throwable類的一個實例化對象,意思是說你可以通過關(guān)鍵字throw拋出一個Error或者一個Exception,如:thrownewIllegalArgumentException(“sizemustbemultipleof2″),
而throws的作用是作為方法聲明和簽名的一部分,方法被拋出相應(yīng)的異常以便調(diào)用者能處理。Java中,任何未處理的受檢查異常強制在throws子句中聲明。
Java中,Serializable與Externalizable的區(qū)別
Serializable接口是一個序列化Java類的接口,以便于它們可以在網(wǎng)絡(luò)上傳輸或者可以將它們的狀態(tài)保存在磁盤上,是JVM內(nèi)嵌的默認(rèn)序列化方式,成本高、脆弱而且不安全。Externalizable允許你控制整個序列化過程,指定特定的二進制格式,增加安全機制。
以上就是北大青鳥長沙麓谷校區(qū)java培訓(xùn)機構(gòu)的小編針對“2020年求職面試,Java經(jīng)典面試題”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
Java面試題