2023Java 崗字節(jié)跳動 3 面 + 騰訊 6 面經(jīng)歷(均已拿 offer),談?wù)勎业拇髲S面經(jīng)
寫在開頭的閑言碎語
2022 年過去了,對很多人來說,這一年經(jīng)歷了太多太多,可能是十年來記憶里比較濃墨重彩的一筆。過去的一年里,“熬”算是這個階段我的關(guān)鍵字,確實太多時候就要放棄,好在自己“熬”過去了,在新的 2023 年里,也有個一個非常好的開端,我收獲了心儀的 offer。
簡單來說,就如標題一樣,我今天也想要凡爾賽一次,原來大廠的面試也沒有想象中的那么難,字節(jié)跳動 3 面+騰訊 6 面,就這么一次性過了,下面就細細聊聊我的大廠面經(jīng)吧,希望能夠給金三銀四要面試的朋友提供一些經(jīng)驗。
PART1:字節(jié)跳動 3 輪面試場景重現(xiàn)
——字節(jié)跳動第一面:
第一面相對來說肯定要簡單一些的,所以整個過程中心態(tài)是放得比較平穩(wěn)的,沒有太多緊張感,這一輪主要是考察基礎(chǔ),然后會問一些項目相關(guān)的問題。
①TCP 相關(guān)的基礎(chǔ)知識
問題一:請詳細描述三次握手和四次揮手的過程(要求熟悉三次握手和四次揮手的機制,并畫出狀態(tài)圖)
問題二:四次揮手中 TIME_WAIT 狀態(tài)存在的目的是什么?(要求畫出四次揮手的狀態(tài)圖,接著會引申問題,問到為什么四次揮手是四次不是二次?)
問題三:TCP 是通過什么機制保障可靠性的?(這個問題簡單,但要回答得比較全面。需要從四個方面作答,包括 ACK 確認機制、超時重傳、滑動窗口以及流量控制,甚至詳細講出流量控制的機制。)
②語言相關(guān)的基礎(chǔ)知識
字節(jié)跳動以 Go 為主,所以盡管是后端崗位,也會問你對 Go 了解多少,對其他語言掌握多少?
Java 語法基礎(chǔ)
③網(wǎng)絡(luò)編程相關(guān)基礎(chǔ)
問題一:網(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)到進程用戶態(tài)分別描述這 5 種的區(qū)別。)
問題二:I/O 多路復(fù)用中 select/poll/epoll 的區(qū)別?(從 select 的機制,以及 select 的三個缺點,講解 epoll 機制,以及 epoll 是如何解決 select 的三個缺點的。還會講到 epoll 中水平觸發(fā)和邊沿觸發(fā)的區(qū)別。)
④HTTP 相關(guān)基礎(chǔ)
問題一:客戶端訪問 url 到服務(wù)器,整個過程會經(jīng)歷哪些?(從七層網(wǎng)絡(luò)模型,HTTP->TCP->IP->鏈路整個過程講解報文的產(chǎn)生以及傳遞的過程)
問題二:描述 HTTPS 和 HTTP 的區(qū)別(從端口的區(qū)別,以及 HTTPS 是在 SSL 的基礎(chǔ)上以及加密等方面說明)
問題三:HTTP 協(xié)議的請求報文和響應(yīng)報文格式(要非常清楚請求報文和響應(yīng)報文的組成部分,要求在寫具體案例。)
問題四:HTTP 的狀態(tài)碼有哪些?(從 2xx,3xx,4xx,5xx 分別舉例出常見的 code,面試官會問 301 和 302 的區(qū)別,以及 500/503/504 分別在哪些場景出現(xiàn)。)
⑤緩存和數(shù)據(jù)庫的基礎(chǔ)知識
問題一:描述一下 redis 有哪些數(shù)據(jù)結(jié)構(gòu)?(基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)有 5 種,高級數(shù)據(jù)結(jié)構(gòu) 4 種。面試官還問了 BloomFilter 的原理以及 Zset 的實現(xiàn)原理,主要講解跳躍表。)
問題二:MySQL 場景題目(面試官提供場景,要求寫出查詢 SQL,考察聯(lián)合語句,如何分頁以及復(fù)雜語句的優(yōu)化。)
⑥裸寫算法
樹的非遞歸先序遍歷。
——字節(jié)跳動第二面:
①項目經(jīng)驗
二面的問題基本上都是以個人的項目經(jīng)驗為主,根據(jù)項目來提出一系列的問題。流程跟平時面試其他公司沒有什么太多差別,面試官會要你先自己介紹自己公司的項目,在介紹的過程中就會根據(jù)你說的一些細節(jié)進行提問,一般會引申到項目的難度和架構(gòu)方面,比如要你說出項目中遇到的難度,以及解決方案,再往深問就是有沒有更好的解決方案。
分布式項目,考點:分布式事務(wù)、分布式一致性;
API 業(yè)務(wù),考點:(1)負載均衡、CDN、DNS 等問題;(2)HTTP 相關(guān)問題,如描述 HTTP 版本的區(qū)別等;
②裸寫算法
回行矩陣遍歷
——字節(jié)跳動第三面:
①項目經(jīng)驗
同樣是考察項目經(jīng)驗,但與二面不同的是,三面更注重系統(tǒng)設(shè)計這一方面。大致情況就是,要你描述與二面不同的項目經(jīng)驗,問具體詳細到問你的項目方案,缺點,改進的地方等。
要求模塊化:目前系統(tǒng)如果要做微服務(wù)架構(gòu),如何進行服務(wù)的拆分?拆分的規(guī)則是什么?
考察微服務(wù)微服務(wù)架構(gòu)相關(guān)知識:服務(wù)治理(限流、降級、熔斷)
②裸寫算法
二叉樹多個節(jié)點的最近公共祖先
PART2:騰訊 6 面場景重現(xiàn)
——騰訊一面:
①針對微服務(wù)進行提問:
微服務(wù)架構(gòu)
框架的實現(xiàn)
服務(wù)治理
分布式一致性
②日志監(jiān)控系統(tǒng):
考察架構(gòu)、ELK 相關(guān)知識,重點要描述 ELK 的一些架構(gòu)原理,如倒排索引的原理等;
③消息隊列:
Kafka 中消息可以被多個消費者消費嗎?
選舉機制
HW 機制
④數(shù)據(jù)庫和 Redis 相關(guān):
索引的原理
幾種事務(wù)的區(qū)別
數(shù)據(jù)結(jié)構(gòu)
延時隊列如何實現(xiàn)
分布式鎖原理
⑤其他開放問題:
開放問題,不過多描述,如項目中遇到的問題,如何解決的?描述生產(chǎn)過程中運行的問題,并描述排查問題。
——騰訊二面(筆試):
考察具體崗位的技術(shù)棧語言的基礎(chǔ)知識,題目不難,要求基礎(chǔ)扎實和廣度,文中不過多贅述,大致題目整理到 pdf 文檔里。
——騰訊三面+四面(技術(shù)組長面):
騰訊的三面和四面都是技術(shù)組長來面的,這個階段相對來說還是比較緊張的,面試內(nèi)容則主要是聊解題的思路以及項目經(jīng)驗,考察個人對于技術(shù)掌握的一個廣度,涉及到比較多的架構(gòu)設(shè)計。
項目
開放性題:解題思路、同事之間的協(xié)作問題。
負載均衡
算法
ngnix 如何做限流?
四層 LVS 和七層 Ngnix 的區(qū)別
微服務(wù)架構(gòu)的設(shè)計思路
——騰訊五面+六面(技術(shù)總監(jiān)面):
這兩面的面試官應(yīng)該是技術(shù)總監(jiān),面試難度應(yīng)該是這一套流程里最大的,主要考察面試者的兩個方面,包括系統(tǒng)設(shè)計和架構(gòu)設(shè)計,需要面試者對于技術(shù)知識有比較深度的理解和認識。
①針對系統(tǒng)設(shè)計提問:
秒殺系統(tǒng)如何設(shè)計?分接入層、接口層、消息隊列層、邏輯層四個方面講解,接入層可以做服務(wù)治理相關(guān)事情,接口層做搶購開關(guān)、黑白名單、隨機拒絕等處理,邏輯層具體搶購邏輯實現(xiàn),涉及到 redis 分布式鎖以及 DB 和 Redis 的一致性問題。
分布式事務(wù)的幾種實現(xiàn)。重點討論了這幾種實現(xiàn)的區(qū)別,面試官要求我畫出基于可靠消息服務(wù)的消息隊列實現(xiàn)分布式事務(wù)架構(gòu)圖,然后對上游服務(wù)和下游服務(wù)如何保證消息可靠性和一致性。
②針對微服務(wù)架構(gòu)進行提問:
服務(wù)拆分的原則
RPC 框架原理
配置管理(etcd)的一致性協(xié)議 raft 選舉原理
③其他:
服務(wù)治理
服務(wù)限流算法
服務(wù)降級的指標和恢復(fù)指標
服務(wù)熔斷
④開放性問題:
在項目中,你印象中遇到的印象最深的一個難題,如何解決的?
在面試過程中,你覺得面試官問的哪個問題讓你印象最深,為什么?
生活中有遇到過什么困難嗎?
PART3:我是如何準備面試的?
①準備簡歷(敲門磚,不會包裝簡歷的程序員只能去外包)
程序員的簡歷一定要多下一些功夫,尤其是對一些字眼要再三斟酌,如“精通、熟悉、了解”這三者的區(qū)別一定要區(qū)分清楚,否則就是在給自己挖坑了。當然不會包裝,我可以將我的簡歷給你參考參考,如果還不夠,那下面這些簡歷模板任你挑選:

