華為OD機試+技術面完整經驗:從零開始到成功入職
2年經驗非科班轉碼華為OD完整面試經驗,含OD機試3道算法題詳解、技術一面二面真題、性格測試注意事項,華為OD面試經驗2026最新分享。
背景介紹
先說下我的情況吧,我是非科班出身,大學學的是機械工程,畢業後自學了半年Java,然後在一家小公司做了2年開發。公司規模不大,技術棧也比較老,主要就是Spring Boot + MySQL那一套。說實話,在小公司待久了,心裡一直有點慌,覺得技術成長太慢,而且薪資也上不去。
今年年初,一個之前在華為OD工作的朋友跟我說,OD的門檻其實沒有想像中那麼高,而且現在OD轉正的機會也多了不少。他建議我試試,還幫我內推了。說實話,一開始我是有點猶豫的,畢竟OD在網上的評價褒貶不一,但想想自己現在的處境,還是決定搏一把。
我大概花了2個月時間準備,主要就是刷算法題和複習Java基礎。下面就把整個面試過程詳細分享出來,希望對和我一樣非科班想進大廠的朋友有所幫助。
完整面試流程復盤
第一步:機試(3道算法題,100+100+200分制)
華為OD的機試是在牛客網上進行的,時長2小時,一共3道題,分值分別是100分、100分、200分。總分400分,一般150分以上就有面試機會,但不同部門要求不一樣,我聽說有的部門要求200分以上。
第一題(100分):字串處理
題目大意是給一個字串,要求把裡面連續重複的字元壓縮成「字元+次數」的形式,比如"aabbbcc"變成"a2b3c2",如果只出現1次就不寫數字。這道題難度不大,我用雙指標遍歷一遍就搞定了,大概10分鐘寫完。要注意邊界情況,比如空字串和只有一個字元的情況。
第二題(100分):滑動視窗
題目是給一個整數陣列和目標值target,找最長的連續子陣列,使得子陣列中最大值和最小值的差不超過target。這道題一看就是滑動視窗,我用了兩個單調佇列分別維護視窗內的最大值和最小值,時間複雜度O(n)。寫完之後測試用例全過了,但花了大概30分鐘,因為一開始單調佇列的出隊條件寫錯了,除錯了一會兒。
第三題(200分):圖論BFS
題目大意是在一個網格地圖上,有障礙物和傳送門,求從起點到終點的最短路徑。傳送門可以瞬間移動到另一個傳送門的位置。這道題的關鍵就是BFS的時候,遇到傳送門要特殊處理——到達傳送門時,除了正常走四個方向,還要把傳送門對應的目標位置也加入佇列。我大概花了40分鐘寫完,中間踩了一個坑:忘記處理傳送門雙向的問題,導致部分用例超時,後來加了個visited陣列去重就好了。
最終機試成績350分,第一題100分,第二題100分,第三題150分(部分用例沒過)。說實話第三題沒拿滿分有點遺憾,但350分已經夠用了。
第二步:技術一面(約1小時)
機試通過後大概1週,HR就聯繫我安排了一面。面試官是個看起來30歲左右的男生,態度還不錯,一開始讓我自我介紹,然後就開始問問題了。
Java基礎部分:
面試官先問了Java的基本資料型別有哪些,然後問了自動裝箱拆箱的原理,還有Integer快取池的範圍(-128到127)。這塊我答得還行,但Integer快取池的具體範圍一開始說錯了,面試官提示了一下我才想起來。
集合框架部分:
問了HashMap的底層實現,我講了JDK1.8的陣列+鏈表+紅黑樹結構,還有擴容機制、負載因子為什麼是0.75。面試官追問了HashMap和ConcurrentHashMap的區別,我講了分段鎖到CAS+synchronized的演進。
多執行緒部分:
問了執行緒池的核心參數有哪些,我講了corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、rejectedExecutionHandler。然後問了執行緒池的工作流程——先核心執行緒,再佇列,再非核心執行緒,最後拒絕策略。面試官還問了synchronized和ReentrantLock的區別,我講了可重入、公平鎖、響應中斷這些點。
手寫程式碼部分:
面試官讓我手寫一個單例模式,我寫了DCL(雙重檢查鎖定)版本,還特意講了volatile的作用。然後又出了一道算法題——二元樹的層序遍歷,這個我用BFS配合佇列寫的,不難,大概5分鐘搞定。
第三步:技術二面(約1小時)
一面過了3天就安排了二面,二面的面試官級別更高一些,問的問題也更深入。
專案深挖:
面試官讓我詳細講了最近做的一個專案,我講了一個訂單系統的重構經歷。他追問了很多細節:為什麼選擇這個技術方案?有沒有考慮過其他方案?遇到了什麼問題?怎麼解決的?這塊我準備得比較充分,因為確實是自己做過的專案,所以答得比較流暢。但面試官問到了一個我沒想到的問題:如果訂單量再增長10倍,你的系統還能撐住嗎?我老實說了現有架構的瓶頸,然後講了一下可能的優化方向。
Spring Boot部分:
問了Spring Boot的自動裝配原理,我講了@EnableAutoConfiguration註解和spring.factories檔案,還有條件註解@ConditionalOnClass這些。面試官又問了Spring Boot的啟動流程,這個我答得不夠好,只說了大約的流程,細節沒講清楚。
MySQL部分:
重點問了索引,包括B+樹索引的結構、聚簇索引和非聚簇索引的區別、覆蓋索引、最左前綴匹配原則。還問了一個場景題:如果一個查詢很慢,你怎麼排查?我講了用EXPLAIN看執行計畫,然後分析是否走了索引、掃描了多少行這些。
Redis部分:
問了Redis的常用資料結構,以及各自的應用場景。我講了String做快取、Hash存物件、Set做標籤、ZSet做排行榜、List做訊息佇列。面試官追問了Redis的持久化方式RDB和AOF的區別,以及Redis的過期刪除策略和記憶體淘汰策略。
第四步:性格測試
技術面通過後,會收到一個性格測試的連結。這個測試大概200多道題,主要是判斷你的性格是否適合在華為工作。網上很多人說性格測試會掛人,所以還是要認真對待的。
我的經驗是:一定要前後一致。因為測試裡有很多重複的題目,只是換了一種問法,如果你前後回答矛盾,系統會判定你不誠實。盡量選擇積極正面的選項,比如遇到困難選擇「想辦法解決」而不是「尋求幫助」,團隊合作選擇「主動承擔」而不是「聽從安排」。另外,不要選太極端的選項,保持中庸偏積極就好。
結果
機試後1週安排一面,一面後3天安排二面,二面後4天就收到了offer。整個流程大概2週多,速度還是挺快的。最終薪資比我在小公司漲了差不多40%,雖然OD的身份和正式員工還是有差距,但對我來說已經是一個很大的提升了。
面試真題匯總
機試真題:
1. 字串壓縮:連續重複字元壓縮為「字元+次數」形式
2. 滑動視窗:最長連續子陣列,最大值與最小值差不超過target
3. 圖論BFS:網格地圖含障礙物和傳送門,求最短路徑
技術一面真題:
1. Java基本資料型別與自動裝箱拆箱
2. Integer快取池範圍
3. HashMap底層實現與擴容機制
4. HashMap與ConcurrentHashMap區別
5. 執行緒池核心參數與工作流程
6. synchronized與ReentrantLock區別
7. 手寫DCL單例模式
8. 算法題:二元樹層序遍歷
技術二面真題:
1. 專案深挖:技術方案選型與系統擴展性
2. Spring Boot自動裝配原理
3. MySQL B+樹索引結構
4. 聚簇索引與非聚簇索引區別
5. 覆蓋索引與最左前綴匹配
6. 慢查詢排查方法
7. Redis資料結構與應用場景
8. Redis持久化方式RDB與AOF
心得體會與建議
1. 機試是敲門磚,一定要認真準備。OD機試的難度不算特別高,但也不能掉以輕心。建議至少刷50道LeetCode中等題,重點練字串、陣列、滑動視窗、BFS/DFS這些高頻題型。機試分數越高,後續選擇部門的餘地越大。
2. Java基礎要扎實。一面主要考基礎,HashMap、執行緒池、並發這些幾乎是必考的。不要只會背八股文,要真正理解原理,因為面試官會追問細節。
3. 專案經驗要能講清楚。二面會深挖專案,一定要提前梳理自己做過的專案,想清楚每個技術決策背後的原因。面試官最看重的不是你用了什麼技術,而是你為什麼選擇這個技術。
4. 性格測試別大意。我身邊就有技術面過了但性格測試沒過的案例。記住兩個原則:前後一致、積極正面。
5. 非科班不要自卑。面試官其實不太在意你是不是科班出身,更看重的是你的實際能力和學習態度。我在面試中主動提到了自己非科班的背景,面試官反而覺得自學能力是一種優勢。
常見問題FAQ
Q:華為OD和正式員工有什麼區別?
A:OD是外包身份,合約簽的是德科等人力資源公司,不是直接和華為簽。薪資待遇比正式員工低一些,福利也有差距。但OD轉正的機會確實存在,一般績效好的話1-2年有機會轉正。
Q:機試多少分能過?
A:一般150分以上就有面試機會,但熱門部門可能要求200分以上。建議目標定在250分以上,這樣選擇面更廣。
Q:非科班能過OD面試嗎?
A:完全可以。OD對學歷和專業的要求相對寬鬆,更看重實際編碼能力。我就是非科班,機試350分,面試也順利通過了。
Q:性格測試會掛人嗎?
A:會的。性格測試掛了一般可以重測,但最好一次過。關鍵是前後一致、積極正面,不要選太極端的選項。
Q:OD的工作強度大嗎?
A:看部門,有的部門加班多,有的相對輕鬆。整體來說和正式員工的工作內容差不多,強度也差不多。但OD的薪資相對低一些,這點要有心理準備。