摘要:記得,那是一個(gè)周末,棧長去某知名互聯(lián)網(wǎng)公司面試,好像不到五分鐘,我就被面試官親切地趕出來了,當(dāng)時(shí)我那個(gè)尷尬,內(nèi)心深受打擊。。。
你們可能會(huì)想,棧長這么菜的嗎?5分鐘都堅(jiān)持不了?
本文說起來會(huì)有點(diǎn)尷尬,畢竟這是棧長我曾經(jīng)經(jīng)歷過的故事。。。
那時(shí)候的棧長還真菜,每天寫著 if/ for 及一些簡單的業(yè)務(wù)邏輯代碼,雖工作有些日子了,但技術(shù)水平還停留在剛畢業(yè)的起步階段。。。
記得,那是一個(gè)周末,棧長去某知名互聯(lián)網(wǎng)公司面試,好像不到五分鐘,我就被面試官親切地趕出來了,當(dāng)時(shí)我那個(gè)尷尬,內(nèi)心深受打擊。。。
為什么會(huì)被趕出來?這道題我記得很清楚,我不確定是不是因?yàn)檫@道題,但卻是這道題結(jié)束了整個(gè)面試,大概的經(jīng)過是這樣:
面試官:HashMap 和 Hashtable 的區(qū)別是什么?棧長:……(這個(gè)我答上來了,棧長整理了下,大家可以參考這篇文章:HashMap 和 Hashtable 的 6 個(gè)區(qū)別。)
面試官:那既然 Hashtable
是線程安全的,又性能不好,那你還知道別的替代品嗎?棧長:……(沒答上來)
面試官:好吧,那我們今天先聊到這里吧(起身送我走)……
棧長:好的,謝謝。(尷尬離場(chǎng))
現(xiàn)在想起來都覺得尷尬。。。
現(xiàn)在競(jìng)爭這么大,要求那么高,只會(huì) Hashtable 的程序員真不能立足了,至少你得說得出 SynchronizedMap,雖然它的性能和 Hashtable 一樣差,使用了全局對(duì)象鎖來保證線程安全性,但至少你不只是會(huì) Hashtable。
其實(shí)上面的問題,最佳答案是:ConcurrentHashMap,說完這個(gè),有很大概率面試官又會(huì)連番問它的實(shí)現(xiàn)原理,以及它在 JDK 各個(gè)版本中的不同。
ConcurrentHashMap 是 JDK 1.5 添加的新集合,用來保證線程安全性,提升 Map 集合的并發(fā)效率。ConcurrentHashMap 使用了 Segment 的概念,默認(rèn)有 16 個(gè) Segment,Segment 里面依然還是數(shù)組 + 鏈表的數(shù)據(jù)結(jié)構(gòu),相當(dāng)于給 HashMap 分桶處理了。因每次只會(huì)鎖住其中一個(gè) Segment,所以性能非常好。
然而,有意思的是,隨著 JDK 1.8 中對(duì) HashMap 的改進(jìn),同時(shí)又對(duì) ConcurrentHashMap 進(jìn)行了改進(jìn),拋棄了 Segment + 數(shù)組 + 單向鏈表 的設(shè)計(jì),改為了和 HashMap 同樣的 數(shù)組 + 單向鏈表 + 紅黑樹 的數(shù)據(jù)結(jié)構(gòu)。
同時(shí),ConcurrentHashMap 使用了 CAS 算法 + Synchronized 來保證集合的線程安全性,ConcurrentHashMap 相當(dāng)于一個(gè)性能安全的 HashMap。ConcurrentHashMap 源碼相當(dāng)復(fù)雜,后面棧長會(huì)出一篇專門分析 HashMap 和 ConcurrentHashMap 源碼和原理的文章,請(qǐng)大家關(guān)注微信公眾號(hào)Java技術(shù)棧的后續(xù)推送,不要錯(cuò)過。
不過話又說回來,當(dāng)初棧長面試 5 分鐘就被送出來了,其實(shí)很正常,誰叫我當(dāng)時(shí)只會(huì) Hashtable 呢!就像我現(xiàn)在面試人一樣,如果中高級(jí)面試者只會(huì) Hashtable 講不出其他更多的,我也一樣也會(huì)把他送出去,初級(jí)的還可以理解。
現(xiàn)在很多中高級(jí)程序員,雖然年限已經(jīng)達(dá)到三年或者五年以上,但實(shí)際對(duì)多線程知識(shí)了解甚少,還停留在如何實(shí)現(xiàn)和使用多線程的水平。這種其實(shí)和初級(jí)程序員沒什么區(qū)別,競(jìng)爭力明顯不足,所以怎么能要得到比初級(jí)程序員更高的價(jià)格呢?天天寫業(yè)務(wù)代碼,又如何成為大牛呢?
所以,給 Java 程序員的一些建議,特別是中高級(jí)程序員,一定要把 Java 核心技術(shù)學(xué)好,如多線程、集合的應(yīng)用、數(shù)據(jù)結(jié)構(gòu)、原理等,這是中高級(jí)面試必問的。
不要年紀(jì)上去了,對(duì)于底層知識(shí)卻不知道一二,不然隨著年紀(jì)的不斷增長,被淘汰的風(fēng)險(xiǎn)就越大,這樣對(duì)于一個(gè)靠編碼吃飯的程序來說,真的很可怕!
如果你被我說中了,或許考慮換一個(gè)環(huán)境?
最近棧長我會(huì)陸續(xù)分享一些個(gè)人的職場(chǎng)經(jīng)驗(yàn),踩坑經(jīng)歷,以及成長感悟,希望能給一些職場(chǎng)新猿帶來幫助。
本文原創(chuàng)首發(fā)于微信公眾號(hào):Java技術(shù)棧(id:javastack),關(guān)注公眾號(hào)在后臺(tái)回復(fù) "java" 可獲取更多,轉(zhuǎn)載請(qǐng)?jiān)瓨颖A舯拘畔ⅰ?/pre>
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72711.html
從事 Android 開發(fā)工作要滿 5 年了,雖然明白自己技術(shù)很一般,但是也總是期望能夠有機(jī)會(huì)進(jìn)入更好的平臺(tái)發(fā)展。這不,因?yàn)闄C(jī)緣巧合有了一次 Booking 的面試邀請(qǐng)(是在 hackerrank 上),然后開始臨時(shí)抱佛腳 (leetcode 走起),最終選擇了一個(gè)周末去完成線上測(cè)試,結(jié)果我完全沒預(yù)料到。本以為會(huì)被某道題的邏輯繞昏,結(jié)果哪知道被標(biāo)準(zhǔn)輸入這個(gè)東西卡得死死的,現(xiàn)在就記錄一下這次非常糟...
摘要:前端開發(fā)工作一年小記作者云荒杯傾再過幾天,就是我作為一名小小的前端工程師工作整整一年的日子了。但這可能算是一個(gè)好的開端,好的記憶。 前端開發(fā)工作一年小記 作者/云荒杯傾再過幾天,就是我作為一名小小的前端工程師工作整整一年的日子了。而且,距離上一次寫技術(shù)文,已經(jīng)過去很久遠(yuǎn)。且逢周末,還是雨天,氣溫不高,心情湊合,就想寫寫。然而,寫工作總結(jié)實(shí)際上可能僅僅是源于一種不可遏制的沖動(dòng),類似于偉...
摘要:前端開發(fā)工作一年小記作者云荒杯傾再過幾天,就是我作為一名小小的前端工程師工作整整一年的日子了。但這可能算是一個(gè)好的開端,好的記憶。 前端開發(fā)工作一年小記 作者/云荒杯傾再過幾天,就是我作為一名小小的前端工程師工作整整一年的日子了。而且,距離上一次寫技術(shù)文,已經(jīng)過去很久遠(yuǎn)。且逢周末,還是雨天,氣溫不高,心情湊合,就想寫寫。然而,寫工作總結(jié)實(shí)際上可能僅僅是源于一種不可遏制的沖動(dòng),類似于偉...
摘要:前端開發(fā)工作一年小記作者云荒杯傾再過幾天,就是我作為一名小小的前端工程師工作整整一年的日子了。但這可能算是一個(gè)好的開端,好的記憶。 前端開發(fā)工作一年小記 作者/云荒杯傾再過幾天,就是我作為一名小小的前端工程師工作整整一年的日子了。而且,距離上一次寫技術(shù)文,已經(jīng)過去很久遠(yuǎn)。且逢周末,還是雨天,氣溫不高,心情湊合,就想寫寫。然而,寫工作總結(jié)實(shí)際上可能僅僅是源于一種不可遏制的沖動(dòng),類似于偉...
閱讀 2454·2019-08-30 15:52
閱讀 2252·2019-08-30 12:51
閱讀 2846·2019-08-29 18:41
閱讀 2829·2019-08-29 17:04
閱讀 826·2019-08-29 15:11
閱讀 1744·2019-08-28 18:02
閱讀 3614·2019-08-26 10:22
閱讀 2519·2019-08-26 10:12