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 (SQL & Database, Data Engineer & Data Analyst, AI / Machine Learning). 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.
01Làm sao migrate schema (thêm cột, đổi kiểu, thêm index) trên bảng lớn mà không downtime?SQL & Database · Senior
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →Chia thay đổi thành nhiều bước tương thích ngược để phiên bản code cũ và mới chạy song song được (expand rồi contract).
- Expand: thêm cột mới cho phép
NULLhoặc có default; tránh câu lệnh viết lại cả bảng. - Code mới ghi vào cả cột cũ và mới.
- Backfill dữ liệu cũ theo từng lô nhỏ, có nghỉ giữa các lô để không gây lag replica.
- Chuyển code sang đọc cột mới, kiểm tra kỹ.
- Contract: bỏ cột cũ ở một lần deploy sau.
Index trên bảng lớn: PostgreSQL dùng
CREATE INDEX CONCURRENTLY; MySQL dùng online DDL hoặc công cụ như gh-ost, pt-online-schema-change.Người phỏng vấn muốn nghe: bạn biết DDL có thể giữ lock khiến mọi query xếp hàng, nên đặt
lock_timeoutvà luôn có kế hoạch rollback.- Expand: thêm cột mới cho phép
02Phân biệt INNER JOIN, LEFT JOIN, RIGHT JOIN và FULL OUTER JOIN. Khi nào dùng LEFT JOIN?SQL & Database · Junior
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →JOIN quyết định giữ lại những dòng nào khi ghép hai bảng theo điều kiện.
- INNER JOIN: chỉ giữ dòng khớp ở cả hai bảng.
- LEFT JOIN: giữ mọi dòng bảng trái; bảng phải không khớp thì cột thành
NULL. - RIGHT JOIN: ngược lại với LEFT, ít dùng vì có thể đổi chỗ bảng.
- FULL OUTER JOIN: giữ tất cả dòng của cả hai (MySQL không hỗ trợ trực tiếp, phải
UNIONhai LEFT JOIN).
Ví dụ tìm khách chưa từng đặt hàng:
SELECT c.id, c.name FROM customers c LEFT JOIN orders o ON o.customer_id = c.id WHERE o.id IS NULL;Hay sai: đặt điều kiện lọc bảng phải trong
WHERE(vd.WHERE o.status = 'paid') làm LEFT JOIN biến thành INNER JOIN; điều kiện đó phải để trongON.03WHERE và HAVING khác nhau thế nào? Thứ tự thực thi logic của một câu SELECT ra sao?SQL & Database · Junior
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →WHERElọc từng dòng trước khi gom nhóm;HAVINGlọc sauGROUP BY, nên dùng được hàm tổng hợp nhưCOUNT,SUM.Thứ tự logic:
FROM/JOIN→WHERE→GROUP BY→HAVING→SELECT→DISTINCT→ORDER BY→LIMIT/OFFSET.SELECT department_id, AVG(salary) AS avg_salary FROM employees WHERE status = 'active' GROUP BY department_id HAVING AVG(salary) > 20000000;- Vì
SELECTchạy sauWHERE, bạn không dùng được alias của SELECT trong WHERE (đa số DB). - Điều kiện không cần hàm tổng hợp thì nên để ở WHERE để giảm số dòng phải gom nhóm.
Người phỏng vấn muốn nghe: bạn hiểu thứ tự logic, từ đó giải thích được vì sao alias hoặc aggregate dùng sai chỗ bị lỗi.
- Vì
04Các loại JOIN trong SQL khác nhau thế nào? Khi nào kết quả JOIN bị nhân bản dòng?Data Engineer & Data Analyst · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Data Engineer & Data Analyst →INNER JOINchỉ giữ dòng khớp ở cả hai bảng;LEFT JOINgiữ mọi dòng bảng trái, phía phải không khớp thì NULL;FULL OUTER JOINgiữ tất cả;CROSS JOINghép mọi cặp.Dòng bị nhân bản khi khoá join không duy nhất ở một phía (quan hệ một-nhiều hoặc nhiều-nhiều). Ví dụ join
ordersvớipaymentskhi một đơn có nhiều lần thanh toán, rồiSUM(order_amount)sẽ bị cộng trùng.- Kiểm tra độ duy nhất của khoá trước khi join.
- Gộp (aggregate) bảng chi tiết trước rồi mới join.
Hay sai: đặt điều kiện lọc bảng phải trong
WHEREsauLEFT JOIN, vô tình biến nó thànhINNER JOIN; nên đặt trongON.05WHERE khác HAVING thế nào? Thứ tự thực thi logic của một câu SELECT là gì?Data Engineer & Data Analyst · Junior
Gợi ý trả lời
Ôn thêm câu hỏi Data Engineer & Data Analyst →WHERElọc từng dòng trước khi gộp nhóm;HAVINGlọc nhóm sau khi đãGROUP BYvà tính hàm tổng hợp.Thứ tự logic:
FROM/JOIN→WHERE→GROUP BY→HAVING→SELECT→DISTINCT→ORDER BY→LIMIT.SELECT customer_id, COUNT(*) AS orders FROM orders WHERE created_at >= DATE '2026-01-01' GROUP BY customer_id HAVING COUNT(*) >= 3;Hay sai: dùng alias định nghĩa trong
SELECTngay ởWHERE(đa số hệ quản trị báo lỗi), hoặc lọc điều kiện dòng bằngHAVINGlàm truy vấn chậm hơn.06Vì sao phải chia train/validation/test? Data leakage là gì?AI / Machine Learning · Junior
Gợi ý trả lời
Ôn thêm câu hỏi AI / Machine Learning →Train để học tham số, validation để chọn mô hình và siêu tham số, test để ước lượng hiệu năng thật lúc cuối và chỉ dùng một lần.
Data leakage là khi thông tin không có ở thời điểm dự đoán lọt vào lúc train, khiến kết quả offline đẹp nhưng chạy thật thì kém.
Ví dụ hay gặp:
- Chuẩn hoá hoặc chọn đặc trưng trên toàn bộ dữ liệu trước khi chia tập.
- Dữ liệu chuỗi thời gian chia ngẫu nhiên thay vì theo thời gian.
- Đặc trưng chứa thông tin từ tương lai hoặc từ chính nhãn (như "ngày huỷ hợp đồng" khi dự đoán khách rời bỏ).
- Cùng một người dùng xuất hiện ở cả train và test.
Hay sai: tinh chỉnh nhiều lần dựa trên tập test, biến nó thành validation.
07Index là gì, hoạt động thế nào? Có nên đánh index cho mọi cột không?SQL & Database · Junior
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →Index là cấu trúc dữ liệu phụ (thường là B-Tree) giúp tìm dòng theo giá trị cột mà không phải quét cả bảng, đổi lại tốn dung lượng và làm chậm thao tác ghi.
- B-Tree hợp với so sánh
=,<,>,BETWEEN,ORDER BY,LIKE 'abc%'. - Mỗi
INSERT/UPDATE/DELETEphải cập nhật thêm mọi index liên quan. - Cột có độ chọn lọc thấp (vd.
gender,is_deleted) đánh index riêng thường ít tác dụng.
Không nên đánh index tràn lan: chỉ thêm cho cột hay xuất hiện trong
WHERE,JOIN,ORDER BYcủa các query quan trọng, rồi kiểm tra bằngEXPLAIN.Hay sai: bọc cột trong hàm, vd.
WHERE YEAR(created_at) = 2026hoặcLOWER(email) = ..., khiến index thường trên cột đó không được dùng. Hãy viết lại thành khoảng thời gian hoặc dùng index trên biểu thức.- B-Tree hợp với so sánh
08Transaction là gì? Giải thích ACID.SQL & Database · Junior
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →Transaction là một nhóm thao tác được thực hiện như một đơn vị: hoặc tất cả thành công (
COMMIT), hoặc không có gì xảy ra (ROLLBACK).- Atomicity: không có trạng thái làm dở dang.
- Consistency: sau transaction dữ liệu vẫn thoả ràng buộc (khoá ngoại, unique, check).
- Isolation: các transaction chạy đồng thời không thấy dữ liệu dở dang của nhau, mức độ tuỳ isolation level.
- Durability: đã commit thì không mất dù server sập (nhờ write-ahead log / redo log).
BEGIN; UPDATE accounts SET balance = balance - 500 WHERE id = 1; UPDATE accounts SET balance = balance + 500 WHERE id = 2; COMMIT;Người phỏng vấn muốn nghe: một ví dụ thực tế như chuyển tiền hoặc trừ tồn kho, và bạn biết giữ transaction ngắn, không gọi API bên ngoài khi đang mở transaction.
09Composite index (index nhiều cột) hoạt động ra sao? Thứ tự cột có quan trọng không?SQL & Database
Gợi ý trả lời
Ôn thêm câu hỏi SQL & Database →Có. Composite index sắp xếp theo cột đầu, rồi đến cột thứ hai trong cùng giá trị cột đầu, v.v. Vì vậy nó chỉ dùng hiệu quả khi query dùng các cột từ trái sang (leftmost prefix).
Với
INDEX (status, created_at):WHERE status = 'paid' AND created_at > ...: dùng tốt.WHERE status = 'paid' ORDER BY created_at DESC: dùng cho cả lọc lẫn sắp xếp.WHERE created_at > ...(không có status): thường không dùng được.
Nguyên tắc chọn thứ tự: cột so sánh bằng (
=) đặt trước, cột so sánh khoảng hoặc sắp xếp đặt sau. Nếu index chứa đủ mọi cột query cần (covering index) thì DB không phải đọc lại bảng.Hay sai: tạo riêng index cho từng cột rồi nghĩ rằng chúng sẽ kết hợp hiệu quả như một composite index.
10Bạn thấy mình ở đâu sau 2–3 năm nữa?Câu hỏi hành vi & văn hoá
Gợi ý trả lời
Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →Người phỏng vấn muốn biết mục tiêu của bạn có khớp với hướng phát triển ở công ty và bạn có định gắn bó không.
- Nêu hướng phát triển cụ thể, thực tế: đi sâu chuyên môn (senior, chuyên gia một mảng) hay quản lý (lead, PM).
- Kèm kế hoạch: kỹ năng cần học, trách nhiệm muốn nhận thêm.
- Gắn với cơ hội ở vị trí đang ứng tuyển.
Câu mẫu: "Trong 2–3 năm tới em muốn trở thành senior có thể tự thiết kế và chịu trách nhiệm một module lớn, đồng thời hướng dẫn được các bạn mới. Em đang học thêm về thiết kế hệ thống và thấy team bên mình có nhiều bài toán ở quy mô lớn, rất hợp để em phát triển theo hướng đó."
Hay sai: "Em muốn mở công ty riêng" hoặc "em chưa nghĩ tới". Cũng đừng nói muốn ngồi vào chỗ của người đang phỏng vấn.
Bạn đã phỏng vấn ở SHS?
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