字节跳动面试官问我看过哪些源码,然后就没有然后了
最近,我的一位朋友在找工作,已經(jīng)拿到了美團、快手等公司的Offer,準備選擇其中一家入職了。
后來他又接到了字節(jié)跳動的電話,通知他去參加三面。從二面到三面之間隔了挺久的,他以為都沒戲了,結(jié)果就收到了通知。
由于已經(jīng)拿到了很多大廠的Offer,他對這次面試還是挺有信心的。但是回來之后,表現(xiàn)的特別沮喪。
一問之下,原來是面試官問的一些問題他回答的不好,他說面試官揪著源碼一直問,但是自己并沒有深入看太多的源碼,所以回答的不是太好。
他給我總結(jié)了一下面試官關(guān)于源碼部分的問題,主要題目如下:
1、你看過那些源碼嗎??
2、那你能講講HashMap的實現(xiàn)原理嗎??
3、HashMap什么時候會進行rehash?
4、HashMap什么時候會進行擴容??
5、那HashMap的初始容量設(shè)置成多少比較合適呢??
6、結(jié)合源碼說說HashMap在高并發(fā)場景中為什么會出現(xiàn)死循環(huán)??
7、JDK1.8中對HashMap做了哪些性能優(yōu)化??
8、HashMap和HashTable有何不同??
9、HashMap 和 ConcurrentHashMap 的區(qū)別??
10、ConcurrentHashMap和LinkedHashMap有什么區(qū)別??
11、為什么ConcurrentHashMap中的鏈表轉(zhuǎn)紅黑樹的閥值是8??
12、什么是ConcurrentSkipListMap?他和ConcurrentHashMap有什么區(qū)別??
13、還看過其他的源碼嗎?Spring的源碼有了解嗎??
14、SpringBoot的源碼呢?知道starter是怎么實現(xiàn)的嗎?
以上,就是我這位朋友被面試官血虐的過程。全程圍繞源碼展開。除了他以外,其實還有很多人在面試中也被深入的問過很多源碼問題。
如下面這兩位:
那么,為什么面試官這么喜歡問源碼?作為面試者你又為什么需要看源碼呢?
難道是為了面試嗎?我覺得不是!我覺得看源碼有以下幾個好處:
1、可以從源碼中學(xué)習(xí)
比如我們看JDK的源碼,其中會有很多關(guān)于性能優(yōu)化、防并發(fā)的例子,還有很多地方用了設(shè)計模式,這些都是很好的可以用來學(xué)習(xí)的代碼。
對于初學(xué)者來說,很多代碼格式、命名等都是需要學(xué)習(xí)的,最好的辦法就是通過開源代碼來學(xué)習(xí)。
2、深入源碼才能懂得原理
有的時候,我們使用的第三方的框架,中間件等,我們要想了解他們的原理,最有效的辦法就是直接看源碼。源碼是不會騙人的。
3、更好的解決問題
只要是人寫的代碼,就可能存在bug,別人的開源代碼也一樣,通過閱讀源代碼可以更好的定位和解決問題。
4、為了找工作
為什么面試官喜歡問源碼,因為這能提現(xiàn)一個面試者是否愛鉆研,是否愿意深入原理。而企業(yè)需要的恰恰是這樣的人!
如何學(xué)習(xí)源碼呢?有幾點建議:
1、先從全局出發(fā)
不要一上來就直接進入到細節(jié),先通過文檔、代碼結(jié)構(gòu)、架構(gòu)分層等方面入手,大概了解一些各個模塊的代碼都是什么功能。這樣在后續(xù)深入學(xué)習(xí)的時候可以剛加便于理解和查找響應(yīng)代碼
2、從問題出發(fā)
深入學(xué)習(xí)之前,最好帶著一個問題,比如學(xué)習(xí)HashMap的源碼時候,你帶著問題『什么時候會進行rehash』,這樣你就可以圍繞自己的問題逐漸的深入展開。從點到面,逐步擴展。
3、面向debug學(xué)習(xí)
在源碼學(xué)習(xí)過程中,也可以通過調(diào)試的方式學(xué)習(xí),這樣可以更好的查看代碼調(diào)用過程,執(zhí)行情況,運行時變量等。更加方面理解。
4、做記錄
最后,要勤于記錄,把自己遇到的問題和思考記錄下來,方面后面再次復(fù)習(xí)和查看。
好了,希望大家都養(yǎng)成閱讀源碼的好習(xí)慣,也希望大家遇到所有源碼類面試題都可以輕松搞定。
總結(jié)
以上是生活随笔為你收集整理的字节跳动面试官问我看过哪些源码,然后就没有然后了的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这简历一看就是包装过的
- 下一篇: 微服务架构与领域驱动设计应用实践