Tôi nghĩ rằng có những câu hỏi dễ dàng đó là fizzbuzz, đảo ngược một chuỗi, v.v. ràng buộc. Điều tồi tệ nhất là đôi khi các nhà tuyển dụng không có kiến thức kỹ thuật hỏi một số câu hỏi này và họ đang tìm kiếm một câu trả lời rất cụ thể .... Nếu bạn không đưa ra câu trả lời tối ưu, họ nghĩ bạn là một thằng ngốc tuyệt đối. Ngay cả khi câu trả lời của bạn hoạt động, giải quyết vấn đề và trong khi nó có thể không tối ưu thì nó cũng không quá kém hiệu quả ....
Một số ví dụ:
Làm thế nào bạn có thể xáo trộn một bộ bài? Họ đang tìm kiếm phương pháp Fisher-Yates http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shufflecác câu trả lời khác là "sai" ..... Đây không phải là điều mà bạn có thể biết trừ khi bạn muốn xáo trộn thẻ trước đó và đặc biệt tra cứu nó. Bạn có thể vấp phải nó trong quá trình thực hiện câu trả lời, nhưng từ những gì tôi đã thấy họ mong đợi bạn biết cảm lạnh này nên nghi ngờ sẽ có nhiều thời gian để cho phép tìm ra giải pháp. Một cách khác ít hiệu quả hơn (nhưng có thể rõ ràng hơn) là tạo một mảng mới với một con trỏ đến mảng ban đầu và một số là một số ngẫu nhiên sau đó sắp xếp mảng theo số ngẫu nhiên. Sau đó sử dụng mảng được sắp xếp để xây dựng một mảng thẻ mới. Trong mọi trường hợp, tôi nhận được 0 tín dụng khi trình bày điều đó cho nhà tuyển dụng.
Một ví dụ khác là câu hỏi về cách bạn sẽ phát hiện một số trùng lặp trong danh sách n số từ 1 đến n-1. Câu trả lời rõ ràng (tương đối hiệu quả trong phối cảnh thời gian) là sử dụng bảng băm để chèn từng phần tử và nếu bạn tìm thấy một phần tử đã được chèn thì bạn đã tìm thấy bản sao. Câu trả lời tối ưu là vì các số nằm trong khoảng từ 1 đến n nếu không có trùng lặp, bạn có thể nhận được tổng số dự kiến là n (n + 1) / n. Sau đó, nếu bạn tổng hợp mảng, bạn nhận được tổng thực tế ít hơn nd so với tổng dự kiến. Vì vậy, về cơ bản n - (Số tiền dự kiến - Số tiền thực tế) = số trùng lặp ... Đó là một trường hợp khá đặc biệt .... Tôi thực sự đã thấy một số điều trước đây trong một số bài đăng trực tuyến về các vấn đề phỏng vấn từ lâu về một người có liên quan với cùng một mẹo, vì vậy Tôi đã ổn ....
Một số khác, đảo ngược tất cả các từ trong một chuỗi mà không sử dụng bất kỳ không gian bổ sung. Tôi đã phải suy nghĩ về nó và nhà tuyển dụng đã khá thiếu kiên nhẫn trong 5 phút tôi nghĩ (tách và nối lại chuỗi ngược lại, hoặc chuyển từng chữ thành một mảng mới đều rất dễ dàng). Tôi đã tìm ra đường viền của từ cuối cùng, tìm kết thúc của từ đầu tiên và liên tục chuyển toàn bộ danh sách xuống 1 và sau đó chèn chữ cái thích hợp. Sau đó lặp lại cho đến khi bạn đạt đến cuối danh sách. Phương pháp này hiệu quả và người phỏng vấn đồng ý (anh ta hơi kỹ tính), nhưng nó khá kém hiệu quả. Khi tôi về nhà, tôi đã tìm kiếm câu trả lời tối ưu, và đó là chỉ đảo ngược danh sách, sau đó đảo ngược từng từ riêng lẻ. Một số người có thể nghĩ ra điều đó,
Bây giờ là sự thật một khi bạn đã thấy một số vấn đề này, bạn có thể giải quyết chúng dễ dàng hơn. Bởi vì có một số câu hỏi tương tự với một số thủ thuật tương tự. Tôi biết đặc biệt là danh sách công thức và số n (n-1) / 2 có một số biến thể. Nhưng tôi vẫn không biết những câu hỏi này kiểm tra cái gì. Một FizzBuzz là điều mà mọi người đều có thể làm được (mặc dù tôi đã thấy các biến thể không đơn giản trong trường hợp đó tôi bắt đầu đặt câu hỏi liệu điều đó có thực tế cho một tình huống phỏng vấn mà không thể nhập / gỡ lỗi mã không). Một số trong những câu hỏi này là hiển nhiên khi bạn nhìn thấy chúng, nhưng nếu bạn chưa nhìn thấy chúng thì chúng không rõ ràng. Sau khi tất cả ai đó đề cập đến phải mất nhiều năm để triển khai tìm kiếm nhị phân chính xác đầu tiên xuất hiện ... Ngay bây giờ tìm kiếm nhị phân là quá rõ ràng bởi vì mọi người đều có thể đọc về nó.
Tuy nhiên, tôi nghĩ phần tồi tệ nhất là khi những người không có kỹ thuật đang đặt câu hỏi vì họ không thể đánh giá cao giải pháp của bạn là chính xác mặc dù không tối ưu. Họ chỉ biết giải pháp của bạn không phải là giải pháp được trình bày và do đó tất cả đều sai, bạn không nhận được tín dụng cho nỗ lực này. Ngay cả các giải pháp không tối ưu cũng thường cho thấy kiến thức về các cấu trúc lập trình. Trừ khi tôi đang lập trình các trò chơi bài xì phé, tôi không quan tâm đến việc ai đó có thể xáo trộn bộ bài như thế nào. Và ngay cả khi tôi là, sau khi cho họ thấy thuật toán hiệu quả, tôi chắc chắn rằng bất kỳ ai cũng có thể làm theo được.
Các câu hỏi mẫu dường như chỉ mang lại lợi thế cho các ứng viên đã phỏng vấn lâu hơn vì họ có nhiều khả năng đã nhìn thấy nhiều câu hỏi mẫu hơn. Ngay cả FizzBuzz, lần đầu tiên bạn nhìn thấy nó, bạn có thể thấy bối rối, nhưng khi bạn nhìn thấy nó nhiều lần, bạn trở nên quen với nó hơn. Điều tốt nhất bạn có thể làm là đưa ra một số thách thức mã hóa đòi hỏi logic kinh doanh tùy chỉnh. Ví dụ: tạo một số tập dữ liệu (mảng đối tượng / bản ghi) và sau đó tạo một số quy tắc kinh doanh để áp dụng cho từng đối tượng và trả về câu trả lời .. ví dụ: một số loại xếp hạng, v.v. nhưng quy tắc rất tùy chỉnh). Mặc dù họ có thể đã thấy vòng lặp thông qua các bản ghi và áp dụng logic hàng triệu lần, các quy tắc của bạn sẽ là duy nhất, do đó, ít nhất họ sẽ phải hiểu và thực hiện thành công các quy tắc bạn đã tạo.
Giả sử dự kiến Mức lương và danh sách các ứng cử viên và 3 trò chơi video yêu thích hàng đầu của họ và có lẽ là mức lương khởi điểm. Những ứng viên thích Zelda bị phạt 300, những ứng viên thích nàng tiên cá nhỏ nhận được 200 điểm thưởng. Các ứng viên thích Donkey Kong và Super Mario Brothers nhưng không phải Tiến sĩ Mario nhận được 300 điểm thưởng. Các ứng viên thích Metroid hoặc Kid Icarus nhận được 200 điểm thưởng, v.v .... Có vẻ hơi điên rồ nhưng nó sẽ cho bạn thấy khả năng dịch các quy tắc kinh doanh thành các cấu trúc chương trình logic và kiểm tra sự hiểu biết của họ về logic boolean. Nhìn chung không khác nhiều so với fizzbuzz ngoại trừ không sử dụng mô-đun và vòng lặp. Tất nhiên bạn có thể cung cấp cho họ danh sách và yêu cầu họ lặp lại thông tin đó và in kết quả ra màn hình bằng các tiêu chí đầu ra cụ thể.