身邊朋友跟我分享面試字節(jié)跳動(dòng)和騰訊的經(jīng)歷,抽空整理成博文與大家分享一下。
1. 字節(jié)跳動(dòng)
頭條技術(shù)面共三面,之后是HR面,面試形式是 視頻。時(shí)間均控制在1個(gè)小時(shí)。
1.1 第一面:
第一面主要考察基礎(chǔ),先簡單自我介紹,以及介紹一下項(xiàng)目,然后開始考察基礎(chǔ)。
1.1.1 TCP相關(guān)基礎(chǔ)知識
- 問題1: 請?jiān)敿?xì)描述三次握手和四次揮手的過程 要求熟悉三次握手和四次揮手的機(jī)制,要求畫出狀態(tài)圖。
- 問題2: 四次揮手中TIME_WAIT狀態(tài)存在的目的是什么?
這個(gè)問題是畫出四次揮手狀態(tài)圖,會(huì)引申<typo id="typo-4606" data-origin="問你" ignoretag="true">問你</typo>。不排除還會(huì)問為什么四次揮手是四次不是二次等問題。最好是把相關(guān)問題均掌握。 - 問題3: TCP是通過什么機(jī)制保障可靠性的?
從四個(gè)方面進(jìn)行回答,ACK確認(rèn)機(jī)制、超時(shí)重傳、滑動(dòng)窗口以及流量控制,深入的話要求詳細(xì)講出流量控制的機(jī)制。
1.1.2 語言的相關(guān)基礎(chǔ)知識
字節(jié)跳動(dòng)的技術(shù)棧是Go和Python,會(huì)問一下相關(guān)語言的基礎(chǔ)。
問題1: 描述線程、進(jìn)程以及協(xié)程的區(qū)別? 描述線程、進(jìn)程以及協(xié)程的定義和區(qū)別,順便描述Python語言中三者的使用。
問題2: GO語言中的協(xié)程與Python中的協(xié)程的區(qū)別? 主要講解Go中GMP機(jī)制。
1.1.3 網(wǎng)絡(luò)編程相關(guān)基礎(chǔ)
1.問題1: 網(wǎng)絡(luò)IO模型有哪些?
5種網(wǎng)絡(luò)I/O模型,阻塞、非阻塞、I/O多路復(fù)用、信號驅(qū)動(dòng)IO、異步I/O。從數(shù)據(jù)從I/O設(shè)備到內(nèi)核態(tài),內(nèi)核態(tài)到進(jìn)程用戶態(tài)分別描述這5種的區(qū)別。
2.問題2: I/O多路復(fù)用中select/poll/epoll的區(qū)別?
從select的機(jī)制,以及select的三個(gè)缺點(diǎn),講解epoll機(jī)制,以及epoll是如何解決select的三個(gè)缺點(diǎn)的。還會(huì)講到epoll中水平觸發(fā)和邊沿觸發(fā)的區(qū)別。
1.1.4 HTTP相關(guān)基礎(chǔ)
1.問題1: 客戶端訪問url到服務(wù)器,整個(gè)過程會(huì)經(jīng)歷哪些?
從七層網(wǎng)絡(luò)模型,HTTP->TCP->IP->鏈路整個(gè)過程講解報(bào)文的產(chǎn)生以及傳遞的過程
2.問題2: 描述HTTPS和HTTP的區(qū)別
從端口的區(qū)別,以及HTTPS是在SSL的基礎(chǔ)上以及加密等方面說明
3.問題3: HTTP協(xié)議的請求報(bào)文和響應(yīng)報(bào)文格式
要非常清楚請求報(bào)文和響應(yīng)報(bào)文的組成部分,要求<typo id="typo-944" data-origin="在" ignoretag="true">在</typo>寫具體案例。
4.問題4: HTTP的狀態(tài)碼有哪些?
從2xx,3xx,4xx,5xx分別舉例出常見的code,面試官會(huì)問301和302的區(qū)別,以及500/503/504分別在哪些場景出現(xiàn)。
1.1.5 緩存和數(shù)據(jù)庫的基礎(chǔ)知識
1.問題1: 描述一下redis有哪些數(shù)據(jù)結(jié)構(gòu)。
基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)有5種,String/List/Hash/Set/Zset,還答了高級數(shù)據(jù)結(jié)構(gòu)HyperLogLog/BitMap/BloomFilter/GeoHash。面試官還問了BloomFilter的原理以及Zset的實(shí)現(xiàn)原理,主要講解跳躍表。
2.問題2: MySQL場景題目
面試官提供場景,要求寫出查詢SQL,考察聯(lián)合語句,如何分頁以及復(fù)雜語句的優(yōu)化。
1.1.6 裸寫算法
樹的非遞歸先序遍歷。
1.2. 第二面
1.2.1 項(xiàng)目經(jīng)驗(yàn)
第二面跟個(gè)人項(xiàng)目經(jīng)驗(yàn)很大,面試官會(huì)要求先詳細(xì)介紹最近的項(xiàng)目,介紹項(xiàng)目的同時(shí)會(huì)打斷你,延伸項(xiàng)目的難度和架構(gòu),要求提出更優(yōu)的解決方案。
之前項(xiàng)目經(jīng)驗(yàn)里寫了一個(gè)分布式的項(xiàng)目,面試官著重討論了這個(gè)項(xiàng)目的實(shí)現(xiàn)方案,引申出分布式事務(wù)以及分布式一致性等問題,同時(shí)會(huì)要求在當(dāng)前項(xiàng)目的基礎(chǔ)上附加條件,要求你提供解決方案,這部分比較難,要求對項(xiàng)目的深度理解很透徹,面試前一定要對項(xiàng)目了解非常清楚,如果是多人合作的項(xiàng)目,最好也要了解別人編寫的功能部分。
還問了一些API業(yè)務(wù)的架構(gòu)問題,負(fù)載均衡、CDN、DNS等問題。以及也問到了HTTP相關(guān)問題,要求描述HTTP的版本之間的區(qū)別,主要是1.0/1.1/2.0三個(gè)版本的區(qū)別。詳細(xì)說了1.0與1.1之間是連接模型的區(qū)別(短連接、長連接、管線化),1.1與2.0之間的區(qū)別是I/O多路復(fù)用的單一長連接、服務(wù)器推送、二進(jìn)制分楨、首部壓縮等。
1.2.2 裸寫算法
回行矩陣遍歷
1.3. 第三面:
1.3.1 項(xiàng)目經(jīng)驗(yàn)
第三面也是考察項(xiàng)目經(jīng)驗(yàn),但是著重系統(tǒng)設(shè)計(jì),會(huì)抽一段之前的項(xiàng)目經(jīng)驗(yàn)(跟第二面的經(jīng)驗(yàn)肯定不同),要求你描述目前的方案,以及缺點(diǎn)。溫馨提示,一定要簡歷上的項(xiàng)目經(jīng)驗(yàn)非常熟悉,會(huì)抽上一段工作經(jīng)驗(yàn)的項(xiàng)目。
要求說出缺點(diǎn),這個(gè)一個(gè)坑,說出來后要求提出改進(jìn)方案,所以回答要謹(jǐn)慎,最好面試前對目前的項(xiàng)目假設(shè)附加條件,提出2-3種備選方案。
要求模塊化,會(huì)要求對目前系統(tǒng)如果做微服務(wù)架構(gòu),如何進(jìn)行服務(wù)的拆分,拆分的規(guī)則是什么,考察微服務(wù)架構(gòu)相關(guān)知識,服務(wù)治理(限流、降級、熔斷)。
舉例: 之前項(xiàng)目<typo id="typo-1986" data-origin="中由" ignoretag="true">中由</typo>涉及到社交場景中熱度池的設(shè)計(jì),要求講出現(xiàn)有方案和缺點(diǎn),然后說出優(yōu)化方案,還會(huì)將目前的量級擴(kuò)大很多倍,要求重新架構(gòu)出方案。還有講到粉絲關(guān)系,推拉組合,也就是讀擴(kuò)散和寫擴(kuò)散二者的區(qū)別,以及二者如何結(jié)合。
1.3.2 裸寫算法
1.二叉樹多個(gè)節(jié)點(diǎn)的最近公共祖先
1.4. 總結(jié)
三面技術(shù)面之后,就是HR,這個(gè)就不多說了。整體字節(jié)跳動(dòng)的面試感受,面試官很專業(yè),要求基礎(chǔ)知識很熟悉,面試之前一定要準(zhǔn)備后再去面試。LeetCode題目也要刷。手寫算法留的時(shí)間不多,3-10分鐘,如果3分鐘還沒寫,就要求講出解題思路。
切記面試前一定要刷題和準(zhǔn)備,簡歷上的項(xiàng)目不熟悉的千萬不要寫上去,寫上去的項(xiàng)目備好2-3個(gè)技術(shù)方案。
2. 騰訊
騰訊面試流程較多,加上筆試一共有8輪,6輪技術(shù)+1輪HR+1輪筆試
2.1 第一面
第一面是電話面試,主要考察項(xiàng)目,通過項(xiàng)目提出基礎(chǔ)問題。時(shí)間30分鐘。
1.之前有微服務(wù)經(jīng)驗(yàn),面試官就詳細(xì)問到微服務(wù)的架構(gòu)、框架的實(shí)現(xiàn)、服務(wù)治理、分布式一致性等問題。
2.之前有玩過日志監(jiān)控系統(tǒng),首先還是考察架構(gòu),ELK的相關(guān)知識,重點(diǎn)描述Elasticsearch的一些架構(gòu)原理,比如倒排索引的原理。
3.問消息隊(duì)列的相關(guān)知識,接觸過Kafka,問了Kafka中消息可以被多個(gè)消費(fèi)者消費(fèi)嗎?;以及選舉機(jī)制和HW機(jī)制。
4.開放性問題,講一個(gè)之前遇到的問題,并如何解決的。這個(gè)描述生產(chǎn)過程中運(yùn)行的問題,并描述排查問題。
5.數(shù)據(jù)庫和Redis相關(guān)問題,數(shù)據(jù)庫考察索引的原理以及幾種事務(wù)的區(qū)別。Redis問數(shù)據(jù)結(jié)構(gòu),延時(shí)隊(duì)列如何實(shí)現(xiàn),分布式鎖原理。
2.2 第二面 筆試
現(xiàn)場面試,考察具體崗位的技術(shù)棧語言的基礎(chǔ)知識,題目不難,要求基礎(chǔ)扎實(shí)和廣度。
2.3 第三面、第四面
第三面和第四面是組長和總監(jiān)面試,聊解題思路和項(xiàng)目,這二面的特點(diǎn)是根據(jù)項(xiàng)目經(jīng)驗(yàn)問相關(guān)的問題,要求廣度,尤其考察架構(gòu)廣度,會(huì)將目前的項(xiàng)目量級擴(kuò)大幾十倍,重新設(shè)計(jì)架構(gòu),同時(shí)涉及到一些壓力面試。
感覺如果不緊張,熟悉項(xiàng)目的話,問題不大。
會(huì)有很多開放性題目,包括平時(shí)遇到問題的解題思路、同事之間的協(xié)作等。
被問到的知識點(diǎn)有負(fù)載均衡算法,ngnix如何做限流,四層LVS和七層Ngnix的區(qū)別,以及微服務(wù)架構(gòu)的設(shè)計(jì)思路。
面試時(shí)間均在20-30分鐘。
2.4 第五面、第六面 技術(shù)委員會(huì)面試
第五面和第六面是<typo id="typo-2991" data-origin="面委" ignoretag="true">面委</typo>,技術(shù)面試,難度非常大??疾煜到y(tǒng)設(shè)計(jì)和架構(gòu)設(shè)計(jì)。要求知識的深度理解
1.主要是系統(tǒng)設(shè)計(jì),問了秒殺系統(tǒng)的如何設(shè)計(jì),分接入層、接口層、消息隊(duì)列層、邏輯層四個(gè)方面講解,接入層可以做服務(wù)治理相關(guān)事情,接口層做搶購開關(guān)、黑白名單、隨機(jī)拒絕等處理,邏輯層具體搶購邏輯實(shí)現(xiàn),涉及到redis分布式鎖以及DB和Redis的一致性問題。
2.從秒殺系統(tǒng)還引申出分布式事務(wù)的幾種實(shí)現(xiàn),二段式、三段式、補(bǔ)償型(TCC)、基于可靠消息服務(wù)的消息隊(duì)列實(shí)現(xiàn)。重點(diǎn)討論了這幾種的實(shí)現(xiàn)和區(qū)別,要求畫出基于可靠消息服務(wù)的消息隊(duì)列實(shí)現(xiàn)分布式事務(wù)的架構(gòu)圖,以及上游服務(wù)和下游服務(wù)如何保證消息可靠性和一致性。
3.考察微服務(wù)架構(gòu),服務(wù)拆分的原則、RPC框架原理、配置管理(etcd)的一致性協(xié)議raft選舉原理。
4.考察服務(wù)治理,服務(wù)限流算法,服務(wù)降級的指標(biāo)和恢復(fù)指標(biāo),服務(wù)熔斷。
5.開放性問題,遇到印象最深的問題,以及如何解決的。
2.5 總結(jié)
騰訊很少有算法題,主要考察知識的廣度和深度,如果沒有實(shí)踐過,靠背書是很難混過去的。架構(gòu)理解要求比較有深度,注重原理的考察。當(dāng)然,要想拿大廠的offer光靠這些可不西行喲,像Kafka、Mysql、Tomcat、Docker、Spring、MyBatis、Nginx、Netty、Dubbo、Redis、Netty、Spring cloud、分布式、高并發(fā)、性能調(diào)優(yōu)、微服務(wù)等架構(gòu)技術(shù)至少也要掌握各七八十才行!
針對以上的技術(shù)點(diǎn)呢,筆者也整理了一套視頻學(xué)習(xí)資料和面試題,
需要的朋友可以幫忙轉(zhuǎn)發(fā)一下
然后點(diǎn)擊學(xué)習(xí),即可免費(fèi)領(lǐng)取!
以下是部分學(xué)習(xí)資料截圖