位元組跳動資料工程師面試經歷:資料倉儲+即時運算+資料治理全考察
3年資料工程經驗,完整覆盤位元組跳動資料工程師三輪技術面試,涵蓋SQL、Hive、Spark、Flink即時運算、資料治理及系統設計,附真題彙總與備考建議。
背景介紹
先說下我的情況吧,3年資料工程經驗,之前在一家中型網際網路公司做資料平台相關的工作,主要用Hive和Spark做離線數倉,也接觸過一些Flink即時運算的專案。今年年初開始看機會,位元組跳動的資料工程師崗位是我最想去的,畢竟位元組的資料平台在國內算是頂尖的了。
投履歷是在位元組官網直接投的,崗位是資料平台部的資料工程師。大概一週後收到了HR的電話,簡單聊了下背景和期望,然後安排了一面。整個面試流程是三輪技術面+一輪HR面,跨度大概兩週半。
面試流程覆盤
一面:SQL+Hive+Spark(約60分鐘)
一面的面試官是個看起來挺年輕的小哥,應該是組裡的核心開發。開場先讓我自我介紹,然後直接進入技術環節。
SQL部分:面試官給了兩道SQL題,第一道是經典的使用者留存率計算,要求寫SQL算次日留存、7日留存。這個我之前準備過,用自連線的方式寫出來了。第二道是行轉列的問題,把學生的多科成績從行格式轉成列格式,我用CASE WHEN搞定了。面試官追問了下如果科目不固定怎麼辦,我說可以用動態SQL或者先查出所有科目再拼接。
Hive部分:問了Hive內部表的儲存位置、分區和分桶的區別、Hive資料傾斜怎麼處理。資料傾斜那塊我聊得比較多,說了MapJoin、增加Reduce數量、拆分大key等方案,面試官似乎比較滿意。
Spark部分:問了RDD、DataFrame、DataSet的區別,Spark的排程流程,以及一個Shuffle的原理。還問了一道程式設計題:用Spark統計UV和PV,要求考慮資料傾斜的情況。我寫了用repartition+reduceByKey的方案,面試官又問如果某些key的資料量特別大怎麼辦,我說可以加鹽打散再聚合。
一面結束的時候面試官說「基礎還不錯」,我心裡稍微踏實了一點。
二面:Flink即時運算+資料治理(約75分鐘)
二面的面試官是位資深的架構師,問題明顯更深了。
Flink部分:先問了Flink的架構,JobManager、TaskManager、Slot的關係。然後重點問了Checkpoint機制,要求我詳細解釋Chandy-Lamport演算法的原理,以及Exactly-Once語義是怎麼保證的。這塊我答得不算完美,Checkpoint的barrier對齊機制我說得有點含糊,面試官補充了一些。接著問了一個實際場景:如果Kafka消費延遲怎麼排查?我從消費端處理能力、並行度設定、資料傾斜幾個角度分析了。
資料治理部分:這部分是二面的重點。面試官問了我對資料治理的理解,包括資料品質、元資料管理、資料血緣等。他特別關注資料血緣的實現,問了我怎麼自動採集血緣資訊,我說可以透過解析SQL AST來提取表級和欄位級血緣,面試官追問具體用什麼工具,我說了Apache Atlas和自研方案。然後問了一個開放題:如果讓你從零搭建資料治理體系,你會怎麼做?我從組織架構、規範制定、工具建設、運營機制四個層面回答了,面試官頻頻點頭。
二面結束的時候面試官說「你對資料治理的理解比很多候選人都深」,這句話讓我信心大增。
三面:系統設計+HR面(約90分鐘)
三面是部門負責人面的,主要考察系統設計能力和綜合素質。
系統設計:面試官給了一個題目——設計一個即時數倉平台,支援秒級延遲的資料查詢。我從Lambda架構講到Kappa架構,說了用Flink做即時運算、ClickHouse做OLAP查詢的方案。面試官追問了資料一致性怎麼保證、離線和即時的資料怎麼對帳、ClickHouse的寫入效能瓶頸怎麼解決。這些問題都挺有挑戰的,我結合自己的經驗回答了,但有些地方確實不夠深入,面試官也給了不少提示。
專案深挖:面試官讓我詳細講了之前做的一個資料品質監控平台,從需求背景、技術選型、架構設計到遇到的問題和解決方案。我重點說了規則引擎的設計和異常檢測演算法的選擇,面試官對規則引擎的擴充性提了幾個問題。
HR面:HR問了職業規劃、為什麼選擇位元組、期望薪資等常規問題。我如實說了自己對資料工程的熱情和想在大平台成長的期望。
真題彙總
1. 寫SQL計算使用者次日留存率和7日留存率
2. Hive分區和分桶的區別是什麼?
3. Hive資料傾斜有哪些解決方案?
4. Spark中RDD、DataFrame、DataSet的區別?
5. Spark Shuffle的原理是什麼?
6. 用Spark統計UV和PV,如何處理資料傾斜?
7. Flink的Checkpoint機制原理?Chandy-Lamport演算法?
8. Flink如何保證Exactly-Once語義?
9. Kafka消費延遲怎麼排查和解決?
10. 資料血緣如何自動採集?
11. 如何從零搭建資料治理體系?
12. 設計一個即時數倉平台,支援秒級延遲的資料查詢
13. 離線和即時資料如何對帳?
14. ClickHouse寫入效能瓶頸如何解決?
心得建議
1. SQL一定要扎實:位元組資料崗的SQL考察不是那種簡單的CRUD,而是偏分析型的複雜SQL,視窗函數、多表關聯、行轉列這些都要熟練。建議多刷LeetCode的資料庫題和牛客的SQL題。
2. 大資料元件原理要深入:不能只會用,還要懂原理。比如Spark的Shuffle機制、Flink的Checkpoint原理,這些在面試中幾乎是必考的。建議讀一下相關元件的原始碼,至少看核心模組。
3. 資料治理是加分項:很多候選人只關注計算引擎,忽略了資料治理。但實際上資料治理是資料工程師的核心能力之一,尤其是在大廠。建議了解Apache Atlas、Datahub等開源專案。
4. 系統設計要有全域觀:三面的系統設計不是考你某個元件的細節,而是考你對整個資料平台的架構能力。平時多做技術選型的思考,多看業界的架構方案。
5. 專案經驗要能講清楚:面試官會深挖你的專案,從背景到方案到問題到結果,每個環節都要能說清楚。建議用STAR法則梳理自己的專案。
FAQ
Q:位元組資料工程師面試對演算法要求高嗎?
A:相比純開發崗,資料崗的演算法要求沒那麼高,但基本的排序、查找、動態規劃還是要會的。我這次沒被問LeetCode Hard,但SQL題的難度不低。
Q:沒有即時運算經驗能過嗎?
A:比較難。位元組資料平台大量使用Flink做即時運算,這塊是硬要求。如果沒經驗,建議至少做個Flink的demo專案,理解核心概念。
Q:面試週期一般多長?
A:我這次從一面到拿到offer大概三週,每輪面試間隔3-5個工作日。HR說正常流程是2-4週。
Q:三面系統設計有什麼推薦的學習資料嗎?
A:推薦《Designing Data-Intensive Applications》這本書,以及美團技術團隊、位元組技術團隊的部落格文章,裡面有很多資料平台的架構實踐。