簡(jiǎn)潔大方網(wǎng)站建設(shè)昆山網(wǎng)站建設(shè)推廣
1、hashmap的底層設(shè)計(jì)原理以及擴(kuò)容規(guī)則,是否線程安全,如何線程安全。
- 底層原理:數(shù)組 + 鏈表 + 紅黑樹。HashMap 的底層實(shí)現(xiàn)是一個(gè)數(shù)組,數(shù)組中的每個(gè)元素是一個(gè)鏈表或紅黑樹(JDK 1.8 以后,當(dāng)鏈表長(zhǎng)度超過一定閾值時(shí),鏈表會(huì)轉(zhuǎn)換成紅黑樹)。
- 擴(kuò)容規(guī)則:HashMap 默認(rèn)的初始容量是 16,擴(kuò)容時(shí),HashMap 的容量會(huì)擴(kuò)大到原來的兩倍。
- 是否線程安全:HashMap 是非線程安全的。在多線程環(huán)境下,如果多個(gè)線程同時(shí)對(duì) HashMap 進(jìn)行操作,可能會(huì)導(dǎo)致不可預(yù)知的行為,比如數(shù)據(jù)丟失、數(shù)據(jù)不一致等。
- 如何實(shí)現(xiàn)線程安全:使用 ConcurrentHashMap、使用讀寫鎖、手動(dòng)同步
2、八大基本數(shù)據(jù)類型以及長(zhǎng)度
-
byte:字節(jié)類型,用于表示有符號(hào)的8位整數(shù)。范圍是 -128 到 127,默認(rèn)值為 0,占用1個(gè)字節(jié)。
-
short:短整型,用于表示有符號(hào)的16位整數(shù)。范圍是 -2^15?到 2^15-1,默認(rèn)值為 0,占用2個(gè)字節(jié)。
-
int:整型,用于表示有符號(hào)的32位整數(shù)。范圍是-2^31到 2^31-1,默認(rèn)值為 0,占用4個(gè)字節(jié)。
-
long:長(zhǎng)整型,用于表示有符號(hào)的64位整數(shù)。范圍是 -2^63 到 2^63 ,默認(rèn)值為 0L,占用8個(gè)字節(jié)。
-
float:浮點(diǎn)型,用于表示符合IEEE 754標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)。占用4個(gè)字節(jié)。
-
double:雙精度浮點(diǎn)型,用于表示符合IEEE 754標(biāo)準(zhǔn)的雙精度浮點(diǎn)數(shù)。占用8個(gè)字節(jié)。
-
char:字符型,用于表示單個(gè)16位Unicode字符。范圍是 '\u0000' 到 '\uffff',默認(rèn)值為 '\u0000',占用2個(gè)字節(jié)。
-
boolean:布爾型,用于表示邏輯上的真或假。在JVM內(nèi)部,boolean類型通常使用int類型來實(shí)現(xiàn),因此占用4個(gè)字節(jié),但boolean數(shù)組在內(nèi)存中是以位的形式存儲(chǔ)的,每個(gè)boolean值占用1位。
3、多線程創(chuàng)建四種方式,以及callable和runnable的區(qū)別,如何獲取返回值
多線程創(chuàng)建四種方式:繼承 Thread 類、實(shí)現(xiàn) Runnable 接口、實(shí)現(xiàn)callable接口、使用線程池
callable和runnable的區(qū)別:前者有返回值還可以拋異常,后者沒有;落地方法不一樣,一個(gè)是run,一個(gè)是call
如何獲取 Callable 任務(wù)的返回值:將 Callable
實(shí)例包裝在 FutureTask
中,然后將 FutureTask
對(duì)象作為線程的任務(wù)執(zhí)行。通過調(diào)用 FutureTask
的 get
方法,可以獲取 Callable
任務(wù)的返回值。