Muszę przyznać, że jestem jednym z tych, którzy lubią zadawać pytania algorytmiczne w wywiadach, ale muszę podkreślić, że faktyczna odpowiedź na to pytanie jest absolutnie nieistotna. Nie dbam o to, czy osoba udzielająca wywiadu zna odpowiedź, czy nie. Dla mnie to pytanie dotyczy różnych aspektów, takich jak następujące - w kolejności ich ważności:
Wymagania
Takie pytania są celowo niedookreślone. W twoim przykładzie nie podano dalszych szczegółów na temat sekwencji. Jeśli masz rozmówcę, który pyta, czy te liczby są faktycznie posortowane, to dobry znak. Ma właściwy sposób myślenia, aby zapytać klientów o dalsze szczegóły, które pomogą znaleźć lepsze rozwiązanie w krótszym czasie. Kandydat może również zastanowić się nad wykorzystaniem przestrzeni O (n) do przechowywania tablicy N liczb, ale nie powinien tego robić bez pytania o więcej szczegółów na temat X i Y. Powiedzmy, że X i Y mają wartość od 1 do 1000 , a następnie, śmiało, uruchom rozwiązanie oparte na macierzy. Ale jeśli powiem wam, że interwał wynosi 1 i 1 miliard, problem staje się zupełnie inny. Jeszcze raz podkreślę, że nie dbam o rozwiązanie.
Standardowe techniki
Nie chcę zatrudniać programisty, który nawet nie wie, co oznacza O (n). To absolutna konieczność, jeśli masz przyzwoite wykształcenie w tej dziedzinie. Ale ważne jest też, aby nie tylko wiedzieć, co to znaczy, ale faktycznie zastosować tę wiedzę. W twoim przykładzie chcę, aby kandydat zdał sobie sprawę, że nie wolno mu sortować danych (bez zadawania dalszych pytań dotyczących opcji sortowania kubełkowego lub innych metod sortowania O (n)) z powodu wymaganego sortowania O (n log n) ogólnie.
Podobnie, inne pytania dotyczące algorytmu dotyczą standardowych technik, takich jak przechodzenie przez drzewa lub wykresy lub rekurencja. Kandydat może poślizgnąć się na jednej z tych technik, co nie robi dobrego wrażenia. Jednak w takich przypadkach lubię kopać głębiej, aby dowiedzieć się, czy kandydat w ogóle ma jakieś doświadczenie w CS. Oczywiście zależy to od docelowej pozycji, ale zwykle programista, który nie wie o złożoności środowiska uruchomieniowego, ani o typowych strukturach danych i ich przechodzeniu, nie będzie żadnej pomocy.
Sposób radzenia sobie z problemami
Po zadaniu pytania uważnie monitorujesz kandydata. Jak on / on reaguje? Uzyskać najlepsze wyniki tutaj od kandydatów, którzy nie mają żadnego pojęcia o tym, jak rozwiązać ten problem na początku . W tym względzie pytanie sprawdza, co może się stać, jeśli podobna sytuacja wystąpi później w miejscu pracy. Możesz spotkać się z takim problemem podczas rozwoju i dobrze jest wiedzieć, jak twój kandydat radzi sobie z tymi problemami, nawet jeśli nie jest w stanie rozwiązać go samodzielnie.
Przykład: Nie chcesz, aby Twój kandydat przeszedł w tryb cichy przez następne pół godziny! Sprawdź, czy może on wymyślić inteligentne pytania (patrz Wymagania), sprawdź, czy zaczyna myśleć nieszablonowo, gdy zda sobie sprawę, że nie może tego zrobić. Nawet „zabawne” kontr-pytanie, takie jak „Czy mogę skorzystać z opcji telefonu współpracownika?” to dobry znak.
Jak odpowiedzieć
Zasadniczo najlepszymi odpowiedziami na tego rodzaju pytania są kontr-pytania! Natychmiastowe udzielenie odpowiedzi w zasadzie zawodzi, i nie jest wcale dobrą odpowiedzią, ponieważ wszystkie te pytania wskazują na kompromisy, które sugeruje twoja odpowiedź, bez posiadania wymaganych informacji, aby inteligentnie to zrobić kompromis. Oczywiście jakość kontrpytań różni się w zależności od kandydata.
Jako ogólna uwaga na pytania podczas rozmowy kwalifikacyjnej: kontrpytania rzadko są złą rzeczą. W jednym z moich wywiadów zapytano mnie na przykład: „Gdybyś musiał wdrożyć X, czy wybrałbyś do tego C ++ lub Javę i dlaczego?” - Po prostu odpowiedziałem: „Czy jestem ograniczony do tych dwóch?”. Zgadnij, jaką reakcję otrzymujesz od ankietera na takie kontrpytanie - i jak łatwo jest ci pokazać ankieterowi, do czego jesteś zdolny.
find the missing element in O(N) or better
Co w tym kontekście oznacza „lub lepiej” ? To wydaje się być czymś, co można by rozwiązać za pomocą prostej pętli while, ale w każdym razie nie rozumiem - jest rozwiązane lub nierozwiązane , prawda?