②了解面試公司,做好功課,知道問什么
對一線互聯(lián)網(wǎng)大廠的面試點,我也做了以下總結(jié):
阿里巴巴、百度、騰訊

字節(jié)跳動、美團、京東

③梳理知識體系,學(xué)會舉一反三
實際上,梳理知識體系是最簡單的事,但很多開發(fā)小白總是一頭霧水,實際上從第二點的大廠面試點就可以總結(jié)梳理出來我們應(yīng)該要學(xué)什么,要掌握什么,通常我的方法是“大廠面試點”+“工作年限”來梳理自己接下來的學(xué)習(xí)及發(fā)展路線圖。
之后,就需要根據(jù)路線圖上的重點去進行有針對性的學(xué)習(xí),在學(xué)習(xí)過程中,學(xué)會舉一反三,學(xué)會寫筆記,做總結(jié)。
這里我分享我個人的一些筆記內(nèi)容吧:
Java 開發(fā)核心筆記

Redis

SpringBoot

④刷面試題
刷題的重要性,我想不用多說。對于應(yīng)屆生或工作年限不長的人來說,刷面試題一方面能夠盡可能地快速自己對某個技術(shù)點的理解,另一方面在面試時,有一定幾率被問到相同或相似題,另外或多或少也能夠為自己面試增加一些自信心,可見適當?shù)乃㈩}是很有必要的。


寫在最后的總結(jié)
最后想說的是,2023 年的金三銀四馬上來了,對于很多人來說跳槽的好機會,大廠面試遠沒有我們想的那么困難,擺好心態(tài),做好準備,你也可以的。
另外,面試中遇到不會的問題不妨嘗試講講自己的思路,因為有些問題不是考察我們的編程能力,而是邏輯思維表達能力;最后平時要進行自我分析與評價,做好職業(yè)規(guī)劃,不斷摸索,提高自己的編程能力和抽象思維能力。
以上文章中,提及到的所有的筆記內(nèi)容、面試題等資料,均可以免費分享給大家學(xué)習(xí),由于資料內(nèi)容太多,平臺篇幅限制,小編就展現(xiàn)了以上部分面試專題與資料,如需獲取以下全部面試資料,可以私(111)即可