Outline ôn phỏng vấn Backend Fresher — VPBank

Tổng hợp từ nghiên cứu JD thật của VPBank, trải nghiệm phỏng vấn được kể lại (VOZ, Glassdoor, review), và bộ câu hỏi backend chuẩn tại ngân hàng VN. Chi tiết từng mảng (câu hỏi mẫu + hướng trả lời đầy đủ) nằm trong thư mục on-tap/.


0. Bối cảnh cần biết trước (chi tiết: 01-vpbank-quy-trinh-tech-stack.md)

Tech stack VPBank (từ JD chính thức): Java + Spring Boot là chủ đạo; Hibernate/JPA, RESTful API; microservices + event-driven (Kafka, RabbitMQ); DB: Oracle, MySQL, PostgreSQL, MongoDB; Redis; Docker/Kubernetes/OpenShift; CI/CD Jenkins + Git + Maven; cloud chiến lược là AWS; core banking Temenos T24 chạy trên Red Hat OpenShift.

Đường vào cho fresher: JD tuyển lẻ hầu hết đòi 3+ năm kinh nghiệm → fresher chủ yếu đi qua VPBank Technology Young Talents (aptitude test + culture fit test + bài giải pháp IT → phỏng vấn hiring manager, có đợt thêm group interview/business case) hoặc VPBank Technology Hackathon (tháng 5–8, build trên AWS, đội thắng tuyển thẳng).

Quy trình chung: CV → test online (IQ/logic + tiếng Anh + chuyên môn) → 1–3 vòng phỏng vấn (hội đồng 2–3 người, technical + HR có thể gộp chung, trực tiếp hoặc MS Teams) → offer.


1. Java Core + OOP + Spring Boot — mảng bị hỏi nhiều nhất (02)

Ưu tiên cao:

Hướng trả lời xuyên suốt: mọi ví dụ có tiền → BigDecimal (khởi tạo từ String, so sánh bằng compareTo); nhắc thread safety vì bank chịu concurrent cao; không expose entity ra API.

2. Database + SQL — mảng "signature" của ngân hàng (03)

3 câu gần như chắc chắn xuất hiện:

  1. ACID — gắn cả 4 chữ vào một ví dụ chuyển tiền duy nhất.
  2. Double-spend / race condition — 2 request cùng rút tiền: pessimistic lock (SELECT ... FOR UPDATE) / optimistic lock (cột version) / atomic update + check affected rows. KHÔNG trả lời "dùng synchronized" (chết khi chạy nhiều instance).
  3. Isolation levels — dirty read / non-repeatable read / phantom read, 4 mức, default của MySQL vs Oracle/PostgreSQL.

Ngoài ra: luyện viết SQL tay trên giấy (JOIN, GROUP BY + HAVING, top-N, tìm trùng); index B-tree + các trường hợp index không được dùng; deadlock chuyển tiền A→B / B→A → lock theo thứ tự account id; kiểu DECIMAL cho tiền; Redis (cache-aside, TTL — và câu ăn điểm "không cache số dư"); SQL vs NoSQL — vì sao core banking vẫn dùng RDBMS.

3. DSA + Networking + OS + vòng coding (04)

DSA mức fresher VN: Big-O; array/string (reverse, palindrome, đếm tần suất); HashMap để đưa O(n²) về O(n) (Two Sum); stack/queue (valid parentheses); binary search; sort (Quick vs Merge, stable); đệ quy + bẫy Fibonacci O(2ⁿ); linked list cơ bản.

Networking: HTTP vs HTTPS; TCP vs UDP (giao dịch tài chính không được mất gói → TCP); HTTP methods + idempotency (POST /transfer retry → trừ tiền 2 lần → idempotency key); status codes (phân biệt 401 vs 403); cookie/session/JWT; TLS handshake mức khái niệm.

OS: process vs thread; deadlock 4 điều kiện + ví dụ chuyển tiền khóa chéo.

