Myślę, że są te proste pytania: fizzbuzz, odwrócenie łańcucha itp., A potem są pewne pytania, a jeśli nie widziałeś ich wcześniej, trudno jest uzyskać optymalne rozwiązanie z dodatkową presją wywiadu i krótkim czasem ograniczenia. Najgorsze jest to, że czasami rekruterzy bez wiedzy technicznej zadają niektóre z tych pytań i szukają bardzo konkretnej odpowiedzi ... Jeśli nie udzielisz optymalnej odpowiedzi, uważają cię za absolutnego idiotę. Nawet jeśli twoja odpowiedź działa, rozwiązuje problem i chociaż może nie być optymalna, nie jest zbyt nieefektywna ...
Kilka przykładów:
jak potasowałbyś talię kart? Szukają metody Fishera-Yatesa http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffleinne odpowiedzi są „błędne” ..... Nie jest to coś, co prawdopodobnie wiesz, chyba że wcześniej chciałeś przetasować karty i dokładnie to sprawdzić. Możesz natknąć się na to w trakcie udzielania odpowiedzi, ale z tego, co widziałem, spodziewają się, że poznasz to przeziębienie, więc wątpliwe jest, czy będzie dużo czasu na znalezienie rozwiązania. Innym mniej wydajnym (ale może bardziej oczywistym) sposobem jest utworzenie nowej tablicy ze wskaźnikiem do oryginalnej tablicy i liczby, która jest liczbą losową, a następnie posortowanie tablicy według liczby losowej. Następnie użyj posortowanej tablicy, aby skonstruować nową tablicę kart. W każdym razie mam 0 punktów za przedstawienie tego rekruterowi.
Innym przykładem jest pytanie, w jaki sposób wykryłbyś zduplikowany numer na liście n liczb od 1 do n-1. Oczywistą odpowiedzią (która jest względnie wydajna w perspektywie czasowej) jest użycie tabeli skrótów do wstawienia każdego elementu, a jeśli znajdziesz już wstawiony, to znajdziesz duplikat. Optymalną odpowiedzią jest to, że liczby są między 1 a n, jeśli nie ma duplikatów, można uzyskać oczekiwaną sumę jako n (n + 1) / n. Następnie, jeśli zsumujesz tablicę, otrzymasz rzeczywistą sumę, która jest mniejsza niż suma oczekiwana. Więc w zasadzie n - (Oczekiwana suma - Rzeczywista suma) = zduplikowana liczba ... To dość wyjątkowy przypadek ... Właściwie widziałem już coś w pewnym internetowym poście na temat problemów z wywiadem sprzed wieków na temat pokrewnego z tą samą sztuczką, więc Nic mi nie było ....
Kolejny, odwróć wszystkie słowa w ciągu bez użycia dodatkowej spacji. Musiałem o tym pomyśleć, a rekruter był bardzo niecierpliwy w ciągu 5 minut, o których myślałem (dzielenie i ponowne dołączanie łańcucha na odwrót lub przechodzenie słowo po słowie do nowej tablicy jest bardzo łatwe). Wymyśliłem znalezienie granicy ostatniego słowa, znalezienie końca pierwszego słowa i ciągłe przesuwanie całej listy o 1, a następnie wstawianie odpowiedniej litery. Następnie powtarzaj, aż dojdziesz do końca listy. Ta metoda działała i ankieter zgodził się (był trochę techniczny), ale jest dość nieefektywny. Kiedy wróciłem do domu, szukałem optymalnej odpowiedzi i wystarczy odwrócić listę, a następnie każde słowo. Niektórzy ludzie mogą to wymyślić,
Teraz to prawda, gdy zobaczysz niektóre z tych problemów, możesz je rozwiązać łatwiej. Ponieważ istnieją podobne pytania dotyczące tych samych sztuczek. Wiem zwłaszcza, że formuła n (n-1) / 2 i lista liczb ma kilka odmian. Ale wciąż nie wiem, co testują te pytania. FizzBuzz to coś, co każdy powinien być w stanie zrobić (chociaż widziałem warianty, które nie są tak proste, w którym to przypadku zaczynam pytać, czy nawet to jest realistyczne w sytuacji wywiadu bez możliwości wpisania / debugowania kodu). Niektóre z tych pytań są oczywiste, gdy je zobaczysz, ale jeśli ich nie widziałeś, nie są oczywiste. Po tym, jak ktoś wspomniał, pojawienie się pierwszej poprawnej implementacji wyszukiwania binarnego zajęło lata… W tej chwili wyszukiwanie binarne jest tak oczywiste, ponieważ każdy może o tym przeczytać.
Niemniej jednak uważam, że najgorsze jest to, że ludzie nietechniczni zadają pytania, ponieważ nie mogą docenić twojego rozwiązania, które jest poprawne, choć nie optymalne. Wiedzą tylko, że twoje rozwiązanie nie jest tym, które zostało przedstawione, a zatem jest błędne, nie otrzymasz uznania za próbę. Nawet nieoptymalne rozwiązania często pokazują znajomość konstrukcji programistycznych. O ile nie programuję pokera, nie dbam o to, jak dobrze ktoś może przetasować talię kart. I nawet gdybym to zrobił, po pokazaniu im wydajnego algorytmu jestem pewien, że każdy w połowie przyzwoity mógłby go zastosować.
Wygląda na to, że pytania wzorcowe dają przewagę kandydatom, którzy przeprowadzają dłuższą rozmowę kwalifikacyjną, ponieważ częściej widzą więcej pytań wzorcowych. Nawet FizzBuzz, kiedy widzisz go po raz pierwszy, możesz wariować, ale kiedy go widzisz, stajesz się bardziej przyzwyczajony. Najlepszą rzeczą, jaką możesz zrobić, to wyzwanie kodowania wymagające niestandardowej logiki biznesowej. Np. Utwórz zestaw danych (tablicę obiektów / rekordów), a następnie utwórz reguły biznesowe, które zostaną zastosowane do każdego obiektu i zwróć odpowiedź .. np. Pewien rodzaj klasyfikacji itp., Ale bardzo niestandardowe reguły). Chociaż prawdopodobnie widzieli pętlę rekordów i stosują logikę zillion razy, twoje reguły będą unikalne, więc przynajmniej będą musieli zrozumieć i skutecznie wdrożyć utworzone reguły.
Powiedzmy, że przewidywane wynagrodzenie i lista kandydatów oraz ich 3 najpopularniejsze gry wideo, a być może wynagrodzenie początkowe. Kandydaci, którzy lubią Zeldę, otrzymują karę 300, kandydaci, którzy lubią małą syrenę, otrzymują bonus 200. Kandydaci, którzy lubią Donkey Konga i Super Mario Brothers, ale nie Dr. Mario, otrzymują 300 premii. Kandydaci, którzy lubią Metroid lub Kid Icarus, otrzymują premię 200 itd. Wydaje się to trochę szalone, ale pokazałoby to ich umiejętność przekładania reguł biznesowych na logiczne konstrukcje programów i testowania ich zrozumienia logiki boolowskiej. Ogólnie niewiele różni się od fizzbuzz, z wyjątkiem nieużywania modułu i pętli. Możesz oczywiście dać im listę, poprowadzić ją przez pętlę i wydrukować wyniki na ekranie, stosując również określone kryteria wyjściowe.