Dzisiaj przeprowadziłem pierwszy wywiad z potencjalnymi stażystami. Chociaż były to najczęściej pytania otwarte, miałem dla nich kilka trywialnych zadań programistycznych:
- Napisz funkcję, która zwraca true, jeśli boki trójkąta (wszystkie liczby całkowite) a, bi mogą reprezentować trójkąt prostokątny .
- FizzBuzz.
- Oblicz N-ty element Fibonacciego za pomocą rekurencji (jeśli nie wiedzieliby, co to jest Fibonacci , napisałbym im nawet definicję F (n) = F (n-1) + F (n-2); F (1) = 1; F (0) = 1).
- Zaimplementuj strukturę Lista funkcji liczb całkowitych i zapisu, aby ją odwrócić.
Są to oczywiście bardzo łatwe zadania i nie byłem przygotowany na to, że ktoś ich nie rozwiąże.
Jak mam postępować, gdy zmagają się z tymi pytaniami? Czy powinienem zrezygnować z odpowiedzi? Daj tip-tip (zrobiłem to i sam rozwiązałem problem)? A może po prostu przejść do wywiadu (a może po prostu przestać)?
ps. Mając problemy z pytaniami, nie mam na myśli błędu, mam na myśli to, że nie mogą nawet zacząć. Tak było w przypadku pytań Fibonacciego i Listy.
interview
internship
Mykolas Simutis
źródło
źródło
Odpowiedzi:
Powiedziałeś, że rozmawiasz o stażach w pytaniu, więc z tego punktu widzenia, dla programistów pracujących w pełnym wymiarze godzin poprzeczka będzie nieco wyższa.
Podczas wywiadów ze stażystami musisz pamiętać, że być może nie ukończyli oni studiów i że mogli także wstąpić na studia bez wcześniejszego doświadczenia w programowaniu i informatyce. W związku z tym musisz dostosować oczekiwania do tego, czego można racjonalnie oczekiwać od kogoś, i do stopnia prestiżu stanowiska (tj. Google może uniknąć oczekiwań, o których firma nie słyszała).
Przeglądając przedstawione pytania, prawdopodobnie spojrzałbym na nie w następujący sposób:
Podstawowe zastosowanie geometrii z prostym kodowaniem, większość studentów powinna być w stanie to zrobić bez większych trudności. Co najwyżej przypomnienie twierdzenia Pitagorasa może być potrzebne, jeśli wykazują one trochę stresu z powodu bycia w wywiadzie. Może to być prawie postrzegane jako problem „wzmocnienia ego”, ponieważ może pomóc uspokoić niektórych ludzi, którzy bardzo denerwują się rozmową.
Ponownie, kolejne zastosowanie niektórych podstawowych instrukcji sterujących. Uczniowie, którzy nie byli narażeni na działanie modułu modułu lub nie używali go zbyt często, mogą wymagać przypomnienia, ale nie powinni napotkać żadnych rzeczywistych problemów w rozwiązaniu problemu.
Jest to dość powszechny problem, więc większość (jeśli nie wszyscy) studenci zobaczą go w pewnym momencie przed ukończeniem studiów. Haczyk polega na tym, że zwykle pojawia się, gdy rekursja jest prezentowana uczniom, ponieważ nadaje się dobrze lub rozwiązanie rekurencyjne lub oparte na pętli, które można następnie porównać, aby uczniowie z różnych szkół mogli zobaczyć to w różnym czasie, w zależności od sekwencji kursów. W praktyce, jeśli ktoś nie byłby w stanie wymyślić rekurencyjnego, poprosiłbym o alternatywne użycie pętli i gdyby nie mógł tego wymyślić, byłbym bardziej zaniepokojony ich potencjalną zdolnością.
To pytanie może być nieco zbyt otwarte, ponieważ jest napisane, więc może być również dobrym pytaniem, aby zobaczyć, w jaki sposób kandydat szuka dodatkowych informacji (np. Czy należy uwzględnić funkcje usuwania, konwersję do tablic itp.), Ale biorąc pod uwagę studnię zdefiniowane określenie problemu („Wdrożenie podstawowej struktury listy dla liczb całkowitych, która pozwala na dodawanie liczb na końcu lub na dowolny indeks, usuwanie i zawiera funkcję zwracania odwróconej kopii listy”) uczniowie powinni być w stanie rozwiązać problem, o ile listy są wspólną strukturą przedstawioną albo we wczesnym kursie struktur danych, albo we wczesnym podstawowym kursie informatyki.
Jeśli chodzi o radzenie sobie z kandydatami, jeśli walczą, upewnij się, że są zrelaksowani i daj im odrobinę łagodności, ponieważ mogą po prostu mieć lęk przed wydajnością, ponieważ może to być ich pierwszy prawdziwy wywiad. Konieczne mogą być porady dotyczące rozwiązywania problemów, szczególnie w przypadku trzeciego i czwartego problemu, w przeciwieństwie do pierwszych dwóch.
Ponadto ustrukturyzuj ogólny proces rozmowy, tak aby wbudowane były punkty „wdzięcznego wyjścia”. Na przykład możesz mieć następujący program:
Ten przebieg rozmowy zwykle działa dobrze, jeśli chcesz móc zwolnić kandydatów wcześniej, ponieważ od początku wiedzą, że mogą zostać zwolnieni po przerwie. Krótki wywiad przed quizem oznacza również, że nie tylko pojawiają się, aby wziąć udział w teście, co daje im trochę praktyki podczas rozmowy kwalifikacyjnej i może również pozwolić im zdecydować, że nie są w dobrej formie. Jeśli inni programiści obserwują quiz lub pomagają kandydatowi podczas niego, daje im to również szansę zaliczenia / odrzucenia kandydata podczas krótkiej przerwy.
Przez cały czas, gdy przeprowadzasz rozmowę kwalifikacyjną w celu odbycia stażu, a kandydatami są studenci, musisz pamiętać, że nadal są studentami i mogą nie mieć dużej praktyki podczas rozmów kwalifikacyjnych (co może prowadzić do lęku przed wydajnością) i być może nie osiągnęli celu nawet być w stanie odpowiedzieć na pytania, co oznacza, że dobrym pomysłem może być wysłanie ich po drodze wraz z kopią „idealnego rozwiązania” dla zgłoszonych problemów.
źródło
Moim celem podczas każdej rozmowy kwalifikacyjnej, bez względu na to, po której stronie jestem, jest poczucie, że rozmawiam z kolegą. Koledzy przychodzą do mojego biura przez cały czas, kiedy tkwią w problemie. Kiedy utknę, proszę kolegów o pomoc. Dlatego w wywiadzie staram się odtworzyć tę dynamikę.
Innymi słowy, co byś powiedział, gdyby kolega musiał wprowadzić sekwencję Fibonacciego i nie wiedział, co to jest? Wyjaśniłbyś im to, dopóki nie zrozumieją go wystarczająco, aby kontynuować samodzielnie. Nie ma wstydu w ignorancji, o ile nie jest ona trwała.
Jeśli przejdziesz przez to ćwiczenie i nadal nie możesz sobie wyobrazić, jak pracujesz z tą osobą, oznacza to, że nie nadają się do pracy.
źródło
Zadawanie takich pytań w rozmowie polega na ustaleniu, czy ktoś może wymyślić, jak rozwiązać problemy. Praca programisty składa się zasadniczo z dwóch rzeczy: „Weź te wymagania i zaimplementuj je w kodzie” i „dowiedz się, dlaczego implementacja nie spełnia wymagań i napraw je”. Tak więc to, czego tak naprawdę szukasz, nie jest rozwiązaniem tych konkretnych pytań, ale możliwością znalezienia rozwiązania .
Rozumiejąc to, dałbym podpowiedź, żeby kogoś zacząć, a może trochę więcej, jeśli jest jasne, że robią prawdziwy postęp, ale gdzieś brakuje jakiegoś detalu. Ale jeśli stanie się jasne, że po prostu nie mogą wymyślić sposobu rozwiązania problemu, masz odpowiedź i nie musisz kontynuować ćwiczenia.
Na przykład, kiedy przeprowadziłem wywiad w mojej obecnej pracy, otrzymałem pytanie o znalezienie najkrótszej ścieżki z jednego węzła do drugiego na wykresie. Odpowiedziałem, że prawdopodobnie użyję czegoś takiego jak Algorytm Dijkstry, który niejasno pamiętałem, gdy dowiedziałem się o jednym dniu w college'u i od tego czasu nigdy go nie użyłem, i podałem szybkie (i nieprawidłowe) wyjaśnienie, które spełniało określone warunki podane przez pytanie. Ankieter wskazał, że moje rozwiązanie skończyłoby się w nieskończoną pętlę, gdyby wykres został nieznacznie zmodyfikowany, a to pobudziło moją pamięć, więc wyjaśniłem właściwy sposób uniknięcia tego problemu. I w końcu dostałem pracę.
źródło
na stanowiska stażystów możesz być trochę pytany.
Nie mam pojęcia, co rozumiesz przez czwarte pytanie. jeśli chodzi o zadawanie pytania rekurencyjnego, jest to trochę niepraktyczne, przejrzyj własną bazę kodu i określ liczbę obszarów, w których rekursja jest używana, jestem skłonny się założyć, że jest kilka. Sytuacje podczas rozmowy są stresujące, a oczekiwanie od kandydatów wdrożenia rzadko używanych strategii, które są odwrotne w porównaniu do większości rzeczy, które kiedykolwiek programujesz, jest wobec nich niesprawiedliwe, szczególnie na początku rozmowy. Osobiście zadawałbym pytania, gdzie muszą wyjaśnić, co oznaczają ważne pojęcia / jak są stosowane, podając przykłady z puszki. Byłbym bardziej zainteresowany kandydatami, którzy powiedzą ci, że książka X lub wyszukiwarka Google Y zapewni wszystko, co potrzebne do implementacji czegoś w twojej bazie kodu.
źródło
IMHO twoje dwa pierwsze pytania powinny być rozwiązywalne dla każdego, kto nazywa go programistą, czy to młodszy, czy starszy, zaraz po szkole lub samouku.
Jeśli widzę, że osoba przeprowadzająca wywiad zmaga się z którymkolwiek z nich, postaram się sformułować problem i sprawdzić, czy w pełni go zrozumiał. Następnie zachęć ją do używania długopisu i papieru, tablicy, rysowania figur lub innego podejścia, które woli rozwiązać problem. Proszę ją również, aby zastanowiła się na głos, aby mogła zobaczyć swój proces myślowy, aw razie potrzeby dać małe wskazówki, jeśli jest na właściwej drodze, po prostu nie odważy się iść naprzód lub napotka przeszkodę. Ale jeśli nawet kilka wskazówek nie pomoże lub - jak wspomniałeś wyżej - rozwiązam dla niej problem, prawdopodobnie zakończę rozmowę, aby przestać marnować nasz czas. W wywiadzie zawsze staram się zobaczyć i skoncentrować na tym, co wie kandydat, zamiast na tym, czego ona nie wie, ale jeśli nie mogę znaleźć znaczącej wiedzy, po pewnym czasie poddaję się.
Trzeci i czwarty są nieco trudniejsze, więc mógłbym zaakceptować, jeśli junior nie mógł ich zdobyć, jeśli inaczej wykazałby dobre podejście do rozwiązywania problemów i entuzjazm. Ale dla seniorów nadal są koniecznością.
źródło
Musiałem sprawdzić, co masz na myśli przez „FizzBuzz”; okazuje się, że słyszałem o grze i jej zasadach, ale nie pod tym imieniem i nie za jakiś czas. Nie myśl więc, że nie musisz udzielać ŻADNYCH informacji rozmówcom.
To powiedziawszy, są to wszystkie podstawowe problemy z kodowaniem, których spodziewałbym się, że ktoś przeprowadzający rozmowę kwalifikacyjną, nawet w przypadku pozycji kodowania na poziomie podstawowym, będzie w stanie przemyśleć swoją drogę, jeśli nie będzie w stanie zakodować odpowiedzi przez kontrolę. Jesteśmy na tej samej stronie. Odpowiedź na Twój problem zależy od tego, jak go pomylą:
Niewielkie problemy ze składnią: jeśli spodziewasz się kodu w określonym języku, nie licz zbyt mocno, jeśli przegapią one średnik lub błędnie przeliterują użycie jakiegoś identyfikatora. Większość IDE łapie to natychmiast i od czasu do czasu wszyscy robią literówki. W prawie każdym wywiadzie, w którym miałem coś zakodować, „pseudo-C-ish” było akceptowalne, o ile algorytm był poprawnie przekazywany ankieterowi, a logika była dobra.
Drobna wada logiczna: Jeśli algorytm zachowuje się zgodnie z oczekiwaniami w większości, ale nie we wszystkich, oczekiwanych scenariuszach (powiedzmy podczas kodowania FizzBuzz, 15 spowoduje tylko „Fizz” lub „Buzz”, ale nie oba, jak należy), to być „testerem jednostek” i wskazać, że algorytm zawiódłby w tym przypadku i sprawdzić, czy uda się go naprawić. Być może przeoczyli ten konkretny przypadek lub mogli nie zrozumieć wystarczająco wymagań. Oba są znowu całkowicie zrozumiałe, codzienne zdarzenia w kodowaniu, które należy łatwo rozwiązać, po prostu dostarczając dodatkowe informacje lub informacje zwrotne.
Główne wady logiczne: jeśli algorytm nie przejdzie większości lub któregokolwiek z podanych scenariuszy testowych, wskaż to również i sprawdź, czy można go naprawić. To jest bardziej problem; albo źle zrozumieli bardzo podstawowy wymóg systemu, albo przeoczyli jakąś lukę logiczną. Ale jeśli potrafią to naprawić, podając więcej szczegółów problemu, nie mówiąc dokładnie, gdzie zawodzi ich kod, napisz je do niejasnych wymagań i przejdź dalej.
Nie wiem od czego zacząć / zakodowana odpowiedź na konkretne przypadki / nie rozumiem ich pseudokodu: są to czerwone flagi. Jeśli poprosisz kogoś o kodowanie algorytmu zgodnego z regułami FizzBuzz, wyjaśniając im te reguły, i dostaniesz puste spojrzenie, wywiad dobiegnie końca. Z tego samego powodu, jeśli mogą umieścić COŚ na planszy, ale zawodzi przy dużych częściach problematycznego miejsca, a ty musisz trzymać ich rękę, ilustrując awarię i sposób jej naprawy, nie przechodziłbym do drugiej rozmowy .
źródło
Jeśli naprawdę masz potencjalnego stażystę, który zachowuje się jak jeleń w świetle reflektorów, ponieważ nigdy nie był przesłuchiwany, ma problemy z lękiem, nigdy nie był w takiej sytuacji życiowej (zwykle zauważasz z ich języka ciała), możesz po prostu zacząć od pytając ich, nad czym ostatnio pracowali.
To będzie jego terytorium, żeby nie był szalony. Kiedy znajdziesz odpowiednie miejsce, zapytaj: „Hej, jak to wdrożyłeś?”. Jeśli uda mu się wyjaśnić, może dać ci wgląd w jego sposób myślenia.
Następnie umieść własne testy w porządku obrad.
źródło
Fizzbuzz jest absolutnym wymogiem. Jeśli nie mogą kodować Fizzbuzz, nie powinieneś ich zatrudniać.
Zwykle proszę kandydata na sesję kodu przed rozmową kwalifikacyjną, w której korzystamy z Dokumentów Google do rozwiązania problemu programistycznego (zazwyczaj Fizzbuzz + problem wyższego poziomu, jeśli można go łatwo ukończyć).
Zazwyczaj rozmawiam z nimi przez telefon lub na Skype, a ponieważ obserwuję, jak rozwiązują problem (i rozmawiam z nimi o tym, co myślą w pewnych momentach), mogę być całkiem pewny, że tak się nie stało. po prostu google odpowiedź.
Dopóki twoje inne problemy są dobrze określone (to znaczy, że dajesz im formułę dla każdego z nich), twoje pytania są w porządku.
Kiedy przeprowadzam wywiad z kandydatami, staram się trzymać problemów programistycznych, które mogą napotkać. Uwielbiam problemy z manipulowaniem ciągami, ponieważ kiedy jesteś w sieci, prawie wszystko, co użytkownik ma do czynienia z jakimś rodzajem manipulacji ciągiem. Ważne jest, jak sobie z tym poradzą.
źródło
To zależy od kalibru pozycji, którą próbujesz obsadzić.
Jeśli wybierasz starszego programistę, spodziewam się, że wszystko to poznają. Jeśli źle to zrozumieli i czułem się źle, po prostu zatrzymałbym wywiad, dziękuję i do widzenia. Gdybym był w bardziej uprzejmym nastroju, po prostu podziękowałbym im i pospieszyłem do końca wywiadu.
Gdybym szukał młodszego programisty, te pytania można by uznać za dość trudne. Byłbym bardziej zainteresowany odkrywaniem ich zdolności i chęci do nauki. Więc spróbuję dać im wskazówki, poprowadzę ich i zobaczę, jak zareagują.
źródło
Wywiady ze stażystami to inny rodzaj wywiadu. Zazwyczaj używam moich standardowych pytań dla programistów (takich jak te, które dostarczyłeś), aby ocenić, gdzie są w swojej edukacji. Zdolność do rozwiązania tych problemów będzie się znacznie różnić od drugiego do seniorów.
Po uzyskaniu tych informacji skupiam wywiad na innych umiejętnościach, takich jak: czy będą w stanie pracować w zespole, czy będą uczyć, czy skorzystają ze stażu w naszej firmie, czy są pasjonatami rozwoju / nauki itp.
Dla mnie to nie techniczne rzeczy wyróżniają stażystę na tle innych kandydatów. Wolałbym poświęcić kilka miesięcy na coaching / mentoring dla kogoś, kto chce się uczyć i rozwijać, niż dla kogoś, kto chce tylko pracy na semestr.
źródło
Zadaj sobie pytanie, jaką wartość rozmówca może wnieść do Twojej firmy. Uwzględnij koszt zaangażowania mentora, zwłaszcza jeśli nie są w stanie rozwiązać problemów na poziomie fizzbuzz. Jeśli odpowiedź nie jest proporcjonalna do zamierzonej pensji, masz dobrą sprawę ekonomiczną, aby ich nie zatrudnić.
Nie bój się wrócić do swojego przełożonego i powiedzieć: „nie było kandydatów, którzy dodaliby do naszej firmy wystarczającą wartość, aby zatrudnienie ich było opłacalne”. Musi to być lepszy sposób postępowania niż skończyć z kimś, kto ma faktycznie ujemną wartość, ze względu na koszt ciągłej pomocy.
źródło
Moja odpowiedź może wydawać się trochę nieuprzejma lub lekceważąca, ale myślę, że działa dobrze. Na początek zadaję kandydatowi bardzo łatwe pytanie, które służy jako pytanie rozgrzewające, które pomaga budować ich pewność siebie. Niezależnie od tego, czy im się uda, przechodzę do pytania, które jest mniej trywialne i bezpośrednio związane z tym, co pociąga za sobą praca.
W tym momencie wszystko albo nic. Jeśli przepłyną przez to, świetnie, nie ma problemu. Jeśli trochę się zmagają, nie ma problemu, pomogę im szturchnąć, a następnie przejdę do innych pytań, aby poznać inne umiejętności.
Jeśli jednak całkowicie nie potrafią go rozwiązać, idę dalej i spalam resztę czasu na rozmowę, pomagając im. Kandydat nadal czuje się zaangażowany w rozmowę kwalifikacyjną, ale nie muszę kierować rozmową w różnych, nieistotnych kierunkach. Jest również dobry dla kandydata, ponieważ może być edukacyjny.
źródło
Tak więc moja odpowiedź brzmi: bądź lepiej przygotowany.
PS Jesteś menedżerem już, tak, ty naprawdę powinien trzymać stres.
źródło