Vòng code — quy trình 6 bước, im lặng code là lỗi lớn nhất: nhắc lại đề + hỏi clarify → nêu brute force → đề xuất tối ưu + trade-off → xác nhận hướng → vừa code vừa nói → tự test + tự nêu complexity.

4. System design mức fresher + domain ngân hàng (05)

Bộ ba từ khóa chủ động lồng vào mọi câu: BigDecimalidempotencytransaction/ACID.

5. Git + Docker + CI/CD + Maven (07)

Fresher chỉ cần khái niệm đúng + ý thức quy trình: Git workflow nhóm + xử lý conflict; merge vs rebase (golden rule); fetch vs pull; vì sao mọi thay đổi phải qua PR (four-eyes/maker-checker — đúng khẩu vị bank); Docker image vs container, khác VM; CI/CD pipeline + vì sao bank tự động nhưng release cần approval (segregation of duties); Maven lifecycle; không commit secret vào Git (câu lọc ý thức bảo mật).

Việc nên làm trước phỏng vấn: dọn GitHub đồ án (README, commit message tử tế, 1 PR mẫu, quét sạch secret); viết 1 Dockerfile cho đồ án và chạy được.

6. Unit test — JUnit 5 + Mockito (08)

Unit vs integration test + test pyramid; khung 4 dòng: @Mock repo → @InjectMocks service → when().thenReturn() → assert + verify(); thiết kế test case cho transfer() theo mindset "kẻ phá hoại" (amount âm, chuyển cho chính mình, không đủ số dư → verify không có gì được ghi DB); coverage 100% ≠ hết bug. Nếu đồ án chưa có test → viết bổ sung 5–10 test trước phỏng vấn để đổi câu trả lời từ "em chưa viết" thành "em đã nhận ra thiếu sót và bổ sung".

7. Vòng HR / Behavioral (06)

8. Tiếng Anh (09)

Test online thường có phần tiếng Anh (dạng TOEIC Part 5/6/7, B1–B2) — ôn tenses, conditionals, prepositions, passive. Thuộc bài self-introduction tiếng Anh 60–90 giây theo khung 6 ý; thuộc 5 câu cứu nguy ("Could you rephrase...", "I haven't worked with X in production, but my understanding is..."). Kể project bằng thì quá khứ (I built, we used). Chậm – rõ – đủ âm cuối > nhanh mà vấp.


Kế hoạch ôn gợi ý (7–10 ngày)

Ngày Nội dung
1–2 Java Core + Spring (file 02) — luyện nói to 16 câu, đặc biệt @Transactional
3–4 Database (file 03) — luyện 3 câu chắc chắn gặp + viết 10–15 query ra giấy
5 DSA + Networking (file 04) — làm 10 bài easy trên HackerRank bằng Java
6 System design mini + domain bank (file 05) — tập nói 2 bài design
7 Git/Docker/Test (file 07, 08) — dọn GitHub, viết Dockerfile, bổ sung unit test cho đồ án
8 HR + tiếng Anh (file 06, 09) — viết & tập nói giới thiệu bản thân 2 thứ tiếng, 2–3 chuyện STAR
9–10 Tổng duyệt: mock interview, ôn lại CV từng dòng, luyện IQ test (dãy số/logic)

5 nguyên tắc vàng khi trả lời (đặc thù ngân hàng)

  1. Neo mọi ví dụ vào tiền/chuyển khoản — interviewer bank chấm cao ứng viên tự map lý thuyết sang nghiệp vụ.
  2. BigDecimal, idempotency, transaction, audit log — 4 từ khóa rải tự nhiên vào câu trả lời.
  3. An toàn trước, tốc độ sau — "thà từ chối giao dịch còn hơn xử lý trên dữ liệu sai".
  4. Trung thực khi không biết — "em chưa làm thực tế nhưng theo em hiểu là..." — hợp văn hóa risk/compliance, tốt hơn bịa.
  5. Thể hiện tôn trọng quy trình — chê quy trình rườm rà là câu tự loại ở ngân hàng.