CS FUNDAMENTALS + DSA + VÒNG CODE — Ô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à đủ, ít khi đào sâu với fresher)


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

Nhóm DSA

Q1. Big-O là gì? Vì sao O(n log n) tốt hơn O(n²)?

Q2. Array và Linked List khác nhau thế nào? Khi nào dùng cái nào?

Q3. HashMap hoạt động như thế nào? Collision xử lý ra sao?

Q4. Stack và Queue khác nhau thế nào? Cho ví dụ ứng dụng.

Q5. Viết binary search. Điều kiện áp dụng là gì?

Q6. So sánh Quick sort và Merge sort. Sort nào là stable?

Q7. Đệ quy là gì? Khi nào không nên dùng?

Q8. Bài Two Sum: tìm 2 số trong mảng có tổng bằng target.

Nhóm Networking

Q9. HTTP và HTTPS khác nhau thế nào?

Q10. TCP vs UDP? Hệ thống ngân hàng dùng cái nào?

Q11. Các HTTP method và tính idempotent? Vì sao idempotency quan trọng?

Q12. Kể các HTTP status code hay gặp.

Q13. Cookie vs Session vs JWT? App ngân hàng nên dùng gì?

Q14. HTTPS/TLS handshake diễn ra thế nào (mức khái niệm)?

Nhóm OS

Q15. Process vs Thread?

Q16. Deadlock là gì? 4 điều kiện xảy ra deadlock? Cách phòng tránh?


3. Vòng coding test online + coding trước interviewer

Dạng bài thường gặp (HackerRank/CodeSignal/TestDome, easy → medium)

Chiến lược làm bài test online

Coding trước interviewer: quy trình + "think aloud"

Quy trình 6 bước (nói ra thành lời từng bước — im lặng code là lỗi lớn nhất):

  1. Nhắc lại đề + hỏi làm rõ: "Em xác nhận lại: input là mảng int, có thể có số âm không ạ? Có duplicate không? Output cần index hay value?" — hỏi 1-2 câu clarify luôn được cộng điểm.
  2. Nêu brute force trước: "Cách đơn giản nhất là 2 vòng for, O(n²). Em nêu ra trước rồi sẽ tối ưu." — chứng minh mình luôn có lời giải chạy được.
  3. Đề xuất tối ưu + trade-off: "Em có thể đánh đổi O(n) memory dùng HashMap để đưa time về O(n)."
  4. Xác nhận hướng đi rồi mới code: "Em code theo hướng HashMap nhé anh/chị?" — tránh code 15 phút theo hướng interviewer không muốn.
  5. Vừa code vừa nói: "Em duyệt mảng, với mỗi phần tử em check complement trong map..." — code sạch, tên biến có nghĩa (seenNumbers thay vì m).
  6. Tự test + tự nêu complexity: dry-run bằng 1 ví dụ nhỏ trên giấy/màn hình, tự chỉ ra edge case, kết bằng "Time O(n), space O(n)" mà KHÔNG cần interviewer hỏi.

Khi bị bí:

Lỗi thường gặp cần tránh trong vòng code:

Chi tiết ăn điểm riêng cho ngân hàng trong vòng code: nếu bài liên quan đến tiền, chủ động nói "nếu đây là số tiền thật, em sẽ không dùng float/double vì sai số làm tròn nhị phân — em dùng BigDecimal (Java) hoặc lưu theo đơn vị nhỏ nhất (đồng) bằng long". Câu này cực hợp khẩu vị interviewer ngân hàng và ít fresher nói được.