5月份,身邊朋友跟我分享面試字節跳動和騰訊的經歷,抽空整理成博文與你們分享一下。程序員
頭條技術面共三面,以後是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個技術方案。
騰訊面試流程較多,加上筆試一共有8輪,6輪技術+1輪HR+1輪筆試
第一面:
第一面是電話面試,主要考察項目,經過項目提出基礎問題。時間30分鐘。
以前有微服務經驗,面試官就詳細問到微服務的架構、框架的實現、服務治理、分佈式一致性等問題。
以前有玩過日誌監控系統,首先仍是考察架構,ELK的相關知識,重點描述Elasticsearch的一些架構原理,好比倒排索引的原理。
問消息隊列的相關知識,接觸過Kafka,問了Kafka中消息能夠被多個消費者消費嗎?;以及選舉機制和HW機制。
開放性問題,講一個以前遇到的問題,並如何解決的。這個描述生產過程當中運行的問題,並描述排查問題。
數據庫和Redis相關問題,數據庫考察索引的原理以及幾種事務的區別。Redis問數據結構,延時隊列如何實現,分佈式鎖原理。
第二面 :
筆試,現場面試,考察具體崗位的技術棧語言的基礎知識,題目不難,要求基礎紮實和廣度。
第三面、第四面
第三面和第四面是組長和總監面試,聊解題思路和項目,這二面的特色是根據項目經驗問相關的問題,要求廣度,尤爲考察架構廣度,會將目前的項目量級擴大幾十倍,從新設計架構,同時涉及到一些壓力面試。
感受若是不緊張,熟悉項目的話,問題不大。
會有不少開放性題目,包括平時遇到問題的解題思路、同事之間的協做等。
被問到的知識點有負載均衡算法,ngnix如何作限流,四層LVS和七層Ngnix的區別,以及微服務架構的設計思路。
面試時間均在20-30分鐘。
第五面、第六面 技術委員會面試
第五面和第六面是面委,技術面試,難度很是大。
主要是系統設計,問了秒殺系統的如何設計,分接入層、接口層、消息隊列層、邏輯層四個方面講解,接入層能夠作服務治理相關事情,接口層作搶購開關、黑白名單、隨機拒絕等處理,邏輯層具體搶購邏輯實現,涉及到redis分佈式鎖以及DB和Redis的一致性問題。
從秒殺系統還引伸出分佈式事務的幾種實現,二段式、三段式、補償型(TCC)、基於可靠消息服務的消息隊列實現。重點討論了這幾種的實現和區別,要求畫出基於可靠消息服務的消息隊列實現分佈式事務的架構圖,以及上游服務和下游服務如何保證消息可靠性和一致性。
開放性問題,遇到印象最深的問題,以及如何解決的。
騰訊不多有算法題,主要考察知識的廣度和深度,若是沒有實踐過,靠背書是很難混過去的。架構理解要求比較有深度,注重原理的考察。
又是一年求職季,在這裏,我爲各位準備了一套Java程序員精選高頻面試筆試真題,來幫助你們攻下BAT的offer,須要的能夠加羣「708701457」,便可免費獲取,如下是部分資料截圖