Phan Anh Tú · ngồi phía bên kia bàn
Ứng viên hôm đó đến sớm mười lăm phút, áo sơ mi ủi phẳng, laptop đã mở sẵn. Câu đầu tiên tôi hỏi là bạn kể lại dự án gần nhất. Bạn ấy nói liền tám phút, rất trôi chảy, như đã tập trước gương nhiều lần. Rồi tôi hỏi: trong dự án đó, phần nào bạn thấy mình làm chưa ổn? Im lặng khá lâu. Bạn ấy chưa từng nghĩ sẽ bị hỏi câu này.
Tôi ngồi ở ghế người phỏng vấn đã nhiều năm, đủ để thấy rằng ứng viên thường chuẩn bị rất kỹ cho câu trả lời mà ít chuẩn bị cho câu hỏi tiếp theo. Phần lớn những gì dưới đây đến từ chỗ đó.
Một quy trình tuyển thường có nhiều vòng hơn bạn nghĩ
Mỗi công ty một kiểu, nhưng tôi thấy các bước dưới đây lặp lại khá đều ở các công ty phần mềm trong nước, từ outsource tới công ty làm sản phẩm. Không phải nơi nào cũng đủ, có nơi gộp vòng kỹ thuật và vòng quản lý làm một buổi.
| Vòng | Ai hỏi | Họ thật sự muốn biết |
|---|---|---|
| Gọi điện sàng lọc | Nhân sự tuyển dụng | Bạn có khớp vị trí, mức mong muốn, thời gian nhận việc |
| Bài test hoặc coding online | Nền tảng chấm tự động hoặc đội kỹ thuật | Bạn có tự viết được code chạy đúng không |
| Phỏng vấn kỹ thuật | Tech lead, senior | Bạn hiểu sâu tới đâu, nghĩ thế nào khi gặp chỗ lạ |
| Phỏng vấn với quản lý | Trưởng nhóm, quản lý dự án | Bạn làm việc với người khác ra sao |
Vòng gọi điện hay bị coi nhẹ, nhưng tôi từng thấy ứng viên rớt ngay ở đó vì không nhớ nổi mình đã nộp vào công ty nào. Ghi lại danh sách nơi đã nộp, vị trí, ngày nộp. Nghe đơn giản mà nhiều người không làm.
Vòng kỹ thuật, tôi hỏi gì và mong nghe gì
Khi phỏng vấn kỹ thuật, tôi thường bắt đầu từ CV. Dòng nào ứng viên ghi, tôi hỏi sâu vào dòng đó. Ghi Redis, tôi sẽ hỏi bạn dùng Redis để làm gì và điều gì xảy ra khi Redis chết. Ghi microservices, tôi sẽ hỏi các service gọi nhau thế nào và khi một service chậm thì cả hệ thống bị gì. Vì vậy, việc ôn đầu tiên không phải đi tìm bộ câu hỏi trên mạng, mà là đọc lại CV của chính mình và tự hỏi “tại sao” cho từng dòng. Nếu bạn đang phân vân nên nộp vào vị trí nào, đọc lại các cơ hội trong nghề lập trình trước khi ôn sẽ giúp bạn biết vòng kỹ thuật của từng hướng nặng về phần nào.
Kiến thức nền vẫn bị hỏi, dù bạn đã đi làm vài năm
Cấu trúc dữ liệu, độ phức tạp thuật toán, lập trình hướng đối tượng, cách HTTP hoạt động, transaction và index trong cơ sở dữ liệu. Những thứ này xuất hiện ở hầu hết các buổi phỏng vấn tôi từng ngồi, dù ở mức junior hay senior. Khác biệt là với senior, câu hỏi chuyển từ “đây là gì” sang “khi nào bạn không dùng nó”.
Nhiều bạn luyện trên LeetCode hoặc HackerRank. Tôi thấy có ích, với điều kiện bạn luyện cách nói ra suy nghĩ chứ không chỉ luyện ra đáp án. Làm vừa phải các bài mức dễ và trung bình về mảng, chuỗi, hash map, hai con trỏ, cây, là đủ cho đa số vòng kỹ thuật ở công ty trong nước. Các công ty lớn hơn hoặc làm cho thị trường nước ngoài thì có thể hỏi khó hơn.
Live coding, im lặng là thứ làm bạn mất điểm nhanh nhất
Từ ghế người hỏi: khi ứng viên im lặng gõ code mười phút, tôi không biết họ đang nghĩ đúng hay đang bế tắc. Khi họ nói “em định dùng hash map để đếm, nhưng nếu dữ liệu lớn thì có thể tốn bộ nhớ”, tôi có thể gợi ý, và họ có điểm cho cách nghĩ dù code chưa xong.
Trước khi gõ, hãy nhắc lại đề bằng lời của mình và hỏi về trường hợp biên: mảng rỗng thì sao, có số âm không, dữ liệu có sắp xếp sẵn không. Viết bản chạy được trước, tối ưu sau. Khi xong, tự chạy tay với một ví dụ nhỏ. Tôi đánh giá cao ứng viên tự phát hiện lỗi của mình hơn ứng viên viết đúng ngay nhưng không giải thích được vì sao đúng.
Với vị trí từ middle trở lên, có thể có thêm phần thiết kế hệ thống: thiết kế dịch vụ rút gọn link, hệ thống thông báo, giỏ hàng. Ở phần này không có đáp án đúng. Người hỏi muốn xem bạn có hỏi về quy mô trước khi vẽ không, có nghĩ tới chỗ dễ hỏng không, có biết đánh đổi giữa nhất quán dữ liệu và tốc độ không.
Câu hỏi hành vi không phải là phần để nói cho có
“Kể cho tôi một lần bạn bất đồng với đồng nghiệp về kỹ thuật.”
Câu này tôi hỏi gần như mọi buổi. Câu trả lời kiểu “em chưa bất đồng với ai bao giờ” là câu trả lời tệ, vì nó hoặc không thật, hoặc cho thấy người đó chưa từng đủ quan tâm để có ý kiến riêng. Câu trả lời tốt có bối cảnh, có hai quan điểm, có cách hai bên đi tới quyết định, và có kết quả, kể cả khi kết quả là mình sai.
Nhiều người dùng cấu trúc STAR (tình huống, nhiệm vụ, hành động, kết quả) để chuẩn bị. Nó giúp bạn không lan man. Nhưng đừng đọc như học thuộc. Tôi nghe ra ngay khi ai đó đang đọc kịch bản, và lúc đó tôi sẽ hỏi chệch sang một chi tiết nhỏ để xem câu chuyện có thật không. Hãy chuẩn bị sẵn ba, bốn câu chuyện thật: một lần sửa lỗi gấp trên production, một lần trễ hạn, một lần học công nghệ mới trong thời gian ngắn, một lần bất đồng. Hầu hết câu hỏi hành vi đều quy về một trong mấy chuyện đó.
Những chi tiết nhỏ mà tôi vẫn để ý
Tìm hiểu công ty trước buổi phỏng vấn: họ làm sản phẩm gì, khách hàng là ai, dùng công nghệ gì nếu có công khai. Ứng viên hỏi “bên anh làm về gì ạ” ở cuối buổi là một điểm trừ nhỏ nhưng có thật. Với phỏng vấn online, kiểm tra micro, camera, chia sẻ màn hình và kết nối mạng trước mười phút. Tôi đã mất gần nửa buổi phỏng vấn chỉ vì ứng viên không chia sẻ được màn hình trên Google Meet.
Cuối buổi, khi được hỏi “bạn có câu hỏi nào không”, hãy có ít nhất một câu thật. Hỏi về quy trình review code, về cách đội xử lý sự cố, về một ngày làm việc của vị trí đó. Những câu này cho người phỏng vấn thấy bạn đang hình dung mình làm việc ở đó, chứ không chỉ đang cố qua vòng.
Vài câu ứng viên hay hỏi lại tôi sau buổi phỏng vấn
Hỏi: Không trả lời được một câu kỹ thuật thì có nên đoán không?
Đáp: Nói thẳng là mình không chắc, rồi nói mình sẽ suy luận thế nào hoặc tìm ở đâu. Đoán bừa với giọng tự tin là thứ làm người hỏi mất tin nhất.
Hỏi: Có nên gửi email cảm ơn sau phỏng vấn?
Đáp: Không bắt buộc. Một email ngắn trong ngày, nhắc lại một điểm bạn thấy thú vị trong buổi nói chuyện, không gây hại gì và đôi khi giúp người tuyển dụng nhớ tới bạn.
Hỏi: Bị trượt thì có nên hỏi lý do?
Đáp: Nên hỏi, lịch sự và ngắn gọn. Không phải nơi nào cũng trả lời, nhưng khi có câu trả lời thì đó là thông tin quý hơn mọi bộ câu hỏi ôn luyện.
Bạn ứng viên ở đầu bài, sau khoảng lặng đó, cuối cùng cũng trả lời: phần xử lý lỗi khi gọi API bên thứ ba bạn làm vội, chưa có retry. Câu trả lời không hoàn hảo. Nhưng đó là đoạn tôi nhớ nhất của buổi hôm đó, và là lý do tôi đề xuất cho bạn ấy đi tiếp vòng sau.