面經-字節跳動後端開發

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

南京某211渣碩,第一次大廠面試給了頭條。感受好多基礎知識掌握的不牢靠。面試結束以後深入感覺到考前突擊的方式不可取,功在平時才能厚積薄發。爲了此次面試突擊了兩週,仍是有不少東西沒有準備充分,不少基礎不牢靠。之後得更加努力了。
上午十點半面試,面了一個半小時,說若是有二面,後續會再聯繫,但估計應該沒有後續了。要學習的東西還有不少,之後繼續加油吧。很喜歡字節跳動這個名字,第一次聽見的時候感受頗有靈性,很是但願能去字節的團隊。此次的失敗就看成對本身的激勵吧。java

首先問了一些項目的狀況

Java有哪些經常使用的線程池

以前還沒來得及準備線程池,哭暈,直接回復不太瞭解,第一個問題就這麼了結,實在有點過意不去。Java基礎太薄弱了。面試

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

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

追問,怎麼理解分段鎖?

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

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

回答只知道ConcurrentHashMap。架構

追問,那它是怎麼實現分段鎖的,瞭解過嗎?tcp

回答沒有。性能

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

回答不是很清楚。ui

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看一些數據。

像咱們在校學生,平時接觸不到生產上的數據和業務場景,如何提高本身

找實習是最好的,或者本身接項目,作老師的項目。

總結

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

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

若是後面還有二面(嗚。。。)繼續更新。

相關文章
相關標籤/搜索