Cẩm nang phỏng vấn
Cẩm nang phỏng vấn kỹ sư phần mềm
Chuẩn bị cho phỏng vấn kỹ sư phần mềm với các dạng bài lập trình, cấu trúc dữ liệu, thuật toán, system design, gỡ lỗi, kiểm thử và câu hỏi hành vi.
34 phút đọc
19 câu hỏi
Kỹ sư phần mềm
Cập nhật tháng 5 năm 2026
Tổng quan
Phỏng vấn kỹ sư phần mềm kiểm tra xem bạn có lập luận mạch lạc, viết code đúng, giải thích được các đánh đổi, xử lý được trường hợp biên khi gỡ lỗi và phối hợp như một người đủ sức xây dựng hệ thống ổn định trên môi trường production hay không.
3-6
Số vòng phỏng vấn thường gặp
45-60 phút
Thời lượng vòng lập trình
6+
Dạng bài lập trình cốt lõi
4-8 tuần
Thời gian chuẩn bị khuyến nghị
Người phỏng vấn kỹ sư phần mềm đánh giá điều gì
•
Phân rã vấn đề: bạn có biến được một đề bài mơ hồ thành thuật toán cụ thể không?
•
Chọn cấu trúc dữ liệu: bạn có chọn được cách biểu diễn phù hợp với ràng buộc của bài không?
•
Tính đúng đắn: bạn có xử lý được trường hợp biên, bất biến và các tình huống lỗi không?
•
Chất lượng code: bạn có viết được code dễ đọc, dễ bảo trì khi bị áp lực thời gian không?
•
Nhận thức về độ phức tạp: bạn có giải thích được đánh đổi giữa thời gian và bộ nhớ mà không tối ưu hóa quá sớm không?
•
Tư duy production: bạn có lập luận được về độ tin cậy, khả năng mở rộng, kiểm thử và rủi ro vận hành không?
•
Giao tiếp: bạn có vừa nghĩ vừa nói thành lời, tiếp nhận góp ý và điều chỉnh hướng làm mà không phản ứng phòng thủ không?
Ứng viên giỏi nhất luôn để người phỏng vấn theo dõi được lập luận của mình
Đừng im lặng code suốt 20 phút. Hãy nêu hướng giải, xác định giả định, chạy thử một ví dụ, chỉ ra các trường hợp biên rồi mới bắt tay vào cài đặt. Người phỏng vấn đánh giá cách bạn tư duy, chứ không chỉ xem cuối cùng bạn có ra được lời giải chạy đúng hay không.
Quy trình phỏng vấn kỹ sư phần mềm
Phần lớn quy trình phỏng vấn kỹ sư phần mềm gồm vòng sàng lọc với chuyên viên tuyển dụng, vòng sàng lọc kỹ thuật, các vòng phỏng vấn lập trình, vòng thiết kế hệ thống (system design) hoặc kiến trúc dành cho vị trí trung cấp và cấp cao, cùng các vòng phỏng vấn hành vi hoặc đánh giá khả năng cộng tác.
Các vòng phỏng vấn kỹ sư phần mềm thường gặp
1
Sàng lọc với chuyên viên tuyển dụng: xác nhận cấp bậc, địa điểm làm việc, khung lương, giấy phép lao động và mức độ phù hợp với vị trí.
2
Sàng lọc kỹ thuật: thường là một bài lập trình, đôi khi kèm phần gỡ lỗi, kiến thức nền tảng khoa học máy tính hoặc câu hỏi về một ngôn ngữ lập trình cụ thể.
3
Các vòng lập trình onsite: hai đến bốn buổi phỏng vấn lập trình thuật toán hoặc thực tế, tập trung vào tính đúng đắn, giao tiếp và khả năng cài đặt.
4
Vòng system design: phổ biến với vị trí cấp cao, tập trung vào kiến trúc, quy mô, mô hình hóa dữ liệu, API, độ tin cậy và các đánh đổi.
5
Vòng hành vi hoặc giá trị: đánh giá tinh thần làm chủ (ownership), khả năng cộng tác, cách giải quyết xung đột, tác động của dự án và độ chín chắn trong nghề kỹ sư.
6
Hội đồng tuyển dụng hoặc buổi tổng hợp đánh giá: người phỏng vấn đối chiếu tín hiệu về khả năng giải quyết vấn đề, chất lượng code, óc phán đoán khi thiết kế và tinh thần làm việc nhóm.
Phỏng vấn lập trình | Phỏng vấn system design | |
|---|---|---|
Câu hỏi chính | Bạn có giải đúng một bài toán có ràng buộc bằng code không? | Bạn có thiết kế được một hệ thống ổn định trước các ràng buộc thực tế không? |
Tín hiệu tốt | Thuật toán rõ ràng, code gọn gàng, đã kiểm thử trường hợp biên, phân tích độ phức tạp chính xác | API/mô hình dữ liệu tốt, có phương án mở rộng, nêu được đánh đổi, điểm nghẽn và cách xử lý lỗi |
Lỗi thường gặp | Lao vào viết code trước khi làm rõ đầu vào và trường hợp biên | Vẽ các khối mà không giải thích luồng dữ liệu, thành phần nào chịu trách nhiệm hay ràng buộc là gì |
Cách chuẩn bị tốt nhất | Luyện các dạng bài đến khi nhận diện thật nhanh, sau đó tập trung vào chất lượng cài đặt | Nắm các kiến trúc phổ biến, rồi luyện cân nhắc đánh đổi thành lời |
Đỗ hay trượt không chỉ nằm ở số bài LeetCode
Giải hàng trăm bài vẫn có thể trượt nếu bạn không giải thích được lập luận, không kiểm thử code hoặc không chọn đúng dạng bài khi chịu áp lực. Chất lượng luyện tập quan trọng hơn số lượng bài đã giải.
Nền tảng phỏng vấn lập trình
Phỏng vấn lập trình đánh giá cao những ứng viên có một quy trình làm bài rõ ràng, áp dụng lặp lại được. Mục tiêu là không hoảng, nhanh chóng chốt được một hướng khả thi và viết code mà người phỏng vấn dễ theo dõi.
Quy trình làm bài lập trình đáng tin cậy
1
Làm rõ đầu vào, đầu ra, ràng buộc, phần tử trùng lặp, thứ tự, giá trị null và hành vi mong đợi ở các trường hợp biên.
2
Tự chạy tay một ví dụ nhỏ và gọi tên phép biến đổi mà thuật toán cần thực hiện.
3
Bắt đầu bằng lời giải vét cạn (brute force) nếu thấy hữu ích, rồi giải thích vì sao nó quá chậm và thông tin nào có thể lưu cache, sắp xếp, đánh chỉ mục hoặc duyệt theo cách khác.
4
Chọn dạng bài và cấu trúc dữ liệu. Nêu bất biến (invariant) giúp thuật toán luôn đúng.
5
Viết code sạch với tên biến có nghĩa, chỉ tách hàm phụ nhỏ khi thật sự cần, và không cố tỏ ra khéo léo một cách thừa thãi.
6
Kiểm thử với trường hợp thông thường, trường hợp biên và một trường hợp được dựng ra để phá vỡ chính giả định của bạn.
7
Nêu độ phức tạp thời gian và bộ nhớ cuối cùng, tính cả chi phí sắp xếp, ngăn xếp đệ quy hoặc các cấu trúc phụ trợ.
Các khái niệm lập trình cốt lõi cần nắm vững
Bất biến (invariant)
Điều kiện luôn đúng trong suốt quá trình chạy thuật toán. Ứng viên giỏi giải thích được vì sao vòng lặp, cửa sổ, ngăn xếp hoặc đệ quy của mình là đúng.
Độ phức tạp khấu hao (amortized)
Chi phí trung bình trên một chuỗi thao tác. Thường gặp ở bảng băm, mảng động, ngăn xếp, hàng đợi và các cấu trúc dữ liệu đơn điệu (monotonic).
Không gian tìm kiếm
Tập hợp các đáp án hoặc trạng thái có thể có. Tìm kiếm nhị phân, quay lui, BFS và DP thường là những cách cắt tỉa hoặc khám phá không gian tìm kiếm.
Trạng thái
Thông tin cần có để đưa ra quyết định tại một thời điểm trong thuật toán. Định nghĩa trạng thái kém là nguyên nhân phổ biến nhất khiến lời giải DP và đồ thị bị sai.
✓ Nên làm
•
Làm rõ ràng buộc trước khi chọn hướng giải
•
Diễn đạt bằng bất biến, không chỉ bằng chi tiết cài đặt
•
Dùng ví dụ để kiểm chứng thuật toán trước khi code
•
Kiểm thử với đầu vào rỗng, một phần tử, phần tử trùng lặp, số âm và giá trị biên
•
Chỉ refactor khi việc đó giúp code rõ ràng hơn hoặc đúng hơn
✗ Tránh
•
Lao vào viết code ngay lập tức
•
Im lặng để che giấu sự lúng túng
•
Áp dụng dạng bài học thuộc lòng mà không đối chiếu với đề bài
•
Bỏ qua tràn số nguyên, việc làm thay đổi dữ liệu đầu vào, thứ tự hoặc cách xử lý phần tử trùng lặp
•
Kết luận độ phức tạp khi chưa tính hết mọi thao tác
Mảng, chuỗi và hash map
Mảng, chuỗi và hash map là nền tảng của rất nhiều vòng sàng lọc kỹ thuật. Người phỏng vấn dùng chúng để kiểm tra sự cẩn thận khi xử lý chỉ số, kỹ thuật đếm tần suất, hai con trỏ, cửa sổ trượt và độ chính xác khi cài đặt.
Danh sách liên kết, cây và đồ thị
Các bài về con trỏ và phép duyệt kiểm tra xem bạn có quản lý trạng thái cẩn thận hay không. Phần khó thường không nằm ở cú pháp mà ở việc xác định mỗi con trỏ, hàng đợi, ngăn xếp hay tập đã thăm đại diện cho điều gì.
Quy hoạch động và quay lui
Các câu hỏi quy hoạch động và quay lui kiểm tra khả năng định nghĩa trạng thái. Câu trả lời tốt nhất giải thích được quyết định tại mỗi trạng thái, công thức truy hồi, và vì sao bài toán có các bài toán con gối nhau hoặc áp dụng được cắt tỉa.
Phỏng vấn system design
Phỏng vấn system design đánh giá độ chín chắn trong nghề kỹ sư. Với vị trí trung cấp, mục tiêu là nắm được kiến trúc cơ bản và luồng dữ liệu. Với vị trí cấp cao, yêu cầu là phân tích được đánh đổi, điểm nghẽn, độ tin cậy, khả năng quan sát (observability) và trách nhiệm vận hành.
Quy trình system design thực tế
1
Làm rõ yêu cầu chức năng: người dùng làm được gì, phạm vi gồm những gì và những gì được xác định rõ là nằm ngoài phạm vi.
2
Làm rõ yêu cầu phi chức năng: quy mô, độ trễ, tính sẵn sàng, tính nhất quán, độ bền dữ liệu, quyền riêng tư, chi phí và ràng buộc theo khu vực.
3
Ước tính dung lượng: số người dùng, số request mỗi giây, dung lượng lưu trữ, băng thông, hot key và tỷ lệ đọc/ghi.
4
Định nghĩa API và các mô hình dữ liệu cốt lõi trước khi vẽ quá nhiều khối.
5
Thiết kế kiến trúc tổng thể: client, bộ cân bằng tải, các dịch vụ, cơ sở dữ liệu, hàng đợi, cache, lưu trữ đối tượng (object storage) và worker chạy nền.
6
Xác định điểm nghẽn và các tình huống lỗi: cơ sở dữ liệu quá tải, cache stampede, hàng đợi tồn đọng, sự kiện trùng lặp, sự cố toàn khu vực hoặc dịch vụ phụ thuộc phía sau phản hồi chậm.
7
Thảo luận đánh đổi: SQL hay NoSQL, đồng bộ hay bất đồng bộ, tính nhất quán hay tính sẵn sàng, độ mới của cache hay hiệu năng, sự đơn giản hay khả năng mở rộng.
8
Kết thúc bằng giám sát, triển khai, bảo mật, giới hạn tần suất (rate limit), khôi phục sau thảm họa và các cải tiến trong tương lai.
Gỡ lỗi, kiểm thử và tư duy vận hành production
Nhiều buổi phỏng vấn kỹ sư phần mềm hiện nay có thêm các tình huống thực tế về gỡ lỗi, kiểm thử hoặc vận hành production. Những câu hỏi này phân biệt ứng viên chỉ biết viết code với ứng viên có thể vận hành phần mềm một cách có trách nhiệm.
Câu hỏi hành vi và cộng tác
Vòng hành vi dành cho kỹ sư tập trung vào tinh thần làm chủ (ownership), khả năng cộng tác, óc phán đoán kỹ thuật, cách xử lý tình huống mơ hồ và bài học từ sai lầm. Câu trả lời tốt luôn gắn với những tình huống mà yếu tố kỹ thuật thực sự quan trọng.
Dùng những câu chuyện đặc thù của nghề kỹ sư
Một câu chuyện hành vi tốt của kỹ sư nên có quyết định kỹ thuật, sự đánh đổi, những người liên quan, kết quả và điều đã thay đổi sau đó. Tránh những câu trả lời chung chung về làm việc nhóm mà vị trí nào cũng có thể kể.
Chiến lược chuẩn bị phỏng vấn kỹ sư phần mềm
Ôn luyện hiệu quả cần cân bằng giữa các dạng bài lập trình, phỏng vấn thử, system design, câu chuyện hành vi và độ thành thạo ngôn ngữ lập trình. Mục tiêu là trở nên nhanh và chắc tay, chứ không chỉ quen mặt lời giải.
Kế hoạch 6 tuần chuẩn bị phỏng vấn kỹ sư phần mềm
1
Tuần 1: ôn lại mảng, chuỗi, hash map, hai con trỏ, cửa sổ trượt, ngăn xếp, hàng đợi và phân tích độ phức tạp cơ bản.
2
Tuần 2: luyện cây, đồ thị, BFS, DFS, đệ quy, heap, bài toán khoảng (interval) và tìm kiếm nhị phân. Tập trung vào việc giải thích bất biến.
3
Tuần 3: luyện quy hoạch động và quay lui. Viết ra định nghĩa trạng thái trước khi code.
4
Tuần 4: làm các bộ đề lập trình tổng hợp có bấm giờ. Xem lại những bài làm sai theo nhóm nguyên nhân: chọn sai dạng bài, lỗi code, sót trường hợp biên, giao tiếp chưa rõ hoặc cài đặt chậm.
5
Tuần 5: chuẩn bị system design nếu vị trí mục tiêu yêu cầu. Luyện phân tích yêu cầu, API, mô hình dữ liệu, mở rộng quy mô, xử lý lỗi và đánh đổi.
6
Tuần 6: phỏng vấn thử, trau chuốt câu chuyện hành vi, tập trình bày chuyên sâu về dự án và chuẩn bị câu hỏi riêng cho từng công ty.
Trọng tâm theo từng loại công ty
•
Big Tech: code đúng, system design, tín hiệu hành vi và phong độ ổn định qua nhiều vòng.
•
Startup: khả năng thực thi thực tế, gỡ lỗi, tinh thần làm chủ, tư duy sản phẩm và khả năng ra mắt sản phẩm khi còn nhiều yếu tố mơ hồ.
•
Công ty hạ tầng: hệ thống phân tán, độ tin cậy, mạng, lưu trữ, xử lý đồng thời và óc phán đoán khi vận hành.
•
Công ty AI: pipeline dữ liệu, hệ thống phục vụ mô hình (model serving), đánh giá mô hình, độ trễ, độ tin cậy và tích hợp vào sản phẩm.
•
Fintech hoặc y tế: tính đúng đắn, bảo mật, quyền riêng tư, khả năng kiểm toán, tuân thủ quy định và kỷ luật triển khai cẩn trọng.
Đừng chỉ luyện những dạng bài bạn vốn đã thích
Nếu né tránh đồ thị, DP, đệ quy hay system design, điểm yếu đó sẽ lộ ra khi bạn chịu áp lực. Hãy theo dõi những bài làm sai theo chủ đề và chủ động luyện các nhóm bài khiến bạn chậm hoặc thiếu chắc chắn.
Điểm cần nhớ
Câu trả lời xuất sắc trong phỏng vấn kỹ sư phần mềm kết hợp tư duy thuật toán rõ ràng, code gọn gàng, óc phán đoán khi vận hành production và giao tiếp mang tinh thần cộng tác. Tín hiệu tốt nhất không phải là khả năng học thuộc, mà là khả năng lập luận từ những nguyên lý cơ bản và xây dựng lời giải đúng trong điều kiện có ràng buộc.
Luyện tập trực tiếp với các câu hỏi này
Interview Pilot mang đến cho bạn trợ lý phỏng vấn AI theo thời gian thực trong các buổi phỏng vấn trực tiếp, giúp bạn trả lời rõ ràng khi gặp những câu hỏi này.
Dùng thử Interview Pilot miễn phí