面經-字節跳動后端開發


字節跳動一面(估計涼涼了)

南京某211渣碩,第一次大廠面試給了頭條。感覺好多基礎知識掌握的不牢靠。面試結束之后深刻感受到考前突擊的方式不可取,功在平時才能厚積薄發。為了這次面試突擊了兩周,還是有很多東西沒有准備充分,很多基礎不牢靠。以后得更加努力了。
上午十點半面試,面了一個半小時,說如果有二面,后續會再聯系,但估計應該沒有后續了。要學習的東西還有很多,以后繼續加油吧。很喜歡字節跳動這個名字,第一次聽見的時候感覺很有靈性,非常希望能去字節的團隊。這次的失敗就當作對自己的激勵吧。

首先問了一些項目的情況

Java有哪些常用的線程池

之前還沒來得及准備線程池,哭暈,直接回復不太了解,第一個問題就這么告終,實在有點過意不去。Java基礎太薄弱了。

哪些同步的方式,就是加鎖

用synchronized關鍵字加鎖,還有分段鎖。

追問,怎么理解分段鎖?

之前只顧記概念了,沒能好好理解。瞎胡說一通,說不是對整個數據段加鎖,而是一段一段的加鎖(面試官內心應該是奔潰的),性能比synchronized關鍵字好。

追問,知道哪些數據結構是用分段鎖的嗎?

回答只知道ConcurrentHashMap。

追問,那它是怎么實現分段鎖的,了解過嗎?

回答沒有。

除了這個還有沒有別的數據結構用分段鎖?

回答不是很清楚。

synchronized知道怎么用嗎?

之前沒怎么用過,回答在方法或變量前面使用。面試官內心應該很崩潰了。

知不知道鎖的可重用是一個什么樣的概念?

這個真沒了解過。

數據庫里面的索引了解嗎,可以談談它的結構嗎

hash索引和B+樹索引,如果查詢單條記錄的話,hash索引比較方便。查詢多條記錄的話B+樹索引能夠提高查詢效率。

追問:B+樹和B樹什么區別?

回答:這個好像答反了,哭暈

為什么使用索引查詢會變快呢?

回答:本身數據庫的結構是按頁存儲,不同的頁之間構成一個循環鏈表,頁里面的記錄也是單鏈表。如果不用索引並且數據量比較大的話,查詢效率低。如果用B+樹balabala,說的有點語無倫次。最主要原因還是對B+樹沒那么了解。

知道聚簇索引嗎?

回答:聚簇索引也叫聚集索引。是以主鍵為索引的。

追問:主鍵索引和普通的索引有什么區別

回答:以主鍵索引查詢沒有回表的操作,普通索引的話好像沒有回表的操作。

追問:為什么主鍵索引就不需要回表呢,根本原因是啥?

回答:好像是數據庫里面是以主鍵存儲的。面試官:大致是這個意思

講一下tcp三次握手四次揮手

三次握手主要是為了通信雙方建立一個可靠的通信信道。第一次握手balabala,第二次balabala,第三次balabala。

四次揮手balabala

追問:為什么握手要三次,改成兩次行不行?

回答:沒理解面試官的意思,答偏了。直接說的兩次握手的話接收端無法確認自己是不是發送成功,發送端是不是成功接收。

追問:兩次的話斷開會有什么問題?

我的回答還是建立在三次握手的基礎之上來思考的,沒有拋開三次握手的概念。

算法題,二叉樹的序列化與反序列化

昨天基友剛答過這題,今天又來了。早上還瞄過一眼,感覺應該不會再出現吧,但沒想到還是出現了。用的是前序遍歷的方式對二叉樹進行序列化,反序列化的時候感覺也挺順利的,但后面執行出現了一個bug,好像是有個遞歸的出口沒考慮到,網頁上寫代碼又不像用IDE,還可以debug,一時半會沒找到原因,期間還問了面試官StringBuilder在哪個包下。。。再加上遇到問題解決不了,有點緊張,卡了很久。最后讓我回頭再調試。還是不能太依賴於IDE,要學會在沒有IDE的情況下寫代碼。

用過kafka對吧,了解kafka嗎

搭過集群。producer往broker的特定topic發數據,consumer從topic讀數據。

問:知道什么是consumer group嗎?

這個問題答得也不好,可能是有點慌了。有點語無倫次,答非所問。

問:kafka的offset怎么管理知道嗎?

聽錯問題了,以為問的kafka集群怎么管理。答zookeeper。。。

追問:除了zookeeper有沒有其他方式

答:只用過zookeeper。

問:topic的offset怎么與consumer group對應上的?

亂答一通

問:offset是和什么綁定的?

可能面試官知道我理解錯他的意思答偏了,又進一步引導了一下。當時腦子都亂了,說了一些offset的讀取策略,也不知道對不對。往文件里面寫。

感覺這一塊問題還是因為自己平時理解的不夠深入,光顧着使用,卻忘記總結了。如果基礎好的話,不至於那么慌吧。

問我有沒有什么想問的

我問了三個問題

平時工作如果忙的話,怎么學習自己的東西

會做技術分享,每個月都有人會做技術分享,一個組內,每個人按月份分享。學東西的話在工作中遇到一些問題,解決了也能夠學到一些東西。

怎么學習源碼,有什么策略

一般遇到問題會去源碼那邊跟一下,如果單純學源碼的話,最好按模塊來看,架構是什么樣子的。最好是能夠跑起來,debug看一些數據。

像我們在校學生,平時接觸不到生產上的數據和業務場景,如何提升自己

找實習是最好的,或者自己接項目,做老師的項目。

總結

現在還有很多不足的地方,得抓緊時間研究了,一定要功在平時啊。廣度優先的時候也要注意深度。多刷題,多總結才能走的遠,基礎是最重要的。

很想去字節跳動,后面繼續努力吧。加油啊。

如果后面還有二面(嗚。。。)繼續更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM