總覽 資料工程師面試要看的是你能不能打造可靠的資料系統:擷取原始資料、清楚地建模、有效率地轉換、把關資料品質、編排管線,並讓分析師、資料科學家、產品與業務團隊都能順利取用資料。
資料工程師面試官在評估什麼
•
SQL 功力:能否在 join、視窗函數、去重複和增量邏輯中,寫出正確又有效能的查詢?
•
資料建模:能否針對實際使用情境,設計資料表、schema、粒度、分區與緩慢變化維度?
•
管線設計:能否建構可靠、可觀測、出錯後能復原的批次與串流工作流程?
•
分散式系統判斷力:能否分析 Spark、分區、shuffle、狀態、延遲與吞吐量之間的關係?
•
資料品質:能否防止錯誤資料在無人察覺的情況下流進儀表板、模型與正式環境的產品功能?
•
平台思維:能否在成本、效能、資料新鮮度、治理、資料血緣與開發者體驗之間取得平衡?
•
正式環境當責:能否排查事故、安全地回補資料、管理 schema 變更,並清楚說明影響範圍?
資料工程就是資料的可靠性工程
優秀的資料工程師不只是把資料從 A 搬到 B,更要讓資料值得信任、容易理解、找得到、能擴展,而且在出問題時能夠復原。
資料工程師面試流程 資料工程的面試流程通常包含 SQL、Python 或程式設計、資料建模、管線設計、system design、Spark 或分散式處理、debug,以及行為面試。
資料工程師面試的常見階段
1
招募人員初步面談:確認職位適配度、技術堆疊、薪酬、工作地點與產業領域經驗。
2
用人主管面談:聊你負責管線的經驗、資料建模經驗、處理過的正式環境事故,以及與分析或產品團隊的合作。
3
SQL 關卡:考 join、視窗函數、去重複、增量轉換、cohort 類型的查詢,以及對效能的敏感度。
4
程式設計關卡:多半以 Python 為主,測試資料結構、檔案處理、API、解析,或管線式的資料轉換。
5
資料建模關卡:請你設計資料倉儲資料表、事件 schema、事實表/維度表模型,或 lakehouse 的資料配置。
6
System design 關卡:請你設計資料擷取、ETL/ELT、串流、排程編排、監控、資料血緣與資料品質等系統。
7
行為面試:評估當責態度、事故應變、與利害關係人溝通、面對模糊情境,以及跨部門交付的能力。
分析型資料工程師
平台 / 串流資料工程師
主要重點
資料倉儲建模、dbt/SQL 轉換、報表資料品質、業務指標
資料擷取基礎架構、串流、分散式處理、可靠性、平台規模化
常見面試內容
SQL、維度建模、利害關係人需求、管線排程編排
System design、Spark/Flink/Kafka、狀態、分區、擴展、維運事故
加分表現
建構出分析師與業務團隊都能放心使用、值得信任的模型
設計出能承受大流量、低延遲且能應對故障的韌性系統
常見錯誤
建模時沒有明確的粒度、負責人或指標定義
設計串流架構時,沒有考慮 exactly-once、重播、狀態或監控
先弄清楚你要應徵哪一種資料工程職位
以資料倉儲為主的分析工程師面試,和串流平台資料工程師的面試很不一樣。請依照職缺說明中的技術堆疊與工作職責,調整你的準備方向。
資料建模與資料倉儲題 資料建模面試要看你能否設計出清楚、可擴展、兼顧成本,而且對分析、機器學習與營運報表都實用的 schema。
必懂的資料建模概念
事實表(Fact table)
記錄可量測的業務事件或交易的資料表,例如訂單、付款、工作階段或出貨。
維度表(Dimension table)
為事實提供描述性背景資訊的資料表,例如顧客、商品、門市、行銷活動或日期。
粒度(Grain)
每一列資料所代表的層級。在建立事實表、維度表、指標或 join 之前,一定要先宣告粒度。
緩慢變化維度(SCD)
一種追蹤屬性如何隨時間變化的維度設計,例如顧客分群、地址或帳戶負責人。
框架: 業務流程 → 事實表 → 維度表 → 粒度 → 指標
我會從核心業務流程開始:瀏覽、購物車、訂單、付款、出貨、退貨、退款、庫存與行銷歸因。視使用方式而定,每個流程都可能成為一張事實表或一個事件模型。
重要的事實表包括:一筆訂單一列的 fact_orders、每筆訂單中每項商品一列的 fact_order_items、fact_payments、fact_refunds、fact_shipments,以及 fact_inventory_snapshot。維度表則包括 dim_customer、dim_product、dim_date、dim_store(或倉庫維度)、dim_channel 與 dim_campaign。
粒度一定要明確宣告。依商品類別計算營收,通常應該來自訂單商品粒度,而不是訂單粒度;顧客生命週期指標可能用顧客或訂閱粒度;庫存分析則可能需要每日快照粒度。
建模時要考量的地方有:顧客或商品屬性的緩慢變化、退款與取消、訂單層級與商品層級的折扣、幣別、稅金、運費、訪客結帳,以及延遲抵達的資料。我會定義作為單一事實來源的指標,並為財務、行銷、產品與營運建立語意模型或 data mart。
驗證方面,我會把營收與財務對帳、訂單數與交易系統對帳、退款總額與付款系統對帳,以及庫存與倉儲系統對帳。
可能的追問
fact_order_items 的粒度是什麼?
退款你會怎麼建模?
商品類別隨時間變動,你會怎麼處理?
框架: 依是否需要保留歷史,選擇 Type 1 或 Type 2
適合的做法取決於歷史資料的正確性重不重要。Type 1 會直接覆寫舊值,做法簡單,適合只在乎最新值的情況。Type 2 則會在每次屬性變動時新增一列維度資料來保留歷史,通常會搭配 effective_start_date、effective_end_date、current_flag 和代理鍵。
舉例來說,如果某位顧客的區域從 West 改成 East,Type 1 會把這位顧客的資料列直接更新成 East,結果歷史營收報表會把過去的營收也算在 East 底下,這可能是錯的。Type 2 會保留原本 West 那一列,再新增一列 East,讓事實表能 join 到事件發生當下的正確版本。
Type 2 會增加複雜度:代理鍵、日期區間 join、延遲抵達的事實資料、目前報表與歷史報表的區分,以及更大的維度表。當報表必須反映事件發生當時的屬性時,就適合用 Type 2。
好的回答會先說明業務需求,再決定要用哪一種 SCD 類型。
可能的追問
什麼情況下用 Type 1 就可以?
事實表要怎麼 join 到 Type 2 維度表?
遇到延遲抵達的事實資料會怎樣?
中等 · 資料建模
Star schema 與反正規化寬表:各自在什麼情況下使用?
框架: 治理與彈性,對比查詢簡潔度與效能
Star schema 會把事實表和維度表分開。當你需要可重複使用的維度、一致的指標、治理、明確的粒度和彈性分析時,它就很有用。它能減少資料重複,維度的變更也比較好管理。
反正規化的寬表則適合特定的高使用量分析、機器學習特徵,或重視查詢簡潔度與效能的儀表板。它能為使用者減少 join 的複雜度,但可能造成資料重複;如果許多寬表各自用不同方式定義指標,也會產生治理風險。
實務上,我通常會維護一套乾淨、標準的事實表和維度表,再針對特定使用情境發布整理好的 data mart 或寬表。資料倉儲的基礎層要維持可信,下游模型再針對使用者需求做最佳化。
最後的決定取決於資料規模、使用者是誰、BI 工具的運作方式、成本、延遲,以及業務定義多常變動。
可能的追問
哪一種比較適合 BI 儀表板?
你會怎麼避免指標不一致?
什麼是語意層?
管線設計與排程編排 管線面試要看你能否設計出具冪等性、可觀測、可復原,並符合資料新鮮度與成本需求的工作流程。
可靠的管線設計流程
1
釐清來源系統、資料量、新鮮度需求、下游使用者與容錯程度。
2
選擇擷取模式:批次擷取、CDC、事件串流、API 拉取、檔案投放或代管連接器。
3
定義落地區、原始資料儲存、schema 處理方式與重播策略。
4
透過清楚的分層轉換資料:原始層、清理/暫存層、模型層與服務用的 data mart。
5
讓管線具備冪等性,重新執行時才不會產生重複或損毀的資料。
6
加入資料品質檢查、資料血緣、日誌、警示、指標與負責人資訊。
7
預先規劃回補、schema 演進、延遲資料、重試、部分失敗與成本控管。
中等 · 管線設計
請設計一條每日 ETL 管線,把正式環境資料庫的訂單資料匯入資料倉儲。
框架: 擷取 → 原始資料落地 → 轉換 → 驗證 → 發布 → 監控
我會先釐清需求:資料新鮮度、訂單量、可接受的延遲、來源資料庫的負載限制、下游使用者,以及是否會有歷史資料修正。
一個簡單的設計是:用 updated_at 或 CDC 增量擷取訂單,把原始資料落地到物件儲存或資料倉儲的原始資料表,轉換成暫存表,再發布 fact_orders 和 fact_order_items 這類模型化的事實表。排程編排可以用 Airflow、Dagster、dbt Cloud 或代管的工作流程工具。
這條管線必須具備冪等性。如果針對某個日期或批次重新執行,應該以確定性的方式取代或合併資料,而不是重複附加。watermark 要謹慎使用,並重新處理一段回溯區間,以接住延遲的更新。
驗證檢查包括:資料列數、主鍵為 null、重複的訂單 ID、營收總額、狀態分布、新鮮度,以及與來源端對帳。監控應在失敗、資料量異常變化、重複率偏高或資料延遲時發出警示。同時也要記錄負責人與下游相依關係。
可能的追問
為什麼只靠 updated_at 不一定夠?
你會怎麼避免載入重複的訂單?
你會怎麼回補兩年的歷史資料?
框架: 相同輸入重新執行,產生相同輸出
冪等的管線可以用相同的輸入執行很多次,每次都產生同樣正確的輸出,不會出現重複資料或意外的副作用。這很重要,因為管線會失敗、會被重試,也需要回補。
舉例來說,一條不冪等的管線每次執行都會把昨天的訂單附加進去。如果失敗後重試,營收就會變成兩倍。冪等的版本則會刪除並取代目標分區、依主鍵合併,或先寫入暫存表,再以原子性的方式切換。
要做到冪等,需要明確的鍵、分區策略、確定性的轉換,以及謹慎處理副作用。這是正式環境資料工程最重要的概念之一,因為能不能復原就取決於它。
可能的追問
你會怎麼讓只做附加寫入的管線具備冪等性?
什麼是原子性切換(atomic swap)?
冪等性對回補有什麼幫助?
中等 · SCHEMA 演進
上游來源的 schema 變更,你會怎麼處理?
框架: 偵測 → 分類 → 防護 → 溝通 → 遷移
我會先透過 schema registry、中繼資料檢查、合約測試或擷取時的驗證,自動偵測 schema 變更。接著把變更分類:新增欄位、移除欄位、欄位改名、型別變更、可否為 null 的變更,或語意變更。
新增可為 null 的欄位通常是安全的。移除欄位、欄位改名和型別變更則可能讓下游的轉換和儀表板壞掉。語意變更尤其危險,因為 schema 看起來仍然有效,實際意義卻已經改變。
要保護管線,可以保留原始資料、做相容性檢查、設定警示,並為關鍵來源建立合約。遇到破壞性變更時,要與來源負責人協調、更新轉換邏輯、視需要回補資料,並向下游說明影響範圍。
成熟的回答會提到資料合約、版本控管、資料血緣、測試與明確的負責歸屬,確保 schema 變更不會在無人察覺下破壞分析結果。
可能的追問
什麼是資料合約?
欄位型別變更你會怎麼處理?
如果來源團隊完全沒有事先通知呢?
批次與串流系統 批次與串流題要看你是否理解延遲、吞吐量、順序、狀態、時間視窗、重播,以及較簡單的架構與更即時的架構之間的維運取捨。
批次處理
串流處理
最適合
定期報表、歷史資料回補、大規模轉換、具成本效益的分析
即時功能、警示、詐欺偵測、即時儀表板、低延遲決策
主要取捨
延遲較高,但維運較簡單,重播也較容易
延遲較低,但在狀態、順序與故障處理上更複雜
常用工具
Airflow、dbt、Spark batch、Snowflake、BigQuery、Databricks
Kafka、Flink、Spark Structured Streaming、Kinesis、Pub/Sub
故障風險
延遲資料、部分載入、執行時間過長、回補成本
重複資料、事件亂序、檢查點、狀態膨脹、exactly-once 語意
中等 · 串流 / 架構
什麼情況下你會選擇串流,而不是批次?
框架: 決策時效與複雜度的取捨
當低延遲能帶來實質價值時,我會選擇串流。例子包括詐欺偵測、維運警示、即時個人化、庫存更新、即時實驗指標,以及需要最新事件、直接面對使用者的產品功能。
對於每日報表、歷史分析、財務對帳,以及延遲幾個小時也能接受的轉換,批次通常是更好的選擇。批次的維運比較簡單、比較容易重播,成本也往往比較低。
做決定時應考量新鮮度需求、事件量、順序要求、有狀態處理、容錯能力、團隊的專業能力、成本與下游使用者。串流不會自動比較好,它會在重複資料、延遲事件、檢查點、schema 演進與監控方面增加複雜度。
好的回答會這樣說:採用能滿足業務需求的最簡單架構。如果業務只需要每日指標,就不要為了面子去打造串流系統。
可能的追問
什麼是延遲事件?
在串流中你會怎麼處理重複資料?
exactly-once 是什麼意思?
困難 · 串流 SYSTEM DESIGN
請設計一條即時詐欺事件管線。
框架: 事件 → 串流 → 資料補充 → 規則/模型 → 處置 → 儲存 → 監控
我會先從需求開始:事件量、延遲目標、詐欺決策的類型、對誤判的容忍度,以及決策是要直接阻擋交易,還是觸發審查。
一種可行的設計是:付款事件發布到 Kafka 或 Kinesis。串流處理器消費這些事件、驗證 schema、依 event_id 去重複,補上使用者、裝置、商家與歷史頻率(velocity)特徵,再套用規則或模型。高風險事件會觸發決策服務、進入人工審查佇列,或要求加強驗證。原始事件與決策結果會寫入持久性儲存,供稽核與模型訓練使用。
關鍵的工程考量包括:重複事件、事件亂序、特徵新鮮度、狀態儲存的大小、exactly-once 或 effectively-once 處理、背壓、死信佇列、重播、延遲監控,以及模型與規則的版本控管。
因為詐欺決策會影響顧客,資料品質與治理也很重要。要記錄原因代碼、監控誤判率,並在規則或模型表現異常時支援回滾。
可能的追問
你會怎麼計算頻率(velocity)特徵?
你會怎麼安全地重播事件?
死信佇列是用來做什麼的?
Spark 與分散式處理題 Spark 與分散式處理題要看你是否理解分區、shuffle、資料傾斜、快取、join、檔案格式,以及作業為什麼會失敗或變得昂貴。
中等 · SPARK
Spark 中的 shuffle 是什麼?為什麼成本很高?
框架: 在分區之間重新分配資料
當 Spark 需要在分區之間重新分配資料時,就會發生 shuffle,通常出現在 groupBy、join、distinct、orderBy 和 repartition 這類操作。它之所以昂貴,是因為資料必須透過網路搬移、經過序列化與反序列化、寫入磁碟,還要在各個 executor 之間協調。
Shuffle 常常占掉作業大部分的執行時間;當資料傾斜或中間資料過大時,還可能導致失敗。單一熱門鍵就可能把過多資料送到同一個分區,造成落後任務(straggler)或記憶體不足錯誤。
降低 shuffle 成本的方法包括:提早篩選、只選取需要的欄位、預先彙總、對小表使用 broadcast join、依 join 鍵分區、對傾斜的鍵加鹽(salting)、避免不必要的 distinct/orderBy,以及調整分區數量。
好的回答會把概念連結到實際的 debug:檢查 Spark UI、各個 stage、shuffle 讀寫量、資料傾斜、溢寫(spill)、task 執行時間與 executor 記憶體。
可能的追問
資料傾斜是什麼原因造成的?
什麼時候會使用 broadcast join?
你會怎麼 debug 一個很慢的 Spark 作業?
困難 · SPARK 效能
一個 Spark 作業因記憶體不足(OOM)而失敗,你會怎麼最佳化?
框架: 找出 stage → 減少資料量 → 修正傾斜 → 調整分區 → 避免不良操作
我會先透過 Spark UI 或日誌找出失敗發生在哪裡:哪個 stage、哪個操作、哪個分區、哪個 executor。OOM 可能來自資料傾斜、大型 join、collect 操作、過大的分區、沒效率的 UDF,或快取了太多資料。
接著及早減少資料量:篩選資料列、只選取必要欄位、下推述詞,並避免讀取不需要的分區。再檢查 join:如果其中一張表很小,就用 broadcast join;如果某個鍵有傾斜,就用加鹽或把熱門鍵拆開處理;如果分區太大,就增加分區數量;如果有太多很小的分區,就適度用 coalesce 合併。
避免對大量資料使用 collect();原生函數能做到的就不要用 Python UDF;只有在資料會重複使用、而且記憶體足夠時才快取。輸出檔案時,避免產生太多小檔案,並選擇 Parquet 這類欄式格式搭配壓縮。
如果需要調整資源,可以調整 executor 記憶體、核心數、shuffle 分區數與記憶體額外開銷(memory overhead),但不要只靠加大叢集。修正資料的分布形態與查詢計畫,通常才是更長久的解法。
可能的追問
你會怎麼偵測資料傾斜?
為什麼分區太多也不好?
什麼時候應該快取 DataFrame?
簡單 · 檔案格式
Parquet 和 CSV 相比,為什麼資料工程師做分析時偏好 Parquet?
框架: 欄式儲存、schema、壓縮、述詞下推
Parquet 是欄式檔案格式,而查詢通常只會讀取部分欄位,所以很適合用來做分析。它支援壓縮、會對資料型別編碼、會儲存 schema,在許多引擎中也能做到述詞下推和欄位修剪。
CSV 是以列為主的純文字格式,人可以直接閱讀、可攜性也高,但缺乏嚴謹的型別,檔案可能更大、掃描更慢,在分隔符號和跳脫字元上更容易出錯,也沒辦法有效率地跳過不相關的欄位。
對資料湖和資料倉儲來說,Parquet 通常能降低儲存成本並提升查詢效能。CSV 仍適合簡單的匯出、小檔案或跨系統交換資料,但不適合當作主要的分析儲存格式。
可能的追問
什麼是述詞下推?
什麼情況下 CSV 仍然可以接受?
小檔案會怎麼影響查詢效能?
資料品質與可觀測性 資料品質題要看你能否在錯誤資料破壞儀表板、模型、產品功能、財務報表或面向顧客的系統之前,就先把它攔下來。
中等 · 資料品質
針對關鍵的營收管線,你會加入哪些資料品質檢查?
框架: 新鮮度 → 完整性 → 唯一性 → 有效性 → 對帳
針對營收管線,我會加入這些檢查:新鮮度、資料列數、主鍵為 null、重複的交易 ID、狀態值是否有效、幣別是否有效、適用情況下金額不得為負、日期是否落在可接受範圍內,以及訂單、付款、退款與顧客之間的參照完整性。
我也會加入對帳檢查:將營收總額與來源付款系統、財務報表或上一版管線的結果比對。用門檻值監控與前一天、前一週相比的變化,但要把季節性和已知事件考慮進去。
業務規則也很重要:已取消的訂單不應計入營收、退款應從淨營收中扣除、測試交易應排除,而幣別換算要使用正確的匯率。
警示必須能讓人採取行動、送到負責人手上,並附上背景資訊:哪項檢查失敗、受影響的資料表、嚴重程度、下游相依關係,以及建議參考的 runbook。太多雜訊警示最後只會被忽略。
可能的追問
你會怎麼決定警示門檻?
如果在月結期間檢查失敗,怎麼辦?
你會怎麼避免營收重複計算?
中等 · 事故應變
管線部署之後,儀表板上的數字出現意外變化。你會怎麼做?
框架: 評估影響 → 比較版本 → 檢查資料血緣 → 緩解 → 找出根本原因
我會先評估影響:哪個儀表板、哪個指標、哪些使用者、哪段日期範圍,以及哪些決策受到影響。再判斷這個數字是錯的,還是這次部署其實修正了先前的問題。
接著把新輸出和前一版比較,依資料表、分區、資料列數、不重複計數、指標總額與關鍵分群逐一對照。用資料血緣找出上游的變更,並檢查程式碼變更、schema 變更、篩選條件、join、去重複與日期邏輯。
如果指標確實有錯,而且已經影響到業務使用者,就要快速緩解:回滾轉換邏輯、還原前一版資料表、停用儀表板,或加上警告提示。之後再做根本原因分析,必要時回補修正後的資料。
溝通很重要。我會通知利害關係人哪些地方改變了、影響範圍、目前的把握程度、預計修復時間,以及過去的決策是否需要重新檢視。
可能的追問
你怎麼知道舊數字和新數字哪一個才對?
你會希望有哪些回滾選項?
資料血緣能怎麼幫上忙?
實例解析
正式環境資料事故檢查清單
高層營收儀表板缺少昨天的資料,而距離主管會議只剩兩個小時。
分級研判
檢查管線狀態、來源資料新鮮度、資料倉儲資料表的分區、失敗的任務,並確認問題只影響營收,還是所有儀表板都受影響。
緩解
如果來源資料存在,就重新執行受影響的分區;如果不存在,就在儀表板上加註說明,並提供目前最新可用的數字,同時註明其限制。
溝通
告訴利害關係人缺少哪些資料、哪些決策會受影響、預計何時解決,以及數字是否可能變動。
預防
加入新鮮度警示、上游來源檢查、SLA 監控,以及營收管線故障的 runbook。
結果
這套應變方式結合技術面的復原與清楚的利害關係人溝通,守住大家對資料的信任。
資料工程 System Design 資料工程的 system design 面試會評估你的架構判斷力:資料來源、擷取、儲存、轉換、資料服務、品質、資料血緣、治理與成本。
困難 · 資料 SYSTEM DESIGN
請為產品分析事件設計一套資料平台。
框架: 埋點 → 擷取 → 儲存 → 處理 → 建模 → 資料服務 → 治理
我會先從需求開始:事件量、延遲、使用者、保留期限、schema 演進、隱私與可靠性。產品分析事件可能會用在儀表板、實驗、個人化與機器學習特徵。
用戶端透過 SDK 送出事件,內容包含 event_name、user_id、session_id、timestamp、properties、App 版本、平台與匿名 ID。事件先送到擷取 API 或事件收集器,再進入 Kafka/Kinesis/Pub/Sub 這類持久性串流。原始事件會寫入物件儲存以便重播,同時寫入資料倉儲或 lakehouse 供分析使用。
處理流程包括 schema 驗證、去重複、過濾機器人與內部流量、session 切分、身分整合,並轉換成 fact_events、fact_sessions、dim_users 與各產品專屬 data mart 等模型化資料表。依新鮮度需求,批次與串流兩條路徑可能並存。
品質與治理方面:事件合約、schema registry、PII 處理、使用者同意的落實、資料血緣、負責歸屬、新鮮度檢查、資料量異常警示,以及文件。資料服務層包括 BI 儀表板、實驗分析、reverse ETL 與 feature store。
需要取捨的地方包括:即時與批次的成本、嚴格與彈性的 schema、原始事件的保留時間、身分整合的複雜度,以及多少邏輯該放在擷取階段、多少該放在轉換階段。
可能的追問
你會怎麼處理 schema 演進?
你會怎麼為事件去重複?
分析師會查詢哪些資料表?
困難 · ML 資料基礎架構
請為機器學習團隊設計一套 feature store。
框架: 離線/線上一致性 → 特徵定義 → 新鮮度 → 資料服務 → 監控
Feature store 應該為模型訓練與線上服務提供可重複使用、可靠的特徵。需求包括特徵定義、時間點正確性、離線訓練資料、線上低延遲服務、新鮮度、存取控制與監控。
離線特徵可以存放在資料倉儲或 lakehouse,依日期與實體分區;線上特徵可以由低延遲的鍵值儲存提供。特徵註冊表會儲存中繼資料:特徵名稱、負責人、實體鍵、轉換邏輯、新鮮度 SLA、來源資料表與說明。
時間點正確性非常關鍵。訓練資料必須使用預測當下就已經存在的特徵值,而不能用到未來的值。為了確保線上與離線一致,應盡可能重複使用同一套轉換邏輯;如果兩邊是分開的管線,就要做充分的測試。
監控應涵蓋特徵新鮮度、null 比例、分布漂移、線上服務延遲、training-serving skew,以及對下游模型的影響。治理則包括 PII 控管、資料血緣、淘汰機制與負責歸屬。
可能的追問
什麼是時間點正確性?
你會怎麼避免 training-serving skew?
哪些特徵需要線上服務?
行為與協作題 資料工程的行為面試聚焦在正式環境的當責、事故應變、跨部門溝通、排定優先順序,以及打造其他團隊能信任的系統。
中等 · 行為面試 / 事故應變
請分享一次你處理資料管線事故的經驗。
框架: 影響 → 研判 → 緩解 → 根本原因 → 預防
挑一個真正造成影響的事故:資料缺漏、指標錯誤、管線延遲、重複紀錄、儀表板壞掉、模型特徵出問題,或是影響到下游產品。開頭先講清楚誰受到影響、為什麼這件事重要。
接著說明你的研判過程:日誌、排程編排狀態、來源資料新鮮度、近期部署、schema 變更、資料列數、分區、資料血緣與下游相依關係。再描述你如何緩解問題:重新執行、回滾、修補、回補資料,或先向利害關係人發出提醒。
最有力的回答會包含預防措施。你是否加入了資料品質檢查、警示、重試、schema 合約、冪等寫入、runbook、資料血緣,或更好的部署管控?不要把責任推給上游團隊,要展現你對系統與溝通的當責。
最後談談你從中學到哪些關於可靠性的經驗,以及之後你的做法有什麼改變。
可能的追問
你是怎麼說明影響範圍的?
有什麼機制能更早發現這個問題?
你是怎麼防止問題再次發生的?
中等 · 利害關係人溝通
當分析師說資料有錯時,你會怎麼和他們合作?
框架: 釐清 → 重現 → 追蹤資料血緣 → 解決 → 記錄
我會先釐清到底哪裡看起來不對:哪個指標、哪張資料表、哪段日期範圍、哪個儀表板、用了什麼篩選條件、預期的數值是多少,以及背後的業務理由。「資料有錯」必須先變成一個可以重現的問題。
接著把分析師的查詢或儀表板,和來源資料表及模型定義做比較,檢查粒度、篩選條件、join、時區、新鮮度、指標定義和近期變更,並用資料血緣追蹤上游相依關係。
如果資料真的有錯,我會修正並說明影響範圍;如果資料正確,只是定義和對方預期不同,就要對齊指標定義並補上文件;如果還有不確定的地方,我會說明目前已知的部分、正在檢查的項目,以及什麼時候會回覆進度。
關係很重要。分析師是資料平台的客戶,信任要靠快速、清楚、以證據為本的回應來建立。
可能的追問
如果是分析師用錯了資料表呢?
你會怎麼避免同樣的困惑一再發生?
哪些文件最有幫助?
中等 · 優先順序
你會怎麼排定資料工程工作的優先順序?
框架: 影響 → 可靠性 → 急迫性 → 相依關係 → 槓桿效益
我會依業務影響、可靠性風險、急迫性、下游相依關係和槓桿效益來排序。壞掉的營收管線或法遵問題,通常優先於可有可無的儀表板模型;如果某項平台改善能讓很多團隊不再卡關,它也可能優先於一次性的需求。
我也會區分緊急事故、策略性的平台工作、利害關係人需求、技術債,以及重複性的維運雜務。如果團隊只顧著處理工單,可靠性和平台品質就會逐漸變差;如果團隊只顧著打造平台抽象層,業務團隊可能就會被卡住。
好的優先順序流程包括明確的負責歸屬、SLA、嚴重程度分級、與 roadmap 對齊,以及透明的取捨。我會說明正在做什麼、延後了什麼、原因是什麼,以及這樣會帶來哪些風險。
可能的追問
你會怎麼說明投入技術債的必要性?
如果主管急著要一個儀表板呢?
你會怎麼在事故處理和 roadmap 之間取得平衡?
資料工程師面試準備策略 準備資料工程師面試時,要同時兼顧 SQL、資料建模、Python、管線設計、分散式系統、雲端資料倉儲概念,以及說好正式環境事故的故事。
6 週資料工程師面試準備計畫
1
第 1 週:SQL 深度。練習 join、視窗函數、去重複、增量模型、cohort、分區與效能 debug。
2
第 2 週:資料建模。練習事實表、維度表、粒度、SCD、事件模型、資料倉儲 data mart 與指標定義。
3
第 3 週:管線。練習 ETL/ELT 設計、冪等性、排程編排、回補、延遲資料、schema 變更與資料品質檢查。
4
第 4 週:分散式處理。複習 Spark、shuffle、分區、資料傾斜、檔案格式、串流概念,以及成本與效能的取捨。
5
第 5 週:system design。練習產品分析平台、CDC 擷取、feature store、串流詐欺管線與資料倉儲架構。
6
第 6 週:模擬面試與故事準備。準備管線事故、資料品質、利害關係人、優先順序與平台改善的實例。
依資料工程方向準備
•
分析工程:專注於 dbt、SQL 模型、語意層、指標定義、BI 可靠性與利害關係人的工作流程。
•
平台資料工程:專注於擷取系統、排程編排、資料血緣、治理、存取控制與開發者體驗。
•
串流資料工程:專注於 Kafka、Flink/Spark streaming、狀態、時間視窗、重複資料、順序、重播與延遲。
•
ML 資料工程:專注於特徵管線、feature store、時間點正確性、訓練資料與監控。
•
雲端資料倉儲工程:專注於 Snowflake、BigQuery、Databricks、分區、叢集化、成本控管與工作負載管理。
不要只談工具
面試官不太在意你是否叫得出 Airflow、dbt、Spark 或 Kafka 這些名字,更在意你是否理解可靠性、資料正確性、各種取捨與失敗模式。
重點整理
出色的資料工程師面試回答,會結合 SQL 的正確性、清楚的資料建模、可靠的管線、分散式系統的判斷力,以及對正式環境的當責。最好的候選人會證明自己能打造其他團隊信任的資料系統。