電腦科學基礎:程式/進程/執行緒、記憶體管理與 GC、作業系統核心概念(排程、死鎖、IPC、虛擬記憶體)、網路協定、資料結構與演算法複雜度速查。
FAQ - 常見面試問答
涵蓋 Java、後端、資料庫、串流系統等主題的面試問答整理。
綜合12 篇
Covers: 0. 用 Python 準備資料工程師面試 · 1. file format 和 storage system 差在哪? · 2. Cluster 和 Node 差在哪?
資料工程師面試的高層次地圖與考前檢查清單:每個主題各列出你必須能說出口的幾個重點,並連到 de/ 底下的深入解析,那裡才有機制、程式碼與追問題。
Covers: 1) 資料建模有哪些設計 schema?請舉例說明 · 2) 星型和雪花哪個比較好? · 3) 什麼是事實表、維度表?
Covers: 總覽 · 行為回合在評估什麼 · 為什麼它重要
Covers: 1. Docker 基礎 · 容器 vs 虛擬機 · Dockerfile 重要概念
一份實用、不綁語言的筆記:怎麼找出並修掉效能問題,最後再附上 Java 專屬的技巧。
Python 語言本身:物件模型、可變性、函式與裝飾器、迭代器、OOP、記憶體管理、型別註記、打包,以及面試官真的會探的那些坑。
Python 實際上怎麼跑並發:GIL、執行緒與行程與 asyncio 的取捨、同步原語,以及該怎麼選。
一個程式怎麼被載入、在記憶體裡怎麼擺、又怎麼被執行 —— 系統與語言內部機制面試常問的 那些概念。
資料工程16 篇
— 資料工程面試所期待的分析知識,以及如何談自己的分析經驗:「分析經驗」類問題在探什麼、精確定義指標、比率指標與平均陷阱、常見的產品指標、建出讓人信任的指標表(可加總 vs 不可加總的度量、sketch、所有使用者共用同一個定義)、從資料工程師角度看 A/B test(分組指派、曝光紀錄、樣本比例不符、解讀結果)、找出指標變化的根因,以及讓儀表板快速回應。cohort、漏斗與 session 的 SQL 歸 sql_for_data.md;星型模型與語意層歸…
— 資料工程面試所考的 AWS 資料技術棧:S3、Glue Data Catalog、Glue ETL、EMR、Athena 與 RDS 如何拼在一起、如何在各種運算服務之間做選擇、Glue job 與 bookmark、EMR 叢集組成與 EMR Serverless、在 S3 上搭配 Glue catalog 使用 Apache Iceberg、Athena 的計費模型、分區與 Iceberg DML、如何把資料從 RDS 取出(JDBC、snapshot…
— 資深資料工程面試中 AWS 的「服務選型」題:每個服務負責哪一層,以及如何在功能相近的服務之間選出一個並為它辯護 —— S3 vs EBS vs EFS、RDS vs DynamoDB vs Redshift、Kinesis Data Streams vs Firehose vs MSK、SQS vs SNS vs EventBridge vs Kinesis、Glue vs EMR vs Lambda、Athena vs Redshift、Step Functions…
— 資料工程面試關於批次管線會問的一切:參考架構、ETL vs ELT、lake vs warehouse vs lakehouse、資料擷取模式、冪等性與回補、遲到資料、MERGE、用 Airflow 做編排、dbt、資料品質、檔案與表格格式、成本、故障處理、PII,以及一題完整的設計題。表格與分區設計在 schema 設計文件;串流在串流管線文件。
分析用的邏輯資料建模,以及它會引出的面試題:建模層次、ER 與正規化、OLTP vs OLAP、Kimball 維度建模(粒度、事實、維度、bus matrix)、事實與維度的設計模式、緩慢變化維度、Inmon、Data Vault、One Big Table、語意層,以及一個完整的案例。實體表格設計 —— 分區、鍵、演進、型別 —— 屬於 schema_design.md。
— 資料工程面試跨引擎而非針對單一引擎所問的效能題:回答任何「讓它變快」問題的方法、最佳化資料的儲存方式、最佳化資料的處理方式、在 Spark、關聯式資料庫、MPP 查詢引擎與單機工具中避免記憶體不足(OOM)、資料的重新排序與合併(sorting、clustering、Z-order、compaction、MERGE、external merge sort、LSM compaction)、儲存系統的讀取與寫入效能,以及讓查詢變快的 SQL…
資料工程面試會探的 Flink 引擎本身:runtime(JobManager、TaskManager、slot、chaining)、部署、DataStream 與 Table / SQL API、程式碼裡的 watermark 與 timer、state backend、checkpoint 與 savepoint 設定、搭配 Kafka 的 exactly-once、Flink SQL 的 join 與 CDC、背壓、記憶體、維運與常見故障 —— 以 Flink…
資料工程師面試會探的 Hadoop 生態系:HDFS 內部機制、MapReduce 從頭到尾、YARN、Hive、HBase、ZooKeeper、周邊工具、檔案格式,以及整個技術棧如何移往物件儲存與 lakehouse。Spark 本身不在本篇範圍內。
— 資料工程師面試會問到的 Kafka:儲存 log、副本機制、KRaft controller、producer 與 consumer 的內部運作、投遞語意與 transaction、retention 與 compaction、容量規劃、Kafka Connect 與 CDC、Schema Registry、安全性、維運與故障情境;串流處理的語意(視窗、watermark、狀態)屬於串流管線那份文件。
資料系統的實體 schema 設計:怎麼回答 schema 設計題、OLTP 資料表、約束與索引、鍵與 ID 生成、資料倉儲的分區 / clustering / 分佈、資料型別、NULL 與命名慣例、軟刪除與多租戶、schema 演進、事件 schema,以及 PostgreSQL、BigQuery 與 Spark / Delta 的完整 DDL 範例。不涵蓋邏輯層的維度建模(star schema、SCD)與 NoSQL 的查詢優先建模。
資料工程面試會探的 Apache Spark 全部內容:執行模型、API 與最佳化器、shuffle、分區、join 與資料傾斜、快取、記憶體與序列化、PySpark 細節、寫入、Structured Streaming 與它的 watermark、調校、除錯與常見故障 —— 以 Spark 3.5 為準,並標出 Spark 4.0 的差異。
— 資料工程面試所考的查詢計畫判讀:EXPLAIN、EXPLAIN ANALYZE 與 BUFFERS 各自回報什麼、如何走讀計畫樹、scan 節點、估計列數與實際列數、三種 join 演算法在計畫中的樣子、sort 與 hash 的 spill、buffer 與 I/O 計數器、一個慢查詢的完整診斷,以及同一套判讀方式如何套用到 Spark SQL。以 PostgreSQL 16–18 為準。SQL 本身的寫法、索引設計與資料倉儲的調校手段歸…
— 資料工程面試所考的分析型 SQL:查詢如何被求值、join 與其演算法、NULL 語意、彙總、window function、CTE 與遞迴、經典面試查詢題型、MERGE 與 upsert、日期與時區、查詢效能,以及 PostgreSQL、BigQuery、Snowflake、Spark SQL 之間的方言差異。資料表設計歸 schema_design.md;選哪種資料庫歸 sql_vs_nosql.md。
— 資深資料工程面試 SQL 關卡的題庫:每一題都照面試官的問法提出,然後回答 —— 要說出口的那句話、SQL、每一個追問、大規模下的成本,以及 production 上的取捨。內容涵蓋大規模 join、去重、window function、分析型聚合、gaps and islands、session、遞迴 CTE、用 MERGE 做增量載入、SCD Type 2、查詢優化,以及有幾個 task 特別慢的 Spark…
把關聯式資料庫與各個 NoSQL 家族放在一起比較:交易與隔離、儲存引擎、複製與分片、CAP 與一致性模型、每個家族一個代表性的儲存、查詢優先建模、NewSQL,以及在設計題中怎麼選儲存。資料倉儲建模屬於資料建模那份深入解析,不在這裡。
資料工程師面試會問到的串流處理全貌:何時該用串流、參考架構、時間語意與 watermark、視窗與遲到資料、狀態與 checkpoint、端到端 exactly-once、串流 join、背壓與擴展、各引擎(Flink、Spark Structured Streaming、Kafka Streams、Beam)、即時服務與維運。Kafka broker 內部機制不在這裡 —— 它們屬於 kafka.md。
Java14 篇
把系統的寫入模型與讀取模型拆開:CQRS 帶來什麼(簡單、可擴展、速度)、代價是什麼(最終一致性、投影器、重複的程式碼),以及什麼時候值得這樣做。
Java 面試會用到的物件導向基本功:四大支柱、interface 與 abstract class 的取捨、組合優於繼承、SOLID 與日常原則,以及物件的幾份契約。
語言的核心機制:primitive 與參考型別、字串、初始化順序、Object 的方法、巢狀類別、反射、I/O 與日期時間 API。
集合框架:整個階層、ArrayList 與 LinkedList 的差別、HashMap 與 ConcurrentHashMap 的內部結構,以及每個操作的 Big-O。
真正會在 Java 面試與 code review 出現的 GoF 模式,每個都附最小範例,以及 JDK 或 Spring 已經用它的地方。
Throwable 階層、checked 與 unchecked 的差別、try/catch/finally 的運作細節、try-with-resources,以及應用程式裡處理例外的設計準則。
Java 8 的函數式工具箱:lambda、方法參考、內建的函數式介面、Stream API、collector,以及 Optional。
型別參數、型別抹除(type erasure)以及由它衍生的一切:有界型別、通配符與 PECS、泛型方法,還有為什麼泛型陣列不合法。
Java 8 之後改了什麼:var、record、sealed 型別、模式比對、text block、模組系統,以及虛擬執行緒。
怎麼寫出正確的並發 Java:執行緒生命週期、synchronized 與 ReentrantLock、CAS 與 atomic、執行緒池、CompletableFuture、ThreadLocal 以及並發集合。
容器(IoC/DI、bean 生命週期與 scope)、AOP、@Transactional 的語意、Spring MVC 的請求路徑、Spring Boot 的自動組態,以及測試。
Java 的測試驅動開發:red-green-refactor 循環、JUnit 5、AAA 結構、mock,以及什麼才值得測。
一條執行緒寫的值什麼時候會被另一條看到:原子性、可見性、順序性、happens-before,以及 volatile、synchronized、final 各自保證了什麼。
JVM 怎麼存放、執行與回收:執行期記憶體區域、物件的建立、垃圾回收與各種收集器、參考強度、類別載入、JIT,以及診斷一台生病的 JVM 要用的旗標與工具。
後端12 篇
設計一支 HTTP API:資源建模、狀態碼、冪等、分頁、版本管理、錯誤格式、認證授權,以及 REST 和 GraphQL、gRPC 的比較。
Covers: 1. Session(傳統方式) · 運作流程 · Session 儲存位置
Covers: 高流量模式 · 1. 冪等的請求處理 · 最初的設計(V0 — 面試白板版)
Covers: 執行緒池與 Executor 框架 · 1. ThreadPoolExecutor 細看 · 2. 拒絕策略比較
Covers: 進階並發 · 1. Fork/Join 框架 · 2. 無鎖程式設計
Covers: 設定隔離級別 · Session 級別(當前連線) · 全域級別(影響所有新連線)
常見 4xx / 5xx 錯誤碼各代表什麼、常見成因、client 端與 server 端該怎麼處理與排查(含哪些可以重試);不談設計 API 時該回哪個狀態碼與錯誤格式。
Covers: 1. 什麼是冪等性 · 2. 為什麼 LLM 工具特別需要冪等性 · 3. 基礎實作:Check-Act-Record
Covers: 問題 · 幾種做法 · 1. 原子遞減 DECR(Redis)
Covers: 1. HTTP Keep-Alive(持久連線) · 2. HTTP Pipelining · 3. Long Polling 長輪詢
設計「接收端」的 webhook 整合:簽章驗證、去重、快速 ACK、非同步處理、重試與 DLQ、亂序事件與可觀測性;不談一般 HTTP API 的設計,也不談長連線推播。
Covers: 1. 資料庫相關 · 1.1 資料庫隔離級別 (Transaction Isolation Levels) · ACID 特性
資料庫3 篇
Covers: 1) 資料庫的類型 · 2) 資料庫的性質 · 3) 資料庫設計
Covers: 1) array_to_string:陣列轉字串 · 2) cast:型別轉換 · 2’) to_char:型別轉換
SQL2 篇
Covers: 髒讀(dirty read)、更新遺失(lost update)、不可重複讀(unrepeatable read)、幻讀(phantom read) · MySQL 索引 · MySQL explain(執行計畫)
Covers: 1. 有兩張表 a(3k 筆)、b(4k 筆), · 2. SQL 裡 full outer Join 和 Union 差在哪? · 3. 找出某一季的訂單?(不要寫死)
Redis3 篇
Covers: Redis 資料結構 · Redis 部署模式 · Redis 為什麼快?
Redis 是一個強大的開源記憶體資料結構儲存系統,在現代後端系統裡被廣泛使用。 它常被用來做快取、session 儲存、即時分析與訊息系統等等。 對後端工程師來說,懂 Redis 是優化效能、建立可擴展系統的關鍵。
Covers: Sorted set (ZSET) · 🧠 Redis Sorted Set 入門 · ✅ Redis 排行榜的基本操作
Kafka1 篇
Covers: 1) 說明 Kafka 架構? · 1’) Kafka 的訊息結構? · 1’') Kafka 怎麼靠 index 找到 .log 檔?
Spark 與 Hadoop3 篇
Hadoop 的延伸閱讀清單:HDFS 架構、一份經典面試題目清單、HA 設定與節點上下線。答案本身在深入解析裡。
如何把 SQL 查詢寫成 MapReduce job 的延伸閱讀清單。MapReduce 模型本身在別處回答。
經典的 Spark / Hadoop 面試題,每題都用你會說出口的幾句話回答;外加把這些題目變成練習的排錯演練、管線設計題與讀書計畫。每個答案背後的機制在深入解析 ../de/spark.md 裡,這份文件只連過去,不重複。
Flink1 篇
較早的筆記,留著是為了裡面的圖。準備面試請先讀深入解析 ../de/flink.md。
串流處理1 篇
Covers: 從零寫一個簡單的串流 · 把多條輸入串流合併成一條
💡 提示:這些問答是為技術面試準備時的快速查閱而寫的。
在 GitHub 上瀏覽全部 FAQ。