面經感悟:四面字節跳動、八面騰訊(附贈面試複習資料)

5月份,身邊朋友跟我分享面試字節跳動和騰訊的經歷,抽空整理成博文與你們分享一下。程序員

clipboard.png

1.字節跳動

頭條技術面共三面,以後是HR面,面試形式是 視頻。時間均控制在1個小時。面試

第一面:redis

第一面主要考察基礎,先簡單自我介紹,以及介紹一下項目,而後開始考察基礎。算法

TCP相關基礎知識數據庫

問題1:請詳細描述三次握手和四次揮手的過程編程

要求熟悉三次握手和四次揮手的機制,要求畫出狀態圖。緩存

問題2:四次揮手中TIME_WAIT狀態存在的目的是什麼?服務器

這個問題是畫出四次揮手狀態圖,會引伸問你。不排除還會問爲何四次揮手是四次不是二次等問題。最好是把相關問題均掌握。網絡

問題3:TCP是經過什麼機制保障可靠性的?數據結構

從四個方面進行回答,ACK確認機制、超時重傳、滑動窗口以及流量控制,深刻的話要求詳細講出流量控制的機制。

語言的相關基礎知識

字節跳動的技術棧是Go和Python,會問一下相關語言的基礎。

問題1:描述線程、進程以及協程的區別?

描述線程、進程以及協程的定義和區別,順便描述Python語言中三者的使用。

問題2:GO語言中的協程與Python中的協程的區別?

主要講解Go中GMP機制。

網絡編程相關基礎

問題1:網絡IO模型有哪些?

5種網絡I/O模型,阻塞、非阻塞、I/O多路複用、信號驅動IO、異步I/O。從數據從I/O設備到內核態,內核態到進程用戶態分別描述這5種的區別。

問題2:I/O多路複用中select/poll/epoll的區別?

從select的機制,以及select的三個缺點,講解epoll機制,以及epoll是如何解決select的三個缺點的。還會講到epoll中水平觸發和邊沿觸發的區別。

HTTP相關基礎

問題1:客戶端訪問url到服務器,整個過程會經歷哪些?

從七層網絡模型,HTTP->TCP->IP->鏈路整個過程講解報文的產生以及傳遞的過程

問題2:描述HTTPS和HTTP的區別

從端口的區別,以及HTTPS是在SSL的基礎上以及加密等方面說明

問題3:HTTP協議的請求報文和響應報文格式

要很是清楚請求報文和響應報文的組成部分,要求在寫具體案例。

問題4:HTTP的狀態碼有哪些?

從2xx,3xx,4xx,5xx分別舉例出常見的code,面試官會問301和302的區別,以及500/503/504分別在哪些場景出現。

緩存和數據庫的基礎知識

問題1:描述一下redis有哪些數據結構。

基礎的數據結構有5種,String/List/Hash/Set/Zset,還答了高級數據結構HyperLogLog/BitMap/BloomFilter/GeoHash。面試官還問了BloomFilter的原理以及Zset的實現原理,主要講解跳躍表。

問題2:MySQL場景題目

面試官提供場景,要求寫出查詢SQL,考察聯合語句,如何分頁以及複雜語句的優化。

裸寫算法

樹的非遞歸先序遍歷。

第二面:

項目經驗

第二面跟我的項目經驗很大,面試官會要求先詳細介紹最近的項目,介紹項目的同時會打斷你,延伸項目的難度和架構,要求提出更優的解決方案。

以前項目經驗裏寫了一個分佈式的項目,面試官着重討論了這個項目的實現方案,引伸出分佈式事務以及分佈式一致性等問題,同時會要求在當前項目的基礎上附加條件,要求你提供解決方案,這部分比較難,要求對項目的深度理解很透徹,面試前必定要對項目瞭解很是清楚,若是是多人合做的項目,最好也要了解別人編寫的功能部分。

還問了一些API業務的架構問題,負載均衡、CDN、DNS等問題。以及也問到了HTTP相關問題,要求描述HTTP的版本之間的區別,主要是1.0/1.1/2.0三個版本的區別。詳細說了1.0與1.1之間是鏈接模型的區別(短鏈接、長鏈接、管線化),1.1與2.0之間的區別是I/O多路複用的單一長鏈接、服務器推送、二進制分楨、首部壓縮等。

裸寫算法

回行矩陣遍歷

第三面:

項目經驗

第三面也是考察項目經驗,可是着重系統設計,會抽一段以前的項目經驗(跟第二面的經驗確定不一樣),要求你描述目前的方案,以及缺點。舒適提示,必定要簡歷上的項目經驗很是熟悉,會抽上一段工做經驗的項目。

