毫末智行自動駕駛數據平台面試經歷:數據閉環+標注平台+仿真系統全考察
3年數據平台經驗,詳細復盤毫末智行三輪技術面試:一面數據工程與Spark/Flink、二面數據閉環與標注平台、三面仿真系統與項目深挖,含真題彙總與心得建議
背景介紹
我是在一家自動駕駛公司做了3年數據平台工程師,主要做數據閉環、標注平台和仿真系統。毫末智行一直是我特別想去的公司,他們在自動駕駛數據平台方面的技術積累非常深厚,尤其是數據閉環和自動化標注這塊,在業內是公認的領先。今年6月看到他們在招數據平台工程師,我馬上就投了。
說實話準備這個面試我壓力挺大的,因為數據平台涉及的技術棧非常廣——大數據、機器學習、仿真、工程化,每個方向都能問得很深。我花了差不多三週時間,把Spark/Flink、數據閉環、標注平台、仿真系統這些知識點全部過了一遍,尤其是數據質量保障和仿真真實性這些重點內容。
面試流程是三輪技術面,下面詳細復盤每一輪。
面試流程復盤
一面:數據工程+Spark/Flink
一面是個看起來很幹練的工程師,是數據平台組的。開場先讓我自我介紹,然後直接開始問數據工程。
1. Spark和Flink的區別?分別適合什麼場景?
我說Spark是批處理框架,核心抽像是RDD/DataFrame,適合大規模離線數據處理;Flink是流處理框架,核心抽像是DataStream,適合實時數據處理。在自動駕駛數據平台中,我們用Spark做離線數據分析(比如挖掘長尾場景、統計數據分佈),用Flink做實時數據流處理(比如實時數據質量監控、在線觸發數據採集)。
2. Spark的shuffle過程是怎樣的?怎麼優化?
我說Spark的shuffle分為SortShuffle和HashShuffle兩種。SortShuffle會對數據排序後寫磁盤,適合大數據量;HashShuffle直接按hash分區寫磁盤,適合小數據量。優化方法主要有:調整shuffle分區數、使用Kryo序列化器、開啟map端預聚合(combineByKey)、避免不必要的shuffle操作(如用broadcast join替代shuffle join)。
3. 你們的數據存儲架構是怎樣的?
我說我們用的是分層存儲架構:熱數據存Alluxio(內存緩存),溫數據存HDFS(磁盤),冷數據存S3(對象存儲)。元數據存在Hive Metastore中,用Hive/Trino做SQL查詢。點雲數據用Parquet格式存儲,圖像數據用TFRecord格式存儲。另外我們還有一套數據版本管理系統,類似DVC,可以追蹤每次數據集的變更。
4. 數據質量怎麼保障?
我說數據質量保障是數據平台最核心的工作之一。我們主要從四個維度做質量保障:完整性(數據是否缺失)、一致性(多傳感器數據是否對齊)、準確性(標注是否正確)、時效性(數據是否及時到達)。具體措施包括:數據採集時做實時校驗(傳感器狀態檢查、時間戳對齊檢查);數據入庫時做批量校驗(格式檢查、範圍檢查、邏輯檢查);標注數據做質檢(雙人標注+仲裁機制);定期做數據質量報告。
5. 數據血緣怎麼管理?
我說我們用Apache Atlas做數據血緣管理,可以追蹤每個數據集的來源、處理過程和下游消費。比如一個標注數據集,可以追溯到原始採集數據、經過哪些預處理、用了哪個標注項目的標注結果、被哪些訓練任務消費。數據血緣對於問題排查和數據合規都非常重要。
6. 你們的數據規模有多大?怎麼處理數據傾斜?
我說我們目前管理的數據量大概是10PB級別,包括點雲、圖像、視頻、標注等。數據傾斜主要發生在shuffle階段,處理方法包括:增加分區數、使用salting技術打散熱點key、使用廣播變量避免shuffle、對傾斜分區單獨處理等。
一面大概1小時,面試官對Spark/Flink問得很細,幸好我之前做過不少大數據項目,答得還算流暢。
二面:數據閉環+標注平台
二面是個資深工程師,一上來就問數據閉環和標注平台。
1. 數據閉環是什麼?你們怎麼做的?
我說數據閉環是指從數據採集到模型部署的完整循環:車端採集數據→數據上傳→數據篩選→數據標注→模型訓練→模型驗證→模型部署→車端運行→發現新問題→觸發新數據採集。我們做的數據閉環核心是「主動學習」——模型在運行中發現自己的弱點,自動觸發對應場景的數據採集,形成持續改進的閉環。
2. 主動學習具體怎麼實現?
我說我們用了兩種主動學習策略:一是基於不確定性的採樣,模型對某些樣本的預測不確定度高時,把這些樣本加入標注隊列;二是基於場景覆蓋度的採樣,當某些場景在訓練數據中佔比過低時,主動採集該場景的數據。具體實現上,我們在車端部署了一個輕量級的監控模組,實時計算模型的預測不確定度和場景特徵,當超過閾值時觸發數據上傳。
3. 標注平台的架構是怎樣的?
我說我們的標注平台包含幾個核心模組:任務管理(創建標注任務、分配標注員)、標注工具(2D/3D標注、語義分割、關鍵點標注等)、質檢模組(雙人標注+仲裁、自動質檢)、數據管理(標注數據版本管理、統計分析)。標注工具是自研的,支持點雲3D標注和多相機聯合標注,底層用Three.js做3D渲染。
4. 自動標注是怎麼做的?準確率怎麼樣?
我說自動標注分兩種:預標注和全自動標注。預標注是用模型先標注一遍,標注員在預標注基礎上修改,可以提升3-5倍的標注效率;全自動標注是模型直接標注,不需要人工介入。目前預標注的修改率大概在20-30%(即70-80%的標注是正確的),全自動標注只在簡單場景下使用(比如高速場景的車輛檢測),準確率大概90%左右。複雜場景(城區、惡劣天氣)還是需要人工標注。
5. 標注數據的一致性怎麼保證?
我說標注一致性是標注平台的核心難題。我們主要做三件事:一是制定詳細的標注規範,每個類別都有明確的標注規則和示例;二是雙人標注+仲裁機制,兩個標注員獨立標注同一數據,不一致的地方由仲裁員裁決;三是定期做標注員培訓和質量考核,標注準確率低於95%的標注員需要重新培訓。
6. 標注成本怎麼控制?
我說標注成本控制主要靠三個方面:一是自動標注減少人工量(預標注可以減少60-70%的標注工作量);二是主動學習只標注有價值的樣本(避免標注大量冗餘數據);三是標注流程優化(批量操作、快捷鍵、智能推薦等提升標注效率)。我們目前的標注成本大概比傳統方式降低了50%左右。
二面大概1小時10分鐘,面試官對數據閉環和標注平台問得很深入,尤其是主動學習和標注一致性,我答得還行但有些細節不太確定。
三面:仿真系統+項目深挖
三面是數據平台的負責人,很有經驗,面試更像技術交流。
他先讓我講了一個最複雜的項目,我講了我們的數據閉環系統從0到1的搭建過程。然後他開始深挖:
1. 仿真系統在數據閉環中扮演什麼角色?
我說仿真系統是數據閉環的關鍵環節,主要有三個作用:一是模型驗證,在仿真環境中驗證訓練好的模型是否滿足要求,避免直接上實車測試的風險;二是場景泛化,通過仿真生成大量變體場景,彌補真實數據的不足;三是回歸測試,每次模型更新後,在仿真中跑回歸測試,確保新模型不會在舊場景上退化。
2. 仿真的真實性怎麼保證?
我說仿真的真實性是最大的挑戰。我們主要從三個方面提升真實性:一是傳感器仿真,用物理渲染引擎模擬LiDAR和Camera的成像過程,包括噪聲模型、運動模糊、鏡頭畸變等;二是交通流仿真,用IDM/MOBIL等交通流模型模擬周圍車輛的行為,盡量接近真實駕駛行為;三是場景重建,從真實數據中提取場景要素(道路、車輛、行人),在仿真中重建真實場景。目前我們的仿真和實車的一致性大概在70%左右,主要差距在行人和非機動車行為的模擬。
3. 仿真場景庫怎麼管理?
我說我們的仿真場景庫分三類:法規場景(根據法規要求定義的測試場景)、真實場景(從實車數據中提取的場景)、生成場景(通過參數化生成的大量變體場景)。場景用OpenSCENARIO格式描述,支持場景參數化和隨機化。場景庫有版本管理,每次模型更新都會跑全量場景回歸。
4. 仿真的並行化怎麼做的?
我說仿真並行化是提升效率的關鍵。我們用Kubernetes調度仿真任務,每個仿真實例運行在一個Pod中。一次回歸測試可能需要跑幾千個場景,如果串行跑需要幾天,並行跑可以縮短到幾小時。我們目前可以同時跑500個仿真實例,資源利用率和成本都控制得不錯。
5. 數據閉環的ROI怎麼衡量?
我說數據閉環的ROI衡量確實是個難題。我們主要看幾個指標:一是模型迭代速度,有數據閉環後模型迭代週期從月級縮短到週級;二是標注效率,主動學習+自動標注讓標注效率提升了3-5倍;三是模型性能,每次數據閉環迭代後模型在關鍵指標上的提升幅度;四是實車接管率,數據閉環運行後實車接管率的下降趨勢。雖然很難精確計算ROI,但從這些指標來看,數據閉環的價值是顯而易見的。
6. 你覺得數據平台最大的挑戰是什麼?
我說我覺得最大的挑戰是數據的長尾問題。自動駕駛場景的長尾分佈決定了,不管採集多少數據,總有沒見過的場景。數據平台需要高效地發現和覆蓋這些長尾場景,而不是盲目地採集更多數據。主動學習和場景挖掘是解決長尾問題的關鍵,但目前的主動學習策略還不夠智能,很多長尾場景還是靠人工發現的。
三面聊了1個多小時,面試官對仿真系統和數據閉環的ROI特別感興趣。最後他問我有什麼問題,我問了毫末智行在數據閉環方面的最新進展,他提到了一些關於大模型輔助標注和生成式仿真場景的工作,很有意思。
真題彙總
數據工程部分:
1. Spark和Flink的區別和適用場景?
2. Spark的shuffle過程和優化方法?
3. 數據存儲架構設計?
4. 數據質量保障體系?
5. 數據血緣管理?
6. 數據規模和數據傾斜處理?
數據閉環部分:
7. 數據閉環的概念和實現?
8. 主動學習的具體實現?
標注平台部分:
9. 標注平台的架構設計?
10. 自動標注的實現和準確率?
11. 標注數據一致性保證?
12. 標注成本控制?
仿真系統部分:
13. 仿真系統在數據閉環中的角色?
14. 仿真的真實性保證?
15. 仿真場景庫管理?
16. 仿真並行化方案?
17. 數據閉環的ROI衡量?
18. 數據平台的最大挑戰?
心得建議
1. 大數據基礎必須扎實:Spark/Flink的核心原理、shuffle機制、數據傾斜處理這些是高頻考點,面試官會問得很細。
2. 數據閉環是重點:主動學習、場景挖掘、數據飛輪這些概念必須清楚,面試官非常關注數據閉環的具體實現。
3. 標注平台是加分項:如果你能講清楚標注平台的架構、自動標注、標注一致性等,面試官會非常感興趣。
4. 仿真系統要了解:仿真的真實性、場景管理、並行化這些是常考方向,尤其是仿真实車一致性的討論。
5. 關注行業趨勢:大模型輔助標注、生成式仿真、數據合規等前沿方向要有自己的思考。
6. 準備時間建議3週:如果你有2-3年的數據平台經驗,3週的集中準備應該夠了。重點復習數據工程、數據閉環、標注平台、仿真系統四個方向。
FAQ
Q:毫末智行的數據平台面試難度怎麼樣?
A:整體中等偏上。一面偏數據工程基礎,二面偏數據閉環和標注平台,三面偏仿真系統和項目經驗。因為涉及的技術棧很廣,需要準備的內容比較多。
Q:面試官風格怎麼樣?
A:三個面試官都很專業,一面比較務實,二面比較深入,三面更像技術討論。整體氛圍不錯,不會故意刁難。
Q:需要寫代碼嗎?
A:沒有讓我寫代碼,但會問代碼實現細節,比如Spark的RDD操作、Flink的窗口函數等。建議把關鍵API和常見模式練一遍。
Q:薪資大概什麼水平?
A:數據平台工程師的base大概在35-55k之間,具體看級別和談的情況。
Q:面試結果多久出來?
A:我是一面後4天收到二面通知,二面後3天收到三面通知,三面後1週多收到offer。