Chuẩn bị cho phỏng vấn kỹ sư dữ liệu với các câu hỏi về SQL, mô hình hóa dữ liệu, pipeline ETL, hệ thống batch và streaming, Spark, điều phối pipeline, kho dữ liệu, chất lượng dữ liệu và system design.
Phỏng vấn kỹ sư dữ liệu nhằm đánh giá bạn có xây dựng được hệ thống dữ liệu đáng tin cậy hay không: thu nạp dữ liệu thô, mô hình hóa rõ ràng, biến đổi hiệu quả, kiểm soát chất lượng, điều phối pipeline và đưa dữ liệu đến tay nhà phân tích, nhà khoa học dữ liệu, đội sản phẩm và các bộ phận kinh doanh.
4-6
Số vòng phỏng vấn thường gặp
45-75 phút
Thời lượng vòng kỹ thuật
6+
Mảng kỹ năng cốt lõi
5-8 tuần
Thời gian chuẩn bị khuyến nghị
Người phỏng vấn kỹ sư dữ liệu đánh giá điều gì
•
Chiều sâu SQL: bạn có viết được truy vấn chính xác, hiệu năng tốt với join, window function, khử trùng lặp và logic tăng dần (incremental) không?
•
Mô hình hóa dữ liệu: bạn có thiết kế được bảng, schema, grain, partition và dimension thay đổi chậm cho các bài toán thực tế không?
•
Thiết kế pipeline: bạn có xây dựng được luồng xử lý batch và streaming đáng tin cậy, dễ giám sát và khôi phục được khi gặp sự cố không?
•
Tư duy hệ thống phân tán: bạn có lập luận được về Spark, partition, shuffle, state, độ trễ và thông lượng không?
•
Chất lượng dữ liệu: bạn có ngăn được dữ liệu sai âm thầm lọt vào dashboard, mô hình và các tính năng đang chạy production không?
•
Tư duy nền tảng: bạn có cân bằng được chi phí, hiệu năng, độ mới của dữ liệu, quản trị dữ liệu (governance), lineage và trải nghiệm của lập trình viên không?
•
Làm chủ hệ thống production: bạn có gỡ lỗi sự cố, backfill (chạy bù dữ liệu lịch sử) an toàn, quản lý thay đổi schema và truyền đạt mức ảnh hưởng không?
Kỹ thuật dữ liệu là đảm bảo độ tin cậy cho dữ liệu
Kỹ sư dữ liệu giỏi không chỉ chuyển dữ liệu từ A sang B. Họ làm cho dữ liệu đáng tin, dễ hiểu, dễ tìm, mở rộng được và khôi phục được khi có sự cố.
Quy trình phỏng vấn kỹ sư dữ liệu
Quy trình phỏng vấn kỹ sư dữ liệu thường gồm các vòng SQL, Python hoặc lập trình, mô hình hóa dữ liệu, thiết kế pipeline, system design, Spark hoặc xử lý phân tán, gỡ lỗi và phỏng vấn hành vi.
Các vòng phỏng vấn kỹ sư dữ liệu thường gặp
1
Vòng sàng lọc với chuyên viên tuyển dụng: xác nhận mức độ phù hợp với vị trí, tech stack, mức đãi ngộ, địa điểm làm việc và kinh nghiệm trong lĩnh vực.
2
Vòng sàng lọc với quản lý tuyển dụng: tìm hiểu kinh nghiệm phụ trách pipeline, mô hình hóa dữ liệu, xử lý sự cố production và phối hợp với đội phân tích hoặc đội sản phẩm.
3
Vòng SQL: kiểm tra join, window function, khử trùng lặp, biến đổi tăng dần, truy vấn dạng cohort và ý thức về hiệu năng.
4
Vòng lập trình: thường tập trung vào Python, kiểm tra cấu trúc dữ liệu, xử lý file, API, phân tích cú pháp (parsing) hoặc các phép biến đổi kiểu pipeline.
5
Vòng mô hình hóa dữ liệu: yêu cầu bạn thiết kế bảng trong kho dữ liệu, schema sự kiện, mô hình fact/dimension hoặc cấu trúc lakehouse.
6
Vòng system design: yêu cầu bạn thiết kế hệ thống thu nạp dữ liệu, ETL/ELT, streaming, điều phối, giám sát, lineage và kiểm soát chất lượng.
7
Vòng hành vi: đánh giá tinh thần làm chủ công việc, cách xử lý sự cố, giao tiếp với các bên liên quan, khả năng làm việc khi yêu cầu chưa rõ ràng và phối hợp liên phòng ban để hoàn thành công việc.
Kỹ sư dữ liệu mảng phân tích
Kỹ sư dữ liệu mảng nền tảng / streaming
Trọng tâm chính
Mô hình hóa kho dữ liệu, biến đổi bằng dbt/SQL, chất lượng dữ liệu báo cáo, chỉ số kinh doanh
Hạ tầng thu nạp dữ liệu, streaming, xử lý phân tán, độ tin cậy, quy mô nền tảng
Vòng phỏng vấn thường gặp
SQL, mô hình hóa chiều (dimensional modeling), yêu cầu từ các bên liên quan, điều phối pipeline
System design, Spark/Flink/Kafka, state, partition, mở rộng quy mô, sự cố vận hành
Tín hiệu tốt
Xây dựng mô hình đáng tin cậy để nhà phân tích và bộ phận kinh doanh yên tâm sử dụng
Thiết kế hệ thống bền bỉ, chịu được khối lượng lớn, đáp ứng độ trễ thấp và xử lý tốt khi có lỗi
Lỗi thường gặp
Mô hình hóa bảng mà không có grain, người phụ trách hay định nghĩa chỉ số rõ ràng
Thiết kế kiến trúc streaming mà không tính đến exactly-once, replay, state hay giám sát
Xác định rõ vị trí kỹ sư dữ liệu bạn đang nhắm tới
Phỏng vấn analytics engineer tập trung vào kho dữ liệu rất khác với phỏng vấn kỹ sư dữ liệu cho nền tảng streaming. Hãy điều chỉnh việc chuẩn bị theo tech stack và trách nhiệm ghi trong mô tả công việc.
Câu hỏi về SQL và biến đổi dữ liệu
Câu hỏi SQL dành cho kỹ sư dữ liệu thường xoay quanh tính đúng đắn và mức sẵn sàng cho production: grain, khử trùng lặp, logic tăng dần, window function, partition và hiệu năng.
Phương pháp: Window function với thứ tự sắp xếp xác định
Tôi dùng window function để đánh số thứ tự dòng trong từng partition theo event_id. Sắp xếp giảm dần theo cột phản ánh độ mới đáng tin cậy nhất, chẳng hạn ingestion_timestamp hoặc updated_at. Nếu có khả năng trùng giá trị, tôi thêm một cột tie-breaker để thứ tự luôn xác định, chẳng hạn source_sequence_number hoặc raw_file_name.
Mẫu truy vấn là: chọn tất cả các dòng, tính row_number() over(partition by event_id order by ingestion_timestamp desc, source_sequence_number desc), rồi lọc lấy các dòng có row_number = 1.
Chi tiết quan trọng mà người phỏng vấn muốn nghe là tính xác định (determinism). Nếu hai bản ghi có cùng timestamp mà không có tie-breaker, kết quả có thể khác nhau giữa các lần chạy. Cũng cần làm rõ “sự kiện mới nhất” nghĩa là thời điểm nạp mới nhất, thời điểm xảy ra sự kiện mới nhất hay thời điểm cập nhật ở nguồn mới nhất.
Trên production, tôi sẽ theo dõi tỷ lệ trùng lặp, các sự kiện đến muộn, số event_id bị null và liệu việc khử trùng lặp có làm các chỉ số phía sau thay đổi bất thường hay không.
Câu hỏi nối tiếp thường gặp
Nếu thiếu event_id thì sao?
Bạn sẽ xử lý các bản sửa dữ liệu đến muộn như thế nào?
Cách làm này thay đổi ra sao khi xử lý tăng dần?
Phương pháp: Lọc sự kiện hoạt động -> chuẩn hóa ngày -> nhóm theo ngày và người dùng
Trước tiên cần định nghĩa thế nào là người dùng hoạt động. Thông thường, không phải sự kiện nào cũng được tính. Lượt xem trang, sự kiện do bot tạo ra, các lần làm mới chạy nền và người dùng nội bộ có thể cần loại trừ. Tôi sẽ chọn những sự kiện có ý nghĩa như session_start, purchase, message_sent hoặc feature_used, tùy theo sản phẩm.
Tiếp theo, tôi tạo một bước biến đổi lọc ra các sự kiện hợp lệ, chuyển timestamp của sự kiện sang múi giờ kinh doanh, nhóm theo activity_date và user_id, rồi xuất ra một dòng cho mỗi người dùng hoạt động mỗi ngày. Nếu bảng cuối là bảng tổng hợp, tôi đếm số người dùng riêng biệt theo ngày. Nếu đó là bảng phục vụ truy vấn (serving model), tôi lưu date, user_id, platform, country và first_active_timestamp.
Các chi tiết quan trọng khi chạy production gồm múi giờ, sự kiện đến muộn, lọc bot/dữ liệu test, người dùng đã bị xóa, sự kiện trùng lặp và partition theo activity_date. Với cách xây dựng tăng dần, cần xử lý lại các partition gần đây để bắt được sự kiện đến muộn, chứ không chỉ riêng ngày hiện tại.
Một câu trả lời tốt còn có bước kiểm tra: đối chiếu DAU với số lượng sự kiện ở nguồn, theo dõi biến động giữa các ngày và kiểm tra tính nhất quán theo từng phân khúc.
Câu hỏi nối tiếp thường gặp
Những sự kiện nào nên được tính là hoạt động?
Bạn sẽ xử lý sự kiện đến muộn như thế nào?
DAU nên là một bảng hay một truy vấn chỉ số?
Phương pháp: Phạm vi -> query plan -> tăng trưởng dữ liệu -> join -> partition -> thay đổi gần đây
Trước hết, tôi kiểm tra xem vấn đề nằm ở riêng truy vấn này, ở toàn bộ kho dữ liệu hay ở hạ tầng. Nếu nhiều truy vấn cùng chậm đi, nguyên nhân có thể là năng lực của cluster, tải của warehouse hoặc dịch vụ đang suy giảm. Nếu chỉ một truy vấn chậm, tôi xem xét chính truy vấn đó và dữ liệu.
Tôi rà soát các thay đổi gần đây: bảng tăng kích thước, schema thay đổi, join mới, bộ lọc bị sửa, mất partition pruning, thống kê đã cũ, dữ liệu bị lệch (skew), join làm bùng nổ số dòng, hoặc mới thêm các thao tác distinct/order by. Nếu xem được query plan, tôi cũng rà soát luôn.
Nguyên nhân thường gặp gồm join sai grain, thiếu bộ lọc theo ngày, join nhiều-nhiều, quét toàn bộ partition, window function kém hiệu quả, shuffle lớn, hoặc áp dụng hàm lên cột partition khiến không thể pruning.
Cách khắc phục có thể là lọc sớm hơn, tổng hợp trước, thêm bộ lọc partition, clustering/sorting, materialize các mô hình trung gian, cập nhật thống kê, giảm số cột được chọn hoặc sửa lại logic join. Tôi cũng sẽ thêm giám sát thời gian chạy, lượng byte quét, số dòng và chi phí.
Câu hỏi nối tiếp thường gặp
Partition pruning là gì?
Join có thể làm số dòng bùng nổ như thế nào?
Bạn sẽ ngăn hiệu năng bị suy giảm như vậy tái diễn ra sao?
Câu hỏi về mô hình hóa dữ liệu và kho dữ liệu
Vòng mô hình hóa dữ liệu đánh giá bạn có thiết kế được schema rõ ràng, dễ mở rộng, tối ưu chi phí và hữu ích cho phân tích, machine learning và báo cáo vận hành hay không.
Các khái niệm mô hình hóa dữ liệu cần nắm
Bảng fact
Bảng chứa các sự kiện hoặc giao dịch kinh doanh đo lường được, chẳng hạn đơn hàng, thanh toán, phiên truy cập hoặc lô hàng vận chuyển.
Bảng dimension
Bảng chứa thông tin mô tả ngữ cảnh cho các fact, chẳng hạn khách hàng, sản phẩm, cửa hàng, chiến dịch hoặc ngày.
Grain
Mức chi tiết mà mỗi dòng thể hiện. Cần xác định rõ grain trước khi xây dựng fact, dimension, chỉ số hay join.
Dimension thay đổi chậm (SCD)
Cách thiết kế dimension để theo dõi sự thay đổi của thuộc tính theo thời gian, chẳng hạn phân khúc khách hàng, địa chỉ hoặc người phụ trách tài khoản.
Phương pháp: Quy trình kinh doanh -> fact -> dimension -> grain -> chỉ số
Tôi bắt đầu từ các quy trình kinh doanh cốt lõi: duyệt sản phẩm, giỏ hàng, đơn hàng, thanh toán, giao hàng, trả hàng, hoàn tiền, tồn kho và phân bổ hiệu quả marketing (marketing attribution). Tùy cách sử dụng, mỗi quy trình có thể trở thành một bảng fact hoặc một mô hình sự kiện.
Các bảng fact quan trọng gồm fact_orders với mỗi dòng là một đơn hàng, fact_order_items với mỗi dòng là một sản phẩm trong một đơn hàng, fact_payments, fact_refunds, fact_shipments và fact_inventory_snapshot. Các dimension gồm dim_customer, dim_product, dim_date, dim_store hoặc kho hàng, dim_channel và dim_campaign.
Grain cần được khai báo tường minh. Doanh thu theo danh mục sản phẩm thường nên lấy từ grain dòng sản phẩm trong đơn (order item), không phải grain đơn hàng. Chỉ số vòng đời khách hàng có thể dùng grain khách hàng hoặc gói đăng ký. Phân tích tồn kho có thể cần grain snapshot theo ngày.
Những điểm cần cân nhắc khi mô hình hóa: thuộc tính khách hàng hoặc sản phẩm thay đổi chậm, hoàn tiền và hủy đơn, giảm giá ở cấp đơn hàng so với cấp sản phẩm, tiền tệ, thuế, phí vận chuyển, thanh toán không cần tài khoản (guest checkout) và dữ liệu đến muộn. Tôi sẽ định nghĩa các chỉ số làm nguồn chuẩn (source of truth) và xây dựng semantic model hoặc data mart cho tài chính, marketing, sản phẩm và vận hành.
Bước kiểm tra gồm đối chiếu doanh thu với số liệu tài chính, số đơn hàng với hệ thống giao dịch, tổng tiền hoàn với hệ thống thanh toán và tồn kho với hệ thống quản lý kho.
Câu hỏi nối tiếp thường gặp
Grain của fact_order_items là gì?
Bạn sẽ mô hình hóa việc hoàn tiền như thế nào?
Bạn sẽ xử lý việc danh mục sản phẩm thay đổi theo thời gian ra sao?
Phương pháp: Type 1 hay Type 2 tùy nhu cầu lưu lịch sử
Cách làm phù hợp phụ thuộc vào việc độ chính xác lịch sử có quan trọng hay không. Type 1 ghi đè giá trị cũ, đơn giản và hữu ích khi chỉ cần giá trị mới nhất. Type 2 giữ lại lịch sử bằng cách tạo một dòng dimension mới cho mỗi lần thuộc tính thay đổi, thường kèm effective_start_date, effective_end_date, current_flag và một surrogate key (khóa thay thế).
Ví dụ: nếu một khách hàng chuyển khu vực từ West sang East, Type 1 sẽ cập nhật dòng khách hàng thành East. Khi đó, báo cáo doanh thu lịch sử sẽ xếp cả doanh thu cũ vào East, và điều này có thể sai. Type 2 giữ dòng West cũ và tạo thêm dòng East mới, nhờ đó các fact join được với đúng phiên bản tại thời điểm xảy ra sự kiện.
Type 2 làm tăng độ phức tạp: surrogate key, join theo khoảng thời gian, fact đến muộn, báo cáo theo hiện trạng hay theo lịch sử, và bảng dimension lớn hơn. Hãy dùng Type 2 khi báo cáo phải phản ánh thuộc tính đúng như tại thời điểm sự kiện xảy ra.
Một câu trả lời tốt sẽ giải thích nhu cầu kinh doanh trước khi chọn loại SCD.
Câu hỏi nối tiếp thường gặp
Khi nào có thể chấp nhận Type 1?
Các fact join với dimension Type 2 như thế nào?
Điều gì xảy ra với các fact đến muộn?
Phương pháp: Quản trị và tính linh hoạt so với sự đơn giản khi truy vấn và hiệu năng
Star schema tách riêng fact và dimension. Cách này hữu ích khi bạn cần dimension dùng lại được, chỉ số nhất quán, quản trị dữ liệu tốt, grain rõ ràng và phân tích linh hoạt. Nó giảm trùng lặp và giúp quản lý thay đổi ở dimension dễ hơn.
Bảng phi chuẩn hóa dạng rộng (wide table) có thể hữu ích cho một số nhu cầu phân tích được dùng nhiều, feature cho machine learning hoặc dashboard, nơi sự đơn giản khi truy vấn và hiệu năng là quan trọng. Nó giúp người dùng đỡ phải join phức tạp, nhưng có thể nhân bản dữ liệu và tạo rủi ro về quản trị nếu nhiều bảng rộng định nghĩa chỉ số theo những cách khác nhau.
Trên thực tế, tôi thường duy trì các bảng fact và dimension chuẩn, sạch, rồi xuất bản các data mart hoặc bảng rộng được chọn lọc cho từng trường hợp sử dụng cụ thể. Phần nền của kho dữ liệu phải luôn đáng tin cậy, còn các mô hình phía sau được tối ưu theo nhu cầu người dùng.
Quyết định phụ thuộc vào quy mô, đối tượng sử dụng, cách công cụ BI hoạt động, chi phí, độ trễ và tần suất thay đổi của các định nghĩa nghiệp vụ.
Câu hỏi nối tiếp thường gặp
Loại nào tốt hơn cho dashboard BI?
Làm sao tránh tình trạng chỉ số thiếu nhất quán?
Semantic layer là gì?
Thiết kế và điều phối pipeline
Vòng phỏng vấn về pipeline đánh giá bạn có thiết kế được luồng xử lý idempotent (chạy lại bao nhiêu lần cũng cho cùng kết quả), dễ giám sát, khôi phục được và đáp ứng đúng yêu cầu về độ mới dữ liệu cũng như chi phí hay không.
Quy trình thiết kế một pipeline đáng tin cậy
1
Làm rõ hệ thống nguồn, khối lượng dữ liệu, yêu cầu về độ mới, đối tượng sử dụng phía sau và mức độ chịu lỗi.
2
Chọn cách thu nạp dữ liệu: trích xuất theo batch, CDC (change data capture), luồng sự kiện, kéo dữ liệu qua API, nhận file hoặc connector được quản lý sẵn.
3
Xác định vùng tiếp nhận (landing zone), nơi lưu dữ liệu thô, cách xử lý schema và chiến lược replay.
4
Biến đổi dữ liệu qua các lớp rõ ràng: raw, cleaned/staged, modeled và data mart phục vụ.
5
Thiết kế pipeline idempotent để chạy lại không làm trùng lặp hay hỏng dữ liệu.
6
Bổ sung kiểm tra chất lượng dữ liệu, lineage, logging, cảnh báo, chỉ số và thông tin người phụ trách.
7
Lên phương án cho backfill, thay đổi schema, dữ liệu đến muộn, retry, lỗi một phần và kiểm soát chi phí.
Phương pháp: Trích xuất -> lưu dữ liệu thô -> biến đổi -> kiểm tra -> xuất bản -> giám sát
Trước tiên, tôi làm rõ yêu cầu: độ mới của dữ liệu, khối lượng đơn hàng, độ trễ chấp nhận được, giới hạn tải trên cơ sở dữ liệu nguồn, đối tượng sử dụng phía sau và liệu có phát sinh chỉnh sửa dữ liệu lịch sử hay không.
Một thiết kế đơn giản: trích xuất đơn hàng theo kiểu tăng dần dựa trên updated_at hoặc CDC, lưu dữ liệu thô vào object storage hoặc một bảng raw trong kho dữ liệu, biến đổi thành các bảng staging, rồi xuất bản các bảng fact đã mô hình hóa như fact_orders và fact_order_items. Phần điều phối dùng Airflow, Dagster, dbt Cloud hoặc một dịch vụ workflow được quản lý.
Pipeline cần idempotent. Khi chạy lại cho một ngày hoặc một batch, nó phải thay thế hoặc merge dữ liệu một cách xác định thay vì ghi nối thêm bản trùng. Cần dùng watermark cẩn thận và xử lý lại một khoảng thời gian lùi về trước (lookback window) để bắt các cập nhật đến muộn.
Các bước kiểm tra: số dòng, khóa chính bị null, mã đơn hàng trùng lặp, tổng doanh thu, phân bố trạng thái, độ mới và đối chiếu với nguồn. Hệ thống giám sát cần cảnh báo khi pipeline lỗi, khối lượng biến động bất thường, tỷ lệ trùng lặp cao hoặc dữ liệu bị trễ. Tôi cũng ghi tài liệu về người phụ trách và các phụ thuộc phía sau.
Câu hỏi nối tiếp thường gặp
Vì sao chỉ dựa vào updated_at không phải lúc nào cũng đủ?
Bạn sẽ tránh nạp trùng đơn hàng như thế nào?
Bạn sẽ backfill dữ liệu lịch sử hai năm ra sao?
Phương pháp: Cùng đầu vào, chạy lại vẫn cho cùng đầu ra
Pipeline idempotent có thể chạy nhiều lần với cùng một đầu vào mà vẫn cho ra cùng một kết quả đúng, không sinh bản trùng hay tác dụng phụ ngoài ý muốn. Điều này quan trọng vì pipeline sẽ có lúc lỗi, bị chạy lại và cần backfill.
Ví dụ: một pipeline không idempotent ghi nối thêm đơn hàng của ngày hôm qua mỗi lần chạy. Nếu nó được chạy lại sau khi lỗi, doanh thu sẽ bị nhân đôi. Phiên bản idempotent sẽ xóa rồi thay thế partition đích, merge theo khóa chính, hoặc ghi vào bảng tạm rồi hoán đổi nguyên tử (atomic swap).
Tính idempotent đòi hỏi khóa rõ ràng, chiến lược partition, phép biến đổi xác định và xử lý cẩn thận các tác dụng phụ. Đây là một trong những khái niệm quan trọng nhất của kỹ thuật dữ liệu trên production, vì khả năng khôi phục phụ thuộc vào nó.
Câu hỏi nối tiếp thường gặp
Làm sao để một pipeline chỉ ghi nối thêm (append-only) trở thành idempotent?
Atomic swap là gì?
Tính idempotent giúp ích gì cho việc backfill?
Phương pháp: Phát hiện -> phân loại -> bảo vệ -> thông báo -> chuyển đổi
Trước tiên, tôi phát hiện thay đổi schema một cách tự động thông qua schema registry, kiểm tra metadata, contract test hoặc bước kiểm tra khi thu nạp dữ liệu. Sau đó, tôi phân loại thay đổi: thêm cột, xóa cột, đổi tên cột, đổi kiểu dữ liệu, thay đổi khả năng nhận giá trị null hoặc thay đổi về ngữ nghĩa.
Thêm cột cho phép null thường an toàn. Xóa cột, đổi tên trường và đổi kiểu dữ liệu có thể làm hỏng các phép biến đổi và dashboard phía sau. Thay đổi về ngữ nghĩa đặc biệt nguy hiểm vì schema trông vẫn hợp lệ trong khi ý nghĩa dữ liệu đã khác.
Để bảo vệ pipeline, tôi lưu giữ dữ liệu thô, kiểm tra tính tương thích, thiết lập cảnh báo và áp dụng data contract cho các nguồn quan trọng. Với thay đổi gây lỗi (breaking change), tôi phối hợp với bên sở hữu nguồn, cập nhật phép biến đổi, backfill nếu cần và thông báo mức ảnh hưởng tới các bên phía sau.
Một câu trả lời chín chắn sẽ đề cập data contract, quản lý phiên bản, lineage, kiểm thử và phân định trách nhiệm rõ ràng để thay đổi schema không âm thầm làm hỏng dữ liệu phân tích.
Câu hỏi nối tiếp thường gặp
Data contract là gì?
Bạn xử lý việc đổi kiểu dữ liệu của một cột như thế nào?
Nếu đội phụ trách nguồn không báo trước thì sao?
Hệ thống batch và streaming
Câu hỏi về batch và streaming đánh giá bạn có hiểu độ trễ, thông lượng, thứ tự sự kiện, state, windowing, replay và những đánh đổi vận hành giữa kiến trúc đơn giản hơn với kiến trúc gần thời gian thực hơn hay không.
Xử lý batch
Xử lý streaming
Phù hợp nhất cho
Báo cáo định kỳ, backfill dữ liệu lịch sử, các phép biến đổi lớn, phân tích tiết kiệm chi phí
Tính năng thời gian thực, cảnh báo, phát hiện gian lận, dashboard trực tiếp, quyết định cần độ trễ thấp
Đánh đổi chính
Độ trễ cao hơn nhưng vận hành đơn giản hơn và replay dễ hơn
Độ trễ thấp hơn nhưng phức tạp hơn về state, thứ tự và xử lý lỗi
Dữ liệu đến muộn, nạp dở dang, thời gian chạy dài, chi phí backfill
Bản trùng, sự kiện sai thứ tự, checkpointing, state phình to, ngữ nghĩa exactly-once
Phương pháp: Độ trễ ra quyết định so với độ phức tạp
Tôi chọn streaming khi độ trễ thấp tạo ra giá trị thực sự. Ví dụ như phát hiện gian lận, cảnh báo vận hành, cá nhân hóa theo thời gian thực, cập nhật tồn kho, chỉ số thử nghiệm trực tiếp và các tính năng sản phẩm hướng tới người dùng cần sự kiện mới nhất.
Batch thường phù hợp hơn cho báo cáo hằng ngày, phân tích lịch sử, đối soát tài chính và những phép biến đổi chấp nhận được độ trễ tính bằng giờ. Batch vận hành đơn giản hơn, replay dễ hơn và thường rẻ hơn.
Quyết định cần cân nhắc yêu cầu về độ mới, khối lượng sự kiện, yêu cầu về thứ tự, xử lý có trạng thái (stateful), khả năng chịu lỗi, chuyên môn của đội, chi phí và đối tượng sử dụng phía sau. Streaming không mặc nhiên tốt hơn. Nó kéo theo độ phức tạp về bản trùng, sự kiện đến muộn, checkpoint, thay đổi schema và giám sát.
Một câu trả lời tốt sẽ chốt lại: hãy dùng kiến trúc đơn giản nhất đáp ứng được yêu cầu kinh doanh. Nếu doanh nghiệp chỉ cần chỉ số hằng ngày, đừng xây hệ thống streaming chỉ để thể hiện.
Câu hỏi nối tiếp thường gặp
Sự kiện đến muộn là gì?
Bạn xử lý bản trùng trong streaming như thế nào?
Exactly-once nghĩa là gì?
Phương pháp: Sự kiện -> luồng -> làm giàu dữ liệu -> quy tắc/mô hình -> hành động -> lưu trữ -> giám sát
Tôi bắt đầu từ yêu cầu: khối lượng sự kiện, mục tiêu độ trễ, loại quyết định gian lận, mức chấp nhận dương tính giả (false positive) và liệu quyết định sẽ chặn giao dịch hay chỉ kích hoạt bước rà soát.
Một thiết kế khả thi: sự kiện thanh toán được đẩy lên Kafka hoặc Kinesis. Một stream processor tiêu thụ sự kiện, kiểm tra schema, khử trùng lặp theo event_id, làm giàu dữ liệu bằng các feature về người dùng, thiết bị, merchant và tần suất giao dịch trong quá khứ (velocity), rồi áp dụng quy tắc hoặc mô hình. Sự kiện rủi ro cao sẽ kích hoạt dịch vụ ra quyết định, hàng đợi rà soát thủ công hoặc bước xác thực tăng cường (step-up authentication). Sự kiện thô và các quyết định được ghi vào kho lưu trữ bền vững để phục vụ kiểm toán và huấn luyện mô hình.
Các vấn đề kỹ thuật then chốt: sự kiện trùng lặp, sự kiện sai thứ tự, độ mới của feature, kích thước state store, xử lý exactly-once hoặc effectively-once, backpressure, dead-letter queue, replay, giám sát độ trễ và quản lý phiên bản mô hình/quy tắc.
Chất lượng và quản trị dữ liệu rất quan trọng vì quyết định gian lận ảnh hưởng trực tiếp đến khách hàng. Cần ghi lại mã lý do (reason code), theo dõi tỷ lệ dương tính giả và hỗ trợ rollback nếu một quy tắc hoặc mô hình hoạt động sai.
Câu hỏi nối tiếp thường gặp
Bạn sẽ tính các feature về velocity như thế nào?
Bạn sẽ replay sự kiện một cách an toàn ra sao?
Dead-letter queue dùng để làm gì?
Câu hỏi về Spark và xử lý phân tán
Câu hỏi về Spark và xử lý phân tán đánh giá bạn có hiểu partition, shuffle, skew, caching, join, định dạng file và lý do job bị lỗi hoặc trở nên tốn kém hay không.
Phương pháp: Phân phối lại dữ liệu giữa các partition
Shuffle xảy ra khi Spark cần phân phối lại dữ liệu giữa các partition, thường với các thao tác như groupBy, join, distinct, orderBy và repartition. Nó tốn kém vì dữ liệu phải di chuyển qua mạng, được serialize/deserialize, ghi xuống đĩa và điều phối giữa các executor.
Shuffle thường chiếm phần lớn thời gian chạy của job và có thể gây lỗi khi dữ liệu bị lệch hoặc dữ liệu trung gian quá lớn. Chỉ một hot key cũng có thể dồn quá nhiều dữ liệu vào một partition, tạo ra các task chạy chậm (straggler) hoặc lỗi hết bộ nhớ (out-of-memory).
Các cách giảm chi phí shuffle gồm lọc sớm, chỉ chọn những cột cần thiết, tổng hợp trước, dùng broadcast join cho bảng nhỏ, partition theo khóa join, salting các khóa bị lệch, tránh distinct/orderBy không cần thiết và tinh chỉnh số lượng partition.
Một câu trả lời tốt sẽ gắn khái niệm với việc gỡ lỗi thực tế: xem Spark UI, các stage, lượng shuffle read/write, skew, spill, thời gian chạy task và bộ nhớ executor.
Câu hỏi nối tiếp thường gặp
Nguyên nhân nào gây ra data skew?
Khi nào bạn dùng broadcast join?
Bạn gỡ lỗi một Spark job chạy chậm như thế nào?
Phương pháp: Xác định stage -> giảm dữ liệu -> xử lý skew -> tinh chỉnh partition -> tránh thao tác không phù hợp
Trước tiên, tôi xác định lỗi xảy ra ở đâu bằng Spark UI hoặc log: stage nào, thao tác nào, partition nào và executor nào. OOM có thể đến từ skew, join lớn, thao tác collect, partition quá lớn, UDF kém hiệu quả hoặc cache quá nhiều dữ liệu.
Sau đó, tôi giảm dữ liệu càng sớm càng tốt: lọc dòng, chỉ chọn cột cần thiết, đẩy điều kiện lọc xuống (predicate pushdown) và tránh đọc partition không cần thiết. Tôi kiểm tra join: nếu một bảng nhỏ, dùng broadcast join. Nếu một khóa bị lệch, dùng salting hoặc tách riêng các khóa nặng. Nếu partition quá lớn, tăng số partition; nếu có quá nhiều partition nhỏ, coalesce cho phù hợp.
Tránh collect() trên dữ liệu lớn, tránh Python UDF khi hàm có sẵn đã đáp ứng được, và chỉ cache khi dữ liệu được dùng lại và bộ nhớ cho phép. Với dữ liệu đầu ra, tránh tạo quá nhiều file nhỏ và chọn định dạng lưu trữ theo cột như Parquet có nén.
Nếu cần tinh chỉnh tài nguyên, tôi điều chỉnh bộ nhớ executor, số core, số shuffle partition và memory overhead, nhưng không chỉ trông vào cluster lớn hơn. Sửa hình dạng dữ liệu và query plan thường là giải pháp bền vững hơn.
Câu hỏi nối tiếp thường gặp
Bạn phát hiện skew như thế nào?
Vì sao có quá nhiều partition cũng không tốt?
Khi nào nên cache một DataFrame?
Phương pháp: Lưu trữ theo cột, schema, nén, predicate pushdown
Parquet là định dạng file lưu trữ theo cột, hiệu quả cho phân tích vì truy vấn thường chỉ đọc một phần các cột. Nó hỗ trợ nén, mã hóa kiểu dữ liệu, lưu schema, và cho phép predicate pushdown cũng như column pruning trên nhiều engine.
CSV là văn bản thuần, lưu theo dòng. Nó dễ đọc với con người và dễ chuyển giữa các hệ thống, nhưng thiếu kiểu dữ liệu chặt chẽ, có thể nặng hơn, quét chậm hơn, dễ lỗi hơn với ký tự phân cách/escape và không thể bỏ qua các cột không liên quan một cách hiệu quả.
Với data lake và kho dữ liệu, Parquet thường giúp giảm chi phí lưu trữ và cải thiện hiệu năng truy vấn. CSV vẫn hữu ích cho các bản xuất đơn giản, file nhỏ hoặc trao đổi dữ liệu giữa các hệ thống, nhưng không lý tưởng làm định dạng lưu trữ chính cho phân tích.
Câu hỏi nối tiếp thường gặp
Predicate pushdown là gì?
Khi nào CSV vẫn có thể chấp nhận được?
File nhỏ ảnh hưởng thế nào đến hiệu năng truy vấn?
Chất lượng dữ liệu và khả năng quan sát
Câu hỏi về chất lượng dữ liệu đánh giá bạn có phát hiện được dữ liệu sai trước khi nó làm hỏng dashboard, mô hình, tính năng sản phẩm, báo cáo tài chính hay các hệ thống phục vụ khách hàng hay không.
Phương pháp: Độ mới -> độ đầy đủ -> tính duy nhất -> tính hợp lệ -> đối soát
Với pipeline doanh thu, tôi sẽ thêm các bước kiểm tra về độ mới, số dòng, khóa chính bị null, mã giao dịch trùng lặp, trạng thái hợp lệ, loại tiền tệ hợp lệ, số tiền không âm ở những chỗ áp dụng, khoảng ngày được chấp nhận và tính toàn vẹn tham chiếu giữa đơn hàng, thanh toán, hoàn tiền và khách hàng.
Tôi cũng sẽ thêm bước đối soát: so sánh tổng doanh thu với hệ thống thanh toán nguồn, báo cáo tài chính hoặc phiên bản pipeline trước đó. Theo dõi biến động theo ngày và theo tuần với ngưỡng cảnh báo, nhưng có tính đến yếu tố mùa vụ và các sự kiện đã biết trước.
Quy tắc nghiệp vụ rất quan trọng: đơn hàng đã hủy không được tính vào doanh thu, hoàn tiền phải làm giảm doanh thu thuần, giao dịch test phải được loại trừ và quy đổi tiền tệ phải dùng đúng tỷ giá.
Cảnh báo cần có tính hành động, được chuyển đến đúng người phụ trách và kèm ngữ cảnh: bước kiểm tra nào lỗi, bảng nào bị ảnh hưởng, mức độ nghiêm trọng, các phụ thuộc phía sau và runbook gợi ý. Quá nhiều cảnh báo nhiễu sẽ khiến mọi người phớt lờ chúng.
Câu hỏi nối tiếp thường gặp
Bạn chọn ngưỡng cảnh báo như thế nào?
Nếu một bước kiểm tra lỗi đúng lúc khóa sổ cuối tháng thì sao?
Bạn sẽ ngăn doanh thu bị tính trùng như thế nào?
Phương pháp: Đánh giá ảnh hưởng -> so sánh phiên bản -> kiểm tra lineage -> giảm thiểu -> tìm nguyên nhân gốc
Trước tiên, tôi đánh giá mức ảnh hưởng: dashboard nào, chỉ số nào, người dùng nào, khoảng thời gian nào và những quyết định nào bị ảnh hưởng. Tôi xác định xem con số đang sai, hay lần triển khai này thực ra đã sửa một lỗi trước đó.
Tôi so sánh kết quả mới với phiên bản trước theo từng bảng, partition, số dòng, số giá trị riêng biệt, tổng chỉ số và các phân khúc chính. Tôi dùng lineage để xác định thay đổi ở phía upstream, đồng thời kiểm tra thay đổi về code, schema, bộ lọc, join, khử trùng lặp và logic ngày tháng.
Nếu chỉ số sai và người dùng nghiệp vụ đang bị ảnh hưởng, tôi giảm thiểu thật nhanh: rollback phép biến đổi, khôi phục phiên bản bảng trước, tạm tắt dashboard hoặc thêm cảnh báo. Sau đó, tôi phân tích nguyên nhân gốc và backfill dữ liệu đã sửa nếu cần.
Giao tiếp rất quan trọng. Tôi thông báo cho các bên liên quan: điều gì đã thay đổi, phần nào bị ảnh hưởng, mức độ chắc chắn, thời gian dự kiến khắc phục và các quyết định trước đó có cần xem lại hay không.
Câu hỏi nối tiếp thường gặp
Làm sao bạn biết con số cũ hay con số mới mới là đúng?
Bạn muốn có những phương án rollback nào?
Lineage sẽ giúp ích như thế nào?
Ví dụ minh họa
Checklist xử lý sự cố dữ liệu production
Dashboard doanh thu dành cho ban điều hành bị thiếu dữ liệu của ngày hôm qua, chỉ hai giờ trước cuộc họp của ban lãnh đạo.
1
Chẩn đoán
Kiểm tra trạng thái pipeline, độ mới của dữ liệu nguồn, các partition của bảng trong kho dữ liệu, các task bị lỗi và xem vấn đề chỉ ảnh hưởng đến doanh thu hay tới mọi dashboard.
2
Giảm thiểu
Nếu dữ liệu nguồn đã có, chạy lại partition bị ảnh hưởng. Nếu chưa, ghi chú trên dashboard và cung cấp con số mới nhất hiện có kèm lưu ý.
3
Thông báo
Cho các bên liên quan biết dữ liệu nào đang thiếu, quyết định nào bị ảnh hưởng, thời gian dự kiến khắc phục và các con số có thể thay đổi hay không.
4
Phòng ngừa
Bổ sung cảnh báo về độ mới dữ liệu, kiểm tra nguồn upstream, giám sát SLA và runbook cho các sự cố của pipeline doanh thu.
Kết quả
Cách xử lý này giữ được niềm tin nhờ kết hợp khôi phục về mặt kỹ thuật với giao tiếp rõ ràng cùng các bên liên quan.
System design cho kỹ sư dữ liệu
Vòng system design cho kỹ sư dữ liệu đánh giá tư duy kiến trúc: nguồn dữ liệu, thu nạp, lưu trữ, biến đổi, phục vụ, chất lượng, lineage, quản trị và chi phí.
Phương pháp: Gắn tracking -> thu nạp -> lưu trữ -> xử lý -> mô hình hóa -> phục vụ -> quản trị
Tôi bắt đầu từ yêu cầu: khối lượng sự kiện, độ trễ, đối tượng sử dụng, thời gian lưu trữ, thay đổi schema, quyền riêng tư và độ tin cậy. Sự kiện phân tích sản phẩm có thể phục vụ dashboard, thử nghiệm, cá nhân hóa và feature cho machine learning.
Phía client gửi sự kiện qua SDK với event_name, user_id, session_id, timestamp, properties, phiên bản ứng dụng, nền tảng và anonymous ID. Sự kiện đi vào một ingestion API hoặc event collector, rồi vào một luồng bền vững như Kafka/Kinesis/Pub/Sub. Sự kiện thô được ghi vào object storage để replay và vào kho dữ liệu hoặc lakehouse để phân tích.
Bước xử lý gồm kiểm tra schema, khử trùng lặp, lọc bot/lưu lượng nội bộ, chia phiên (sessionization), hợp nhất danh tính (identity resolution) và biến đổi thành các bảng đã mô hình hóa như fact_events, fact_sessions, dim_users và các data mart riêng cho từng sản phẩm. Luồng batch và streaming có thể cùng tồn tại, tùy yêu cầu về độ mới.
Về chất lượng và quản trị: event contract, schema registry, xử lý PII (dữ liệu định danh cá nhân), tuân thủ lựa chọn đồng ý (consent) của người dùng, lineage, phân định trách nhiệm, kiểm tra độ mới, cảnh báo bất thường về khối lượng và tài liệu. Lớp phục vụ gồm dashboard BI, phân tích thử nghiệm, reverse ETL và feature store.
Các đánh đổi gồm chi phí thời gian thực so với batch, schema chặt chẽ hay linh hoạt, thời gian lưu sự kiện thô, độ phức tạp của việc định danh người dùng và bao nhiêu logic nên đặt ở bước thu nạp so với bước biến đổi.
Câu hỏi nối tiếp thường gặp
Bạn sẽ xử lý thay đổi schema như thế nào?
Bạn sẽ khử trùng lặp sự kiện ra sao?
Nhà phân tích sẽ truy vấn những bảng nào?
Phương pháp: Nhất quán offline/online -> định nghĩa feature -> độ mới -> phục vụ -> giám sát
Feature store cần cung cấp các feature dùng lại được và đáng tin cậy cho cả huấn luyện lẫn phục vụ (serving). Yêu cầu gồm định nghĩa feature, tính đúng tại thời điểm (point-in-time correctness), dữ liệu huấn luyện offline, phục vụ online với độ trễ thấp, độ mới, kiểm soát truy cập và giám sát.
Feature offline có thể lưu trong kho dữ liệu hoặc lakehouse, partition theo ngày và thực thể. Feature online có thể được phục vụ từ một key-value store có độ trễ thấp. Feature registry lưu metadata: tên feature, người phụ trách, khóa thực thể, logic biến đổi, SLA về độ mới, bảng nguồn và mô tả.
Tính đúng tại thời điểm là yếu tố then chốt. Dữ liệu huấn luyện phải dùng giá trị feature đã có tại thời điểm dự đoán, không dùng giá trị của tương lai. Để đảm bảo nhất quán online/offline, nên dùng lại cùng một logic biến đổi khi có thể, hoặc kiểm thử kỹ lưỡng nếu tồn tại các pipeline riêng biệt.
Giám sát cần bao quát độ mới của feature, tỷ lệ null, độ trôi phân phối (distribution drift), độ trễ phục vụ online, training-serving skew (sai lệch giữa lúc huấn luyện và lúc phục vụ) và tác động tới mô hình phía sau. Quản trị gồm kiểm soát PII, lineage, ngừng sử dụng feature (deprecation) và phân định trách nhiệm.
Câu hỏi nối tiếp thường gặp
Point-in-time correctness là gì?
Làm sao tránh training-serving skew?
Những feature nào cần phục vụ online?
Câu hỏi hành vi và cộng tác
Phỏng vấn hành vi cho kỹ sư dữ liệu tập trung vào tinh thần làm chủ hệ thống production, xử lý sự cố, giao tiếp liên phòng ban, sắp xếp ưu tiên và xây dựng những hệ thống mà các đội khác có thể tin tưởng.
Phương pháp: Ảnh hưởng -> chẩn đoán -> giảm thiểu -> nguyên nhân gốc -> phòng ngừa
Hãy chọn một sự cố có ảnh hưởng thực sự: thiếu dữ liệu, chỉ số sai, pipeline bị trễ, bản ghi trùng lặp, dashboard hỏng, lỗi feature của mô hình hoặc ảnh hưởng tới sản phẩm phía sau. Mở đầu bằng việc ai bị ảnh hưởng và vì sao điều đó quan trọng.
Sau đó, giải thích quy trình chẩn đoán ban đầu của bạn: log, trạng thái điều phối, độ mới của nguồn, các lần triển khai gần đây, thay đổi schema, số dòng, partition, lineage và các phụ thuộc phía sau. Mô tả cách bạn giảm thiểu sự cố: chạy lại, rollback, vá lỗi, backfill hay cảnh báo cho các bên liên quan.
Câu trả lời mạnh nhất có cả phần phòng ngừa. Bạn có bổ sung kiểm tra chất lượng dữ liệu, cảnh báo, retry, schema contract, ghi dữ liệu idempotent, runbook, lineage hay cơ chế kiểm soát triển khai tốt hơn không? Tránh đổ lỗi cho các đội upstream. Hãy thể hiện tinh thần làm chủ hệ thống và cách bạn giao tiếp.
Kết thúc bằng bài học bạn rút ra về độ tin cậy và quy trình làm việc của bạn đã thay đổi như thế nào sau đó.
Câu hỏi nối tiếp thường gặp
Bạn đã truyền đạt mức ảnh hưởng như thế nào?
Điều gì lẽ ra đã giúp phát hiện sự cố sớm hơn?
Bạn đã ngăn sự cố tái diễn ra sao?
Phương pháp: Làm rõ -> tái hiện -> truy vết lineage -> giải quyết -> ghi tài liệu
Trước tiên, tôi làm rõ chính xác điều gì có vẻ sai: chỉ số, bảng, khoảng thời gian, dashboard, bộ lọc, giá trị kỳ vọng và lý do nghiệp vụ. Câu “dữ liệu bị sai” cần được chuyển thành một vấn đề có thể tái hiện.
Sau đó, tôi so sánh truy vấn hoặc dashboard của nhà phân tích với các bảng nguồn và định nghĩa mô hình. Tôi kiểm tra grain, bộ lọc, join, múi giờ, độ mới, định nghĩa chỉ số và các thay đổi gần đây, rồi dùng lineage để truy vết các phụ thuộc upstream.
Nếu dữ liệu sai, tôi sửa và thông báo mức ảnh hưởng. Nếu dữ liệu đúng nhưng định nghĩa khác với kỳ vọng, tôi thống nhất lại định nghĩa chỉ số và cập nhật tài liệu. Nếu vẫn còn điểm chưa chắc chắn, tôi giải thích điều gì đã rõ, điều gì đang được kiểm tra và khi nào tôi sẽ phản hồi tiếp.
Mối quan hệ là điều quan trọng. Nhà phân tích là khách hàng của nền tảng dữ liệu, và niềm tin được xây dựng qua những phản hồi nhanh, rõ ràng và dựa trên bằng chứng.
Câu hỏi nối tiếp thường gặp
Nếu nhà phân tích dùng bảng không đúng cách thì sao?
Làm sao để tránh nhầm lẫn lặp lại?
Loại tài liệu nào hữu ích nhất?
Phương pháp: Tác động -> độ tin cậy -> mức khẩn cấp -> phụ thuộc -> đòn bẩy
Tôi ưu tiên dựa trên tác động kinh doanh, rủi ro về độ tin cậy, mức khẩn cấp, các phụ thuộc phía sau và đòn bẩy. Một pipeline doanh thu bị hỏng hay một vấn đề tuân thủ thường được ưu tiên hơn một mô hình dashboard “có thì tốt”. Một cải tiến nền tảng có thể được ưu tiên hơn một yêu cầu đơn lẻ nếu nó gỡ vướng cho nhiều đội.
Tôi cũng phân biệt giữa sự cố khẩn cấp, công việc nền tảng mang tính chiến lược, yêu cầu từ các bên liên quan, nợ kỹ thuật và các việc vận hành thủ công lặp đi lặp lại. Nếu đội chỉ xử lý ticket, độ tin cậy và chất lượng nền tảng sẽ đi xuống. Nếu đội chỉ xây các lớp trừu tượng cho nền tảng, các bộ phận kinh doanh có thể bị tắc.
Một quy trình ưu tiên tốt bao gồm phân định trách nhiệm, SLA, các mức độ nghiêm trọng, sự thống nhất với roadmap và minh bạch về các đánh đổi. Tôi sẽ thông báo rõ việc gì đang làm, việc gì được hoãn lại, vì sao, và điều đó kéo theo rủi ro gì.
Câu hỏi nối tiếp thường gặp
Bạn thuyết phục mọi người đầu tư xử lý nợ kỹ thuật như thế nào?
Nếu ban lãnh đạo cần gấp một dashboard thì sao?
Bạn cân bằng giữa xử lý sự cố và roadmap như thế nào?
Chiến lược chuẩn bị cho kỹ sư dữ liệu
Việc chuẩn bị phỏng vấn kỹ sư dữ liệu nên kết hợp SQL, mô hình hóa dữ liệu, Python, thiết kế pipeline, hệ thống phân tán, các khái niệm về kho dữ liệu trên cloud và khả năng kể lại câu chuyện xử lý sự cố production.
Kế hoạch 6 tuần chuẩn bị phỏng vấn kỹ sư dữ liệu
1
Tuần 1: chiều sâu SQL. Luyện join, window function, khử trùng lặp, mô hình tăng dần, cohort, partition và gỡ lỗi hiệu năng.
2
Tuần 2: mô hình hóa dữ liệu. Luyện fact, dimension, grain, SCD, mô hình sự kiện, data mart trong kho dữ liệu và định nghĩa chỉ số.
3
Tuần 3: pipeline. Luyện thiết kế ETL/ELT, tính idempotent, điều phối, backfill, dữ liệu đến muộn, thay đổi schema và kiểm tra chất lượng dữ liệu.
4
Tuần 4: xử lý phân tán. Ôn Spark, shuffle, partition, skew, định dạng file, các khái niệm streaming và đánh đổi giữa chi phí với hiệu năng.
5
Tuần 5: system design. Luyện thiết kế nền tảng phân tích sản phẩm, thu nạp dữ liệu bằng CDC, feature store, pipeline phát hiện gian lận dạng streaming và kiến trúc kho dữ liệu.
6
Tuần 6: phỏng vấn thử và chuẩn bị câu chuyện. Chuẩn bị ví dụ về sự cố pipeline, chất lượng dữ liệu, làm việc với các bên liên quan, sắp xếp ưu tiên và cải tiến nền tảng.
Chuẩn bị theo từng hướng kỹ thuật dữ liệu
•
Analytics engineering: tập trung vào dbt, mô hình SQL, semantic layer, định nghĩa chỉ số, độ tin cậy của BI và quy trình làm việc với các bên liên quan.
•
Kỹ thuật dữ liệu nền tảng: tập trung vào hệ thống thu nạp dữ liệu, điều phối, lineage, quản trị dữ liệu, kiểm soát truy cập và trải nghiệm của lập trình viên.
•
Kỹ thuật dữ liệu streaming: tập trung vào Kafka, Flink/Spark streaming, state, window, bản trùng, thứ tự sự kiện, replay và độ trễ.
•
Kỹ thuật dữ liệu cho ML: tập trung vào pipeline feature, feature store, point-in-time correctness, dữ liệu huấn luyện và giám sát.
•
Kỹ thuật kho dữ liệu trên cloud: tập trung vào Snowflake, BigQuery, Databricks, partition, clustering, kiểm soát chi phí và quản lý workload.
Đừng chỉ nói về công cụ
Người phỏng vấn ít quan tâm việc bạn biết tên Airflow, dbt, Spark hay Kafka, mà quan tâm nhiều hơn đến việc bạn hiểu độ tin cậy, tính đúng đắn của dữ liệu, các đánh đổi và những kiểu lỗi có thể xảy ra.
Điểm cần nhớ
Câu trả lời phỏng vấn kỹ sư dữ liệu xuất sắc kết hợp SQL chính xác, mô hình hóa dữ liệu rõ ràng, pipeline đáng tin cậy, tư duy hệ thống phân tán và tinh thần làm chủ production. Những ứng viên giỏi nhất cho thấy họ có thể xây dựng hệ thống dữ liệu mà các đội khác tin tưởng.
Luyện tập trực tiếp với các câu hỏi này
Interview Pilot mang đến cho bạn trợ lý phỏng vấn AI theo thời gian thực trong các buổi phỏng vấn trực tiếp, giúp bạn trả lời rõ ràng khi gặp những câu hỏi này.