面經(jīng):四輪面試全流程復(fù)盤與高頻真題解析)
1. 寫在前面為什么B站社招值得認(rèn)真準(zhǔn)備后臺(tái)一直有人催我寫面經(jīng)拖了快兩個(gè)月終于坐下來把這趟B站社招的完整經(jīng)歷捋了一遍。標(biāo)題寫的是“烤面經(jīng)”其實(shí)就是“考面經(jīng)”——把自己烤過、考過的經(jīng)驗(yàn)全部翻出來曬一曬給準(zhǔn)備沖B站或者正在沖大廠的朋友一份能直接抄的作業(yè)。這篇稿子不是那種“我朋友說”“我聽說”的二手消息是我自己從投簡歷到拿offer全流程走下來的真實(shí)記錄包括每一輪的面試題、我當(dāng)時(shí)怎么答的、哪些地方答崩了、復(fù)盤之后怎么改的全部攤開來講。先交代一下結(jié)果已拿offer崗位是技術(shù)方向的社招不是校招。整個(gè)流程大約三周一共四輪面試加一輪HR溝通。B站的面試風(fēng)格給我的整體感覺是問得很細(xì)但不會(huì)故意刁難人。面試官普遍愿意引導(dǎo)只要你思路在線哪怕某一題沒答完美也能通過追問把信息挖出來重點(diǎn)是考察你是不是真的做過事、能不能把事講清楚。這跟我之前面的某些公司風(fēng)格差異很大那類公司喜歡上來就拋一個(gè)特別大的場景題逼你在白板上做架構(gòu)決策答不對(duì)就直接掛。B站不是這個(gè)路數(shù)B站更看重“你過去做過什么怎么做為什么這么做有沒有想過更好的做法”。這篇面經(jīng)我盡量按時(shí)間線走從投遞渠道、簡歷準(zhǔn)備到每一輪的面試重點(diǎn)、高頻題拆解再到心態(tài)調(diào)整和開價(jià)策略都覆蓋到。你如果是準(zhǔn)備社招的人不管是沖B站還是沖別的中大型互聯(lián)網(wǎng)公司這篇內(nèi)容里的方法論基本通用。提示面經(jīng)永遠(yuǎn)是“參考”不是“押題”。行情、部門、面試官風(fēng)格甚至同一家公司不同事業(yè)部之間的差異都很大。我這篇的價(jià)值在于幫你建立一套“怎么準(zhǔn)備、怎么應(yīng)對(duì)、怎么復(fù)盤”的完整框架而不是背答案。2. 整體準(zhǔn)備投遞渠道、簡歷打磨與目標(biāo)部門判斷2.1 投遞渠道怎么選內(nèi)推優(yōu)先但別只盯著內(nèi)推先說結(jié)論B站社招內(nèi)推效率明顯高于海投但內(nèi)推不是萬能藥。我當(dāng)時(shí)是找了在B站工作的前同事幫忙內(nèi)推從簡歷進(jìn)系統(tǒng)到約面大概用了4天同期一個(gè)朋友自己走官網(wǎng)投遞簡歷泡了兩周才有動(dòng)靜。這個(gè)差異不是絕對(duì)的但內(nèi)推至少能保證簡歷被HR看到而不是躺在簡歷池里被算法篩掉。另外有個(gè)細(xì)節(jié)容易被忽略B站的招聘官網(wǎng)和很多大廠一樣同一個(gè)崗位可能掛在不同的部門下面JD看起來差不多實(shí)際工作內(nèi)容可能差很多。所以內(nèi)推的時(shí)候一定不要只甩一個(gè)簡歷過去要跟幫你內(nèi)推的人問清楚三件事這個(gè)崗位掛在哪個(gè)事業(yè)部、團(tuán)隊(duì)目前主要做什么、面試流程大概幾輪。我當(dāng)時(shí)就是問清楚之后才投的因?yàn)锽站的業(yè)務(wù)線很長——主站、直播、電商、游戲、OTT、漫畫、音頻都有技術(shù)團(tuán)隊(duì)不同團(tuán)隊(duì)的技術(shù)棧和節(jié)奏完全不一樣。盲投的話就算拿到了offer入職之后發(fā)現(xiàn)自己對(duì)業(yè)務(wù)不感興趣那才是最大的坑。2.2 簡歷上寫什么項(xiàng)目經(jīng)歷是絕對(duì)核心技能列表是裝飾品我篩過簡歷也幫朋友改過簡歷一個(gè)深有體會(huì)的點(diǎn)是技術(shù)簡歷上“精通”“熟悉”“了解”這一欄面試官大概率只是掃一眼真正會(huì)逐字讀的是項(xiàng)目經(jīng)歷。所以我準(zhǔn)備簡歷的時(shí)候把大概70%的篇幅給了項(xiàng)目技能列表反而壓縮到了一小塊。項(xiàng)目經(jīng)歷的寫法我推薦一個(gè)四段式結(jié)構(gòu)也是我這次實(shí)際采用的寫法背景一句話說清楚這個(gè)項(xiàng)目解決什么問題服務(wù)對(duì)象是誰。比如“面向創(chuàng)作者的數(shù)據(jù)分析平臺(tái)幫助百萬粉以上UP主實(shí)時(shí)監(jiān)控內(nèi)容表現(xiàn)”。你在里面的角色是主導(dǎo)者還是核心參與者負(fù)責(zé)的模塊邊界在哪里這里要寫具體避免“參與了XX系統(tǒng)開發(fā)”這種模糊表述。技術(shù)方案與關(guān)鍵決策選型是什么為什么選它而不是另一個(gè)方案這是面試官最喜歡追問的地方提前寫好面的時(shí)候就不慌。結(jié)果數(shù)據(jù)上線后帶來了什么可量化的變化。QPS提升了多少、耗時(shí)降低了多少毫秒、人力成本節(jié)省了多少有數(shù)字就寫數(shù)字。我這次簡歷里放了三個(gè)項(xiàng)目一個(gè)偏業(yè)務(wù)架構(gòu)一個(gè)偏性能優(yōu)化一個(gè)偏數(shù)據(jù)鏈路。三個(gè)方向剛好覆蓋了B站面試官可能會(huì)問的不同角度實(shí)際面試中也確實(shí)都被深挖了。第三輪面試官就盯著性能優(yōu)化那個(gè)項(xiàng)目連續(xù)問了四十分鐘從排查思路到監(jiān)控指標(biāo)再到上線策略一層一層往下剝?nèi)绻麤]有提前把項(xiàng)目細(xì)節(jié)吃透那輪估計(jì)就交代了。2.3 目標(biāo)部門判斷崗位信息藏著面試方向的關(guān)鍵線索兩段相同的JD背后可能是完全不同的面試難度和技術(shù)側(cè)重。我的做法是把JD里的關(guān)鍵詞拆出來逐個(gè)對(duì)照自己的經(jīng)驗(yàn)做匹配。具體來說我會(huì)新建一個(gè)表格左邊列JD里的技術(shù)關(guān)鍵詞比如“高并發(fā)”“微服務(wù)治理”“ClickHouse”“Flink”右邊列我自己對(duì)應(yīng)的項(xiàng)目或技能能對(duì)上就標(biāo)“強(qiáng)相關(guān)”對(duì)不上就標(biāo)“需要補(bǔ)課”。這個(gè)動(dòng)作看起來很簡單但價(jià)值很大它能很直觀地告訴你這個(gè)團(tuán)隊(duì)在意什么。如果JD里反復(fù)出現(xiàn)“穩(wěn)定性”“SLA”那一面大概率會(huì)問容災(zāi)、限流、降級(jí)如果反復(fù)出現(xiàn)“數(shù)據(jù)分析”“實(shí)時(shí)計(jì)算”那大概率會(huì)問流式計(jì)算框架和存儲(chǔ)選型。B站的技術(shù)崗JD通常還會(huì)在最后附上“團(tuán)隊(duì)介紹”或“業(yè)務(wù)方向”比如“負(fù)責(zé)彈幕系統(tǒng)”“負(fù)責(zé)推薦鏈路”“負(fù)責(zé)創(chuàng)作者服務(wù)”這些信息就是最好的押題來源。我當(dāng)時(shí)投的崗位跟內(nèi)容中臺(tái)相關(guān)所以重點(diǎn)復(fù)習(xí)了緩存設(shè)計(jì)、消息隊(duì)列、分布式一致性這些方向最后一面確實(shí)有一道場景題就落在這個(gè)范圍里。3. 面試全流程拆解從一面到HR面的真實(shí)記錄3.1 一面基礎(chǔ)功底的“體檢”重點(diǎn)在操作系統(tǒng)、網(wǎng)絡(luò)與編碼B站的一面給我的感覺很像一次全面體檢不追求某一個(gè)領(lǐng)域考到天荒地老而是快速把計(jì)算機(jī)基礎(chǔ)、編碼能力和業(yè)務(wù)理解都掃一遍。我這一面大約是70分鐘整體節(jié)奏是自我介紹5分鐘→ 基礎(chǔ)題問答20分鐘→ 手寫代碼25分鐘→ 項(xiàng)目深挖20分鐘。基礎(chǔ)題部分我記得比較清楚的幾個(gè)進(jìn)程和線程的區(qū)別是什么協(xié)程又是什么這個(gè)題我答的時(shí)候先給了教科書定義然后立刻切換到實(shí)際場景進(jìn)程是資源分配的最小單位線程是CPU調(diào)度的最小單位協(xié)程則由用戶態(tài)調(diào)度切換成本遠(yuǎn)低于線程適合IO密集型任務(wù)。面試官接著追問了一句“那Go的goroutine跟協(xié)程是什么關(guān)系”這個(gè)追問說明他想要的不只是定義而是你有沒有在實(shí)際開發(fā)中用過。TCP四次揮手為什么是四次我回答的時(shí)候畫了時(shí)間線主動(dòng)方發(fā)FIN被動(dòng)方回ACK被動(dòng)方再發(fā)FIN主動(dòng)方再回ACK。核心原因是被動(dòng)方收到FIN之后可能還有數(shù)據(jù)沒發(fā)完所以ACK和FIN不能合并。面試官又問“如果被動(dòng)方剛好沒有數(shù)據(jù)要發(fā)了可不可以合并成三次”這個(gè)點(diǎn)我當(dāng)時(shí)猶豫了一下最后回答“理論上可以但TCP協(xié)議棧實(shí)現(xiàn)中并不會(huì)這么干因?yàn)槭盏紽IN只代表對(duì)方不再發(fā)數(shù)據(jù)不代表對(duì)方不再收數(shù)據(jù)”。這一題算是我答得比較順的。HTTPS的握手過程以及公鑰加密和對(duì)稱加密在里面的分工。這個(gè)幾乎是必考題我建議每個(gè)人都能在5分鐘內(nèi)畫完整條鏈路。手寫代碼那題是LRU緩存。這題我太熟了直接寫了基于HashMap加雙向鏈表的實(shí)現(xiàn)。寫完之后面試官問我“如果多線程并發(fā)訪問這個(gè)實(shí)現(xiàn)會(huì)不會(huì)有問題”我說會(huì)有最簡單是加鎖追求性能可以用分段鎖再激進(jìn)一點(diǎn)用并發(fā)數(shù)據(jù)結(jié)構(gòu)。他又追問“那Redis的近似LRU跟你手寫的這個(gè)LRU有什么區(qū)別”這也引導(dǎo)得很好把一道算法題接到了工程實(shí)踐上。項(xiàng)目深挖部分面試官挑的是簡歷里那個(gè)性能優(yōu)化項(xiàng)目問的問題集中在你怎么定位到瓶頸的優(yōu)化前后數(shù)據(jù)是什么上線之后有沒有出現(xiàn)異常我提醒一句簡歷上寫的每一個(gè)數(shù)字都要能自圓其說。我寫“接口耗時(shí)從380ms降到120ms”面試官立刻問“這個(gè)數(shù)據(jù)是怎么測出來的壓測工具是什么壓了多大并發(fā)”如果你只寫結(jié)果答不上來過程那這一項(xiàng)不僅不加分反而會(huì)讓面試官懷疑簡歷的水分。3.2 二面系統(tǒng)設(shè)計(jì)與項(xiàng)目細(xì)節(jié)的“壓力測試”二面通常是交叉面或者技術(shù)Leader面我的二面面試官是另一個(gè)團(tuán)隊(duì)的資深工程師整體風(fēng)格比一面更“松”但問題更開放。這一面大約80分鐘主體是三塊一道系統(tǒng)設(shè)計(jì)題、一個(gè)線上故障的排查推演、以及對(duì)我提到的某個(gè)技術(shù)選型的極限追問。系統(tǒng)設(shè)計(jì)題大概是這樣的設(shè)計(jì)一個(gè)短鏈服務(wù)。這類題很經(jīng)典考察點(diǎn)無非是發(fā)號(hào)器、存儲(chǔ)選型、緩存策略、跳轉(zhuǎn)邏輯、過期清理。我回答的時(shí)候沒有急著寫表結(jié)構(gòu)而是先花了兩分鐘跟面試官對(duì)齊需求短鏈的QPS預(yù)估多少過期時(shí)間多長需不需要自定義別名需不需要統(tǒng)計(jì)數(shù)據(jù)這些都是“澄清需求”的加分項(xiàng)因?yàn)閷?shí)際工作中沒有人會(huì)把需求講全能主動(dòng)定義清楚邊界是高級(jí)工程師的基本素養(yǎng)。之后我給的方案是發(fā)號(hào)器用號(hào)段模式每臺(tái)機(jī)器預(yù)取一批ID內(nèi)存里用完再取存儲(chǔ)用MySQL存映射關(guān)系KV直接存“短鏈號(hào)→原始URL”的映射而不存業(yè)務(wù)字段讀鏈路掛Redis緩存緩存穿透用布隆過濾器擋一下過期清理用惰性刪除加定時(shí)任務(wù)兜底。面試官順著方案追問了幾個(gè)點(diǎn)其中有一個(gè)我印象很深“如果Redis緩存和MySQL里的數(shù)據(jù)不一致用戶會(huì)看到什么”我的回答是短鏈數(shù)據(jù)本身是不可變的一旦生成就永遠(yuǎn)指向同一個(gè)URL所以緩存只需要做“讀多寫少只增不改”的策略就能規(guī)避一致性問題不需要引入分布式鎖之類的重型方案。面試官當(dāng)場點(diǎn)頭這個(gè)追問讓我意識(shí)到設(shè)計(jì)題的回答重點(diǎn)不在于面面俱到而在于“你的每一步?jīng)Q策都有清晰的依據(jù)”。線上故障排查推演也很有意思面試官給了一個(gè)場景某個(gè)服務(wù)某天開始P99延遲從50ms漲到500msCPU和內(nèi)存看起來都正常你怎么排查。這個(gè)問題考察的思路比答案重要。我當(dāng)時(shí)給出的排查路徑是先看調(diào)用鏈確認(rèn)延遲是發(fā)生在服務(wù)內(nèi)部還是下游依賴再看GC日志確認(rèn)沒有頻繁FullGC然后看線程狀態(tài)確認(rèn)有沒有線程阻塞接著看連接池確認(rèn)有沒有連接泄漏最后再看網(wǎng)絡(luò)層和磁盤IO。面試官聽完說“這個(gè)思路比較完整”然后補(bǔ)了一句“其實(shí)最可疑的是那個(gè)被很多人忽略的日志框架曾經(jīng)出過磁盤打滿導(dǎo)致阻塞的事故”——這算是他分享的經(jīng)驗(yàn)也提醒我排查問題時(shí)不能只盯著應(yīng)用層。3.3 三面業(yè)務(wù)理解與跨團(tuán)隊(duì)協(xié)作的“綜合面試”三面一般是更高的Leader或者總監(jiān)級(jí)別這一面不再摳技術(shù)細(xì)節(jié)重點(diǎn)考察的是你有沒有大局觀。我的三面大概60分鐘面試官是內(nèi)容中臺(tái)的技術(shù)負(fù)責(zé)人開場沒有讓我自我介紹直接拋了一個(gè)問題“你覺得B站的彈幕系統(tǒng)跟抖音的評(píng)論系統(tǒng)在技術(shù)設(shè)計(jì)上最大的差異是什么”這個(gè)問題很妙。表面上在問技術(shù)實(shí)際上在問你對(duì)B站業(yè)務(wù)的理解。我的回答是彈幕是強(qiáng)實(shí)時(shí)、高并發(fā)、內(nèi)容極短的流式數(shù)據(jù)用戶在同一個(gè)視頻上的互動(dòng)高度同步所以彈幕系統(tǒng)天然需要低延遲推送和時(shí)序一致性而評(píng)論是相對(duì)長尾的內(nèi)容有樓中樓結(jié)構(gòu)更強(qiáng)調(diào)存儲(chǔ)的靈活性和檢索能力它的寫入模型沒那么集中。兩個(gè)系統(tǒng)的核心差異來自用戶行為模式的不同技術(shù)上就會(huì)導(dǎo)向不同的架構(gòu)選擇。面試官還問了幾個(gè)偏軟實(shí)力的問題比如“如果產(chǎn)品提了一個(gè)需求你覺得技術(shù)上實(shí)現(xiàn)不了你怎么溝通”“你有沒有做過技術(shù)方案被別人推翻的瞬間當(dāng)時(shí)怎么處理的”“你帶過新人或者指導(dǎo)過同事嗎”這類問題沒有標(biāo)準(zhǔn)答案但有一個(gè)核心不能只說“好的沒問題”也不能只說“不可能”。我當(dāng)時(shí)回答第一個(gè)問題時(shí)用了STAR結(jié)構(gòu)先描述場景再說明自己的分析和方案最后說結(jié)果如何。這塊建議每個(gè)人都提前準(zhǔn)備三四個(gè)真實(shí)小故事面試的時(shí)候比臨場編要自然得多。三面結(jié)束后兩天HR打電話過來說“面試評(píng)價(jià)不錯(cuò)約HR面”。到這個(gè)節(jié)點(diǎn)offer基本已經(jīng)十拿九穩(wěn)了HR面更多是確認(rèn)意愿和薪資期望。3.4 HR面與薪資談判目標(biāo)公司、期望值、以及定級(jí)參考B站的HR面不算難核心就是三類問題為什么離開上一家公司、為什么選B站、你的薪資期望是多少。這三類問題我建議提前打好腹稿但不要背稿子HR經(jīng)驗(yàn)很豐富你說得太流利反而像排練過。“為什么離開上一家”是最容易踩坑的問題。千萬別吐槽前司什么加班多、Leader不行、業(yè)務(wù)沒前景說出口就是減分項(xiàng)。我的建議是把它翻譯成“追求”而不是“逃離”因?yàn)橄虢佑|更大規(guī)模的用戶體量、想做更復(fù)雜的業(yè)務(wù)場景、想要更專業(yè)的技術(shù)氛圍所以選擇離開。同樣的事實(shí)換個(gè)說法觀感完全不一樣?!盀槭裁催xB站”這個(gè)問題最好結(jié)合自己的實(shí)際體驗(yàn)來答。我是B站深度用戶從大學(xué)就開始用對(duì)社區(qū)氛圍和內(nèi)容生態(tài)有真實(shí)的感受這個(gè)答案就很自然不是那種“我很看好貴公司發(fā)展”的空話。薪資談判這塊B站跟大多數(shù)公司一樣會(huì)先問期望薪資然后根據(jù)面試表現(xiàn)和當(dāng)前薪資綜合定級(jí)。我的經(jīng)驗(yàn)是先說一個(gè)比自己底線高15%-20%的數(shù)字再表現(xiàn)出“可以商量”的態(tài)度。談判的本質(zhì)是信息不對(duì)稱你掌握的信息越少越要給自己留出緩沖空間。另外有一個(gè)細(xì)節(jié)HR如果問你“手上有其他offer嗎”如果你真的有可以如實(shí)說這能增加談判籌碼如果沒有就說“目前還在流程中”不要編。4. 核心考察點(diǎn)解析B站社招面試官到底在篩什么4.1 技術(shù)深度的考察邏輯不是背得多而是扎得深B站面試官很喜歡做的一件事是抓住你簡歷里的某個(gè)技術(shù)點(diǎn)一個(gè)勁往下挖挖到你答不上來為止。這不是為難你而是在試探你的“技術(shù)下限”——你對(duì)一個(gè)東西的理解究竟能深入到哪一層。比如一面的時(shí)候我在項(xiàng)目里提到了Redis面試官就順著問了三個(gè)遞進(jìn)式的問題Redis的key過期之后是不是立刻刪掉惰性刪除和定期刪除分別是怎么實(shí)現(xiàn)的為什么不直接全部用定時(shí)刪除這三個(gè)問題連續(xù)拋出來就形成了一個(gè)“記憶→理解→分析”的梯度。如果你第一層還能答上來第二層開始含糊第三層直接卡住那說明你對(duì)Redis的了解停留在“會(huì)用API”的層面沒有真正讀過底層實(shí)現(xiàn)。這個(gè)考察方式跟八股文背誦完全不同它要求你對(duì)每一個(gè)寫進(jìn)簡歷的技術(shù)名詞都至少有源碼級(jí)的認(rèn)知至少要知道原理。那怎么準(zhǔn)備這種深度呢我的做法是把簡歷里每一個(gè)技術(shù)名詞列成一張清單然后對(duì)每個(gè)名詞問自己三個(gè)問題它解決了什么問題它的核心原理是什么它有什么缺陷或者說代價(jià)如果任何一個(gè)問題答不上來就回去查資料整理成一頁筆記。這個(gè)動(dòng)作我持續(xù)了大概一周效果非常明顯。4.2 系統(tǒng)設(shè)計(jì)題的隱藏評(píng)分標(biāo)準(zhǔn)合理性大于炫技很多人準(zhǔn)備系統(tǒng)設(shè)計(jì)題有個(gè)誤區(qū)覺得方案越復(fù)雜越顯水平于是上來就甩出一套微服務(wù)加消息隊(duì)列加數(shù)據(jù)湖的宏大架構(gòu)。但實(shí)際上面試官想看到的不是“最先進(jìn)”而是“最合理”。什么叫合理就是你的方案跟題目給出的前置條件匹配。五分鐘能看完的需求文檔你給了一套需要兩個(gè)團(tuán)隊(duì)維護(hù)半年的方案這叫過度設(shè)計(jì)。百萬級(jí)別QPS的問題你用了單機(jī)加本地緩存解決這叫考慮不周。合理的中間地帶是優(yōu)先給出一個(gè)能支撐當(dāng)前業(yè)務(wù)量級(jí)、又預(yù)留了演進(jìn)空間的最小可行架構(gòu)。我在準(zhǔn)備系統(tǒng)設(shè)計(jì)題時(shí)找到一個(gè)特別實(shí)用的方法在這里分享出來。找一張紙先把題目里所有限制條件寫出來QPS、數(shù)據(jù)量、一致性要求、可用性要求、團(tuán)隊(duì)規(guī)模、工期。然后對(duì)著這些條件逐個(gè)畫架構(gòu)流量入口怎么接服務(wù)怎么拆數(shù)據(jù)怎么存緩存怎么放任務(wù)怎么跑。最后問自己兩個(gè)問題這套架構(gòu)在最壞情況下會(huì)不會(huì)掛需要幾步才能演進(jìn)出更復(fù)雜的方案如果兩個(gè)答案都是合理的這套方案基本就能過關(guān)了。B站的系統(tǒng)設(shè)計(jì)題里還經(jīng)常夾雜一個(gè)業(yè)務(wù)理解題。比如“B站的搜索和電商的搜索有什么不同”“推薦系統(tǒng)冷啟動(dòng)你怎么設(shè)計(jì)”這類問題表面考設(shè)計(jì)實(shí)際是考你對(duì)B站業(yè)務(wù)的熟悉程度。建議在面試前認(rèn)認(rèn)真真把B站的主要功能拆一遍創(chuàng)作端、消費(fèi)端、互動(dòng)端、商業(yè)化端各有什么技術(shù)挑戰(zhàn)面試的時(shí)候會(huì)非常加分。4.3 軟實(shí)力問題怎么答用STAR結(jié)構(gòu)說好一個(gè)故事B站面試中軟實(shí)力問題的占比不小尤其是三面這類問題的目的是考察你的協(xié)作能力、溝通能力和自我驅(qū)動(dòng)力。技術(shù)面里的軟實(shí)力題很多候選人回答得特別散想到哪說到哪面試官根本沒法判斷。我的建議是用STAR結(jié)構(gòu)來組織每一個(gè)案例。STAR是四個(gè)英文單詞的縮寫Situation背景、Task任務(wù)、Action行動(dòng)、Result結(jié)果。講一個(gè)故事時(shí)用三句話交代背景和任務(wù)然后用五句話講清楚你具體做了什么最后用兩句話給出結(jié)果和數(shù)據(jù)。舉個(gè)例子面試官問“你有沒有一句話說清楚你最近做的最有成就感的項(xiàng)目”。我的回答結(jié)構(gòu)是Situation——我們團(tuán)隊(duì)負(fù)責(zé)的推薦接口在晚高峰時(shí)段經(jīng)常超時(shí)用戶體驗(yàn)問題被投訴很多次Task——我負(fù)責(zé)在一個(gè)月內(nèi)降低接口超時(shí)率并保證不增加機(jī)器成本Action——我先做了全鏈路埋點(diǎn)定位到耗時(shí)集中在某個(gè)下游服務(wù)然后把這個(gè)服務(wù)的降級(jí)策略從提前熔斷改成了超時(shí)降級(jí)同時(shí)把部分非關(guān)鍵數(shù)據(jù)的加載從同步改成異步Result——上線后接口超時(shí)率從3%降到0.4%機(jī)器成本沒有增加落地時(shí)長只用了三周。這樣一個(gè)故事面試官不需要追問細(xì)節(jié)就能對(duì)你的能力形成一個(gè)完整判斷。軟實(shí)力題里面還有一個(gè)高頻問題“你最大的缺點(diǎn)是什么”這個(gè)題很多人栽在兩處一是真的說了個(gè)硬傷比如“我脾氣不好跟同事處不來”二是說了個(gè)偽缺點(diǎn)比如“我太追求完美了”這種答法面試官見得多會(huì)覺得你不真誠。比較好的折中方案是說一個(gè)真實(shí)但不致命、而且你已經(jīng)在努力改善的缺點(diǎn)比如“我在做技術(shù)方案的時(shí)候控制不住細(xì)節(jié)狂的傾向有時(shí)候會(huì)過度投入現(xiàn)在我會(huì)有意識(shí)地用時(shí)間盒來控制”這一類的回答既展示了自我認(rèn)知又展示了改進(jìn)能力。5. 高頻題目復(fù)盤一套可以“背”進(jìn)腦子里的真題庫5.1 基礎(chǔ)必考題清單與答題框架以下幾類題目B站三面技術(shù)面里都高頻出現(xiàn)而且完全可以提前準(zhǔn)備不需要考場硬想并發(fā)與線程這類題目答題框架要覆蓋四個(gè)層次定義層面、實(shí)際應(yīng)用場景層面、底層原理層面、選型對(duì)比層面。比如“進(jìn)程和線程的區(qū)別”先給教科書定義再給實(shí)際場景瀏覽器多進(jìn)程為什么比多線程穩(wěn)定再講線程切換的代價(jià)來源內(nèi)核態(tài)到用戶態(tài)的切換最后說什么時(shí)候用進(jìn)程、什么時(shí)候用線程。分布式一致性這類題目要圍繞三個(gè)關(guān)鍵詞講一致性模型強(qiáng)一致、最終一致、共識(shí)算法Raft、Paxos、實(shí)際工程方案分布式事務(wù)、消息補(bǔ)償。B站業(yè)務(wù)里常見的是最終一致性場景所以“本地消息表”“事務(wù)消息”“TCC”這幾個(gè)方案的做法和適用場景要能講清楚。緩存與存儲(chǔ)這類題目重點(diǎn)在“緩存三兄弟”——緩存穿透、緩存擊穿、緩存雪崩。不僅要會(huì)描述問題還要能給出對(duì)應(yīng)的解決方案并且說明每種方案在什么情況下不適用。比如攔截空值能防穿透但如果攻擊者用大量隨機(jī)key布隆過濾器更可靠熱點(diǎn)key過期要靠互斥鎖或邏輯過期處理緩存雪崩要靠過期時(shí)間打散加熔斷降級(jí)。這類基礎(chǔ)題我備考用的方式是“關(guān)鍵詞卡片法”。每個(gè)選題寫一張卡片正面寫題目背面寫答題框架然后隨機(jī)抽自己。抽到之后不看背面先試著答一遍答完再看哪些點(diǎn)漏了。5.2 場景題與代碼題實(shí)戰(zhàn)示例B站的場景題一個(gè)特點(diǎn)是貼近自身業(yè)務(wù)。比如我遇到的題目“B站首頁信息流假設(shè)每天有1000萬用戶訪問你會(huì)怎么設(shè)計(jì)推薦服務(wù)端的數(shù)據(jù)鏈路”我當(dāng)時(shí)的分析分了三層。第一層是數(shù)據(jù)接入用戶行為數(shù)據(jù)打到消息隊(duì)列下游做特征計(jì)算第二層是推薦服務(wù)讀特征、召回、排序、重排、返回結(jié)果第三層是緩存層熱門內(nèi)容緩存、用戶個(gè)性化結(jié)果緩存、兜底策略。面試官追問了兩個(gè)問題“如果個(gè)性化服務(wù)掛了你怎么降級(jí)”“用戶刷新頻率很高你怎么避免重復(fù)計(jì)算”這兩個(gè)追問都指向推薦系統(tǒng)的核心難點(diǎn)——穩(wěn)定性和實(shí)時(shí)性的平衡。能答上來就說明不是背的方案而是真做過。代碼題方面B站考察算法的方式比較常規(guī)基本上集中在LRU緩存、手寫單例、TopK問題、二叉樹遍歷、字符串處理。考察難度我覺得屬于中檔偏上不會(huì)出特別偏門的題但需要你熟悉常見的解題套路。唯一的建議是寫代碼前先跟面試官說思路寫的時(shí)候注意變量命名和邊界條件寫完后主動(dòng)講復(fù)雜度。這些細(xì)節(jié)都是加分項(xiàng)。5.3 反問環(huán)節(jié)別浪費(fèi)這個(gè)展示機(jī)會(huì)面試最后面試官大概率會(huì)問“你有什么想問我的嗎”。很多人直接說“沒有”這是在浪費(fèi)最后的機(jī)會(huì)。反問環(huán)節(jié)是一個(gè)展示你思考深度的窗口也是你反向了解團(tuán)隊(duì)的機(jī)會(huì)。我的建議是準(zhǔn)備三個(gè)層次的問題關(guān)于技術(shù)方向“團(tuán)隊(duì)目前技術(shù)規(guī)劃上最看重的是什么方向”這個(gè)問題能讓面試官覺得你對(duì)自己未來的技術(shù)發(fā)展有規(guī)劃。關(guān)于業(yè)務(wù)挑戰(zhàn)“這個(gè)崗位未來半年最大的挑戰(zhàn)是什么”這個(gè)問題能讓面試官覺得你關(guān)心業(yè)務(wù)而非只是養(yǎng)家糊口。關(guān)于團(tuán)隊(duì)氛圍“團(tuán)隊(duì)內(nèi)部的代碼評(píng)審和架構(gòu)評(píng)審機(jī)制是怎么運(yùn)作的”這個(gè)問題能幫你判斷這個(gè)團(tuán)隊(duì)的技術(shù)文化是否適合自己。不要問“我表現(xiàn)得怎么樣”“接下來還有幾輪”這類問題這些問題只會(huì)暴露焦慮而且面試官也不好回答。反問環(huán)節(jié)全程控制在五分鐘左右問兩到三個(gè)問題就足夠了。6. 面試中踩過的坑這幾點(diǎn)教訓(xùn)希望你提前看到6.1 簡歷與面試實(shí)際內(nèi)容的一致性第一輪面試結(jié)束之后我的一個(gè)強(qiáng)烈感受是面試官的問題92%都來自簡歷本身。我復(fù)盤了一下面試中幾乎每一個(gè)深挖的問題都能追溯到簡歷里的某一句話、某一個(gè)數(shù)字、某一項(xiàng)技能。所以準(zhǔn)備面試最大的一個(gè)功課不是刷題而是把簡歷上的每一個(gè)字都重新“咀嚼”一遍。我給自己的要求是簡歷里出現(xiàn)的每一個(gè)技術(shù)名詞都要能說出它的底層原理、應(yīng)用場景、優(yōu)缺點(diǎn)每一個(gè)項(xiàng)目數(shù)字都要能說出它的測量方法、采集工具、優(yōu)化過程。這項(xiàng)工作很瑣碎但回報(bào)率極高。你可以找朋友或者同事充當(dāng)面試官專門就著簡歷提問直到每一個(gè)角落都被覆蓋到。有一個(gè)特別容易犯的錯(cuò)簡歷里寫了“熟悉Java并發(fā)編程”面試官問你“volatile和synchronized的區(qū)別”你答上來了但是追問“volatile能不能保證原子性”你卻猶豫了。這個(gè)猶豫不代表你能力不行但它暴露了簡歷措辭和實(shí)際深度之間的差距。所以寫簡歷的時(shí)候?qū)幙砂选熬ā备某伞笆煜ぁ卑选笆煜ぁ备某伞傲私狻币惨WC寫出來的每一項(xiàng)能扛住兩輪追問。6.2 面試節(jié)奏失控回答問題太長其實(shí)是減分項(xiàng)我一面的時(shí)候踩了一個(gè)坑就是在回答“Redis緩存穿透怎么解決”的時(shí)候一下子從布隆過濾器講到緩存擊穿再從緩存擊穿講到緩存雪崩把三個(gè)概念全倒出來了。面試官聽完笑了笑說“我知道這三個(gè)的區(qū)別你只需要回答穿透的方案就行”。這個(gè)教訓(xùn)是面試回答問題先給結(jié)論再給理由控制在一到兩分鐘以內(nèi)。如果你啰啰嗦嗦講五分鐘面試官不僅抓不住重點(diǎn)還會(huì)覺得你缺乏提煉能力。更好的做法是“金字塔式回答”先說核心答案然后展開理由最后補(bǔ)充細(xì)節(jié)。面試官對(duì)哪個(gè)點(diǎn)感興趣自然會(huì)繼續(xù)追問你不需要把所有知道的東西一次性倒出來。6.3 別在面試中否定上一家公司或前同事我身邊真有朋友在面試B站的時(shí)候因?yàn)橥虏矍肮尽凹夹g(shù)老舊”“管理混亂”“同事不配合”而被掛了。雖然B站文化整體偏包容但這個(gè)動(dòng)作在任何公司的社招面試中都是大忌。面試官聽到的都是“這是你怎么處理問題的方式”的潛在信號(hào)。你說前司不行他會(huì)擔(dān)心你入職之后遇到困難也會(huì)用同樣方式處理。我的建議是所有關(guān)于前司的描述都盡量用中性、客觀、就事論事的表達(dá)。比如“之前的技術(shù)棧偏傳統(tǒng)我在那邊接觸大規(guī)模分布式系統(tǒng)的機(jī)會(huì)比較少”就比“那邊技術(shù)太落后了”好聽一百倍。7. 個(gè)人經(jīng)驗(yàn)和最終建議拿到offer之后我復(fù)盤了一下整個(gè)流程有一個(gè)特別深的感觸B站社招考察的本質(zhì)上不是你的技術(shù)廣度而是你做事的完整度。一個(gè)候選人哪怕技術(shù)棧沒那么“新潮”只要他對(duì)自己做過的項(xiàng)目有完整閉環(huán)的理解——背景是什么、方案怎么選的、數(shù)據(jù)怎么驗(yàn)證的、上線后怎么運(yùn)維的——面試評(píng)價(jià)通常都不會(huì)差。反過來光會(huì)背八股、簡歷里堆一堆中間件但是經(jīng)不起追問基本會(huì)被刷得很慘。另一個(gè)建議是面試前一定給自己留出至少兩周的整塊時(shí)間做針對(duì)性的準(zhǔn)備。第一周用來重讀簡歷、整理項(xiàng)目細(xì)節(jié)、做技術(shù)深度梳理第二周用來專門刷高頻題、模擬系統(tǒng)設(shè)計(jì)、找人做模擬面試。臨時(shí)抱佛腳可以在短時(shí)間里記住很多知識(shí)點(diǎn)但應(yīng)對(duì)深挖型面試遠(yuǎn)遠(yuǎn)不夠。最后分享一個(gè)小技巧面試前我會(huì)把B站的核心功能產(chǎn)品界面都打開用一遍從首頁推薦到彈幕互動(dòng)到創(chuàng)作中心邊用邊在腦子里過“這個(gè)功能背后的技術(shù)挑戰(zhàn)是什么”。這個(gè)動(dòng)作幫我建立了產(chǎn)品直覺和技術(shù)直覺的連接在回答業(yè)務(wù)類問題時(shí)特別有用。你如果也想沖B站建議從今天開始就養(yǎng)成這個(gè)習(xí)慣。準(zhǔn)備面試的這一個(gè)月很辛苦但拿到了心儀的offer回頭看一切都值。祝你在面經(jīng)的加持下也能“可帶勁了”一把。