Piszę o prawdzie, nie o poradach i sztuczkach
Uaktualnienie: Stosując się do porad napisanych poniżej, dostałem oferty od Google, Microsoft, Amazon, Quantcast i Bloomberg.
To kompleksowy przewodnik, który zawiera wszystko, co musisz wiedzieć o wywiadzie kodowania. Dokładnie wyjaśnia czego się uczyć, jak się uczyć i co ważniejsze jak zaprezentować rozwiązanie podczas rozmowy kwalifikacyjnej.
Jeśli chcesz zdać rozmowę kwalifikacyjną z kodowania, to znalazłeś właściwy artykuł. Po przeczytaniu tego możesz mieć pokusę, aby poszukać innych artykułów na ten sam temat, ponieważ „Może znajdę więcej wskazówek i trików, które mi pomogą”.
Przestań szukać wskazówek i trików, to jest to, co trzyma cię z dala od twojej wymarzonej pracy.
Nie ma żadnych wskazówek ani trików, aby dostać tę pracę. To tylko ciężka praca, kropka. Więc jeśli naprawdę chcesz zmiażdżyć ten wywiad, idź i ćwicz po przeczytaniu tego artykułu.
Artykuł ma trzy części & trzy filmy i zajmie to około 30 minut, aby przeczytać.
- Co to jest wywiad kodowania?
- Jak przygotować się do wywiadu kodowania?
- Jak dać z siebie wszystko podczas wywiadu kodowania?
Po pierwsze, pozwól mi się zaprezentować, abyś wiedział, że jestem pewny tego, o czym mówię.
Nazywam się Andrzej i od pięciu lat jestem wyczynowym programistą. Brałem udział w światowych finałach Google HashCode, największych zawodach algorytmicznych organizowanych przez Google, a wcześniej zdobyłem trzy złote medale w Olimpiadzie Informatycznej w Rumunii. Mając to doświadczenie, opublikowałem kurs online „Wprowadzenie do algorytmów i struktur danych w C++”, który pomógł ponad 8000 studentów ze 135 krajów w ich pierwszych krokach w tej dziedzinie.
Teraz studiuję informatykę na University College London i w międzyczasie tworzę kurs, aby pomóc studentom i młodym profesjonalistom przygotować się do rozmowy kwalifikacyjnej w dużych firmach technologicznych. Stąd, w tym artykule, chcę podzielić się moim doświadczeniem z wywiadu kodowania i powiedzieć ci najprostszy sposób, aby przejść go. Możesz do mnie dotrzeć tutaj.
Pozwól, że zadam Ci pytanie: czy kiedykolwiek marzyłeś o pracy w dużej firmie technologicznej, takiej jak Microsoft? Jeśli tak, to bądź pewien, że większość z nas również. A ponieważ jest tak duże zapotrzebowanie na kilkadziesiąt stanowisk, potrzebują sposobu, aby sprawdzić, którzy kandydaci są lepiej przygotowani.
Zanim zostaniesz zaproszony na rozmowę o kodowaniu, musisz aplikować na dane stanowisko i mieć CV, które błyszczy wśród innych. W tym artykule będę mówić o rzeczywistym wywiadzie kodowania i jak można się do niego przygotować, a nie o procesie ubiegania się o pracę.
Dla większości firm tech, wywiad kodowania składa się z Algorytmy & Problemy struktur danych. Pomyśl o nich jako o pytaniach dotyczących rozwiązywania problemów, w których ankieter chce ocenić swoją zdolność do rozwiązania problemu, którego nie widziałeś wcześniej. Jeden wywiad trwa około 45 minut i masz jeden lub dwa problemy kodowania. Rozmówca oczekuje, że znajdziesz najbardziej optymalne rozwiązanie, zakodować go i wyjaśnić, co właśnie zakodowane.
Na koniec, będziesz miał szansę zadać mu kilka pytań na temat firmy lub cokolwiek, co Cię interesuje. Wszystkie te kroki omówimy kompleksowo w ostatniej części tego artykułu.
Jak przygotować się do rozmowy kwalifikacyjnej?
Chcę, aby od początku było dla Ciebie jasne: nie ma takiego skrótu lub sztuczki, aby przejść rozmowę kwalifikacyjną. Jedynym sposobem na znalezienie optymalnych rozwiązań problemów algorytmicznych jest praktyka, rozwiązywanie jak największej ilości problemów.
W dwóch słowach, to ciężka praca.
Może Ci się to nie spodobać i zaczniesz szukać gdzie indziej sztuczki, która pozwoli Ci zrozumieć, jak rozwiązywać pytania na rozmowie kwalifikacyjnej, ale ona nie istnieje. Pomyśl przez chwilę: gdyby istniała taka sztuczka, dlaczego nie wszyscy używają jej i nie przechodzą wywiadu?
Więc musisz zrozumieć, że pojedynczą zmienną przechodzenia wywiadu jest to, ile ćwiczysz przed. Twoje doświadczenie, inteligencja i wszystko inne jest już ustalone. Stąd czas spędzony na praktyce będzie stanowić różnicę między kandydatami, którzy przechodzą i nie.
Wywiad kodowania jest walka z samym sobą, a pojedynczy sposób, aby go wygrać jest dużo praktyki.
Pierwszym krokiem jest poczucie komfortu z głównym językiem kodowania, takim jak C/C++, Java lub Python. Niektóre firmy akceptują również inne języki, a zdecydowana większość trzyma się tych trzech. Wybierz ten, który najbardziej Ci się podoba i trzymaj się go. Nie decyduj w połowie przygotowań, że chcesz zmienić język! Dla reszty artykułu, będę zakładać, że wybrałeś język i znasz dobrze jego składnię.
Teraz, zazwyczaj wywiad kodowania jest wszystko o Algorytmy i struktury danych. Obejmują one kilka podstawowych tematów, które musisz dokładnie zrozumieć, i nawet nie rozważaj pójścia na rozmowę bez poczucia się komfortowo z nimi.
Poniżej znajduje się lista Algorytmów i Struktur Danych, które musisz znać. Napisałem je w kolejności ich ważności i jest to najlepsza ścieżka nauki.
1) Złożoność Big O: Jest to konieczność i stanowi podstawę Twojego myślenia algorytmicznego. Zrozumieć, co to znaczy i dojść do punktu, w którym można powiedzieć złożoność podstawowego algorytmu tylko od patrzenia na niego.
2) Tablice: W tym momencie powinieneś być zaznajomiony z pojęciem tablic. Ten temat odnosi się do problemów, w których tablica jest używana tylko do przechowywania, a rozwiązanie zawiera podstawowe techniki, takie jak iteracja z dwoma wskaźnikami. Klasycznym problemem jest sprawdzenie, czy dana tablica jest permutacją.
3) Ciągi: Wiedz, jak manipulować łańcuchami w twoim języku, i bądź zaznajomiony z problemami, które proszą cię o ich konkatenację lub obracanie.
4) Listy połączone: Często zdarza się, że na rozmowie kwalifikacyjnej napotkasz problem związany z listami połączonymi. Tutaj musisz zwrócić szczególną uwagę na przypadki narożne. Pomyśl, co się stanie, jeśli połączona lista jest pusta? Lub ma tylko jeden element? Albo chcesz iterować aż do ostatniego elementu? Kiedy rozwiązujesz problem z listami połączonymi, pomyśl dwa razy o przypadkach narożnych.
5) Hash Tables: Fundamentalna struktura danych, która jest obecna w większości wywiadów. Jeśli zagłębisz się w jeden temat, wybierz tabele hash. Bądź biegły w bibliotece tabel hashowych swojego języka i przećwicz co najmniej pięć problemów. Na koniec podejmij to wyzwanie: Jak znalazłbyś najdłuższą podtablicę z odrębnymi wpisami?
6) Stosy: Zapoznaj się z ideą, że możesz manipulować tylko jednym końcem stosu. Rozwiąż to wyzwanie: Zaimplementuj stos z MAX API, co oznacza, że w każdym momencie możesz zapytać, jaki jest maksymalny element stosu.
7) Kolejki: Nie myl ich ze stosami, ponieważ mają one dwa końce. Zaimplementuj klasyczny problem symulacji kolejki za pomocą dwóch stosów.
8) Greedy: Ta technika jest dość prosta i prawdopodobnie używasz jej na co dzień. Zasadniczo odnosi się do podejmowania najlepszej możliwej decyzji w danym momencie, bez rozważania przyszłych konsekwencji. Przećwicz kilka problemów, i nie myśl, że każdy problem można rozwiązać za pomocą Greedy.
9) Typy prymitywne: Dotyczy głównie manipulacji bitami i podstawowych operacji na liczbach. Jednak niektóre problemy mogą stać się dość podchwytliwe. Jak można policzyć liczbę 1 w reprezentacji binarnej?
10) Drzewa binarne: Skup się na trawersach, wspólnych przodkach i rekurencyjnie iteruj po drzewach.
11) Sterty: Są one szeroko stosowane w aplikacjach świata rzeczywistego, więc poznaj sterty! Ćwicz, aż będziesz pewny, kiedy użyć min-heap lub max-heap. Jak wydrukowałbyś pięć największych elementów z sekwencji liczb? Czy używasz min-heap lub max-heap?
12) Wyszukiwanie: Wyszukiwanie jest podstawowym tematem, który każdy powinien znać. Przećwicz więc co najmniej trzy problemy z wykorzystaniem wyszukiwania binarnego.
13) Sortowanie: Upewnij się, że potrafisz zaimplementować mergesort i quicksort. Poznaj bardzo dobrze ich najlepszą, średnią i najgorszą złożoność przypadku. Jeśli masz czas, naucz się również Heapsort.
14) Binary Search Trees: Są one powszechnie pytane w wywiadzie kodowania i musisz być w stanie zaimplementować wszystkie ich podstawowe operacje, w tym usunięcie elementu!
15) Backtracking: Zasadniczo oznacza to generowanie wszystkich możliwych rozwiązań i branie tych, które respektują Twoje wymagania. Zaimplementuj generator zbioru potęgowego oraz problem n-Queen.
16) Grafy: Są prawdopodobnie najczęściej używaną strukturą danych w informatyce. Czy wiesz, że każda sieć społecznościowa jest po prostu ogromnym grafem? Poćwicz na tworzeniu kopii grafu w pamięci i wykrywaniu cykli w grafach.
17) Programowanie dynamiczne: Programowanie dynamiczne jest postrzegane przez większość jako najstraszniejszy temat. Ale jest najpiękniejsze, jeśli zrozumiesz myślenie, które za nim stoi. Tak więc, przećwicz pięć najczęstszych pytań i trzymaj się ich, aż zrozumiesz, skąd się biorą powtórzenia.
W kursie, który teraz tworzę, wyjaśniam każdy temat w tej kolejności. Nadal pracuję nad kursem, ale możesz uzyskać wczesny dostęp do niektórych lekcji, a także pomóc mi swoją opinią, dołączając do grupy na Facebooku kursu.
Jeśli wiele tematów jest ci nieznanych, oznacza to, że musisz zacząć ćwiczyć zaraz po tym artykule. Nie szukaj już w sieci innych poradników, tylko idź i ćwicz. Pamiętaj, że rozmowa kwalifikacyjna to walka z samym sobą, im więcej ćwiczysz, tym większa szansa na wygraną. It’s up to you to increase your problems comfort zone.
How to give your best during the coding interview?
The interview has five parts which we’ll discuss in depth. Obejrzyj filmy wyjaśniające dla prawdziwych przykładów.
1) Wprowadzenie
Ta część rozpoczyna rozmowę i trwa około trzech do pięciu minut. Rozmówca chce dowiedzieć się więcej o Tobie i daje Ci szansę na zaprezentowanie siebie. Zazwyczaj interesuje go, nad jakimi projektami pracowałeś wcześniej i który z nich był najbardziej imponujący. Teraz, to jest twoja szansa, aby zabłysnąć, więc nie zmarnuj go!
Nie staraj się być pochlebny. Łatwo jest dostrzec fałszywą osobowość, która próbuje cię oszukać. Ja i wszyscy inni nienawidzimy takich ludzi, więc bądź pewien, że pokazujesz swoją prawdziwą osobowość.
Musisz wiedzieć wcześniej, co masz zamiar powiedzieć o swoim ulubionym projekcie, więc przygotuj to przed rozmową kwalifikacyjną. Teraz większość ludzi mówi tylko dwa krótkie zdania, co jest złe. Która odpowiedź podoba Ci się bardziej?
1) „Pracowałem nad aplikacją webową do lepszego zarządzania pacjentami w szpitalach. Napisałem backend w Node.js.”
To, jak się prezentujesz, naprawdę ma znaczenie
2) „Projekt, który naprawdę mi się podobał, polegał na stworzeniu aplikacji internetowej dla National Health Services w Wielkiej Brytanii, aby pomóc im lepiej zarządzać pacjentami w szpitalu. Była to część programu nauczania na uniwersytecie, trwało to dwa miesiące, a ja byłem liderem trzyosobowego zespołu.
Wzięliśmy projekt od podstawowego pomysłu i przekształciliśmy go w prawdziwą aplikację. Byłem odpowiedzialny za kodowanie backendu w Node.js i bazy danych w MongoDB. Była to pierwsza aplikacja, którą tworzyłem dla klienta i nie znałem się na technologiach webowych. Proces tworzenia aplikacji był iteracyjny i po drodze popełniliśmy kilka błędów.
W końcu, z nawiązką dostarczyliśmy wiele funkcjonalności, a moją ulubioną jest to, że użytkownicy mogą aktualizować pokoje w szpitalu, zamiast tego, że są one zakodowane na sztywno.
Nauczyłem się wielu rzeczy z tego projektu, szczególnie jak pracować w zespole. Było kilka momentów, w których pojawiły się problemy techniczne lub zespołowe, ale w końcu wszystko poszło dobrze i dostaliśmy najwyższą ocenę w roku!”
Zamień tę prezentację na swoją korzyść! Osoba prowadząca rozmowę jest naprawdę zainteresowana dowiedzeniem się czegoś więcej o Tobie, więc zacznij od zwięzłego przedstawienia projektu, wyjaśniając o co w nim chodzi. Następnie powiedz, jaki był Twój wkład (jeśli pomogłeś zespołowi z jakimś sprytnym pomysłem, powiedz o tym!) i czego nauczyłeś się w trakcie procesu rozwoju. Możesz również wspomnieć o tym, jaką różnicę zrobiłeś dla użytkowników.
Powinieneś mówić jedną-dwie minuty o swoim projekcie.
2) Zrozum problem
Wywiadowca powie Ci krótko o problemie, który musisz rozwiązać. Powiedziałem „krótko”, ponieważ nie da ci wielu szczegółów na temat ograniczeń, przypadków narożnych lub sposobu otrzymywania danych. To część twojej pracy, aby poprosić o wszystko, czego potrzebujesz do rozwiązania problemu. Powtórz głośno to stwierdzenie, aby upewnić się, że zrozumiałeś je poprawnie.