Lời mở đầu: Người phỏng vấn thực sự tìm gì ở một dev 2–4 năm?
Tôi đã ngồi ở cả hai phía bàn phỏng vấn: từng là ứng viên run tay trước câu hỏi về HashMap, và sau này là người hỏi câu đó cho hàng trăm ứng viên. Điều tôi rút ra là: ở mức 2–4 năm kinh nghiệm, hiếm ai trượt vì không biết định nghĩa. Họ trượt vì chỉ biết định nghĩa.
Cuốn cẩm nang này không phải một ngân hàng câu hỏi để học thuộc. Nó là bản đồ: học gì, học sâu tới đâu, người phỏng vấn đang thực sự kiểm tra điều gì đằng sau mỗi câu hỏi, và câu trả lời "ăn điểm" nghe như thế nào.
0.1 Fresher và 2–4 năm: cùng một câu hỏi, hai tiêu chuẩn chấm
Tôi hỏi cùng một câu "@Transactional hoạt động thế nào?" cho cả Fresher lẫn ứng viên 3 năm. Với Fresher, nói được "nó bọc method trong một transaction, lỗi thì rollback" là đạt. Với ứng viên 3 năm, câu trả lời đó là trượt. Tôi chờ nghe về proxy, về chuyện gọi method trong cùng class thì annotation mất tác dụng, về checked exception không tự rollback, và tốt nhất là một lần bạn đã dính lỗi đó trong dự án thật.
| Tiêu chí | Fresher | 2–4 năm (Junior+ / Middle) |
|---|---|---|
| Kiến thức | Biết khái niệm, định nghĩa | Hiểu cơ chế bên trong, biết trade-off |
| Câu trả lời | "X là gì" | "X hoạt động thế nào, khi nào không nên dùng" |
| Dự án | Đồ án, bài tập | Hệ thống thật, có người dùng, có sự cố |
| Debug | Đọc stack trace | Đọc log, metric, heap dump, tìm nguyên nhân gốc |
| Thiết kế | Làm theo hướng dẫn | Tự thiết kế một module, giải thích lựa chọn |
| Giao tiếp | Trả lời đúng là đủ | Giải thích rõ cho người khác, dám nói "tôi không chắc" |
Mẹo từ người phỏng vấn
Công thức một câu trả lời tốt ở mức 2–4 năm: Định nghĩa ngắn (1 câu) → Cơ chế bên trong → Trade-off / khi nào không dùng → Ví dụ từ dự án của bạn. Bạn không cần câu nào cũng đủ bốn phần, nhưng câu nào có phần cuối thì gần như chắc chắn được điểm cao.
0.2 Quy trình phỏng vấn điển hình
Mỗi công ty một kiểu, nhưng phần lớn công ty ở Việt Nam (cả outsource lẫn product) đi theo khung sau:
- Sàng lọc CV và gọi điện (15–30 phút): HR hoặc tech lead hỏi nhanh về kinh nghiệm, mức lương mong muốn, thời gian nhận việc. Đây là lúc CV của bạn phải khớp với lời bạn nói.
- Phỏng vấn kỹ thuật (45–90 phút): trọng tâm của cuốn sách này. Java Core, Spring, Database, và đào sâu vào dự án trong CV.
- Live coding hoặc bài test về nhà: thuật toán mức easy–medium, hoặc một mini project Spring Boot. Chấm cả cách bạn tư duy lẫn chất lượng code.
- System design nhẹ (với mức Middle): thiết kế một tính năng hoặc một hệ thống nhỏ, xem bạn có nghĩ tới dữ liệu, tải, lỗi hay không.
- Behavioral / Culture fit / HR: kể chuyện dự án, xử lý xung đột, lý do nghỉ việc, deal lương.
Người phỏng vấn muốn kiểm tra
Ở vòng kỹ thuật, người phỏng vấn thường có một "kịch bản đào sâu": bắt đầu bằng câu dễ, rồi hỏi tiếp "tại sao?", "nếu... thì sao?" cho đến khi bạn dừng lại. Điểm dừng đó chính là level của bạn.
- Họ không mong bạn biết hết. Họ muốn xem bạn dừng ở đâu và phản ứng ra sao khi không biết.
- Họ kiểm tra CV: mọi công nghệ bạn ghi trong CV đều là "vé mời" để bị hỏi sâu.
- Họ đánh giá bạn có tự làm được việc (ownership) hay chỉ làm theo chỉ dẫn.
0.3 Cách dùng cẩm nang này
Cẩm nang gồm hai phần:
- Phần nền tảng (Nền tảng 1 và 2): kiến thức mức Fresher về Java, OOP, Collections, SQL, Web, Spring, Hibernate. Người phỏng vấn hay dùng các câu này để khởi động. Với ứng viên 2–4 năm, trả lời sai một câu nền tảng bị trừ điểm nặng hơn trả lời chưa sâu một câu nâng cao. Nếu bạn là Fresher hoặc đã lâu không ôn lý thuyết, hãy bắt đầu từ đây.
- Phần chuyên sâu (Chương 1–13): cùng các chủ đề đó nhưng ở mức cơ chế, trade-off và kinh nghiệm dự án, cộng thêm cache, message queue, microservices, system design, DevOps và kỹ năng phỏng vấn.
Mỗi chương đi theo cùng một khuôn để bạn ôn nhanh:
- Người phỏng vấn muốn kiểm tra gì: đọc trước để biết trọng tâm.
- Kiến thức cốt lõi: giải thích ngắn gọn, đúng bản chất, có code và bảng so sánh.
- Câu hỏi phỏng vấn thường gặp: kèm gợi ý trả lời theo cách một ứng viên giỏi sẽ nói.
- Bẫy thường gặp: những câu trả lời làm bạn mất điểm ngay lập tức.
- Câu hỏi đào sâu: câu người phỏng vấn sẽ hỏi tiếp. Hãy luyện trả lời chúng, đây là chỗ phân biệt 2 năm với 4 năm.
- Checklist ôn tập: tự đánh dấu. Mục nào chưa tự tin giải thích bằng lời của mình thì chưa tính là xong.
- Nhắc lại kiến thức: callout đặt ở đầu một số mục, tóm tắt 1–3 câu khái niệm nền mà mục đó dựa vào và chỉ ra nơi học lại (ví dụ "xem N1.9"). Nếu đọc callout này mà thấy lạ, hãy quay lại mục được trỏ tới trước khi đọc tiếp; nếu thấy quen thì lướt qua.
- Tóm tắt trọng tâm: mục ngay trước Checklist, gom 8–15 điều phải nhớ của cả chương, mỗi điều kèm "vì sao". Đây là phần nên đọc lại vào tối trước buổi phỏng vấn.
Câu hỏi trong mỗi chương được gắn nhãn mức độ ngay trong tiêu đề để bạn biết mình đang luyện ở tầng nào:
| Nhãn | Ý nghĩa | Cách luyện |
|---|---|---|
| Cơ bản | Kiến thức phải trả lời trôi chảy, sai là mất điểm nặng | Trả lời trong 1–2 phút, không cần nhìn tài liệu |
| Hiểu sâu | Hỏi cơ chế, "vì sao", so sánh hai lựa chọn | Nói được cơ chế bên trong và trade-off |
| Thực chiến | Tình huống production, tìm lỗi, thiết kế | Trả lời theo các bước điều tra, gắn với dự án của bạn |
| Đọc code | Cho đoạn code, hỏi in ra gì hoặc lỗi ở đâu | Tự đoán kết quả trên giấy trước khi xem đáp án |
Mỗi đáp án mở đầu bằng ý chính 1–2 câu, rồi mới đến giải thích chi tiết. Khi luyện, hãy tập nói được ý chính đó trước: người phỏng vấn thường đánh giá bạn ngay từ câu đầu tiên.
Mẹo từ người phỏng vấn
Bản web của cẩm nang có chế độ Tự kiểm tra: khi bật, phần đáp án của mỗi câu hỏi được ẩn đi để bạn tự trả lời trước rồi mới mở ra so sánh. Với câu Đọc code, đề bài và đoạn code vẫn hiển thị, chỉ phần sau dòng "Đáp án" bị ẩn. Cách dùng hiệu quả: trả lời thành tiếng hoặc viết ra giấy, mở đáp án, rồi đánh dấu câu nào sai để ôn lại sau vài ngày.
Ghi chú
Nếu bạn là người mới, sinh viên hoặc Fresher, đừng bắt đầu từ Chương 1. Hãy đọc Nền tảng 1 (Java cơ bản và OOP) và Nền tảng 2 trước: các chương chuyên sâu dùng lại kiến thức ở đó và chỉ nhắc ngắn qua callout Nhắc lại kiến thức. Khi đã trả lời được phần lớn câu hỏi Cơ bản ở Nền tảng, bạn sẽ đọc các chương sau dễ hơn nhiều.
Ghi chú
Cẩm nang lấy Java 17/21 và Spring Boot 3.x làm chuẩn. Nhiều bộ câu hỏi lưu hành trên mạng (và một phần tài liệu gốc dùng để biên soạn cuốn này) vẫn trả lời theo Java 6, EJB, SOAP. Phụ lục B liệt kê các điểm lỗi thời hoặc sai hay gặp để bạn không bị "bắt lỗi" trong phòng phỏng vấn.
0.4 Lộ trình ôn tập 6 tuần
Nếu bạn còn đi làm toàn thời gian, mỗi ngày 1,5–2 giờ và cuối tuần 4–5 giờ là đủ cho lộ trình sau. Có ít thời gian hơn thì ưu tiên các chương đánh dấu (*). Nếu bạn là Fresher, dành thêm 1–2 tuần đầu cho Nền tảng 1 và 2, rồi mới sang lộ trình dưới đây. Nếu đã có kinh nghiệm, hãy đọc lướt phần Nền tảng trong tuần 1 và chỉ dừng lại ở câu nào mình trả lời chưa chắc.
| Tuần | Nội dung | Kết quả cần đạt |
|---|---|---|
| 1 | Lướt Nền tảng 1–2; Chương 1*, 2: Java Core, JVM | Giải thích HashMap, equals/hashCode, GC bằng lời của mình |
| 2 | Chương 3*, 12: Concurrency, bắt đầu luyện code mỗi ngày | Viết được producer-consumer, giải thích volatile vs synchronized |
| 3 | Chương 4*, 5: Spring, Security | Vẽ được bean lifecycle, giải thích @Transactional qua proxy |
| 4 | Chương 6*, 7: Database, JPA, REST | Tự sửa được N+1, nói rõ isolation level mặc định của DB bạn dùng |
| 5 | Chương 8, 9, 10, 11: Cache, MQ, Microservices, Testing, DevOps | Giải một bài system design nhỏ trong 40 phút |
| 6 | Chương 13*, Phụ lục: kể chuyện dự án, phỏng vấn thử | Tự giới thiệu 90 giây trôi chảy, 3 câu chuyện STAR sẵn sàng |
Mẹo từ người phỏng vấn
Cách học hiệu quả nhất tôi từng thấy ở các ứng viên giỏi: học xong một chủ đề thì nói to câu trả lời như đang phỏng vấn thật, ghi âm lại và nghe. Bạn sẽ nhận ra ngay chỗ mình ấp úng, chỗ nói vòng vo. Tốt hơn nữa là nhờ một người bạn đóng vai người phỏng vấn và cứ hỏi "tại sao?" liên tục.
0.5 Ba nguyên tắc trong phòng phỏng vấn
- Trung thực khi không biết. "Phần này tôi chưa làm thực tế, nhưng theo hiểu biết của tôi thì..." luôn tốt hơn bịa. Người phỏng vấn nhận ra ngay khi bạn đoán, và một câu bịa làm họ nghi ngờ mọi câu trả lời trước đó.
- Suy nghĩ thành tiếng. Im lặng 30 giây rồi đưa ra đáp án đúng vẫn kém hơn nói ra hướng suy nghĩ, dù chưa trọn vẹn. Người phỏng vấn chấm cách bạn tư duy, không chỉ kết quả.
- Kéo câu hỏi về vùng mạnh của bạn. Khi được hỏi về Kafka mà bạn chỉ dùng RabbitMQ, hãy nói rõ điều đó và so sánh bằng kinh nghiệm RabbitMQ thật của bạn. Kinh nghiệm thật luôn thuyết phục hơn lý thuyết học thuộc.