新鮮出爐:字節(jié)跳動面經(jīng)總結(jié)

hello,大家好!
之前給小伙伴們分享過 簡歷模板,
大家都下載了嗎?
今天來看一份比較詳細的大廠面經(jīng),
幫助大家快速熟悉面試流程,
后面給大家準備了更多優(yōu)質(zhì)的字節(jié)跳動面經(jīng),
下方公眾號回復(fù)【字節(jié)】
即可免費領(lǐng)取
背 景
本人2本畢業(yè),目前工作四年,一直是Java。
做的都是些二線公司,沒做過一線。四年跳了三家公司。在家休息了幾個月,
五月中旬開始面試。
由于跳槽過多而且已經(jīng)是淡季的原因。內(nèi)推的我的字節(jié)哥們兒,推了不知道多少個部門,從字節(jié)海外電商推到教育線簡歷都由于頻繁跳槽都掛了。最后才被廣告營銷撈了起來(而且居然是個Java部門)。
這里還是奉勸大家跳槽不要像我這么頻繁,唉。而且想進大廠,建議找人內(nèi)推。這是我第一次面字節(jié),也是今年第一場面試,各種意義都算是初體驗了233。
一 面
一面是個小哥,估計比較靦腆,騙我說顯示壞了他沒開攝像。我笑著說沒事。
技術(shù)面試20分鐘,算法我做了10分多種orz。總計半個多小時。
1. 簡單說下項目
我項目比較挫,就介紹了下,然后項目就跳過了
2. redis的zset是如何實現(xiàn)的?為什么使用跳表不使用別的數(shù)據(jù)結(jié)構(gòu)?
redis的zset基于ziplist和dict以及skiplist實現(xiàn)。這里我簡單說了下這三個有什么字段,以及優(yōu)化的細節(jié)。至于為什么使用跳表,我直接回答了官方原文。話說回來感覺zset每個大廠都會考啊。
3. redis的持久化方式
rdb和aof,這里本來我想擴展說一下。面試官直接說時間有限,不用了,希望能在短時間多問點東西。這場面試整體節(jié)奏很快,很多都是簡單說下就問下一個問題了。
4. redis的集群方式,各有什么特點
哨兵配主從,可以保證可靠。redis cluster可以增加可擴展性。
5. redis cluster的通信機制,說一下蜂巢
基于goosip,具體的不了解,這一段就跳過了。
6. mysql innodb 以及mongodb的索引結(jié)構(gòu)
b+樹,簡單講了下。這一題就結(jié)束了。
7. rr級別如何防止幻讀
這一題我聽錯了,聽成了rr級別為什么要防止幻讀。所以回答偏了。就說因為rc級別不會有 LostUpdate問題,但是rr級別由于mvcc版本會出現(xiàn),rr作為更高等級級別必須要處理該問題,所以使用鎖來處理,但是快照本身不能解決write skew,所以并沒有解決幻寫,某種角度來說也沒有完全解決幻讀。后面發(fā)現(xiàn)好像回答方向錯了,所以還是簡單提了下快照讀,當(dāng)前讀,間隙鎖,行鎖之類的東西。這一題講的有點久了,失誤失誤。
8. synchronized原理,講一下底層實現(xiàn)
一開始我也就標準的說了下鎖升級的過程,也說了mutex lock。最后面試官問到比較深,問我moniter里面啥內(nèi)容,我就記得waitsets,entrylist,owner,count這幾個,然后說了下,Java基礎(chǔ)就這么結(jié)束了。
9. 除了zk你還用過其他注冊中心嗎?之間有什么區(qū)別
nacos,eureka,consol。有的是cp,有的是ap。注冊中心一般走ap就夠了。簡單說了下原因
10. 算法
開始出的是,最小編輯代價。一看是較難,我擔(dān)心做不出,要求換了一題。換成了二叉樹之字形遍歷,由于緊張,結(jié)果寫了10分鐘。尷尬的一筆。
小結(jié)
整體而言就是節(jié)奏很快,是今年節(jié)奏最快的一場面試,建議大家準備的時候也琢磨下怎么用最少的字回答最多的內(nèi)容。難度的話符合我對字節(jié)面試常規(guī)難度的印象。最后出算法的時候,出了一道較難的題,把我心態(tài)整崩了。因為據(jù)我了解,字節(jié)一般前面回答的不錯的話,算法不太會刁難你。當(dāng)時做題的時候我滿腦子都想著為啥出這么難,我前面回答的還行啊。其實也可能是面試官不懂這個規(guī)矩,就隨便出了一道,不要太敏感2333。
二 面
最難的一面來了。
面完我整個人都裂開了。面試官我感覺應(yīng)該也是所有面試官中技術(shù)最強的,沒有之一。另外面試官那邊噪音很大,有時候聽不清他說什么。不過這回面試官終于露臉了。
技術(shù)25分鐘,算法25分鐘。
1. 說下項目
這回面試官比較關(guān)注服務(wù)器的數(shù)量,qps之類的東西。這些我都記得,不過項目整體比較挫。面試官也就不深問了,直接進入八股文環(huán)節(jié)。
2. 會什么語言?說下jvm吧。
我只會java,哈哈哈。所以面試官就問java了。jvm問的還挺深,什么tlb,逃逸分析,棧幀里面有什么,還好去年看過全都防出去了。
3. 說下metaspace和permGen。
本來信號就不好,還說英文,我聽了幾遍才知道問的是元空間和永久代。簡單說了下。
4. 元空間中創(chuàng)建對象會不會開辟物理地址內(nèi)存
這tm問的是什么?我題目都不太懂orz
5. system.gc()一定會觸發(fā)gc嗎?和full gc有什么關(guān)系?
不一定。該題回答的比較樸素。
哈哈。java就這么結(jié)束了
6. redis的aof文件過大怎么處理,怎么解決,開啟aof的方式有幾種?了解rewrite命令嗎?
由于不了解這一塊兒,幾乎團滅了。redis還算是我的強項,結(jié)果居然敗的這么慘
7. kafka。。。
回答沒用過(其實用過,但是好多年前的事情了,所以就直接說沒用過,簡歷上只寫了rocketmq。)
8. 用過什么mq,說一下rocketmq的消費方式,什么是死信隊列
只用過rocketmq。集群和廣播,面試官問只有這兩種嗎,我說是啊。然后大家一陣尷尬。死信隊列簡單講下就結(jié)束了。
9. 說一下exchange。。
回答說我沒用rabbitmq(其實我用過)。面試官原來前面聽錯了,以為我用過的是rabbitmq,吐槽說難怪消費方式回答只有兩種。
10. ack機制,offset何時位移,broker復(fù)制原理
作為mq白癡,基本回答的都是淺嘗即止。其實我activemq,rabbitmq,rocket,kafka都用過(畢竟跳槽多)。但是mq確實是我的弱項,唉,這一塊兒面的我直接心態(tài)崩了,當(dāng)時心想要掛要掛。
11. mysql索引優(yōu)化沒有走對是什么原因
終于又問我擅長的了。說了下優(yōu)化器的策略,面試官說不是想問這個,就問我explain,然后我就把explain的字段都說了一遍,面試官說還是理解錯了。然后說算了這題跳過,有點小尷尬
12. explain語句會執(zhí)行sql嗎
不會,優(yōu)化器就結(jié)束了。所以rows會有誤差。
13. mysql兩段提交
說了下binlog和redolg以及分組。說實話,問題直接就說兩段提交,不熟悉的人可能都不知道問的是啥啊
14. 說下undolog,是不是只有rollback才會觸發(fā)undolog
基于回滾保證原子性。由于innodb的鎖是鎖住索引,所以更新主鍵之類的的時候,原數(shù)據(jù)也會保留,所以更新后微commit前一條數(shù)據(jù)會變兩條。在commit的時候會回滾掉原數(shù)據(jù),這個場景有點繞,但是我覺得我應(yīng)該沒回答錯。
15. 算法
字符串?dāng)?shù)組中的字符能否拼接成為某個字符。當(dāng)時心態(tài)比較崩。所以這題雖然不難,但是最后沒寫出來沒走通用例orz。
小結(jié)
面完心態(tài)崩了,除了mysql,其他回答的都一般,算法也沒做出來。面試官看我臉色不好,還揮手讓我后面加油。當(dāng)時是真的以為自己掛了。沒想到最后有三面,這里感謝下二面面試官,哈哈哈。
三 面
三面面試官是個大佬,頭禿的嚴重,全程都挺忙的樣子,有點心不在焉,大多都是聊天,問了下三份工作公司都是干啥的,自己做了什么項目。
聊天10分鐘,技術(shù)10分鐘,算法5分鐘。
1. java創(chuàng)建一個網(wǎng)絡(luò)io流。會有什么操作,基于java底層或者網(wǎng)絡(luò)或者操作系統(tǒng)說一下。
這塊我java就簡單了下(因為據(jù)說字節(jié)哪怕面的是java,也很可能做go,所以感覺多少點語言之外的可能好一點)。主要還是說了操作系統(tǒng)和網(wǎng)絡(luò)。比如ringbuffer,dma,軟中斷硬中斷之類的。
2. 零拷貝說一下
就簡單說了下sendfile和mmap。此外提了句senfile比較類似于網(wǎng)絡(luò)中的對等概念,然后轉(zhuǎn)到了網(wǎng)絡(luò)
3. 說一下ftp和http的區(qū)別
不了解ftp,跳過
4. 文件下載一般用什么協(xié)議,udp還是tcp
udp用的多一點,兩個都可以。udp主要nat穿透的話打洞容易,這一題過。
5. close wait和time wait有什么區(qū)別
這兩個我回答的時候剛好說反了,哈哈哈
6. 怎么保持長鏈接,為什么需要長鏈接
keep-alive。不然每次鏈接都要創(chuàng)建fd,浪費資源開銷。
7. 日志海量收集
開始的時候沒聽懂問什么就說日志用kafka啊。最后他提示多臺機器,我就說mapreduce,簡單說了下mapreduce,就結(jié)束了。
8. 你說的主要是離線處理,如何實現(xiàn)實時的呢
流處理的話,flink,spark都沒用過,所以不強答了(我簡歷也沒寫我會大數(shù)據(jù)啊。怎么問這個orz)
9. 算法
給出一串字符串,寫出選取三個字符組合出來的所有可能。這一題是唯一一題白板,不需要運行。(這題看到我就想用dfs加回朔,但是問了下面試官說固定只選三個,我就傻傻的決定寫三層for循環(huán),寫完后面試官看了一下說你就寫了三層循環(huán)啊,我說嗯)
小結(jié)
這一面問的感覺都有點莫名其妙,很多人看了我的面經(jīng)都吐槽問的都是些啥。最后就掛在這個算法上了。感覺自己傻了。內(nèi)推我的老哥說我面評就一句話,說我算法表達弱,我想想就明白了,大家寫算法的時候一定要想清楚,寧可寫出來是錯的,思路也要往最優(yōu)解走啊。唉,字節(jié)也是我第一次當(dāng)場寫算法,以為只要結(jié)果對就行了,結(jié)果吃了不了解套路的虧。
總 結(jié)
最后知道掛了還是很可惜,不僅已經(jīng)到第三面了,最重要的是明明是能做出來的,結(jié)果自己傻x了。唉,看來是和字節(jié)無緣(感覺對不起2面面試官)。
不過字節(jié)的效率還是很高的。可惜了我刷了這么多算法,字節(jié)面完后我就再也沒有刷過一題算法了。
要說最大的問題,就是之前沒寫過算法,一旦不是原題,我就會很慌。其實當(dāng)時我的算法水平已經(jīng)夠應(yīng)付社招了。至少之后沒再刷過一題算法,以及其他公司算法難度和字節(jié)差不多的情況下,我都是基本快速擼完,還沒有哪個五分鐘不能過的。也算是字節(jié)讓我在算法上成了老油條吧233。
來源:牛客網(wǎng)
