DATABASE + SQL — Nội dung ôn tập cho Fresher Backend (VPBank)

1. Danh sách chủ đề con theo độ ưu tiên

Ưu tiên CAO (gần như chắc chắn bị hỏi)

Ưu tiên TRUNG BÌNH

Ưu tiên THẤP (biết khái niệm là đủ, fresher ít bị đào sâu)


2. Câu hỏi phỏng vấn khả năng cao + hướng trả lời

Câu 1: Giải thích ACID. Cho ví dụ với giao dịch chuyển tiền.

Hướng trả lời:

Câu 2: Phân biệt INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN.

Hướng trả lời:

Câu 3: WHERE khác HAVING thế nào? Viết query: tìm các khách hàng có tổng tiền chuyển trong tháng > 100 triệu.

Hướng trả lời:

SELECT customer_id, SUM(amount) AS total
FROM transactions
WHERE txn_date >= '2026-06-01' AND txn_date < '2026-07-01'
  AND type = 'TRANSFER'
GROUP BY customer_id
HAVING SUM(amount) > 100000000;

Câu 4: Index là gì? B-tree index hoạt động ra sao? Khi nào index KHÔNG được dùng?

Hướng trả lời:

Câu 5: Kể tên các isolation level và anomaly tương ứng.

Hướng trả lời:

Câu 6: Hai request cùng lúc rút tiền từ 1 tài khoản số dư 1 triệu, mỗi request rút 800k. Làm sao tránh cả hai cùng thành công (double-spend)?

Hướng trả lời:

Câu 7: Deadlock là gì? Cho ví dụ và cách phòng tránh.

Hướng trả lời:

Câu 8: Normalization là gì? Nêu 1NF, 2NF, 3NF. Khi nào chấp nhận denormalize?

Hướng trả lời:

Câu 9: SQL vs NoSQL — khác nhau gì, khi nào dùng gì? Vì sao core banking dùng RDBMS?

Hướng trả lời:

Câu 10: Redis là gì, dùng làm gì trong hệ thống banking? Cache-aside hoạt động thế nào?

Hướng trả lời:

Câu 11: Optimistic lock vs Pessimistic lock — khác nhau và chọn thế nào?

Hướng trả lời:

Câu 12: Viết query tìm bản ghi trùng / tìm giá trị lớn thứ 2 (bài viết trên giấy kinh điển).

Hướng trả lời:

SELECT national_id, COUNT(*) 
FROM customers 
GROUP BY national_id 
HAVING COUNT(*) > 1;
SELECT MAX(amount) FROM transactions
WHERE amount < (SELECT MAX(amount) FROM transactions);
-- hoặc: ORDER BY amount DESC LIMIT 1 OFFSET 1
-- hoặc (điểm cộng): DENSE_RANK() OVER (ORDER BY amount DESC)

Câu 13: DELETE, TRUNCATE, DROP khác nhau gì? PRIMARY KEY vs UNIQUE?

Hướng trả lời:

Câu 14: Lưu tiền trong database nên dùng kiểu dữ liệu gì? Tại sao không dùng FLOAT?

Hướng trả lời:

Câu 15: Trong 1 transaction Java/Spring, nếu bước giữa ném exception thì chuyện gì xảy ra? Commit/Rollback hoạt động ra sao?

Hướng trả lời:


3. Ghi chú chiến thuật riêng cho phỏng vấn ngân hàng