Mẹo phỏng vấn coding

Bởi Aaron Cao · Cập nhật

Làm rõ vấn đề và các ràng buộc trước khi code, trình bày cách tiếp cận của bạn thành lời, đạt được một giải pháp hoạt động trước khi tối ưu hóa, kiểm thử với các trường hợp biên, và nêu độ phức tạp về thời gian và không gian. Người phỏng vấn đánh giá cách bạn tư duy và giao tiếp, không chỉ việc mã cuối cùng có chạy hay không.

Trước khi viết code: làm rõ, rồi lên kế hoạch

Nếu bản năng của bạn khi chịu áp lực là bắt đầu gõ phím ngay lập tức, thì đó chính là bản năng mà phần này sẽ khắc phục. Những ứng viên mạnh nhất dành vài phút đầu tiên không hề code, và người phỏng vấn nhận ra điều đó.

Bắt đầu bằng cách diễn đạt lại vấn đề theo cách hiểu của riêng bạn và xác nhận với người phỏng vấn. Hỏi về các ràng buộc: kích thước đầu vào, phạm vi giá trị, đầu vào có được sắp xếp không, cách xử lý đầu vào rỗng hoặc sai định dạng. Sau đó nêu tên cách tiếp cận dự định và độ phức tạp của nó trước khi bạn viết bất cứ điều gì. Bước lập kế hoạch ngắn này giúp phát hiện sớm những hiểu lầm và cho thấy tư duy có cấu trúc, một phần lớn trong điểm số.

Trong lúc code: suy nghĩ thành lời và xây dựng theo từng bước

Sự im lặng là cách phổ biến nhất khiến một người giải quyết vấn đề giỏi lại trông có vẻ yếu. Hãy liên tục giải thích những gì bạn đang viết và lý do tại sao, để người phỏng vấn có thể theo dõi logic của bạn và định hướng lại nếu bạn đi lệch hướng.

Hãy đạt được một câu trả lời đúng trước khi tìm một câu trả lời khéo léo. Một giải pháp brute-force đơn giản chạy được có giá trị hơn một ý tưởng thanh lịch không bao giờ biên dịch được, và bạn có thể tối ưu hóa khi đã có thứ gì đó hoạt động. Hãy viết theo từng phần nhỏ, có thể kiểm thử được, sử dụng tên biến rõ ràng, và nếu bị bí, hãy nói ra những gì bạn đang cân nhắc thay vì im lặng. Người phỏng vấn thường đưa ra gợi ý, nhưng chỉ khi họ có thể nghe thấy bạn đang ở đâu.

Sau khi chạy được: kiểm thử, trường hợp biên và độ phức tạp

Một giải pháp chưa hoàn thành khi nó biên dịch được; nó hoàn thành khi bạn đã cố gắng làm cho nó lỗi. Hãy chạy qua code của bạn với một đầu vào bình thường, sau đó cố ý thử những đầu vào khó chịu: đầu vào rỗng, một phần tử duy nhất, các phần tử trùng lặp, số âm, trường hợp lớn nhất mà các ràng buộc cho phép.

Hãy hình dung một kỹ sư frontend phỏng vấn cho vị trí cấp trung viết một giải pháp two-pointer hoạt động được, sau đó, không cần ai yêu cầu, tự truy vết qua một mảng rỗng và một mảng chỉ có một phần tử, rồi nêu thời gian chạy là O(n). Phút cuối cùng của việc tự kiểm thử và phân tích độ phức tạp này thường là yếu tố phân định giữa việc được tuyển dụng và bị xem xét thêm, vì nó cho thấy kỹ sư này sẽ tự phát hiện lỗi của chính mình khi làm việc thực tế. Hãy nói to độ phức tạp về thời gian và không gian ngay cả khi không được yêu cầu.

Biến các mẹo thành thói quen trước vòng thi thực sự

Đọc mẹo thì dễ; thực hiện chúng khi đang lo lắng thì không dễ. Cách khắc phục là luyện tập trong điều kiện gần giống thực tế: đồng hồ bấm giờ đang chạy, giải pháp của bạn được nói thành lời, và không dừng lại để tra cứu. Sau mỗi bài luyện tập, hãy xem lại không chỉ việc bạn có giải được hay không, mà còn việc bạn có làm rõ, trình bày thành lời, và kiểm thử hay không, vì đó chính là những thói quen được chấm điểm.

Các vòng thi nói có giới hạn thời gian trước một người phỏng vấn AI là một cách để xây dựng phản xạ này; bạn có thể thực hiện chúng trên công cụ phỏng vấn thử. Một lưu ý đáng nhắc lại: các vòng thi coding thực tế thường diễn ra trên trình soạn thảo chia sẻ có giám sát hoặc bị ghi hình, vì vậy không có trợ lý trực tiếp nào an toàn trong lúc đó, và mục tiêu của việc luyện tập chính là để không cần đến nó. Có thêm câu trả lời về các vòng thi coding tại trung tâm chủ đề các loại phỏng vấn, và hướng dẫn luyện tập tại trung tâm chủ đề phỏng vấn thử.

Câu hỏi thường gặp

Mẹo quan trọng nhất cho phỏng vấn coding là gì?

Làm rõ trước khi code và trình bày thành lời trong khi làm. Người phỏng vấn đánh giá tư duy và khả năng giao tiếp của bạn, vì vậy một cách tiếp cận được giải thích tốt sẽ vượt trội hơn một câu trả lời đúng được đưa ra trong im lặng. Hãy xác nhận vấn đề và các ràng buộc trước, sau đó suy nghĩ thành lời.

Tôi có nên viết giải pháp tối ưu ngay từ đầu không?

Không. Hãy đạt được bất kỳ giải pháp đúng nào trước, kể cả brute-force, sau đó tối ưu hóa nó trước mặt người phỏng vấn. Một câu trả lời đơn giản hoạt động được sẽ ghi điểm tốt hơn một ý tưởng thanh lịch nhưng không bao giờ chạy được.

Tôi nên xử lý thế nào khi bị bí?

Hãy nói ra những gì bạn đang cân nhắc thay vì im lặng. Người phỏng vấn thường đưa ra gợi ý, nhưng chỉ khi họ có thể nghe thấy suy nghĩ của bạn. Diễn đạt lại vấn đề và thử một ví dụ nhỏ hơn để tự gỡ bí.

Tôi có cần nêu độ phức tạp về thời gian và không gian không?

Có, ngay cả khi không được yêu cầu. Phân tích Big-O cho thấy bạn hiểu được sự đánh đổi, điều mà người phỏng vấn rất coi trọng. Hãy nêu độ phức tạp của cách tiếp cận trước và sau khi bạn code nó.

Câu hỏi liên quan

← Thêm về Loại phỏng vấn