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/.
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.
Ưu tiên cao:
Account không cho set balance trực tiếp), phân biệt overloading vs overriding.@ControllerAdvice.@Transactional — câu bẫy kinh điển: hoạt động qua proxy, self-invocation không có transaction, mặc định chỉ rollback với unchecked exception. Gắn với ví dụ chuyển tiền (trừ A + cộng B phải atomic).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.
3 câu gần như chắc chắn xuất hiện:
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).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.
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.
Bộ ba từ khóa chủ động lồng vào mọi câu: BigDecimal — idempotency — transaction/ACID.
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.
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".
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.
| 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) |