Tôi phải thừa nhận ở đây, rằng tôi là một trong những người thích đặt câu hỏi thuật toán trong các cuộc phỏng vấn, nhưng tôi phải nhấn mạnh rằng câu trả lời thực sự cho câu hỏi là hoàn toàn không liên quan. Tôi không quan tâm một chút nếu người được phỏng vấn có biết câu trả lời hay không. Thay vào đó, đối với tôi, câu hỏi này nhắm vào các khía cạnh khác nhau, như sau: theo thứ tự quan trọng:
Yêu cầu
Những câu hỏi như vậy được cố tình dưới quy định. Trong ví dụ của bạn, không có thêm chi tiết nào được đưa ra về trình tự. Nếu bạn có một người được phỏng vấn hỏi bạn liệu những con số này có thực sự được sắp xếp hay không, thì đó là một dấu hiệu tốt. Anh ấy có suy nghĩ đúng đắn để hỏi khách hàng về các chi tiết khác, điều đó sẽ giúp đi đến một giải pháp tốt hơn trong thời gian ngắn hơn. Ứng viên cũng có thể chơi với ý tưởng sử dụng không gian O (n) để lưu trữ một mảng số N, nhưng anh ta không nên làm điều đó mà không hỏi thêm chi tiết về X và Y. Hãy nói rằng X và Y nằm trong khoảng từ 1 đến 1000 , sau đó chắc chắn, đi trước và khởi động một giải pháp dựa trên mảng. Nhưng nếu tôi nói với bạn khoảng cách là 1 và 1 tỷ, thì vấn đề sẽ trở thành một vấn đề hoàn toàn khác. Hãy để tôi nhấn mạnh một lần nữa, rằng tôi không quan tâm đến giải pháp.
Kỹ thuật tiêu chuẩn
Tôi không muốn thuê một lập trình viên thậm chí không biết O (n) nghĩa là gì. Đó là một điều tuyệt đối phải biết nếu bạn có bất kỳ nền giáo dục tử tế nào trong khu vực đó. Nhưng điều quan trọng là không chỉ biết ý nghĩa của nó, mà còn thực sự áp dụng kiến thức đó. Trong ví dụ của bạn, tôi muốn một ứng viên nhận ra rằng anh ta không được phép sắp xếp dữ liệu (mà không hỏi thêm câu hỏi nhắm mục tiêu tùy chọn sắp xếp xô hoặc các cách tiếp cận sắp xếp O (n) khác) do sắp xếp O (n log n) bắt buộc nói chung.
Tương tự, các câu hỏi thuật toán khác nhắm vào các kỹ thuật tiêu chuẩn như cây hoặc đồ thị, hoặc đệ quy. Một ứng cử viên có thể trượt ở một trong những kỹ thuật này, không tạo được ấn tượng tốt. Tuy nhiên, trong những trường hợp như vậy, tôi muốn tìm hiểu sâu hơn để tìm hiểu xem ứng viên có bất kỳ nền tảng CS nào không. Tất nhiên, nó phụ thuộc vào vị trí mục tiêu là gì, nhưng thường thì một nhà phát triển không biết về độ phức tạp của thời gian chạy, cũng như cấu trúc dữ liệu điển hình và các giao dịch của họ, sẽ không giúp ích được gì.
Tư duy xử lý vấn đề
Sau khi đặt câu hỏi, bạn theo dõi ứng viên chặt chẽ. Anh ấy / anh ấy phản ứng thế nào? Bạn nhận được kết quả tốt nhất ở đây từ những ứng viên hoàn toàn không có manh mối về cách giải quyết vấn đề lúc đầu . Về mặt đó, câu hỏi kiểm tra những gì có thể xảy ra nếu một tình huống tương tự xảy ra tại nơi làm việc sau đó. Bạn có thể gặp phải một vấn đề như vậy trong quá trình phát triển của mình và thật tốt khi biết ứng viên của bạn giải quyết những vấn đề này như thế nào, ngay cả khi họ không thể tự giải quyết tất cả.
Ví dụ: Bạn không muốn ứng viên của mình chuyển sang chế độ im lặng trong nửa giờ tới! Kiểm tra xem anh ta có thể đưa ra các câu hỏi thông minh không (xem Yêu cầu), kiểm tra xem anh ta có bắt đầu nghĩ ra khỏi hộp không khi anh ta nhận ra mình không thể làm điều đó. Ngay cả một câu hỏi phản biện "vui vẻ" như "Tôi có thể sử dụng tùy chọn điện thoại đồng nghiệp không?" là một dấu hiệu tốt.
Cách trả lời
Nói chung, câu trả lời tốt nhất bạn có thể đưa ra cho các loại câu hỏi này là câu hỏi ngược! Nói một câu trả lời ngay lập tức về cơ bản thất bại toàn bộ, và thực tế không phải là một câu trả lời tốt, bởi vì tất cả những câu hỏi này gợi ý về sự đánh đổi, mà câu trả lời của bạn ngụ ý, mà bạn chưa có thông tin cần thiết để đưa ra điều đó một cách thông minh đánh đổi Tất nhiên, chất lượng của các câu hỏi ngược khác nhau giữa các ứng cử viên.
Như một lưu ý chung về các câu hỏi phỏng vấn: Các câu hỏi ngược lại hiếm khi là một điều xấu. Trong một trong những cuộc phỏng vấn của riêng tôi, tôi đã được hỏi một câu như sau: "Nếu bạn phải thực hiện X, bạn sẽ chọn C ++ hoặc Java cho điều đó, và tại sao?" - Tôi chỉ đơn giản phản bác lại "Tôi có giới hạn ở hai người này không?". Hãy tự đoán, bạn sẽ nhận được phản ứng gì từ người phỏng vấn cho một câu hỏi ngược như vậy - và việc bạn thực sự cho người phỏng vấn thấy khả năng của bạn như thế nào.
find the missing element in O(N) or better
gì bình "hoặc tốt hơn" trong bối cảnh này? Có vẻ như điều đó sẽ được giải quyết bằng một vòng lặp đơn giản, nhưng dù sao tôi cũng không hiểu - nó đã được giải quyết hoặc không được giải quyết , phải không?