身邊朋友跟我分享面試字節(jié)跳動和騰訊的經(jīng)歷,抽空整理成博文與大家分享一下。
1. 字節(jié)跳動
頭條技術(shù)面共三面,之后是HR面,面試形式是 視頻。時間均控制在1個小時。
1.1 第一面:
第一面主要考察基礎(chǔ),先簡單自我介紹,以及介紹一下項目,然后開始考察基礎(chǔ)。
1.1.1 TCP相關(guān)基礎(chǔ)知識
1.問題1: 請詳細(xì)描述三次握手和四次揮手的過程
要求熟悉三次握手和四次揮手的機(jī)制,要求畫出狀態(tài)圖。
2.問題2: 四次揮手中TIME_WAIT狀態(tài)存在的目的是什么?
這個問題是畫出四次揮手狀態(tài)圖,會引申問你。不排除還會問為什么四次揮手是四次不是二次等問題。最好是把相關(guān)問題均掌握。
3.問題3: TCP是通過什么機(jī)制保障可靠性的?
從四個方面進(jìn)行回答,ACK確認(rèn)機(jī)制、超時重傳、滑動窗口以及流量控制,深入的話要求詳細(xì)講出流量控制的機(jī)制。
1.1.2 語言的相關(guān)基礎(chǔ)知識
字節(jié)跳動的技術(shù)棧是Go和Python,會問一下相關(guān)語言的基礎(chǔ)。
1.問題1: 描述線程、進(jìn)程以及協(xié)程的區(qū)別?
描述線程、進(jìn)程以及協(xié)程的定義和區(qū)別,順便描述Python語言中三者的使用。
2.問題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ū)動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的三個缺點(diǎn),講解epoll機(jī)制,以及epoll是如何解決select的三個缺點(diǎn)的。還會講到epoll中水平觸發(fā)和邊沿觸發(fā)的區(qū)別。
1.1.4 HTTP相關(guān)基礎(chǔ)
1.問題1: 客戶端訪問url到服務(wù)器,整個過程會經(jīng)歷哪些?
從七層網(wǎng)絡(luò)模型,HTTP->TCP->IP->鏈路整個過程講解報文的產(chǎn)生以及傳遞的過程
2.問題2: 描述HTTPS和HTTP的區(qū)別
從端口的區(qū)別,以及HTTPS是在SSL的基礎(chǔ)上以及加密等方面說明
3.問題3: HTTP協(xié)議的請求報文和響應(yīng)報文格式
要非常清楚請求報文和響應(yīng)報文的組成部分,要求在寫具體案例。
4.問題4: HTTP的狀態(tài)碼有哪些?
從2xx,3xx,4xx,5xx分別舉例出常見的code,面試官會問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 項目經(jīng)驗
第二面跟個人項目經(jīng)驗很大,面試官會要求先詳細(xì)介紹最近的項目,介紹項目的同時會打斷你,延伸項目的難度和架構(gòu),要求提出更優(yōu)的解決方案。
之前項目經(jīng)驗里寫了一個分布式的項目,面試官著重討論了這個項目的實(shí)現(xiàn)方案,引申出分布式事務(wù)以及分布式一致性等問題,同時會要求在當(dāng)前項目的基礎(chǔ)上附加條件,要求你提供解決方案,這部分比較難,要求對項目的深度理解很透徹,面試前一定要對項目了解非常清楚,如果是多人合作的項目,最好也要了解別人編寫的功能部分。
還問了一些API業(yè)務(wù)的架構(gòu)問題,負(fù)載均衡、CDN、DNS等問題。以及也問到了HTTP相關(guān)問題,要求描述HTTP的版本之間的區(qū)別,主要是1.0/1.1/2.0三個版本的區(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 項目經(jīng)驗
第三面也是考察項目經(jīng)驗,但是著重系統(tǒng)設(shè)計,會抽一段之前的項目經(jīng)驗(跟第二面的經(jīng)驗肯定不同),要求你描述目前的方案,以及缺點(diǎn)。溫馨提示,一定要簡歷上的項目經(jīng)驗非常熟悉,會抽上一段工作經(jīng)驗的項目。
要求說出缺點(diǎn),這個一個坑,說出來后要求提出改進(jìn)方案,所以回答要謹(jǐn)慎,最好面試前對目前的項目假設(shè)附加條件,提出2-3種備選方案。
要求模塊化,會要求對目前系統(tǒng)如果做微服務(wù)架構(gòu),如何進(jìn)行服務(wù)的拆分,拆分的規(guī)則是什么,考察微服務(wù)架構(gòu)相關(guān)知識,服務(wù)治理(限流、降級、熔斷)。
舉例: 之前項目中由涉及到社交場景中熱度池的設(shè)計,要求講出現(xiàn)有方案和缺點(diǎn),然后說出優(yōu)化方案,還會將目前的量級擴(kuò)大很多倍,要求重新架構(gòu)出方案。還有講到粉絲關(guān)系,推拉組合,也就是讀擴(kuò)散和寫擴(kuò)散二者的區(qū)別,以及二者如何結(jié)合。
1.3.2 裸寫算法
1.二叉樹多個節(jié)點(diǎn)的最近公共祖先
1.4. 總結(jié)
三面技術(shù)面之后,就是HR,這個就不多說了。整體字節(jié)跳動的面試感受,面試官很專業(yè),要求基礎(chǔ)知識很熟悉,面試之前一定要準(zhǔn)備后再去面試。LeetCode題目也要刷。手寫算法留的時間不多,3-10分鐘,如果3分鐘還沒寫,就要求講出解題思路。
切記面試前一定要刷題和準(zhǔn)備,簡歷上的項目不熟悉的千萬不要寫上去,寫上去的項目備好2-3個技術(shù)方案。
2. 騰訊
騰訊面試流程較多,加上筆試一共有8輪,6輪技術(shù)+1輪HR+1輪筆試
2.1 第一面
第一面是電話面試,主要考察項目,通過項目提出基礎(chǔ)問題。時間30分鐘。
1.之前有微服務(wù)經(jīng)驗,面試官就詳細(xì)問到微服務(wù)的架構(gòu)、框架的實(shí)現(xiàn)、服務(wù)治理、分布式一致性等問題。
2.之前有玩過日志監(jiān)控系統(tǒng),首先還是考察架構(gòu),ELK的相關(guān)知識,重點(diǎn)描述Elasticsearch的一些架構(gòu)原理,比如倒排索引的原理。
3.問消息隊列的相關(guān)知識,接觸過Kafka,問了Kafka中消息可以被多個消費(fèi)者消費(fèi)嗎?;以及選舉機(jī)制和HW機(jī)制。
4.開放性問題,講一個之前遇到的問題,并如何解決的。這個描述生產(chǎn)過程中運(yùn)行的問題,并描述排查問題。
5.數(shù)據(jù)庫和Redis相關(guān)問題,數(shù)據(jù)庫考察索引的原理以及幾種事務(wù)的區(qū)別。Redis問數(shù)據(jù)結(jié)構(gòu),延時隊列如何實(shí)現(xiàn),分布式鎖原理。
2.2 第二面 筆試
現(xiàn)場面試,考察具體崗位的技術(shù)棧語言的基礎(chǔ)知識,題目不難,要求基礎(chǔ)扎實(shí)和廣度。
2.3 第三面、第四面
第三面和第四面是組長和總監(jiān)面試,聊解題思路和項目,這二面的特點(diǎn)是根據(jù)項目經(jīng)驗問相關(guān)的問題,要求廣度,尤其考察架構(gòu)廣度,會將目前的項目量級擴(kuò)大幾十倍,重新設(shè)計架構(gòu),同時涉及到一些壓力面試。
感覺如果不緊張,熟悉項目的話,問題不大。
會有很多開放性題目,包括平時遇到問題的解題思路、同事之間的協(xié)作等。
被問到的知識點(diǎn)有負(fù)載均衡算法,ngnix如何做限流,四層LVS和七層Ngnix的區(qū)別,以及微服務(wù)架構(gòu)的設(shè)計思路。
面試時間均在20-30分鐘。
2.4 第五面、第六面 技術(shù)委員會面試
第五面和第六面是面委,技術(shù)面試,難度非常大??疾煜到y(tǒng)設(shè)計和架構(gòu)設(shè)計。要求知識的深度理解
1.主要是系統(tǒng)設(shè)計,問了秒殺系統(tǒng)的如何設(shè)計,分接入層、接口層、消息隊列層、邏輯層四個方面講解,接入層可以做服務(wù)治理相關(guān)事情,接口層做搶購開關(guān)、黑白名單、隨機(jī)拒絕等處理,邏輯層具體搶購邏輯實(shí)現(xiàn),涉及到redis分布式鎖以及DB和Redis的一致性問題。
2.從秒殺系統(tǒng)還引申出分布式事務(wù)的幾種實(shí)現(xiàn),二段式、三段式、補(bǔ)償型(TCC)、基于可靠消息服務(wù)的消息隊列實(shí)現(xiàn)。重點(diǎn)討論了這幾種的實(shí)現(xiàn)和區(qū)別,要求畫出基于可靠消息服務(wù)的消息隊列實(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)理解要求比較有深度,注重原理的考察。
作者:天澄
鏈接:https://juejin.im/post/5cf7ea91e51d4576bc1a0dc2
來源:掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。