經(jīng)驗)
1. 面試前的準備工作信息收集、簡歷打磨與知識體系梳理說實話決定投這幾家之前我猶豫了很久。網(wǎng)上關于大廠面經(jīng)的帖子很多但大多只堆砌面試題很少有人講清楚每一輪面試官到底在考察什么。這次親身經(jīng)歷完網(wǎng)易、美團、頭條、百度四家的完整面試流程我想把整個過程做一次深度復盤從準備階段到每一輪的追問細節(jié)再到算法題和手寫題的實戰(zhàn)記錄都盡可能還原出來。先說準備工作。我在投遞簡歷前花了大概兩周時間做三件事梳理自己的項目經(jīng)歷、整理前端知識體系、刷算法題。這三件事的順序很重要很多人上來就刷題結果項目經(jīng)歷講不清楚反而被面試官追問到漏洞百出。項目經(jīng)歷梳理是重中之重。以我當時的做法為例我把做過的最有代表性的項目寫成了STAR結構背景、任務、行動、結果。每個項目準備三個版本的講述——1分鐘精簡版、5分鐘完整版、10分鐘深度版。1分鐘版本用于自我介紹和面試開場5分鐘版本用于面試官問“介紹一下你最近的項目”10分鐘版本用于被深挖細節(jié)時的現(xiàn)場發(fā)揮。這里有個很關鍵的細節(jié)10分鐘版本里一定要埋伏一些你希望面試官追問的點主動把面試節(jié)奏引向你熟悉的方向。知識體系梳理我分成了四個方向JavaScript語言基礎與進階、瀏覽器與網(wǎng)絡原理、框架原理與工程化、數(shù)據(jù)結構和算法。這四個方向正好對應了我在四家公司面試中最常被考察的范圍后面會逐一展開。簡歷方面也想多說一句。我見過太多人把簡歷寫得像技能清單列出十幾項技術??雌饋硎裁炊紩嶋H上面試官隨便挑一項深問就露怯。正確的做法是只列自己真正深入用過的技術并且每項技術都要準備好“在什么場景下用了、解決了什么問題、有沒有對比過其他方案”這三個問題的答案。我把簡歷投出去之前專門找了一位做技術招聘的朋友幫我把關他給了個很實在的建議簡歷里每個技術點都要能對應到一個具體業(yè)務場景否則就別寫。算法題部分我用的策略是分類刷題而不是按題庫順序刷。數(shù)組、字符串、鏈表、二叉樹、動態(tài)規(guī)劃、貪心、回溯、棧與隊列、堆、哈希表每個分類先刷經(jīng)典題再刷變形題。四家面試下來我的感受是頭條的算法題數(shù)量最多、難度最高百度也很看重算法基礎網(wǎng)易和美團的算法題相對溫和但會更偏向實際業(yè)務場景這個細節(jié)后面具體講。2. 網(wǎng)易從項目深坑到業(yè)務思考的連環(huán)追問網(wǎng)易的面試流程總共四輪前三輪技術面最后一輪HR面。整體節(jié)奏比較緊湊一面到三面在兩周內(nèi)完成HR面之后第三天就收到了offer溝通電話。2.1 一面基礎能力摸底與項目真實性驗證網(wǎng)易的一面是我所有面試中體驗最好的一場面試官很年輕全程沒有居高臨下的感覺。開場先讓我自我介紹然后直接進入項目深挖。我提到一個基于React的復雜表單系統(tǒng)面試官連續(xù)追問了將近四十分鐘幾乎把每個實現(xiàn)細節(jié)都問遍了。他問的問題我到現(xiàn)在還記得很清楚。第一個是“React的setState到底是同步還是異步”這個問題看著簡單但真正要答好需要把React的批處理機制講透。我當時的回答是先給出結論在React事件處理函數(shù)中是異步的在原生事件、setTimeout等場景下是同步的然后解釋React 18之前通過isBatchingUpdates變量判斷是否批處理React 18之后用自動批處理統(tǒng)一了行為。面試官接著追問“那為什么React要設計成這種看起來不一致的行為”這個問題考察的是對設計意圖的理解我從減少渲染次數(shù)、保持狀態(tài)一致性、Fiber調(diào)度機制三個角度回答面試官點頭表示認可。接著他問了虛擬DOM的diff算法這個問題我準備得很充分從tree diff到component diff再到element diff逐層展開重點講了key的作用以及為什么遍歷子節(jié)點時要盡量避免使用index作為key。這里有個小插曲面試官問“如果子節(jié)點列表最前面插入一個新節(jié)點用index做key會有什么問題”我舉例說明后他又追問“那你覺得應該怎么優(yōu)化”我把我在實際項目中用穩(wěn)定id作為key的經(jīng)驗講了一遍順帶還提到了對列表項做唯一標識的實踐方案。一面還有一個很有意思的環(huán)節(jié)面試官給我看了一段有性能問題的代碼讓我現(xiàn)場分析并優(yōu)化。這段代碼的問題很典型在for循環(huán)里操作DOM、頻繁讀取offsetWidth導致強制同步布局。我指出問題后面試官讓我寫出優(yōu)化后的版本我用文檔片段加批處理的方式重寫了一遍然后解釋為什么這樣能減少reflow。這種“現(xiàn)場分析改寫”的考察方式比單純背知識點有用得多它測試的是真實工程能力而不是記憶能力。一面最后十分鐘是讓我反問我問了團隊的技術棧和業(yè)務方向。這里多說一句反問環(huán)節(jié)千萬別問沒營養(yǎng)的問題比如“公司加班多嗎”“年終獎多少”這種可以留到HR面再問。技術面反問環(huán)節(jié)適合問團隊技術挑戰(zhàn)、技術規(guī)劃、協(xié)作方式這類問題既體現(xiàn)你的技術熱情也能幫你判斷這個團隊是否適合自己。2.2 二面業(yè)務思考與技術選型的權衡能力二面的面試官是技術主管開場沒有讓我自我介紹而是直接問了一個場景題如果讓你設計一個IM系統(tǒng)的消息列表你會怎么考慮技術方案。這個問題沒有標準答案考察的是綜合設計能力和業(yè)務理解深度。我當時的回答思路是先拆分需求消息列表的維度、排序規(guī)則、分頁方案、未讀數(shù)處理、信令來源。然后根據(jù)需求選型聊到了WebSocket連接管理、消息隊列、本地緩存、虛擬列表。面試官在每個方案后面都會追問一句“為什么”比如“為什么用虛擬列表”“消息隊列為什么選這個”“斷線重連怎么處理”。這些問題看著是技術問題實際上在考察你是否真的理解每個技術選型背后的權衡。這里有個我踩過的坑想重點提醒回答技術選型問題時千萬不要只說優(yōu)點一定要主動講這個方案的局限性和適用邊界。我在聊虛擬列表的時候主動說到了滾動定位精度問題和動態(tài)高度估算的難點面試官明顯興趣更大繼續(xù)追問了如何解決這些問題。這就是前面提到的“埋伏點”技巧的具體運用——你主動提出一個有深度的問題面試官大概率會順著追問而這個問題往往是你準備最充分的。二面還問到了前端工程化相關的內(nèi)容webpack的構建優(yōu)化方案、vite和webpack的差異、微前端方案的選型。這些內(nèi)容我都有實際項目經(jīng)驗支撐回答起來比較順手。webpack優(yōu)化我從按需加載、代碼分割、tree-shaking、緩存策略、多進程構建幾個層面展開并且結合了我實際項目中構建時間從40秒降到8秒的案例。2.3 三面與HR面綜合素質的最后把關三面是交叉面面試官是其他團隊的負責人問題跨度明顯變大從技術問題跳到了職業(yè)規(guī)劃、團隊協(xié)作、帶人經(jīng)驗、技術影響力建設。他問了一個讓我印象很深的問題“如果團隊里有個同事的技術水平明顯比你低但每次都是他拿高分績效你會怎么想?!边@個問題考察的是團隊協(xié)作心態(tài)和情商我當時的回答是先肯定同事的優(yōu)勢再反思自己的不足最后說我會主動學習他的優(yōu)點同時也在自己擅長的領域分享經(jīng)驗共同進步。HR面相對輕松主要問離職原因、期望薪資、職業(yè)規(guī)劃、工作地偏好。這里有個建議HR面千萬別繞彎子期望薪資直接報數(shù)字同時說明這個數(shù)字的參考依據(jù)。我當時報了期望范圍后HR追問“為什么是這個區(qū)間”我給出了市場行情、個人能力、崗位職責三個維度的依據(jù)溝通效率很高。網(wǎng)易的整體面試風格總結下來就是一面重基礎和項目真實性驗證二面重業(yè)務思考和技術選型權衡三面重綜合素質HR面務實高效。面試題整體難度適中最看重的是候選人能否把技術方案講清楚以及是否理解技術選型背后的業(yè)務邏輯。3. 美團基礎八股之外的工程實踐深度考察美團一共四面一輪技術面、二輪技術面、一輪交叉面、一輪HR面技術面的深度和廣度都超出了我預期。如果說網(wǎng)易更看重業(yè)務思考那美團更看重候選人有沒有真實踩過線上問題的坑。3.1 一面瀏覽器原理與線上問題排查思路美團一面有個鮮明的特點就是喜歡從線上真實問題出發(fā)倒推考察點。面試官開場問了一個場景線上頁面白屏你作為前端負責人怎么排查。這題我在別的公司面試時也遇到過但美團面試官問得更細他會追問“你說是JS報錯導致的怎么確認”“如果是CSS導致的白屏如何定位”“CDN資源加載失敗怎么判斷”“后端接口返回異常如何聯(lián)動處理”。這個層層追問的過程面試官實際在考察的是你對瀏覽器渲染原理、網(wǎng)絡請求鏈路、性能監(jiān)控體系掌握的顆粒度。我從控制臺Network面板看資源加載狀態(tài)、Source面板斷點定位、Performance面板看渲染時間線、Sentry錯誤日志回溯四個方向回答面試官順著我的回答追問了幾個細節(jié)包括瀏覽器從輸入URL到頁面渲染完成的完整過程以及這個過程中哪些環(huán)節(jié)會導致白屏。瀏覽器渲染流程是美團特別喜歡考察的點面試官讓我完整講了一遍DNS解析、TCP連接、TLS握手、HTTP請求、HTML解析構建DOM樹、CSS解析構建CSSOM、合并成渲染樹、布局、繪制、合成。講完之后他追問了幾個細節(jié)JavaScript解析會阻塞DOM構建但為什么async和defer策略能減少阻塞CSS會不會阻塞DOM構建重排和重繪在什么情況下觸發(fā)。這些問題我在實際做性能優(yōu)化時都遇到過所以答得比較穩(wěn)。美團一面的算法題是經(jīng)典的“輸出二叉樹層序遍歷結果”難度適中主要考察隊列這個數(shù)據(jù)結構的掌握程度。答題過程中面試官要求我用白板寫代碼并且要邊寫邊講思路。這種邊寫邊講的方式建議平時就養(yǎng)成習慣因為面試時突然被要求表達會很緊張?zhí)崆熬毩暷苡行Ь徑狻?.2 二面框架原理與工程化架構設計二面深度進入框架內(nèi)核面試官問了React fiber架構的實現(xiàn)原理、React渲染流程、diff算法、狀態(tài)管理方案選型。這些問題里讓我印象最深的是“React fiber架構解決了什么問題”我回答時需要說清楚React舊版遞歸渲染會阻塞主線程fiber架構把渲染任務拆分成可中斷的小任務配合優(yōu)先級調(diào)度機制實現(xiàn)時間切片從而提升復雜應用的響應性。面試官接著追問了“concurrent mode下怎么保證狀態(tài)一致性”“useEffect和useLayoutEffect的區(qū)別”“useMemo和useCallback的正確使用場景”。這些問題看著基礎但深挖之后會發(fā)現(xiàn)對React調(diào)度機制理解不透的話很難答深。我建議準備React面經(jīng)時一定要把“從setState到頁面更新完成整個過程發(fā)生了什么”這個問題徹底搞懂這是React面試的核心中的核心。美團二面還考察了前端架構設計面試官給了一個微前端改造場景多個業(yè)務團隊共用一套基座需要隔離樣式和腳本同時又要共享公共依賴你會怎么設計。這個問題我給出一套基于基座應用加載子應用的方案詳細說明路由分發(fā)、沙箱隔離、公共依賴加載、樣式隔離、通信機制五個方面。面試官追問了JS沙箱的實現(xiàn)原理我舉例講解了withProxy攔截全局變量、快照沙箱、LegacySandbox三種方案的區(qū)別和適用場景。3.3 交叉面與HR面工程價值觀的匹配交叉面考察的主要是候選人解決問題的思路。面試官問了一個很有意思的問題“如果讓你負責把一個老項目的技術棧從jQuery升級到React你會怎么做?!边@個問題沒有絕對正確的答案考察的是風險控制、漸進式改造和團隊協(xié)作意識。我的方案是先用微前端模式新老并行然后逐個模塊遷移、上線、驗證最后切流量面試官對方案的整體思路表示認可。美團HR面問的問題比較具體包括為什么選擇美團、了解美團哪些業(yè)務、能接受的加班強度、職業(yè)規(guī)劃等。這里想說一個細節(jié)HR面提到的“能接受的加班強度”問題回答時不要直接說“我可以接受996”也不要反問“你們加班多少”比較務實的說法是“我關注的是工作質量和產(chǎn)出效率在項目沖刺期加班沒問題但希望平時工作節(jié)奏合理”這樣既表達了態(tài)度也不會把自己放在不利位置。美團的整體面試風格是重工程落地、重線上真實問題、重架構設計思維面試官普遍技術功底扎實問題追問得很細很密適合有真實項目經(jīng)驗并且認真思考過工程問題的候選人。4. 頭條算法強度拉滿的極限挑戰(zhàn)頭條的面試流程是五輪四輪技術面加一輪HR面其中三輪面試都有現(xiàn)場寫算法題環(huán)節(jié)總體難度是我經(jīng)歷的所有面試中最高的。頭條的面試節(jié)奏也很快前后一周多就面完了全部輪次。4.1 一面高頻面試題與手寫題的組合拳頭條一面開場就是兩道手寫題第一道是手寫防抖函數(shù)和節(jié)流函數(shù)要求現(xiàn)場運行驗證結果。這道題看著簡單但真正實操時會發(fā)現(xiàn)很多細節(jié)防抖的this指向問題、參數(shù)透傳、立即執(zhí)行選項。我寫完后面試官追問“防抖和節(jié)流的應用場景怎么區(qū)分”我用搜索框輸入和滾動加載這兩個場景解釋了一遍。第二道手寫題是手寫深拷貝要求處理循環(huán)引用。這道題我提前準備了map標記循環(huán)引用的版本但面試官繼續(xù)追問“Date、RegExp、Map、Set這些特殊對象怎么處理”“Symbol和函數(shù)類型怎么處理”“如何拷貝不可枚舉屬性和原型鏈”。問到這里考察的已經(jīng)不只是深拷貝本身而是對JavaScript對象體系的整體掌握程度。我把每種類型都做了針對性處理面試官看完后評價“考慮得比較全面”。頭條一面的算法題是“合并兩個有序鏈表”和“兩數(shù)之和”兩道都是LeetCode經(jīng)典題但要求手寫完整代碼并通過測試用例。這里有個重要的建議頭條的在線編輯器支持運行測試用例寫之前一定要先想清楚邊界條件再看測試不要直接埋頭寫代碼。我實際做題時先列了空鏈表、單元素鏈表、同值鏈表三種邊界測試用例寫完代碼再逐個驗證不僅效率高也給面試官留下嚴謹?shù)挠∠蟆?.2 二面算法主戰(zhàn)場與源碼級追問二面是算法題的集中爆發(fā)期。面試官一共出了三道題第一道是版本號比較要求實現(xiàn)類似compareVersion的功能輸入“1.2”和“1.10”返回-1。題目本身不復雜但考察了字符串處理和數(shù)組遍歷的編碼功底我特別處理了長度不等的版本號和前導零的情況。第二道是“最大子數(shù)組和”經(jīng)典的動態(tài)規(guī)劃問題我用一維DP數(shù)組實現(xiàn)后面試官追問問了“能否優(yōu)化空間復雜度到O(1)”我改成滾動變量版本后他繼續(xù)追問“如果數(shù)組可以循環(huán)怎么處理”。這種連續(xù)變體考察方式很考驗對算法本質的理解不能只背解法要清楚解法為什么有效以及如何泛化。第三道算法題是“三數(shù)之和”要求找出所有和為目標值的三個數(shù)組合。這道題的時間復雜度優(yōu)化和去重處理是核心考點我從暴力解法講到雙指針解法說明時間復雜度如何從O(n^3)優(yōu)化到O(n^2)面試官對思路比較滿意。頭條二面除了算法題以外還追問了很多源碼級問題比如“Vue的響應式原理和React的setState機制有什么區(qū)別”“v8引擎的垃圾回收機制是怎么工作的”“事件循環(huán)中的微任務和宏任務執(zhí)行順序”。這些問題都需要對底層原理有深入理解臨時背答案很容易被追問漏。4.3 三面與四面系統(tǒng)設計與開放性思考三面?zhèn)戎叵到y(tǒng)設計給了一個場景設計一個網(wǎng)頁版在線文檔系統(tǒng)支持多人同時編輯客戶端需要實時同步內(nèi)容。我給出了基于WebSocket的協(xié)同編輯方案同時分析了OT算法和CRDT算法在協(xié)同編輯領域的區(qū)別面試官聽完后追問了網(wǎng)絡斷線恢復、內(nèi)容沖突解決、性能優(yōu)化三個方向這場面試耗時近一個小時是我所有面試中強度最大的一場。四面是技術終面面試官是部門負責人沒有單獨出題而是結合我的項目經(jīng)歷聊了一個多小時。他問的問題非常開放“如果讓你從零搭建一個前端團隊你會怎么做”“你覺得好的技術方案和好的業(yè)務增長之間是什么關系”。這些問題沒有標準答案考察的是技術判斷力和商業(yè)思維。我的經(jīng)驗是回答這類問題不要急著給結論先拆解問題、給出思考框架、再用具體案例說明這種“框架案例”的回答方式在開放性問題上特別有效。4.4 頭條面試的總特點頭條面經(jīng)網(wǎng)上很多但親身經(jīng)歷后我的感受是面試題量大、難度高、節(jié)奏快對算法能力和底層原理掌握程度要求極高尤其看重白板coding和現(xiàn)場思考能力。如果打算面頭條建議在LeetCode上把高頻題刷透尤其是雙指針、動態(tài)規(guī)劃、鏈表操作、二叉樹遍歷這幾類同時把手寫Promise、防抖節(jié)流、深拷貝、數(shù)組去重這類JavaScript手寫題練到條件反射的程度。5. 百度偏重技術廣度與原理刨根的全面考察百度的面試流程是三輪技術面加一輪HR面整體風格偏學院派面試官對原理的刨根問底程度在四家中最高幾乎每個技術點都要問到“為什么這樣設計”。5.1 一面JavaScript語言基石與瀏覽器機制百度一面開場就問了一個非常基礎但容易答不深的問題“說說JavaScript的數(shù)據(jù)類型以及typeof null為什么是object”。這個問題的關鍵在于解釋JavaScript語言設計的背景和早期實現(xiàn)的bug我回答時說這是JavaScript第一版設計時的遺留問題typeof null返回object是因為底層用32位存儲類型信息而null的類型標簽恰好是000面試官直接追問“JavaScript內(nèi)部用什么數(shù)據(jù)結構存儲對象屬性”這個問題一下子帶到了V8引擎層面。我一口氣講了V8用隱藏類和描述符數(shù)組來優(yōu)化對象屬性訪問的過程以及為什么刪除屬性會導致隱藏類失效。面試官聽完明顯來了興趣繼續(xù)問“Map和Object有什么本質區(qū)別”“Set和數(shù)組有什么區(qū)別”。這幾個問題串起來之后我才反應過來面試官是在考察我對JavaScript語言特性背后設計原因的理解而不是簡單的API背誦。百度一面還比較系統(tǒng)地考察了瀏覽器緩存機制強緩存和協(xié)商緩存的各種字段、優(yōu)先級、適用場景。這個問題我用一個實際案例講解我負責的項目中靜態(tài)資源使用Cache-Control: max-age31536000做長期緩存配合文件名hash實現(xiàn)精準更新HTML頁面使用no-cache保證每次請求都經(jīng)過服務器驗證。面試官追問“如果用戶線上出現(xiàn)了拿到舊版本資源的問題你會怎么排查”我回答先看響應頭確認緩存策略再看URL是否帶hash再看服務器配置最后看瀏覽器是否有磁盤緩存殘留。5.2 二面框架原理、性能優(yōu)化與設計模式百度二面開始時面試官先問了一個宏觀問題React、Vue、Angular這三種主流框架在設計哲學上有什么區(qū)別。這個問題考察的是對框架本質的理解而不是API使用熟練度。我從數(shù)據(jù)驅動視圖的實現(xiàn)方式、模板語言和JSX的設計選擇、響應式更新機制三個維度展開說明三種框架各自的設計取舍。面試官追問“為什么React最終沒有選擇模板語法而選擇了JSX”我提到了React團隊對javascript表達力、靜態(tài)分析、組件組合三個方面的考量。性能優(yōu)化是百度二面的重要主題。面試官問“前端性能優(yōu)化的手段有哪些”這個問題如果只羅列手段會顯得很散我按加載性能、渲染性能和運行時性能三個層次組織答案加載性能包括資源壓縮、CDN加速、HTTP緩存、按需加載渲染性能包括減少重排重繪、虛擬列表、骨架屏運行時性能包括避免內(nèi)存泄漏、防抖節(jié)流、Web Worker處理復雜計算。每一條我都配上了實際案例和優(yōu)化前后的數(shù)據(jù)對比讓面試官能直觀感受到優(yōu)化的成效。百度二面還考察了設計模式在前端中的應用面試官問“你平時在項目中用過哪些設計模式解決什么問題”。我列舉了觀察者模式用于事件機制、策略模式用于表單校驗、裝飾器模式用于高階組件、單例模式用于全局狀態(tài)管理、工廠模式用于組件創(chuàng)建等每個模式都結合了具體場景。面試官沒有繼續(xù)深挖設計模式本身而是通過了幾個場景題考察我能否把設計原則應用到實際問題中。百度的算法題難度也很高當場出了兩道Linked List和樹的題目。鏈表題是反轉鏈表的多種解法要求寫出迭代和遞歸兩個版本并分析各自的空間復雜度樹題是驗證二叉搜索樹要求實現(xiàn)中序遍歷并判斷是否有序。這兩道題我都答得比較流暢準備充分是關鍵。5.3 三面與項目深度拷問百度三面是leader面沒有準備時的八股題核心就一個主題深挖項目。面試官對我簡歷上寫的一個高并發(fā)場景項目進行了將近50分鐘的連續(xù)追問從項目背景、技術選型、架構設計、上線效果到遇到的最大挑戰(zhàn)、如何定位問題、怎么設計兜底方案再到如果重新設計你會怎么做。這個過程中有幾個追問我記憶深刻。面試官問“你們用了消息隊列如果消息重復消費了怎么辦”我回答使用消息冪等方案通過唯一標志做去重并說明如何設計唯一標志和去重邏輯。他接著問“消息積壓嚴重時怎么應對”我給出了水平擴容消費者、臨時隊列方案、降級處理三種手段。通過這些追問我能感覺到百度技術面非常重視候選人有沒有真正經(jīng)歷過高復雜度的項目而不只是做過demo級別的應用。三面最后面試官問我“如果給你一個完全陌生領域的技術課題你會怎么快速上手”我回答會先做四步看官方文檔建立整體認知、找社區(qū)高質量資料理解設計思想、搭最小可運行demo驗證理解、再回到官方文檔補細節(jié)看源碼驗證。面試官點頭認可然后進入HR面。百度HR面相對簡潔主要確認了薪資期望、到崗時間、業(yè)務偏好沒有太多壓力問題。百度四輪下來我的整體感受是技術深度要求極高尤其看重對原理的理解和項目的真實復雜度需要候選人沉下心做過深入鉆研。6. 四廠算法題與手寫題的橫向復盤與備考建議面完四家后我把所有遇到的算法題和手寫題做了橫向對比整理成了下面這個表格希望能幫到正在準備的人公司算法題數(shù)量主要題型手寫題書寫環(huán)境網(wǎng)易1道字符串/數(shù)組類性能優(yōu)化代碼改寫??途W(wǎng)在線編輯器美團2道二叉樹、動態(tài)規(guī)劃場景題代碼實現(xiàn)視頻面試共享白板頭條6道鏈表、數(shù)組、動態(tài)規(guī)劃、系統(tǒng)設計Promise、防抖節(jié)流、深拷貝自研在線IDE可運行測試百度3道鏈表、二叉樹、雙指針手寫代碼并分析復雜度視頻面試共享白板6.1 最高頻的手寫題與滿分模板四家面試中反復出現(xiàn)的手寫題就那幾個深拷貝、防抖節(jié)流、Promise.all、數(shù)組去重、new操作符實現(xiàn)、instanceof實現(xiàn)。我建議不要背答案而是理解每個題目背后的設計意圖。以Promise.all為例面試官不是要你默寫代碼而是考察你對Promise狀態(tài)流轉、錯誤處理、邊界條件的理解深度。我把自己總結的Promise.all寫法分享出來幾個關鍵點分別是返回新Promise、內(nèi)部用數(shù)組順序保存結果、如果傳入非Promise值要直接通過resolve包裹、任何一個reject都會導致整體reject、空數(shù)組直接resolve。再加上錯誤處理邏輯基本就是滿分答案。建議把??际謱戭}按照同樣的方式拆解成“關鍵點實現(xiàn)思路邊界情況”三部分比逐行背代碼有效得多。6.2 算法題備考的優(yōu)先級策略分析完四家公司的算法題后我用一句話總結備考策略鏈表、二叉樹、數(shù)組、動態(tài)規(guī)劃四類必刷哈希表、雙指針是??拓澬?、回溯也要熟悉。頭條和百度算法題難度最高建議目標這兩家的同學把LeetCode高頻題刷到250題以上并且每道題都要能說出時間復雜度和空間復雜度。還有一個容易被忽視的點在線IDE和視頻共享白板書寫體驗完全不同。??途W(wǎng)的在線IDE有自動補全和運行測試能力而視頻面試的共享白板只能手寫、不能運行。建議提前用不含自動補全的編輯器模擬白板環(huán)境練習手寫代碼的流暢度和代碼整潔度。6.3 算法題之外的軟實力準備很多人只關注算法題卻忽略了面試中的軟實力表現(xiàn)。我的體會是面試官其實會觀察候選人的解題過程是不是先分析題目、再確認邊界、再寫代碼、最后自測。這套動作比最終代碼是否正確更重要。我實際面試中因為主動分析了時間復雜度和邊界情況多次收到正面反饋。自我介紹也要提前打磨。四家公司面試我都用了同一個結構基本信息、核心技能和代表項目、為什么選擇這家公司。控制在兩分鐘以內(nèi)突出與目標崗位最匹配的經(jīng)歷避免羅列堆砌。7. 面經(jīng)之外時間安排、心態(tài)管理與常見坑最后這部分聊聊面經(jīng)之外的一些內(nèi)容也是網(wǎng)上很少有人系統(tǒng)整理的。如果你正在準備面試或者考慮跳槽這部分內(nèi)容希望能幫你少走彎路。7.1 面試排期的策略與offer節(jié)奏管理四家公司的面試時間如果疊加在一起會非常難管理。我的排期策略是先選擇一到兩家非首選公司作為練兵通過實戰(zhàn)檢驗自己的準備程度再進入首選公司的面試流程。我實際先把美團安排在第一批通過它的面試熟悉了當前環(huán)境下大廠面試的整體風格和自我介紹節(jié)奏再去面頭條和百度時就淡定多了。同時收到多個offer時時間管理壓力會集中在HR面階段。我的建議是不要隱瞞其他offer也不用主動透露具體信息在HR問“目前還有其他流程在走嗎”時誠實回答“在流程中”但不要編造offer數(shù)量誠信是底線。7.2 被追問到不會時的應對框架即使準備再充分也必然遇到不會的問題。我第一次被追問到不會時大腦一片空白硬著頭皮瞎編效果非常差。后來我總結出了一個屬于自己的應對框架先明確告訴面試官“這個方向我確實了解不深”然后用“我目前的理解是”開始回答把自己已知的部分說完最后說“這個問題我記錄一下后續(xù)會去深入研究”。后來我才知道面試官其實更看重的是你面對未知知識時的思路和態(tài)度而不是你真的什么都會。坦誠承認不會再給出基于已有知識的推理過程會讓面試官看到你的學習能力和邏輯能力。7.3 面試復盤的必要性與具體方法每輪面試結束后的24小時內(nèi)我會把所有被問到的問題和我的回答記錄下來。很多細節(jié)如果不及時記錄過兩天就忘了。這個習慣幫我發(fā)現(xiàn)了兩個規(guī)律一是同一家公司的面試官會圍繞簡歷中的某個特定項目反復追問說明他們內(nèi)部會共享上輪面試的記錄二是每輪面試的側重點有明顯差異一面偏基礎后面逐漸深入業(yè)務和架構在準備后續(xù)面試時可以針對性調(diào)整重點。復盤的具體方法把面試問題分成會答、答得模糊、完全不會三類。會答的不用管答得模糊的內(nèi)容當天就查資料弄懂完全不會的內(nèi)容根據(jù)問題主題系統(tǒng)性學習。這個方法讓我在連續(xù)多輪面試中的表現(xiàn)越來越穩(wěn)定。7.4 心態(tài)管理經(jīng)驗面試周期短則兩周長則一個多月心態(tài)波動是正常的。我經(jīng)歷了一個很有意思的心態(tài)變化早期面試特別緊張總覺得面試官在考我后來我把角色轉換了一下把面試當成一次技術交流面試官是在和我討論一個共同感興趣的議題我是去分享經(jīng)驗和想法的而不只是去做題。這個心態(tài)轉變后表達的松弛感和邏輯清晰度都明顯提升了。最后想說的是面經(jīng)永遠是別人的適合自己的面試節(jié)奏和表達方式需要自己通過實踐打磨出來。我寫這篇內(nèi)容不是想說“照這樣做就能進大廠”而是希望把你可能遇到的問題提前攤開來看讓你在實際面試時多一分從容。祝面試順利。