Kłóciłem się ostatnio z innym programistą. Rozmawiał o nowe stanowisko i zadano mu pytanie:
Podaj sekwencję liczb zaczynającą się od X i kończącą się na Y, ale bez jednego elementu, więc N to YX-1, znajdź brakujący element w O (N) lub lepszym.
Odpowiedź jest tutaj nieistotna (ale interesująca). To zapoczątkowało dyskusję, czy to było dobre pytanie, które należy zadać podczas wywiadu.
Jedna strona: Algorytmy są dziedziczną częścią programowania, a zdolność kandydata do odpowiedzi na to pytanie potwierdza, że ten kandydat będzie dobrym programistą i będzie w stanie rozwiązać większe problemy i poradzi sobie z większością zadań programistycznych, które ostatecznie są łatwe do zrozumienia i odpowiedzi.
Druga strona: pisanie algorytmów od zera jest rzadko stosowane we współczesnym programowaniu i dlatego nie ma znaczenia w większym pytaniu, czy dana osoba będzie dobrym programistą. Osoba może z powodzeniem odpowiedzieć na to pytanie, ale nadal nie jest w stanie wykonywać bardziej typowych zadań programistycznych.
Twoje myśli? Dobre pytanie podczas rozmowy kwalifikacyjnej?
źródło
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?Odpowiedzi:
Zgadzam się z pytaniem o algorytm, ale nie zgadzam się z naleganiem na określony poziom jakości big-O.
Zadanie tego rodzaju pytania jest interesujące, aby zobaczyć, jak dana osoba podchodzi do problemu i jakie pułapki biorą pod uwagę przy swojej próbie, ale chyba, że piszą coś szalenie niepoprawnego lub nieefektywnego, faktyczny szczegół tego, co piszą, nie jest tak znaczący, jak fakt, że przejść przez etapy rozwiązywania problemów / projektowania w spójny sposób.
Zadaję podobne pytanie, ale ludzie, z którymi miałem najwięcej szczęścia po zatrudnieniu, to ludzie, którzy udzielili błędnych odpowiedzi, ale mieli właściwy pomysł.
źródło
Nie zgodziłbym się z pomysłem, że umiejętność pisania algorytmów nie ma znaczenia w większym pytaniu, czy dana osoba będzie dobrym programistą. Nawet jeśli nigdy nie musi go używać (co jest wątpliwe), wciąż pokazuje, czy ma elastyczność umysłową wymaganą do wypracowania logicznego rozwiązania problemu, który jest bardziej skomplikowany niż prosty zestaw wymagań, który został już napisany i określony szczegółowo przez klienta.
Na pewno nie chciałbym zatrudnić kogoś, kto nie wie, jak myśleć i analizować. To właśnie odróżnia małpę kodową od programisty komputerowego.
źródło
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.
źródło
O ile nie zadajesz pytań na temat algorytmów / formuł, które kandydat musi znać na potrzeby pracy (np. Dynamika płynów, jeśli wymaga tego pozycja), nie widzę ich wartości. Kandydat już prawdopodobnie martwi się tym, jak się ubiera, jak mówi, itp. ... czy może natychmiast odpowiedzieć na matematyczne pytanie, nie dowodzi nic innego, jak może poradzić sobie w teleturnieju.
Kiedy przeprowadzam wywiad, nie zadaję nawet pytań o „programowanie” per se. Poprosiłem kandydata, aby opisał swoje poprzednie projekty, w jaki sposób ich kod osiągnął cele, jakie są ich podejścia itp. Na tej podstawie mogę dość szybko powiedzieć, czy kandydat wie, co robi, czy też jest pozerem.
źródło
Zgadzam się, że programiści muszą bardzo dobrze znać algorytmy, nawet przy użyciu nowych fantazyjnych ram, ale nie jestem całkowicie przekonany o łamigłówce w wywiadzie. Moją największą obawą jest to, że w prawdziwym środowisku piszesz algorytmy w bardzo różnych warunkach; alias, nie pod presją, gdy ktoś obserwuje cię każdym pociągnięciem pióra, co najmniej kilka minut, aby przemyśleć to w ciszy. W przypadku tych, którzy opowiadają się za tą metodą oceny, jak długo zazwyczaj dajesz osobie możliwość jej rozwiązania? Uważam, że w kodzie nie chodzi tylko o wypracowanie rozwiązania w gorączkowym 3-minutowym terrorze, więc przekonaj mnie, że to naprawdę dobry sposób, aby zobaczyć, jak ktoś poradzi sobie z codziennym zadaniem.
źródło
Problem z tym konkretnym pytaniem polega na tym, że jest to prawie podchwytliwe pytanie. Z jednym konkretnym wglądem z łatwością wymyślisz O (n), w przeciwnym razie będziesz miał trudności z osiągnięciem lepszych wyników niż O (n log n). To prawie sprowadza się do „Czy widziałeś to wcześniej?”
Nie jestem pewien, czy są jakieś dobre pytania algorytmiczne. Jeśli zapytasz kogoś opartego na teorii grafów, powiedzmy, że będzie to zależeć od tego, jak dobrze rozmówca był zaznajomiony z teorią grafów - a jeśli go zatrudnisz, może on dość szybko opanować teorię grafów. Znów wracamy do „Czy byłeś już wcześniej na to narażony?”
W regularnym wywiadzie nie ma czasu na poważne rozwiązywanie problemów, a ja podchodzę do sprawy inaczej, kiedy mogę usiąść, korzystać z Wikipedii i ogólnie zająć trochę czasu, aby coś wymyślić. Prawdopodobnie nie ma czasu, aby osoba przeprowadzająca wywiad dokładnie omówiła szczegółowo to, co rozmówca wie, i wybrała odpowiednie pytanie algorytmiczne.
źródło
Mam kilka pytań podobnych do algorytmów, z których regularnie korzystam, niektóre z nich są bardzo trudne. Używam ich, aby zobaczyć, w jaki sposób mentalnie atakują problem i sprawdzić, czy podsycają pewne pojęcia. (Widziałem zbyt wielu kandydatów na programistów, którzy po prostu nie rozumieją wskazówek).
źródło
Chcesz pytania, które dadzą ci wgląd w kandydata. Pytanie algorytmu może dać dobrą odpowiedź lub nie. I nie mówię o tym, że są w stanie odpowiedzieć na to pytanie, czy nie. Jeśli to sprawdzą, a ty zrozumiesz ich tok rozumowania i podążasz za nimi, to dobry wskaźnik. Jeśli po prostu tam siedzą, nie ma prawdziwej odpowiedzi, wydaje się, że nawet nie wiem od czego zacząć, to zły wskaźnik (być może). Problem polegałby na tym, że niektórzy ludzie zamarzają, a odróżnienie zamrożenia od braku umiejętności rozwiązywania problemów może być trudne.
Ludzie narzekają na to, że pytają o wszystko w wywiadach z różnych powodów. Wnioskodawca może się zawiesić, wnioskodawca mógł po prostu przejrzeć to pytanie, wnioskodawca może nie znać tego konkretnego ciekawostki / techniki / czegokolwiek. Wszystko to prawda, ale wywiad musi się jeszcze odbyć, a wielu z nas w tym zawodzie tego nienawidzi. Nienawidzimy pomysłu, by ktoś nas osądzał. Natychmiast wyczuwamy powody, dla których możemy być niesprawiedliwie oceniani, lub w jaki sposób test może być fałszywy lub zagrany. Najważniejsze jest to, że to nie ma znaczenia.
To, czego naprawdę chcesz, to ankieter z umiejętnością określania umiejętności, które mogą zostać zaprezentowane podczas rozmowy. Pytania to tylko narzędzia. Dla mnie wszystkie młotki wyglądają tak samo. Ale dla kogoś, kto jest wystarczająco wykwalifikowany, jestem pewien, że jest różnica.
źródło
Lubię pytania dotyczące algorytmów, ponieważ robimy to. Lubię ograniczenia, ponieważ tego używamy. Big-O jest szczególnie istotny w mojej branży.
Nie lubię wymagać, aby odpowiedzi na tego rodzaju pytania brzmiały: „napisz kod na tablicy”. Rozmówca powinien być w stanie inteligentnie rozmawiać o podejściu do rozwiązania i brać udział w ciągłej dyskusji, gdy ankieterzy zmieniają wymagania w trakcie dyskusji.
Zadawane jest pierwotne pytanie, jak mówi rozmówca: „zacznij od początku i maszeruj w kierunku końca, szukając„ dziury ””. Ankieter mówi, że to jest zbyt wolne, ponieważ N jest olbrzymi. Rozmówca zaczyna omawiać wyszukiwanie binarne. Ankieter mówi, że nagle dane nie są już sortowane. Rozmówca mówi „sortuj, a następnie szukaj”. „Teraz jest zbyt wolny”. Itd itd.
źródło