Việc làm

07/10 · Hà Nội · Tại văn phòng

Chuyên gia tích hợp dữ liệu (Data Engineer Expert)

PVcomBank · Data Engineer

Xem mô tả & ứng tuyển trên ITviecMô tả công việc, lương và ứng tuyển nằm ở ITviec.

10 câu hỏi có thể gặp khi phỏng vấn

Chọn theo kỹ năng và cấp của tin (Data Engineer & Data Analyst, Python, DevOps & CI/CD). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.

  1. 01Window function là gì? Viết truy vấn lấy đơn hàng gần nhất của mỗi khách hàng.Data Engineer & Data Analyst · Junior

    Gợi ý trả lời

    Window function tính toán trên một nhóm dòng liên quan mà không gộp mất dòng như GROUP BY. Hay dùng: ROW_NUMBER, RANK, LAG/LEAD, tổng luỹ kế SUM() OVER.

    SELECT *
    FROM (
      SELECT o.*, ROW_NUMBER() OVER (
        PARTITION BY customer_id ORDER BY created_at DESC
      ) AS rn
      FROM orders o
    ) t
    WHERE rn = 1;
    
    • ROW_NUMBER cho số duy nhất; RANK cho cùng hạng khi bằng nhau và nhảy số; DENSE_RANK không nhảy số.
    • LAG để so sánh với kỳ trước, ví dụ doanh thu tháng này so với tháng trước.

    Hay sai: ORDER BY không xác định duy nhất khiến kết quả thay đổi giữa các lần chạy.

    Ôn thêm câu hỏi Data Engineer & Data Analyst →
  2. 02ETL khác ELT thế nào? Vì sao ELT phổ biến hơn với data warehouse hiện đại?Data Engineer & Data Analyst · Junior

    Gợi ý trả lời

    ETL biến đổi dữ liệu trước khi nạp vào kho; ELT nạp dữ liệu thô vào kho trước rồi biến đổi ngay trong kho bằng SQL.

    ELT phổ biến vì:

    • Warehouse/lakehouse trên cloud (BigQuery, Snowflake, Databricks) tính toán mạnh và co giãn.
    • Giữ được dữ liệu thô, khi đổi logic có thể chạy lại.
    • Biến đổi viết bằng SQL, quản lý bằng công cụ như dbt có version, test, tài liệu.

    ETL vẫn hợp khi phải loại bỏ dữ liệu nhạy cảm trước khi vào kho, hoặc nguồn quá lớn cần lọc bớt.

    Người phỏng vấn muốn nghe: tổ chức theo lớp (raw, staging, mart hoặc bronze, silver, gold).

    Ôn thêm câu hỏi Data Engineer & Data Analyst →
  3. 03Star schema là gì? Phân biệt bảng fact và bảng dimension.Data Engineer & Data Analyst

    Gợi ý trả lời

    Star schema là mô hình dữ liệu cho phân tích: một bảng fact ở giữa nối với nhiều bảng dimension xung quanh, giúp truy vấn đơn giản và nhanh.

    • Fact: ghi các sự kiện đo đếm được (đơn hàng, lượt xem), chứa số đo (số tiền, số lượng) và khoá ngoại tới dimension. Thường rất nhiều dòng.
    • Dimension: mô tả ngữ cảnh (khách hàng, sản phẩm, ngày, cửa hàng), ít dòng, nhiều cột thuộc tính.
    • Phải xác định rõ grain: mỗi dòng fact là gì (một đơn hay một dòng sản phẩm trong đơn).

    Hay sai: trộn nhiều grain trong một bảng fact, dẫn đến cộng trùng khi tổng hợp.

    Ôn thêm câu hỏi Data Engineer & Data Analyst →
  4. 04Generator và yield là gì? Khác gì với list comprehension?Python · Junior

    Gợi ý trả lời

    Generator sinh giá trị lười (lazy): mỗi lần được hỏi mới tính phần tử tiếp theo, rồi tạm dừng tại yield. Nhờ vậy nó không phải giữ toàn bộ dữ liệu trong bộ nhớ.

    def read_lines(path):
        with open(path) as f:
            for line in f:
                yield line.rstrip()
    
    total = sum(len(l) for l in read_lines("big.log"))
    
    • List comprehension [x * 2 for x in data] tạo cả list ngay. Generator expression (x * 2 for x in data) thì không.
    • Hợp với file lớn, dữ liệu stream, phân trang API, pipeline xử lý nhiều bước.

    Hay sai: duyệt một generator hai lần. Lần thứ hai không có gì vì nó đã cạn; cần duyệt lại thì tạo generator mới hoặc chuyển thành list.

    Ôn thêm câu hỏi Python →
  5. 05Decorator hoạt động thế nào? Hãy viết một decorator đo thời gian chạy của hàm.Python

    Gợi ý trả lời

    Decorator là hàm nhận một hàm và trả về hàm mới bọc quanh nó. @timer chỉ là cú pháp ngắn của func = timer(func).

    import functools, time
    
    def timer(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            start = time.perf_counter()
            try:
                return func(*args, **kwargs)
            finally:
                print(func.__name__, time.perf_counter() - start)
        return wrapper
    
    • functools.wraps giữ lại __name__, docstring của hàm gốc, quan trọng cho log và debug.
    • Decorator có tham số (ví dụ @retry(times=3)) cần thêm một lớp hàm bên ngoài.
    • Ví dụ thực tế: @app.get của FastAPI, @login_required của Django, @functools.lru_cache.

    Hay sai: decorator viết kiểu đồng bộ bọc hàm async def. Kết quả là đo thời gian tạo coroutine chứ không phải thời gian chạy.

    Ôn thêm câu hỏi Python →
  6. 06Pod bị CrashLoopBackOff, bạn điều tra thế nào?DevOps & CI/CD

    Gợi ý trả lời

    CrashLoopBackOff nghĩa là container khởi động rồi thoát liên tục; cần tìm lý do nó thoát.

    kubectl describe pod <pod>      # events, exit code, OOMKilled?
    kubectl logs <pod> --previous   # log của lần chạy trước khi chết
    kubectl get events --sort-by=.lastTimestamp
    
    • Exit code 137 / OOMKilled: thiếu memory limit hoặc rò rỉ bộ nhớ.
    • Lỗi cấu hình: thiếu biến môi trường, Secret/ConfigMap sai, không kết nối được DB.
    • Liveness probe quá gắt khiến app bị kill khi đang khởi động; cân nhắc startupProbe.
    • Sai lệnh command/args, sai kiến trúc image (arm64 và amd64).

    Người phỏng vấn muốn nghe: quy trình có thứ tự, dựa vào events và log trước khi đoán.

    Ôn thêm câu hỏi DevOps & CI/CD →
  7. 07Slowly Changing Dimension (SCD) là gì? So sánh SCD Type 1 và Type 2.Data Engineer & Data Analyst

    Gợi ý trả lời

    SCD là cách xử lý khi thuộc tính của dimension thay đổi theo thời gian, ví dụ khách hàng chuyển thành phố hoặc đổi hạng thành viên.

    • Type 1: ghi đè giá trị cũ. Đơn giản nhưng mất lịch sử; báo cáo quá khứ hiển thị theo giá trị mới.
    • Type 2: thêm dòng mới cho mỗi thay đổi, kèm valid_from, valid_to, is_current và surrogate key. Giữ được lịch sử, fact trỏ đúng phiên bản tại thời điểm phát sinh.

    Chọn Type 2 khi nghiệp vụ cần phân tích theo trạng thái lúc xảy ra (doanh thu theo hạng khách hàng lúc mua).

    Hay sai: join fact với dimension Type 2 mà quên điều kiện thời gian hoặc is_current, làm nhân bản dòng.

    Ôn thêm câu hỏi Data Engineer & Data Analyst →
  8. 08Một job Spark chạy rất chậm, vài task chạy mãi không xong. Bạn chẩn đoán và xử lý thế nào?Data Engineer & Data Analyst

    Gợi ý trả lời

    Vài task chậm hơn hẳn phần còn lại thường là data skew: một khoá chiếm phần lớn dữ liệu, dồn vào một partition.

    Chẩn đoán qua Spark UI: xem stage chậm, so sánh thời gian và dung lượng shuffle giữa các task, có spill ra đĩa không.

    Cách xử lý:

    • Bật Adaptive Query Execution (mặc định bật ở Spark 3.2+) để tự tách partition bị lệch.
    • Broadcast bảng nhỏ khi join để tránh shuffle.
    • Thêm salt vào khoá nóng rồi gộp lại.
    • Lọc dữ liệu và chọn cột sớm, tránh collect() về driver.
    • Điều chỉnh số partition; xử lý vấn đề quá nhiều file nhỏ.

    Người phỏng vấn muốn nghe: đo bằng Spark UI trước, không tăng tài nguyên một cách mù quáng.

    Ôn thêm câu hỏi Data Engineer & Data Analyst →
  9. 09Doanh thu hôm nay giảm 30% so với hôm qua. Bạn phân tích nguyên nhân thế nào?Data Engineer & Data Analyst

    Gợi ý trả lời

    Trước tiên kiểm tra dữ liệu có đúng không, rồi mới phân tích nghiệp vụ.

    1. Dữ liệu: pipeline có chạy đủ không, dữ liệu đến trễ, có thay đổi tracking hay định nghĩa chỉ số không.
    2. So sánh hợp lý: cùng thứ trong tuần trước, có ngày lễ, khuyến mãi hôm qua không.
    3. Phân rã chỉ số: doanh thu = số người dùng × tỷ lệ chuyển đổi × giá trị đơn trung bình; xem thành phần nào giảm.
    4. Cắt lát: theo kênh, nền tảng, khu vực, sản phẩm, phiên bản app để khoanh vùng.
    5. Đối chiếu sự kiện: deploy mới, lỗi thanh toán, đối thủ, chiến dịch quảng cáo dừng.

    Người phỏng vấn muốn nghe: cách tiếp cận có cấu trúc và kết luận đi kèm đề xuất hành động.

    Ôn thêm câu hỏi Data Engineer & Data Analyst →
  10. 10Bạn hãy giới thiệu ngắn về bản thân.Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Đây là câu mở đầu gần như chắc chắn có. Dùng công thức Hiện tại – Quá khứ – Tương lai, gói trong khoảng 1–2 phút.

    • Hiện tại: vị trí, số năm kinh nghiệm, mảng/công nghệ chính.
    • Quá khứ: một hai dự án hoặc thành tích liên quan nhất tới vị trí đang tuyển.
    • Tương lai: vì sao bạn quan tâm tới vị trí này.

    Câu mẫu: "Em là backend developer, khoảng 3 năm kinh nghiệm, chủ yếu làm Java Spring cho hệ thống thanh toán. Ở dự án gần nhất em phụ trách module đối soát và tối ưu các truy vấn báo cáo chạy chậm. Em đang tìm môi trường làm sản phẩm lâu dài để đi sâu hơn về thiết kế hệ thống, nên rất quan tâm tới vị trí này."

    Hay sai: kể từ quê quán, trường cấp ba, hoặc đọc lại nguyên CV.

    Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →

Bạn đã phỏng vấn ở PVcomBank?

Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.

Chia sẻ kinh nghiệm phỏng vấn