要求說出缺點,這個一個坑,說出來後要求提出改進方案,因此回答要謹慎,最好面試前對目前的項目假設附加條件,提出2-3種備選方案。

要求模塊化,會要求對目前系統若是作微服務架構,如何進行服務的拆分,拆分的規則是什麼,考察微服務架構相關知識,服務治理(限流、降級、熔斷)。

舉例: 以前項目中由涉及到社交場景中熱度池的設計,要求講出現有方案和缺點,而後說出優化方案,還會將目前的量級擴大不少倍,要求從新架構出方案。還有講到粉絲關係,推拉組合,也就是讀擴散和寫擴散兩者的區別,以及兩者如何結合。

裸寫算法

二叉樹多個節點的最近公共祖先

總結

三面技術面以後,就是HR,這個就很少說了。總體字節跳動的面試感覺,面試官很專業,要求基礎知識很熟悉,面試以前必定要準備後再去面試。LeetCode題目也要刷。手寫算法留的時間很少,3-10分鐘,若是3分鐘還沒寫,就要求講出解題思路。

切記面試前必定要刷題和準備,簡歷上的項目不熟悉的千萬不要寫上去,寫上去的項目備好2-3個技術方案。

clipboard.png

2.騰訊

騰訊面試流程較多,加上筆試一共有8輪,6輪技術+1輪HR+1輪筆試

第一面:

第一面是電話面試,主要考察項目,經過項目提出基礎問題。時間30分鐘。

以前有微服務經驗,面試官就詳細問到微服務的架構、框架的實現、服務治理、分佈式一致性等問題。

以前有玩過日誌監控系統,首先仍是考察架構,ELK的相關知識,重點描述Elasticsearch的一些架構原理,好比倒排索引的原理。

問消息隊列的相關知識,接觸過Kafka,問了Kafka中消息能夠被多個消費者消費嗎?;以及選舉機制和HW機制。

開放性問題,講一個以前遇到的問題,並如何解決的。這個描述生產過程當中運行的問題,並描述排查問題。

數據庫和Redis相關問題,數據庫考察索引的原理以及幾種事務的區別。Redis問數據結構,延時隊列如何實現,分佈式鎖原理。

第二面 :

筆試,現場面試,考察具體崗位的技術棧語言的基礎知識,題目不難,要求基礎紮實和廣度。

第三面、第四面

第三面和第四面是組長和總監面試,聊解題思路和項目,這二面的特色是根據項目經驗問相關的問題,要求廣度,尤爲考察架構廣度,會將目前的項目量級擴大幾十倍,從新設計架構,同時涉及到一些壓力面試。

感受若是不緊張,熟悉項目的話,問題不大。

會有不少開放性題目,包括平時遇到問題的解題思路、同事之間的協做等。

被問到的知識點有負載均衡算法,ngnix如何作限流,四層LVS和七層Ngnix的區別,以及微服務架構的設計思路。

面試時間均在20-30分鐘。

第五面、第六面 技術委員會面試

第五面和第六面是面委,技術面試,難度很是大。

  • 考察系統設計和架構設計。要求知識的深度理解

主要是系統設計,問了秒殺系統的如何設計,分接入層、接口層、消息隊列層、邏輯層四個方面講解,接入層能夠作服務治理相關事情,接口層作搶購開關、黑白名單、隨機拒絕等處理,邏輯層具體搶購邏輯實現,涉及到redis分佈式鎖以及DB和Redis的一致性問題。

從秒殺系統還引伸出分佈式事務的幾種實現,二段式、三段式、補償型(TCC)、基於可靠消息服務的消息隊列實現。重點討論了這幾種的實現和區別,要求畫出基於可靠消息服務的消息隊列實現分佈式事務的架構圖,以及上游服務和下游服務如何保證消息可靠性和一致性。

  • 考察微服務架構,服務拆分的原則、RPC框架原理、配置管理(etcd)的一致性協議raft選舉原理。
  • 考察服務治理,服務限流算法,服務降級的指標和恢復指標,服務熔斷。

開放性問題,遇到印象最深的問題,以及如何解決的。

總結

騰訊不多有算法題,主要考察知識的廣度和深度,若是沒有實踐過,靠背書是很難混過去的。架構理解要求比較有深度,注重原理的考察。

又是一年求職季,在這裏,我爲各位準備了一套Java程序員精選高頻面試筆試真題,來幫助你們攻下BAT的offer,須要的能夠加羣「708701457」,便可免費獲取,如下是部分資料截圖

clipboard.png

clipboard.png

相關文章
相關標籤/搜索