試KMP到手撕代碼與AI考點(diǎn))
2024年華為算法工程師面試的熱度一直很高網(wǎng)上流傳的“面經(jīng)”五花八門但大部分都停留在“我遇到了一道什么題”的層面很少有人能把整個面試邏輯、算法考察重點(diǎn)、機(jī)試規(guī)則講透。這篇文章不打算做題庫搬運(yùn)工而是圍繞華為算法崗面試這條主線把流程、機(jī)試真題、手撕代碼、OD特殊情況、AI方向考點(diǎn)這些真正決定成敗的細(xì)節(jié)拆開講清楚。內(nèi)容不是標(biāo)準(zhǔn)答案集更像是我把過去一年聽來的、看來的、自己實(shí)戰(zhàn)過的面試信息做了重新梳理希望對正在備戰(zhàn)華為算法崗的朋友有參考價值。1. 華為2024算法崗面試到底在面什么1.1 一個完整的面試流程是怎樣的華為算法工程師的面試流程在2024年基本穩(wěn)定為在線機(jī)試通常是??途W(wǎng)或華為OJ系統(tǒng)→ 性格測試/綜合測評 → 兩輪技術(shù)面 → 主管面 → HR面整體節(jié)奏偏快但前置篩選非常硬核。機(jī)試不通過后面全是空談這一點(diǎn)從華為OD的外包通道到正式校招崗位都一樣。不過這里有個容易忽略的細(xì)節(jié)算法工程師在華為內(nèi)部的崗位定義非常寬泛。你投的可能叫“算法工程師”但實(shí)際可能做的是通信算法、AI平臺開發(fā)、推薦系統(tǒng)甚至音視頻編解碼里某個模塊的算法優(yōu)化。這就導(dǎo)致面試考題的離散度很大。我在準(zhǔn)備時把華為算法崗粗略分為三類側(cè)重數(shù)據(jù)結(jié)構(gòu)與工程編碼的通用軟件算法崗、側(cè)重機(jī)器學(xué)習(xí)/深度學(xué)習(xí)模型的AI算法崗、側(cè)重通信/信號處理/電源控制等專業(yè)方向的算法崗。不同方向的面試側(cè)重點(diǎn)差異很大但基本功考察是共通的。1.2 算法崗的分流與考察側(cè)重通用軟件算法崗的面試幾乎就是數(shù)據(jù)結(jié)構(gòu)、算法、操作系統(tǒng)、計算機(jī)網(wǎng)絡(luò)的大雜燴。這類崗位對代碼能力要求極高機(jī)試和手撕代碼環(huán)節(jié)的難度甚至不亞于字節(jié)跳動等互聯(lián)網(wǎng)公司的算法崗。AI算法崗則更關(guān)注機(jī)器學(xué)習(xí)理論基礎(chǔ)、深度學(xué)習(xí)框架PyTorch為主、模型部署等手撕代碼的難度相對低一些但問原理會問得很深。通信電源方向的算法崗則特別看重專業(yè)背景比如是否熟悉調(diào)制解調(diào)、濾波器設(shè)計、PID控制等這些崗位的面試官往往會直接問你做過的項目細(xì)節(jié)。我身邊有個朋友面的是華為數(shù)字能源方向的算法崗面試?yán)锞尤槐粏柕健癙ID參數(shù)在CRPS電源模塊中的工程作用”這顯然是業(yè)務(wù)線相關(guān)的專業(yè)問題如果不了解通信電源的背景臨時很難答好。所以準(zhǔn)備華為算法面試第一步不是刷題而是想清楚你投的崗位到底屬于哪個方向。2. 在線機(jī)試這是第一道硬門檻2.1 機(jī)試的題量與分值規(guī)則華為的在線機(jī)試通常在牛客網(wǎng)進(jìn)行正式校招一般3道題OD機(jī)試也類似總分100分左右有些批次是100/200分題各一道或組合。機(jī)試的核心目的是用最少的時間篩選出“代碼真能跑通”的人。題目的難度分布通常是第一道簡單題字符串處理或簡單模擬、第二道中等題數(shù)據(jù)結(jié)構(gòu)應(yīng)用或基礎(chǔ)算法、第三道難題往往涉及動態(tài)規(guī)劃、貪心、圖論或復(fù)雜狀態(tài)搜索。很多第一次參加華為機(jī)試的人會栽在環(huán)境適應(yīng)上。機(jī)試系統(tǒng)用的是類似ACM的判題邏輯輸入輸出格式必須嚴(yán)格匹配多一個空格、少一個換行都可能造成0分。我建議在正式機(jī)試前至少花一周時間在??途W(wǎng)用華為機(jī)試真題模擬練習(xí)重點(diǎn)練兩種能力一是快速讀題并識別考點(diǎn)二是把思路在IDE里用最短時間寫成代碼。2024年部分OD批次還引入了雙機(jī)位監(jiān)控這個后面單獨(dú)說。2.2 真題剖析KMP的next數(shù)組到底怎么算說到機(jī)試和手撕代碼的高頻考題KMP算法絕對排得上號。網(wǎng)上流傳的一道華為真題是對于模式串 pabacaba求其 next 數(shù)組。這道題表面考察KMP實(shí)則考察對字符串前綴后綴理解的熟練度。我先給出基于“失配時最長相等前后綴長度”定義的解法。next[i] 表示 p[0..i] 這個子串中最長相等前后綴的長度。對 pabacabai0子串a(chǎn)沒有真前后綴next[0]0i1子串a(chǎn)b前綴a后綴b不相等next[1]0i2子串a(chǎn)ba前綴a等于后綴a長度1next[2]1i3子串a(chǎn)bac前綴a和后綴c不等再看更長前綴ab與后綴ac也不等next[3]0i4子串a(chǎn)baca前綴a等于后綴anext[4]1i5子串a(chǎn)bacab前綴ab等于后綴abnext[5]2i6子串a(chǎn)bacaba前綴aba等于后綴abanext[6]3。所以 next 數(shù)組為 [0,0,1,0,1,2,3]。但這里有一個非??拥募?xì)節(jié)KMP算法的next數(shù)組在不同的教程里有兩種定義。一種是上面這個“前綴函數(shù)”定義另一種是“失配時模式串指針跳轉(zhuǎn)到的位置”定義這種定義下 next[0]-1而 next[i] 的值等于前一種定義下的 next[i-1]再加上一些偏移處理。如果面試官給的例子和你的定義不一致答案就會不同。我在實(shí)際面試中見過很多候選人卡在這個地方關(guān)鍵不是背答案而是要先問清楚面試官采用的next數(shù)組定義或者在寫代碼前先聲明“我這邊采用最長相等前后綴長度的定義”。這反而會給面試官留下思路嚴(yán)謹(jǐn)?shù)挠∠?。KMP的手撕代碼最好背得滾瓜爛熟包括主串匹配循環(huán)、失配時回退、以及構(gòu)造next數(shù)組的遞推寫法因為面試中常常會要求在10分鐘內(nèi)寫出完整可運(yùn)行的代碼。2.3 機(jī)試必刷的高頻題型除了KMP華為機(jī)試的高頻考點(diǎn)非常固定。我統(tǒng)計了2024年網(wǎng)上流傳的機(jī)試題目大致可以分為幾類第一類是字符串處理題。比如給定一個字符串按規(guī)則壓縮、反轉(zhuǎn)子串、提取數(shù)字并排序。這類題難度不高但極其考驗細(xì)心程度。第二類是數(shù)據(jù)結(jié)構(gòu)應(yīng)用題典型的有表達(dá)式求值、LRU緩存模擬、棧實(shí)現(xiàn)隊列等。第三類是動態(tài)規(guī)劃和貪心題比如最長上升子序列、零錢兌換、區(qū)間調(diào)度這些題往往作為壓軸題出現(xiàn)。第四類是圖論題尤其是單源最短路徑Dijkstra、并查集判斷連通性、拓?fù)渑判蛉A為的機(jī)試真題里偏愛“在網(wǎng)格中找路徑”這類變種題。刷題策略上我的建議是不要盲目追求刷題數(shù)量而是按照“字符串處理→棧隊列→二叉樹→動態(tài)規(guī)劃→圖論基礎(chǔ)”的順序逐步推進(jìn)。先保證簡單題和中等題能穩(wěn)定AC再把精力投向動態(tài)規(guī)劃。因為華為機(jī)試的判分通常按用例通過比例給分哪怕你的代碼只能過部分用例也能拿到部分分?jǐn)?shù)所以“暴力解先寫出來”往往比“完美解沒寫完”更劃算。3. 技術(shù)面手撕代碼真正的分水嶺3.1 手撕代碼環(huán)節(jié)的三個怪現(xiàn)象經(jīng)歷過華為技術(shù)面的同學(xué)大多有一個共同的感受手撕代碼環(huán)節(jié)的觀感比機(jī)試更緊張因為面試官就坐在對面盯著你寫。這個環(huán)節(jié)有三個怪現(xiàn)象第一題目本身往往不難但要求“邊寫邊講”。面試官更想看到的是你的思考路徑而不是默寫代碼。第二面試官會故意打斷你問你“這個變量為什么這么命名”“這個邊界條件你怎么考慮的”。如果你不懂裝懂很容易被追問到露餡。第三代碼寫完后面試官常常會問時間復(fù)雜度和空間復(fù)雜度有時候還會要求你分析最壞情況。有一個比較反常識的經(jīng)驗在寫代碼前花一兩分鐘和面試官確認(rèn)題目要求和邊界條件不僅不會減分反而是加分項。比如面試官讓你“實(shí)現(xiàn)一個LRU緩存”你可以先反問“緩存的容量是固定值嗎如果訪問不存在的key返回-1嗎”這種問題會讓面試官覺得你有工程習(xí)慣而不是一個只會背題的刷題機(jī)器。3.2 高頻手撕代碼題的準(zhǔn)備思路2024年華為算法崗手撕環(huán)節(jié)出現(xiàn)頻率最高的題目我做過一個不完全統(tǒng)計大概有這些類型鏈表反轉(zhuǎn)與合并、二叉樹層序遍歷與最近公共祖先、Top K問題、手寫快排或堆排序、字符串匹配KMP、動態(tài)規(guī)劃求解背包問題或編輯距離、生產(chǎn)者消費(fèi)者模型多線程代碼以及用棧實(shí)現(xiàn)隊列等經(jīng)典題。其中Top K問題值得多說幾句。很多人的第一反應(yīng)是用排序但面試官往往期望聽到“用堆來維護(hù)前K個最大/最小元素”這種O(nlogK)的解更進(jìn)階的還會提到快速選擇算法。如果能把“大數(shù)據(jù)量下Top K的分布式處理思路”也講出來那就非常契合華為這種大數(shù)據(jù)場景多的公司。二叉樹題則一定要掌握遞歸與迭代兩種寫法尤其是迭代寫法因為面試官偏好考察你是否真正理解棧遍歷的過程而不只是會套遞歸模板。編輯距離這道題也反復(fù)出現(xiàn)。它屬于很經(jīng)典的二維動態(tài)規(guī)劃題狀態(tài)轉(zhuǎn)移方程比較好寫但邊界條件容易出錯。我會建議在面試前專門練習(xí)幾個二維DP類型的題目編輯距離、最長公共子序列、最大正方形。這三個題的遞推思想是相通的練熟之后能快速形成肌肉記憶。3.3 從“會寫”到“能講”代碼背后的原理表達(dá)手撕代碼通過后面試官大概率會追問原理。這里我分享一個真實(shí)案例一位朋友面試時被要求寫快排他很快寫完了但面試官問他“快排為什么是不穩(wěn)定的排序算法能不能說一個具體例子”時他卡住了。這個問題不難關(guān)鍵在于“不穩(wěn)定”指的是相同元素的相對順序在排序后可能改變比如數(shù)組 [2, 1, 2]以2為基準(zhǔn)劃分時前后的2可能發(fā)生位置交換。但如果沒有提前想過臨場很容易腦子空白。所以準(zhǔn)備手撕代碼時不能只背代碼還要為每個算法準(zhǔn)備幾個“周邊問題”為什么穩(wěn)定/不穩(wěn)定最好情況和最壞情況的復(fù)雜度分別是什么有哪些應(yīng)用場景比如堆排序復(fù)雜度為什么是O(nlogn)、歸并排序的空間復(fù)雜度為什么是O(n)、KMP為什么能把匹配復(fù)雜度降到O(mn)。這些問題的答案不僅面試能用日常開發(fā)里寫調(diào)優(yōu)方案也用得上。4. 經(jīng)典算法考點(diǎn)盤點(diǎn)排序、樹、動態(tài)規(guī)劃4.1 排序算法知識一表打通排序算法是華為面試中基礎(chǔ)到不能再基礎(chǔ)的內(nèi)容但也是翻車率最高的內(nèi)容。很多候選人能說出快速排序的名字卻說不清它的空間復(fù)雜度為什么不是O(1)。我整理了一個排序算法速查表建議面試前背熟排序算法平均時間復(fù)雜度最壞時間復(fù)雜度空間復(fù)雜度穩(wěn)定性冒泡排序O(n2)O(n2)O(1)穩(wěn)定選擇排序O(n2)O(n2)O(1)不穩(wěn)定插入排序O(n2)O(n2)O(1)穩(wěn)定快速排序O(nlogn)O(n2)O(logn)~O(n)不穩(wěn)定歸并排序O(nlogn)O(nlogn)O(n)穩(wěn)定堆排序O(nlogn)O(nlogn)O(1)不穩(wěn)定希爾排序取決于步長O(n2)O(1)不穩(wěn)定計數(shù)排序O(nk)O(nk)O(k)穩(wěn)定這個表里的每一個格子都值得深挖。比如為什么快速排序在最壞情況下退化成O(n2)因為基準(zhǔn)值選擇不當(dāng)導(dǎo)致每次劃分極度不平衡。為什么堆排序的空間復(fù)雜度是O(1)因為它在原數(shù)組上建堆通過交換元素完成排序不需要額外存儲。但正因為堆排序的交換過程破壞了相同元素的相對順序所以它不穩(wěn)定。這些“為什么”才是面試官真正想聽的。手寫排序代碼時細(xì)節(jié)更不能馬虎。以冒泡排序為例C實(shí)現(xiàn)時要注意內(nèi)層循環(huán)的邊界條件和提前退出標(biāo)志。很多人都寫過這樣一段代碼#include vector using namespace std; void bubbleSort(vectorint arr) { int n arr.size(); bool swapped; for (int i 0; i n - 1; i) { swapped false; for (int j 0; j n - 1 - i; j) { if (arr[j] arr[j 1]) { swap(arr[j], arr[j 1]); swapped true; } } // 沒有發(fā)生交換說明已經(jīng)有序 if (!swapped) break; } }這段代碼里每個細(xì)節(jié)都是考點(diǎn)外層循環(huán)為什么到 n-1 結(jié)束內(nèi)層循環(huán)為什么是 n-1-i提前退出標(biāo)志有什么作用如果這些都能準(zhǔn)確回答說明不是背代碼而是真理解排序過程。4.2 動態(tài)規(guī)劃、樹與圖的面試切入方式動態(tài)規(guī)劃在華為面試?yán)锏牡匚缓芨摺C嬖嚬偻ǔ2粫苯映觥白铋L上升子序列”這種課本例題而是會披一層業(yè)務(wù)外衣。比如“給定一個網(wǎng)絡(luò)節(jié)點(diǎn)的轉(zhuǎn)發(fā)時延矩陣如何找到最短時延路徑”這類問題表面是圖論實(shí)際上Dijkstra算法和動態(tài)規(guī)劃的思想是相通的。樹結(jié)構(gòu)考察中二叉樹的前中后序遍歷、層序遍歷、最近公共祖先、樹的直徑都是常見題。準(zhǔn)備這部分時要注意掌握“樹的遞歸思維”也就是一棵樹的問題可以拆解為左子樹、右子樹和根節(jié)點(diǎn)三者的關(guān)系。很多復(fù)雜題型的解法比如平衡二叉樹的判斷、二叉樹的最大路徑和都是通過遞歸“返回子樹的處理結(jié)果”來完成的。說到“粒子群算法原理”這個熱搜詞它雖然不是華為機(jī)試核心但在一些偏優(yōu)化類的算法面試中偶有出現(xiàn)。粒子群優(yōu)化PSO的核心思想是模擬鳥群覓食每個粒子的位置代表候選解速度決定下一步移動的方向和距離。粒子在每一輪迭代中會跟蹤兩個最優(yōu)值個體歷史最優(yōu)pbest和全局最優(yōu)gbest并通過速度更新公式來調(diào)整位置。如果面試官問到PSO通常還會追問慣性權(quán)重和學(xué)習(xí)因子的作用慣性權(quán)重控制粒子的全局探索能力權(quán)重越大多樣性越強(qiáng)但收斂變慢學(xué)習(xí)因子則控制粒子向個體最優(yōu)和全局最優(yōu)學(xué)習(xí)的程度取值一般在0.5到2.5之間。這類優(yōu)化算法在華為的通信資源分配、網(wǎng)絡(luò)優(yōu)化場景中比較常見屬于能體現(xiàn)業(yè)務(wù)匹配度的加分點(diǎn)。圖論部分則要重點(diǎn)準(zhǔn)備Dijkstra最短路徑、并查集、拓?fù)渑判?、圖的深度優(yōu)先搜索和廣度優(yōu)先搜索。華為面試題里有個高頻變種是“在迷宮中找最短路徑”要求輸出路徑長度或路徑本身這里BFS的層數(shù)特性就是關(guān)鍵。4.3 工程細(xì)節(jié)復(fù)雜度和邊界條件算法題能跑通并不等于滿分面試官還會追問工程細(xì)節(jié)。比如“你的算法能處理多大輸入規(guī)?!薄叭绻麛?shù)據(jù)量超出了內(nèi)存怎么辦”。這些問題考察的是復(fù)雜度意識尤其是空間復(fù)雜度。一個典型例子是求兩個大數(shù)組的交集時初學(xué)者會用雙重循環(huán)O(n2)有經(jīng)驗的人會用哈希表O(n)更深入一點(diǎn)會討論如果數(shù)組分別在兩臺機(jī)器上如何用哈希分片或布隆過濾器來減少跨網(wǎng)絡(luò)通信量。邊界條件則是代碼質(zhì)量的直接體現(xiàn)。我見過太多人寫二分查找時因為區(qū)間開閉不一致而陷入死循環(huán)。在面試時與其寫完后戰(zhàn)戰(zhàn)兢兢不如一開始就用注釋把循環(huán)不變式寫清楚比如“維護(hù)的區(qū)間是左閉右開還是左閉右閉”這會讓面試官眼前一亮。華為的面試官通常很看重候選人的代碼規(guī)范性哪怕時間緊迫也要保持變量命名清晰、邏輯層次分明這算是一個隱藏的評分點(diǎn)。5. 華為OD機(jī)試與刷題路線的差異化建議5.1 華為OD機(jī)試的題型與“雙機(jī)位”規(guī)則華為ODOutsourcing Developer外包開發(fā)在2024年仍然是很多人進(jìn)入華為生態(tài)的一條重要通道。OD機(jī)試和正式校園招聘的機(jī)試有一定的重合度但又有其特殊性。OD機(jī)試一般在線上進(jìn)行2024年的新趨勢是部分省份和批次實(shí)行“雙機(jī)位監(jiān)控”也就是一個攝像頭對著人的正面另一個攝像頭對著電腦屏幕側(cè)面或背面防止作弊。這個規(guī)則的直接影響是你不能像以前那樣開著搜索引擎查API也不能借助外部編譯器。所以備考OD機(jī)試時要盡量在無輔助工具的情況下完成代碼編寫。OD機(jī)試的題目風(fēng)格偏工程應(yīng)用。網(wǎng)上流傳的“華為OD機(jī)試 新系統(tǒng) 雙機(jī)位C卷 真題題庫”基本反映了一個規(guī)律C卷的題目會明顯分為三個難度區(qū)間每道題的分值不同。常見的組合是兩道100分題加一道200分題總分400分但不同批次的及格線劃分略有差異。刷題時可以重點(diǎn)關(guān)注“華為OD機(jī)試真題”相關(guān)的題庫資源尤其是“新系統(tǒng)”之后的C卷題目因為題目更新快舊題庫的參考價值會逐漸下降。5.2 針對不同背景的刷題路線針對不同人群我給三條不同的備考路線。如果是計算機(jī)科班出身算法基礎(chǔ)不錯直接按力扣LeetCodeHot 100和??途W(wǎng)的華為真題去刷就行。重點(diǎn)放在中等難度題上因為OD機(jī)試的200分大題往往對應(yīng)力扣的Medium偏難甚至Hard級別但不會出現(xiàn)冷門競賽題。如果是非科班轉(zhuǎn)行建議先從數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)開始。很多人一上來就刷動態(tài)規(guī)劃結(jié)果直接被勸退。更好的順序是先掌握數(shù)組、鏈表、棧、隊列、哈希表的API和操作再刷二叉樹相關(guān)題最后攻克動態(tài)規(guī)劃和圖論。時間有限時貪心算法和枚舉法也要重點(diǎn)練因為它們是解決“看不出題型”的題的兜底方案。如果是已經(jīng)有工作經(jīng)驗的開發(fā)者則要更注意“快而穩(wěn)”的編碼能力。這類人群往往思路清楚但編碼速度下降建議每天在??屠镉媚M機(jī)試的模式練習(xí)限時150分鐘做完整套題培養(yǎng)對時間的感知。我見過一個工作三年的Java開發(fā)第一次模擬機(jī)試連第一道題都沒寫完練了兩周后就能穩(wěn)定完成兩道半題秘訣就是刻意訓(xùn)練限時輸入輸出。6. 機(jī)器學(xué)習(xí)與深度學(xué)習(xí)考點(diǎn)AI方向算法崗的加試題6.1 梯度與損失函數(shù)兩個必背結(jié)論如果你投的是華為AI方向的算法工程師傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)的權(quán)重會下降但機(jī)器學(xué)習(xí)基礎(chǔ)理論會被反復(fù)詢問。其中有兩個最高頻的必背結(jié)論梯度消失與梯度爆炸的成因及解決方案、常見損失函數(shù)的適用場景。針對梯度消失面試官期待你能說出三個層面的原因和思路在激活函數(shù)層面Sigmoid和Tanh在兩端的導(dǎo)數(shù)趨近于0多層連乘導(dǎo)致梯度指數(shù)級衰減解決方案是換成ReLU及其變體在網(wǎng)絡(luò)結(jié)構(gòu)層面殘差連接ResNet通過恒等映射讓梯度有一條直達(dá)路徑在訓(xùn)練技巧層面梯度裁剪、合適的權(quán)重初始化如Xavier或He初始化也能緩解問題。只有當(dāng)你能把這三個層面都答全面試官才會認(rèn)為你真的理解深度學(xué)習(xí)的訓(xùn)練過程。損失函數(shù)方面分類問題中交叉熵?fù)p失是絕對高頻回歸問題中均方誤差MSE和平均絕對誤差MAE的區(qū)別也常被問到。有一個很好的追問是“為什么分類任務(wù)用交叉熵而不用均方誤差”答案是交叉熵配合Softmax能讓梯度更新更平穩(wěn)而MSE在Softmax輸出上計算梯度會出現(xiàn)梯度衰減導(dǎo)致收斂緩慢。這個問題雖然不難但能檢驗出候選人是否真正追溯過反向傳播的過程。6.2 KL散度與ELBOVAE背后的推導(dǎo)思路“kl elbo 算法原理詳解”成為熱搜詞背后反映的是2024年生成模型方向面試熱度飆升。VAE變分自編碼器和其背后的ELBO證據(jù)下界推導(dǎo)已經(jīng)成為AI算法崗面試中一個比較高階的考題。理解ELBO不需要復(fù)雜的數(shù)學(xué)基礎(chǔ)但需要理清“我們要干什么”。VAE希望訓(xùn)練一個生成模型讓模型生成的分布盡量接近真實(shí)數(shù)據(jù)分布但直接最大化似然函數(shù)非常困難因為需要計算關(guān)于隱變量z的積分。于是我們轉(zhuǎn)而最大化一個下界也就是ELBO。ELBO由兩部分組成重建損失項希望解碼器能從隱變量還原出原始數(shù)據(jù)和KL散度項希望編碼器輸出的隱變量分布盡量接近標(biāo)準(zhǔn)正態(tài)分布先驗。面試中常被追問的重點(diǎn)是KL散度的定義為什么是“期望”的形式為什么KL散度是非負(fù)的答案涉及Jensen不等式這是推導(dǎo)ELBO的核心工具。如果你能解釋Jensen不等式如何把對數(shù)期望的困難轉(zhuǎn)化為期望對數(shù)的可優(yōu)化形式面試官會刮目相看。更進(jìn)一步的加分點(diǎn)是能提一下VAE和GAN的本質(zhì)區(qū)別VAE通過最大化下界來近似真實(shí)分布訓(xùn)練更穩(wěn)定GAN通過對抗式博弈來逼近分布生成樣本更清晰但對訓(xùn)練敏感。這些對比性的思考比單純背公式更容易讓面試官記住你。6.3 業(yè)務(wù)方向考點(diǎn)示例通信算法、音頻算法、電源PID華為算法崗并不是只有AI和數(shù)據(jù)挖掘方向通信、音頻、能源方向的算法工程師同樣有大量需求。這類崗位的面試題往往與互聯(lián)網(wǎng)公司的風(fēng)格截然不同更貼近硬件和物理世界。通信方向可能會問到“音頻重采樣算法”的實(shí)現(xiàn)思路比如如何把44.1kHz的采樣率轉(zhuǎn)換為48kHz。簡單的線性插值計算量小但高頻失真明顯工程上更常用的是多相濾波器結(jié)構(gòu)結(jié)合抽取和內(nèi)插完成重采樣。面試題如果涉及這個多半是考察對采樣定理的理解和濾波器設(shè)計的基本功。能源與電源方向則可能會出現(xiàn)“PID算法在CRPS PSU Power中的作用”這類問題。CRPS是通信機(jī)柜常用的電源冗余標(biāo)準(zhǔn)PSU是電源模塊。PID控制在這里的核心作用是穩(wěn)壓穩(wěn)流通過比例P、積分I、微分D三項的調(diào)節(jié)讓輸出電壓在負(fù)載變化時快速恢復(fù)穩(wěn)定。如果你的崗位方向是數(shù)字能源建議提前了解PID參數(shù)整定的基本方法特別是P、I、D三個參數(shù)各自對系統(tǒng)響應(yīng)的影響P增大加快響應(yīng)但可能產(chǎn)生超調(diào)I能消除穩(wěn)態(tài)誤差但太大容易震蕩D可以抑制超調(diào)但會對噪聲敏感。這類專業(yè)方向題的準(zhǔn)備思路和刷題完全不同靠短期突擊很難建議直接從崗位JD入手鎖定業(yè)務(wù)方向再針對性地補(bǔ)專業(yè)知識。如果你面試的是華為ICT基礎(chǔ)設(shè)施部門的算法崗還需要稍微了解數(shù)通、單板、網(wǎng)絡(luò)協(xié)議的基礎(chǔ)比如“華為交換機(jī)端口鏡像”“華為防火墻HRP”“堆疊配置”這些實(shí)際操作背后的原理面試官可能不會讓你敲命令但如果你能說出這些功能的應(yīng)用場景會顯得更有相關(guān)性。7. 面試中的高頻翻車點(diǎn)與避坑經(jīng)驗7.1 高頻問題速查表根據(jù)我和身邊朋友的面試復(fù)盤下面這些問題算是華為算法面試的高頻問題建議在面試前逐一自查問題方向高頻提問點(diǎn)易踩的坑數(shù)據(jù)結(jié)構(gòu)數(shù)組和鏈表的區(qū)別、HashMap的擴(kuò)容機(jī)制、紅黑樹的插入平衡只背結(jié)論說不出多線程環(huán)境下的問題算法快排為什么不穩(wěn)定、堆排序建堆復(fù)雜度怎么算、KMP失配如何處理對復(fù)雜度推導(dǎo)不熟練操作系統(tǒng)進(jìn)程線程區(qū)別、死鎖條件、內(nèi)存分頁與虛擬內(nèi)存答得太淺不會結(jié)合具體代碼場景網(wǎng)絡(luò)TCP三次握手四次揮手、HTTP與HTTPS區(qū)別、滑動窗口與擁塞控制細(xì)節(jié)記混淆比如TIME_WAIT狀態(tài)原因機(jī)器學(xué)習(xí)過擬合解決辦法、L1與L2正則區(qū)別、BN層的原理回答模棱兩可缺少具體參數(shù)設(shè)定項目經(jīng)驗項目難點(diǎn)、技術(shù)選型原因、性能優(yōu)化效果講不清楚自己的貢獻(xiàn)邊界7.2 我踩過的坑和別人的教訓(xùn)我的一個印象非常深的教訓(xùn)是早期面試時總想把算法的每一個步驟都解釋得特別詳細(xì)結(jié)果面試官問“你還能優(yōu)化嗎”時我只能搖頭。后來我才明白每一道手撕代碼題都預(yù)留了“優(yōu)化”這個話題哪怕你想不到更優(yōu)解法也要主動從時間復(fù)雜度和空間復(fù)雜度兩個維度展開分析。比如一道題你用O(n)空間做完了面試官不一定期待你寫出O(1)空間的做法但如果你能主動說“這里可以用雙指針把空間降到O(1)但要注意邊界條件”這就是極強(qiáng)的加分項。另一個朋友踩過更實(shí)際的坑他在機(jī)試時沒有注意“多組輸入”的問題。華為機(jī)試的很多題目會要求“不斷讀取輸入直到文件末尾”也就是循環(huán)處理輸入他按照單組數(shù)據(jù)來寫結(jié)果只過了一部分用例。這個問題在??湍J街刑貏e常見備考時一定要養(yǎng)成用while (cin n)或while (scanf(%d, n) ! EOF)處理輸入的習(xí)慣。7.3 面試前一周的沖刺清單最后分享一份我總結(jié)的沖刺清單適用于面試前一周的集中備第一拿出兩個完整下午做“模擬機(jī)試”嚴(yán)格按照真實(shí)時長和環(huán)境訓(xùn)練時間分配能力。第二把十大排序算法的代碼重寫一遍每寫一個就口頭解釋時間復(fù)雜度和穩(wěn)定性。第三把高頻手撕題型練到閉眼能寫鏈表反轉(zhuǎn)、二叉樹層序遍歷、LRU緩存、編輯距離、二分查找。第四復(fù)盤自己的項目經(jīng)歷準(zhǔn)備一個“技術(shù)深度亮點(diǎn)”和一個“踩坑復(fù)盤”故事每個控制在2分鐘以內(nèi)。第五了解華為的業(yè)務(wù)方向和產(chǎn)品線至少能說出你面試的崗位可能服務(wù)于哪類場景這在主管面環(huán)節(jié)很重要。關(guān)于面試中“做題快”和“講得清楚”哪個更重要我的看法是這兩者在華為的面試中同樣重要但講得清楚通常更難練。你可以一天刷十道題但很難一天把十道題的邏輯都拆得明明白白。所以建議在刷題之外刻意找到一個朋友或者對著錄音講題堅持講幾道題之后你會發(fā)現(xiàn)自己在面試中的表達(dá)節(jié)奏會順暢很多。最后再分享一個小技巧如果你在機(jī)試時遇到一道完全沒有思路的題不要空著。先把暴力的寫法寫出來哪怕只能過30%的用例也能挽回很多分?jǐn)?shù)。華為機(jī)試的評分是看通過用例比例的不是“全對或全錯”把能拿的分先拿到手再去想優(yōu)化這個策略我在多次機(jī)試中驗證過非常實(shí)用。