Jak przygotować się do rozmowy kwalifikacyjnej w Google i jej nie przejść. Dwa razy

Jak przygotować się do rozmowy kwalifikacyjnej w Google i jej nie przejść. Dwa razy

Tytuł artykułu brzmi jak epicka porażka, ale w rzeczywistości wszystko nie jest takie proste. I ogólnie ta historia zakończyła się bardzo pozytywnie, choć nie w Google. Ale to temat na inny artykuł. W tym samym artykule opowiem o trzech rzeczach: jak przebiegał mój proces przygotowań, jak przebiegały rozmowy kwalifikacyjne w Google i dlaczego moim zdaniem nie wszystko jest tak jasne, jak mogłoby się wydawać.

Jak to wszystko się zaczęło

Pewnego zimnego cypryjskiego zimowego wieczoru nagle przyszła mi do głowy myśl, że moja wiedza z zakresu informatyki klasycznej jest bardzo odległa od przeciętnej i trzeba coś z tym zrobić. Jeśli przy okazji ktoś jeszcze nie przeczytał dlaczego wieczór jest cypryjski i zimny, to może się o tym przekonać tutaj. Po namyśle zdecydowano się rozpocząć od wzięcia udziału w kursie internetowym na temat algorytmów i struktur danych. Od jednego z moich byłych kolegów dowiedziałem się o kursie Roberta Sedgewicka na Courserze. Kurs składa się z dwóch części (Część 1 и Część 2). Jeśli nagle linki się zmienią, zawsze możesz wpisać w Google nazwisko autora. Każda część trwa 6 tygodni. Wykłady odbywają się na początku tygodnia, a w tygodniu należy jeszcze wykonać ćwiczenia. Pierwsza część kursu obejmuje podstawowe struktury danych, podstawowe rodzaje sortowania oraz złożoność algorytmów. Druga część jest już bardziej zaawansowana, zaczynając od wykresów, a kończąc na takich rzeczach jak programowanie liniowe i niewykonalność. Po przemyśleniu wszystkich powyższych doszedłem do wniosku, że właśnie tego potrzebuję. Swoją drogą dociekliwy czytelnik może zapytać, co ma z tym wspólnego Google? I rzeczywiście, aż do tej chwili w ogóle nie miał z tym nic wspólnego. Ale potrzebowałem celu, ponieważ nauka przez 12 tygodni wieczorami bez celu jest dość trudna. Jaki może być cel zdobywania nowej wiedzy? Oczywiście ich zastosowanie w praktyce. Na co dzień jest to dość problematyczne, ale podczas rozmowy kwalifikacyjnej w dużej firmie jest to łatwe. Szybkie Google pokazało, że Google (wybaczcie tautologię) to jedna z największych firm w Europie (a konkretnie patrzyłem na Europę), która przeprowadza tego typu wywiady. Mianowicie ich biuro znajduje się w Zurychu w Szwajcarii. Więc postanowiono - pouczmy się i idźmy na rozmowę kwalifikacyjną do Google.

Przygotowanie do pierwszego podejścia

Te 12 tygodni minęło szybko i udało mi się ukończyć oba kursy. Moje wrażenia z kursów są więcej niż pozytywne i mogę je polecić każdemu zainteresowanemu. Kursy podobały mi się z następujących powodów:

  • Prowadzący mówi dość wyraźnie po angielsku
  • Materiał jest dobrze skonstruowany
  • Wspaniałe prezentacje pokazujące wnętrze każdego algorytmu
  • Właściwy dobór materiału
  • Ciekawe ćwiczenia
  • Ćwiczenia są automatycznie sprawdzane na stronie, po czym generowany jest raport

Moja praca na kursach zazwyczaj przebiegała w ten sposób. Wykładów słuchałem w ciągu 1-2 dni. Następnie rozwiązali szybki test swojej wiedzy z materiału. Przez resztę tygodnia wykonywałem ćwiczenie w kilku powtórzeniach. Po pierwszym uzyskałem 30-70%, kolejne przyniosły wynik do 97-100%. Ćwiczenie zwykle polegało na zaimplementowaniu jakiegoś algorytmu, np. Rzeźba szwu lub bzip.

Po ukończeniu kursów zdałam sobie sprawę, że duża wiedza wiąże się z wieloma smutkami. Jeśli wcześniej po prostu wiedziałem, że nic nie wiem, teraz zacząłem zdawać sobie sprawę, że to ja nie wiedziałem.

Ponieważ był dopiero maj, a rozmowę kwalifikacyjną zaplanowałem na jesień, zdecydowałem się kontynuować naukę. Po zapoznaniu się z wymaganiami dotyczącymi naboru zdecydowano się pójść równolegle w dwóch kierunkach: kontynuować naukę algorytmów i wziąć udział w podstawowym kursie uczenia maszynowego. Jako pierwszy cel zdecydowałem się przejść z kursów na rzecz książki i wybrałem monumentalne dzieło Stevena Skieny „Algorytmy. Podręcznik projektowania algorytmów. Nie tak monumentalny jak Knuta, ale jednak. Po drugiego gola wróciłem na Coursera i zapisałem się na kurs Andrew Ng. Nauczanie maszynowe.

Minęły kolejne 3 miesiące i ukończyłem kurs i książkę.

Zacznijmy od książki. Lektura okazała się całkiem ciekawa, choć niełatwa. W zasadzie książkę poleciłabym, ale nie od razu. Ogólnie rzecz biorąc, książka zawiera bardziej szczegółowe spojrzenie na to, czego nauczyłem się podczas kursu. Poza tym odkryłem (z formalnego punktu widzenia) takie rzeczy jak heurystyka i programowanie dynamiczne. Oczywiście używałem ich już wcześniej, ale nie wiedziałem, jak się nazywają. W książce zawarto także szereg opowieści z życia autora (War Story), które nieco osłabiają akademicki charakter przedstawienia. Nawiasem mówiąc, drugą połowę książki można pominąć, zawiera ona raczej opis istniejących problemów i sposobów ich rozwiązywania. Przydaje się, jeśli jest regularnie stosowany w praktyce, w przeciwnym razie od razu zostanie zapomniany.

Byłem więcej niż zadowolony z kursu. Autor wyraźnie zna się na rzeczy i opowiada w ciekawy sposób. Plus spora część, czyli algebra liniowa i podstawy sieci neuronowych, które zapamiętałem z uczelni, więc nie doświadczyłem żadnych szczególnych trudności. Struktura kursu jest dość standardowa. Kurs jest podzielony na tygodnie. Co tydzień odbywają się wykłady połączone z krótkimi testami. Po wykładach dostajesz zadanie, które musisz wykonać, przesłać i zostanie ono automatycznie sprawdzone. W skrócie lista rzeczy nauczanych na kursie wygląda następująco:
- funkcja kosztu
- regresja liniowa
- zejście gradientowe
- skalowanie funkcji
- równanie normalne
- regresja logistyczna
— klasyfikacja wieloklasowa (jeden kontra wszyscy)
- sieci neuronowe
- propagacja wsteczna
- regularyzacja
— stronniczość/wariancja
— krzywe uczenia się
— metryki błędów (precyzja, przywołanie, F1)
— Maszyny wektorów nośnych (klasyfikacja z dużym marginesem)
— K-oznacza
— Analiza głównych składników
- wykrywanie anomalii
— filtrowanie wspólne (system rekomendacyjny)
— stochastyczne, mini-partyjne, wsadowe spadki gradientowe
- nauka online
- zmniejszenie mapy
- analiza sufitu
Po ukończeniu kursu uzyskano wiedzę na wszystkie te tematy. Po 2 latach prawie wszystko zostało naturalnie zapomniane. Polecam tym, którzy nie są zaznajomieni z uczeniem maszynowym i chcą dobrze zrozumieć podstawowe rzeczy, aby móc dalej działać.

Pierwszy bieg

Był już wrzesień i czas pomyśleć o rozmowie kwalifikacyjnej. Ponieważ aplikowanie przez tę stronę jest dość katastrofalne, zacząłem szukać znajomych, którzy pracują w Google. Wybór padł datacomboy, ponieważ był jedyną osobą, którą znałem bezpośrednio (nawet jeśli nie osobiście). Zgodził się przesłać moje CV i wkrótce otrzymałem list od rekrutera z propozycją zarezerwowania mu miejsca w kalendarzu na pierwszą rozmowę.Kilka dni później doszło do rozmowy telefonicznej. Próbowaliśmy komunikować się za pośrednictwem Hangouts, ale jakość była okropna, więc przeszliśmy na telefon. Najpierw szybko omówiliśmy standard jak, dlaczego i dlaczego, a następnie przeszliśmy do przeglądu technicznego. Składała się z kilkunastu pytań w duchu „jaka jest trudność wstawienia do mapy mieszającej”, „jakie znasz zrównoważone drzewa”. Nie jest to trudne, jeśli masz podstawową wiedzę na ten temat. Seans przebiegł pomyślnie i na podstawie jego wyników postanowiono zorganizować pierwszą od tygodnia rozmowę kwalifikacyjną.

Rozmowa odbyła się również za pośrednictwem Hangouts. Najpierw rozmawiali o mnie jakieś 5 minut, potem przeszli do problemu. Problem dotyczył wykresów. Szybko zdałem sobie sprawę, co należy zrobić, ale wybrałem zły algorytm. Kiedy zacząłem pisać kod, zdałem sobie z tego sprawę i przeszedłem na inną opcję, którą ukończyłem. Prowadzący wywiad zadał kilka pytań dotyczących złożoności algorytmu oraz zapytał, czy można to zrobić szybciej. Jakoś zgłupiałem i nie mogłem tego zrobić. W tym momencie czas minął i pożegnaliśmy się. Następnie, po około 10 minutach, dotarło do mnie, że zamiast algorytmu Dijkstry, którego używałem, w tym konkretnym zadaniu mógłbym zastosować przeszukiwanie wszerz i byłoby to szybsze. Po pewnym czasie zadzwonił rekruter i powiedział, że rozmowa wypadła ogólnie dobrze i należy zorganizować kolejną. Umówiliśmy się na kolejny tydzień.

Tym razem sytuacja się pogorszyła. O ile za pierwszym razem rozmówca był przyjacielski i towarzyski, o tyle tym razem był nieco ponury. Nie udało mi się od razu zorientować się w problemie, chociaż pomysły, które wpadły mi do głowy, w zasadzie mogły doprowadzić do jego rozwiązania. W końcu, po kilku podpowiedziach ze strony ankietera, przyszło mi do głowy rozwiązanie. Tym razem znów okazało się, że jest to przeszukanie wszerz, tylko z kilku punktów. Napisałem rozwiązania, spotkałem się z nimi na czas, ale zapomniałem o przypadkach Edge. Po pewnym czasie zadzwonił rekruter i powiedział, że tym razem ankieter był niezadowolony, bo jego zdaniem potrzebowałem za dużo podpowiedzi (3 lub 4 sztuki) i ciągle zmieniałem kod w trakcie pisania. Na podstawie wyników dwóch rozmów kwalifikacyjnych zdecydowano nie iść dalej, lecz przełożyć następną rozmowę o rok, jeśli sobie tego zażyczę. Dlatego się pożegnaliśmy.

Z tej historii wyciągnąłem kilka wniosków:

  • Teoria jest dobra, ale trzeba się w niej szybko poruszać
  • Teoria bez praktyki nie pomoże. Musimy rozwiązać problemy i doprowadzić kodowanie do automatyzacji.
  • Wiele zależy od rozmówcy. I nic na to nie można poradzić.

Przygotowania do drugiego biegu

Po przemyśleniu sytuacji zdecydowałem się spróbować ponownie za rok. I lekko zmodyfikowałem cel. Jeśli wcześniej głównym celem była nauka, a rozmowa kwalifikacyjna w Google była jak odległa marchewka, teraz celem było zdanie rozmowy kwalifikacyjnej, a środkiem była nauka.
Opracowano więc nowy plan, który obejmował następujące punkty:

  • Kontynuuj naukę teorii, czytając książki i artykuły.
  • Rozwiązywanie problemów algorytmicznych w ilości 500-1000 sztuk.
  • Kontynuuj naukę teorii, oglądając filmy.
  • Kontynuuj naukę teorii na kursach.
  • Zapoznaj się z doświadczeniami innych osób podczas rozmów kwalifikacyjnych w Google.

Plan zrealizowałem w ciągu roku. Następnie opiszę co dokładnie zrobiłem dla każdego z punktów.

Książki i artykuły

Nawet nie pamiętam, ile artykułów przeczytałem, czytałem je i po rosyjsku, i po angielsku. Prawdopodobnie najbardziej przydatna strona ten. Tutaj znajdziesz opis dużej liczby interesujących algorytmów wraz z przykładami kodu.

Przeczytałem 5 książek: Algorithms, wydanie 4 (Sedgewick, Wayne), Wprowadzenie do algorytmów, wydanie 3 (Cormen, Leiserson, Rivest, Stein), Wywiad z Cracking the Coding, wydanie 4 (Gayle Laakmann), Wywiady programistyczne Exposed, wydanie 2 (Mongan, Suojanen , Giguere), Wywiady dotyczące elementów programowania (Aziz, Lee, Prakash). Można je podzielić na 2 kategorie. Do pierwszej zaliczają się książki Sedgwicka i Cormana. To jest teoria. Reszta to przygotowanie do rozmowy kwalifikacyjnej. O tym samym Sedgwick opowiada w swojej książce i na swoich kursach. Tylko na piśmie. Uważne czytanie nie ma większego sensu, jeśli brałeś udział w kursie, ale i tak warto przejrzeć. Jeśli nie oglądałeś kursu, warto go przeczytać. Cormen wydał mi się zbyt nudny. Szczerze mówiąc, ciężko było mi to opanować. Po prostu to stamtąd zabrałem mistrzowska teoriaoraz kilka rzadko używanych struktur danych (sterta Fibonacciego, drzewo van Emde Boasa, sterta radix).

Aby przygotować się do rozmowy kwalifikacyjnej, warto przeczytać przynajmniej jedną książkę. Wszystkie są zbudowane w przybliżeniu na tej samej zasadzie. Opisują proces rozmowy kwalifikacyjnej w dużych firmach technologicznych, podają podstawowe rzeczy z informatyki, problemy do tych podstawowych rzeczy, rozwiązania problemów i analizę rozwiązań. Z trzech powyższych prawdopodobnie poleciłbym Cracking the Coding Interview jako główny, a pozostałe są opcjonalne.

Problemy algorytmiczne

To był chyba najciekawszy punkt przygotowań. Można oczywiście usiąść i głupio rozwiązać problemy. Istnieje wiele różnych witryn poświęconych temu tematowi. Używałem głównie trzech: Hackerrank, CodeChef и LeetKod. W CodeChef problemy są podzielone według trudności, ale nie według tematu. Na Hackerranku zarówno pod względem złożoności, jak i tematu.

Ale jak od razu się przekonałem, istnieje ciekawszy sposób. A są to konkursy (wyzwania programistyczne lub konkursy programistyczne). Wszystkie trzy witryny je udostępniają. To prawda, że ​​​​jest problem z LeetCode - niewygodna strefa czasowa. Dlatego nie uczestniczyłem w tej witrynie. Hackerrank i CodeChef zapewniają dość dużą liczbę różnych konkursów, trwających od 1 godziny do 10 dni. Różne formaty rządzą się różnymi zasadami, ale o tym moglibyśmy długo rozmawiać. Głównym powodem, dla którego konkursy są dobre, jest wprowadzenie elementu rywalizacji (i znowu tautologii) do procesu uczenia się.

W sumie wziąłem udział w 37 konkursach na Hackerranku. Spośród nich 32 dotyczyło ocen, a 5 było albo sponsorowanych (w jednym z nich dostałem nawet 25 dolarów), albo dla zabawy. W rankingach 10 razy byłem w top 4%, w top 11% 12 razy i w top 5% 25 razy. Najlepsze wyniki wyniosły 27/1459 w ciągu 3 godzin i 22/9721 w tygodniu.

Przerzuciłem się na CodeChef, kiedy Hackerrank zaczął rzadziej organizować konkursy. Łącznie udało mi się wystartować w 5 konkursach. Najlepszy wynik w dziesięciodniowym konkursie to 426/5019.

W sumie na konkursach i tak dalej rozwiązałem trochę ponad 1000 zadań, które mieszczą się w planie. Teraz niestety nie ma czasu wolnego na kontynuację działalności konkurencyjnej, tak samo jak nie ma celu, na który można by przeznaczyć wolny czas. Ale było fajnie. Osobom zainteresowanym radzę znaleźć osoby o podobnych poglądach. Razem czy w grupie jest o wiele ciekawiej. Bawiłem się tym z kolegą, więc może poszło dobrze.

Obejrzyj wideo

Po przeczytaniu książki Skieny zainteresowałem się tym, co robi. Podobnie jak Sedgwick jest profesorem uniwersyteckim. W związku z tym filmy z jego kursów można znaleźć w Internecie. Postanowiłem przejrzeć kurs COMP300E - Wyzwania programistyczne - 2009 HKUST. Nie mogę powiedzieć, że bardzo mi się podobało. Przede wszystkim jakość wideo nie jest zbyt dobra. Po drugie, nie próbowałem sam rozwiązywać problemów omawianych na kursie. Zaangażowanie nie było więc zbyt duże.
Ponadto, rozwiązując problemy, próbując znaleźć odpowiedni algorytm, natknąłem się na wideo Tushara Roya. Pracował w Amazonie, a obecnie pracuje w Apple. Jak się później przekonałem, tak było Kanał Youtube, gdzie zamieszcza analizę różnych algorytmów. W chwili pisania tego tekstu kanał zawiera 103 filmy. I muszę powiedzieć, że jego analiza została przeprowadzona bardzo dobrze. Próbowałem oglądać innych autorów, ale jakoś nie wyszło. Dlatego zdecydowanie mogę polecić ten kanał do oglądania.

Branie kursów

Nie zrobiłem tu nic specjalnego. Obejrzałem film od programisty Androida Nano Degree z firmy Google i wziąłem udział w kursie w ITMO Jak wygrać konkursy kodowania: Sekrety mistrzów. Nano Degree jest całkiem niezły, chociaż oczywiście nie dowiedziałem się z niego niczego nowego. Kurs z ITMO jest trochę wypaczony pod względem teoretycznym, ale problemy były ciekawe. Nie polecałbym od tego zaczynać, ale w zasadzie był to dobrze spędzony czas.

Ucz się na doświadczeniach innych ludzi

Oczywiście wiele osób próbowało dostać się do Google. Niektórzy weszli, niektórzy nie. Niektórzy pisali na ten temat artykuły. Z ciekawszych rzeczy zapewne wspomnę ten и ten. W pierwszym przypadku osoba przygotowała dla siebie listę tego, czego musi się nauczyć, aby zostać inżynierem oprogramowania i dostać się do Google. Ostatecznie trafił do Amazona, ale to już nie jest takie ważne. Drugi podręcznik został napisany przez inżynierkę Google, Larisę Agarkovą (Larrr). Oprócz tego dokumentu możesz także przeczytać jej blogu.

Warto czytać recenzje wywiadów na Glassdoor. Wszystkie są mniej więcej podobne, ale można uzyskać kilka przydatnych informacji.

Nie będę podawać linków do innych drobnych artykułów, bez problemu znajdziesz je w Google.

Drugi wpis

A teraz minął rok. Studiująco okazało się, że jest bardzo intensywne. Ale do nowej jesieni podszedłem ze znacznie głębszą wiedzą teoretyczną i rozwiniętymi umiejętnościami praktycznymi. Do końca roku przeznaczonego mi na przygotowania pozostało jeszcze kilka tygodni, gdy nagle na pocztę wpłynął list od rekrutera z Google, w którym zapytał mnie, czy nadal mam ochotę pracować w Google i czy chciałbym pracować w Google. Nie mam ochoty z nim rozmawiać. Naturalnie, nie przeszkadzało mi to. Umówiliśmy się, że zadzwonimy za tydzień. Poprosili mnie również o zaktualizowane CV, do którego dodałem krótki opis tego, co zrobiłem w ciągu roku w pracy i ogólnie.

Po rozmowie na całe życie zdecydowaliśmy, że za tydzień odbędzie się wywiad w Hangouts, tak jak w zeszłym roku. Minął tydzień, przyszedł czas na rozmowę kwalifikacyjną, ale osoba przeprowadzająca rozmowę nie pojawiła się. Minęło 10 minut, już zaczynałem się denerwować, gdy nagle ktoś wpadł na czat. Jak się okazało nieco później, mój rozmówca z jakiegoś powodu nie mógł się stawić i pilnie znaleziono dla niego zastępstwo. Osoba ta była nieco nieprzygotowana zarówno pod względem konfiguracji komputera, jak i prowadzenia wywiadu. Ale potem wszystko poszło dobrze. Szybko rozwiązałem problem, opisałem, gdzie możliwe są pułapki i jak można je obejść. Omówiliśmy kilka różnych wersji problemu i złożoności algorytmu. Potem rozmawialiśmy jeszcze 5 minut, inżynier opowiedział nam swoje wrażenia z pracy w Monachium (najwyraźniej nie znaleźli pilnego zastępstwa w Zurychu), po czym się rozstaliśmy.

Jeszcze tego samego dnia skontaktował się ze mną rekruter i powiedział, że rozmowa przebiegła pomyślnie i jest gotowy zaprosić mnie na rozmowę do biura. Następnego dnia zadzwoniliśmy przez Hangouts i omówiliśmy szczegóły. Ponieważ musiałem ubiegać się o wizę, postanowiliśmy umówić się na rozmowę za miesiąc.

Przygotowując dokumenty, jednocześnie omawiałam z rekruterem zbliżającą się rozmowę kwalifikacyjną. Standardowa rozmowa kwalifikacyjna w Google składa się z 4 wywiadów algorytmicznych i jednego wywiadu dotyczącego Projektowania Systemu. Ponieważ jednak starałem się o pracę jako programista Androida, powiedziano mi, że część rozmowy kwalifikacyjnej będzie dotyczyć konkretnie Androida. Nie mogłem wytrząsnąć z rekrutera, co dokładnie i jakie będą szczegóły. O ile rozumiem, wprowadzono to stosunkowo niedawno i on sam nie był zbyt świadomy. Zostałem także zapisany na dwa szkolenia: jak przejść rozmowę algorytmiczną i jak przejść rozmowę kwalifikacyjną z zakresu Projektowania Systemu. Sesje charakteryzowały się średnią przydatnością. Tam też nikt nie potrafił mi powiedzieć, o co proszą programistów Androida. Dlatego moje przygotowania na ten miesiąc sprowadzały się do:

  • Kupno tablicy markerowej i zapisanie na niej z pamięci 2-3 tuzinów najpopularniejszych algorytmów. Codziennie 3-5 sztuk. W sumie każdy był pisany kilka razy.
  • Odśwież pamięć różnych informacji na Androidzie, z których nie korzystasz na co dzień
  • Oglądam kilka filmów o Wielkiej Skali i tym podobnych

Jak już mówiłem, w tym samym czasie przygotowywałem dokumenty na wyjazd. Na początek poprosili mnie o informacje potrzebne do napisania zaproszenia. Następnie długo próbowałem dowiedzieć się, kto na Cyprze wydaje wizy do Szwajcarii, ponieważ ambasada szwajcarska się tym nie zajmuje. Jak się okazało, robi to konsulat austriacki. Zadzwoniłem i umówiłem się na spotkanie. Poprosili o mnóstwo dokumentów, ale nic szczególnie interesującego. Zdjęcie, paszport, zezwolenie na pobyt, kilka różnych zaświadczeń i oczywiście zaproszenie. Tymczasem list nie dotarł. Ostatecznie zdecydowałem się na zwykły wydruk i wyszło całkiem nieźle. Sam list dotarł 3 dni później, a cypryjski FedEx nie mógł znaleźć mojego adresu i musiałem sam go odebrać. W tym samym czasie otrzymałem paczkę z tego samego FedEx, której również nie mogli mi dostarczyć, ponieważ nie znaleźli adresu, a która leżała tam od czerwca (5 miesięcy, Karl). Ponieważ o tym nie wiedziałem, oczywiście nie zakładałem, że to mają. Wizę otrzymałem na czas, po czym zarezerwowali mi hotel i zaoferowali opcje przelotu. Dostosowałem opcje, aby było wygodniej. Nie było już bezpośrednich lotów, więc poleciałem tam przez Ateny i z powrotem przez Wiedeń.

Po załatwieniu wszystkich formalności związanych z wyjazdem minęło jeszcze kilka dni i faktycznie poleciałem do Zurychu. Dotarłem tam bez żadnych incydentów. Z lotniska do miasta pojechałem pociągiem - szybko i wygodnie. Po krótkim włóczeniu się po mieście znalazłem hotel i się zameldowałem. Ponieważ hotel był zarezerwowany bez jedzenia, zjadłem obiad obok i położyłem się spać, bo lot był rano, a ja już chciałem spać. Następnego dnia zjadłem śniadanie w hotelu (za dodatkowe pieniądze) i poszedłem do biura Google. Google ma kilka biur w Zurychu. Moja rozmowa kwalifikacyjna nie odbyła się w centralnym. I ogólnie biuro wyglądało dość zwyczajnie, więc nie miałam okazji przyjrzeć się wszystkim, co kryje się za „normalnym” biurem Google’a. Zarejestrowałem się u administratora i usiadłem, żeby poczekać. Po pewnym czasie wyszedł rekruter i przedstawił mi plan dnia, po czym zabrał mnie do sali, w której miały odbywać się rozmowy kwalifikacyjne. Właściwie plan obejmował 3 rozmowy kwalifikacyjne, lunch i jeszcze 2 rozmowy kwalifikacyjne.

Wywiad numer jeden

Pierwsza rozmowa odbyła się właśnie na Androidzie. I nie miało to w ogóle nic wspólnego z algorytmami. Jednak niespodzianka. No cóż, w ten sposób jest to jeszcze bardziej powszechne. Poproszono nas o wykonanie określonego komponentu interfejsu użytkownika. Najpierw rozmawialiśmy o tym, co i jak. Zaproponował rozwiązanie z wykorzystaniem RxJava, opisał co dokładnie by zrobił i dlaczego. Powiedzieli, że to na pewno dobrze, ale zróbmy to przy użyciu frameworku Android. A jednocześnie napiszemy kod na tablicy. I nie tylko komponent, ale całe działanie korzystające z tego komponentu. To jest to, na co nie byłem gotowy. Czym innym jest napisanie na tablicy algorytmu 30-50 linii, a czym innym pisanie makaronu z kodu Androida, nawet ze skrótami i komentarzami w duchu „no cóż, tego nie napiszę, bo to już oczywiste”. Rezultatem był swego rodzaju winegret na 3 deski. Te. Rozwiązałem problem, ale wyglądał głupio.

Wywiad numer dwa

Tym razem wywiad dotyczył algorytmów. I było dwóch ankieterów. Jeden z nich to rzeczywisty ankieter, a drugi to młody padawan (przeprowadzający wywiad w cieniu). Konieczne było wymyślenie struktury danych o określonych właściwościach. Najpierw jak zwykle omówiliśmy problem. Zadawałem różne pytania, ankieter odpowiadał. Po pewnym czasie poproszono ich o zapisanie na tablicy kilku metod wymyślonej konstrukcji. Tym razem mniej więcej udało mi się, choć z kilkoma drobnymi błędami, które poprawiłem za namową ankietera.

Wywiad numer trzy

Tym razem System Design, którym nagle okazał się także Android. Konieczne było opracowanie aplikacji z określoną funkcjonalnością. Omówiliśmy wymagania dotyczące aplikacji, serwera i protokołu komunikacyjnego. Następnie zacząłem opisywać jakich komponentów czy bibliotek będę używał przy budowaniu aplikacji. A potem, gdy wspomniałem o Harmonogramie zadań, pojawiło się pewne zamieszanie. Rzecz w tym, że nigdy z niego nie korzystałem w praktyce, gdyż w momencie jego wydania po prostu przerzuciłem się na aplikacje wspierające, w których nie było zadań do jego wykorzystania. Podobnie było przy opracowywaniu kolejnych. Oznacza to, że teoretycznie wiem, co to jest, kiedy i jak się go używa, ale nie mam doświadczenia w jego używaniu. I rozmówcy nie bardzo się to podobało. Potem poprosili mnie o napisanie kodu. Tak, podczas tworzenia aplikacji od razu trzeba napisać kod. Znowu kod Androida na płytce. Znowu zrobiło się strasznie.

Lunch

Miała przyjść kolejna osoba, ale nie przyszła. A Google popełnia błędy. W rezultacie poszedłem na lunch z poprzednią ankieterką, jej koleżanką, a nieco później dołączyła kolejna ankieterka. Obiad był całkiem przyzwoity. Ponownie, ponieważ nie jest to główne biuro w Zurychu, jadalnia wyglądała całkiem zwyczajnie, choć bardzo ładnie.

Wywiad numer cztery

Wreszcie algorytmy w najczystszej postaci. Pierwszy problem rozwiązałem dość szybko i od razu skutecznie, co prawda pominąłem jeden skrajny przypadek, ale za namową ankietera (podał ten właśnie skrajny przypadek) znalazłem problem i go poprawiłem. Oczywiście musiałem napisać kod na tablicy. Następnie postawiono podobne zadanie, ale trudniejsze. Do tego znalazłem kilka nieoptymalnych rozwiązań i prawie znalazłem optymalne, 5-10 minut nie wystarczyło na dokończenie myśli. No cóż, nie miałem czasu na napisanie kodu.

Wywiad numer pięć

I znowu wywiad na temat Androida. Zastanawiam się, dlaczego przez cały rok uczyłem się algorytmów?
Na początku było kilka prostych pytań. Następnie ankieter zapisał na tablicy kod i poprosił o znalezienie w nim problemów. Znalazłem, wyjaśniłem, naprawiłem. Omówiono. A potem zaczęły się nieoczekiwane pytania w duchu „co robi metoda Y w klasie X”, „co kryje się w metodzie Y”, „co robi klasa Z”. Oczywiście coś odpowiedziałem, ale potem powiedziałem, że nie spotkałem się z tym ostatnio w swojej pracy i oczywiście nie pamiętam już szczegółowo, kto i jak robi. Następnie prowadzący rozmowę zapytał, co teraz robię. I pytania dotyczyły tego tematu. Odpowiedziałem już tutaj znacznie lepiej.

Po zakończeniu ostatniej rozmowy kwalifikacyjnej odebrali mi przepustkę, życzyli powodzenia i odesłali w drogę. Pospacerowałem trochę po mieście, zjadłem obiad i pojechałem do hotelu, gdzie położyłem się spać, gdyż lot znów był wcześnie rano. Następnego dnia dotarłem bezpiecznie na Cypr. Na prośbę rekrutera napisałem informację zwrotną na temat rozmowy kwalifikacyjnej oraz wypełniłem formularz w specjalnym serwisie, aby zwrócić wydane pieniądze. Ze wszystkich wydatków Google bezpośrednio płaci tylko za bilety. Hotel, wyżywienie i podróże pokrywane są przez kandydata. Następnie wypełniamy formularz, dołączamy rachunki i wysyłamy do specjalnego urzędu. Przetwarzają to i dość szybko przelewają pieniądze na konto.

Opracowanie wyników rozmów kwalifikacyjnych zajęło półtora tygodnia. Po czym poinformowano mnie, że jestem „trochę poniżej poprzeczki”. To znaczy, trochę mi zabrakło. Mówiąc dokładniej, 2 rozmowy kwalifikacyjne przebiegły dobrze, 2 trochę niezbyt dobrze, a projektowanie systemu niezbyt dobrze. Teraz, gdyby przynajmniej 3 wypadły dobrze, to bylibyśmy w stanie powalczyć, inaczej nie ma szans. Zaproponowali, że przyjdą za rok.

Na początku oczywiście byłem zdenerwowany, bo w przygotowania włożono wiele wysiłku, a już w czasie rozmowy myślałem o opuszczeniu Cypru. Dołączenie do Google i przeprowadzka do Szwajcarii wydawała się świetną opcją.

wniosek

I tu dochodzimy do ostatniej części artykułu. Tak, dwukrotnie nie udało mi się przejść rozmowy kwalifikacyjnej w Google. To jest smutne. Pewnie byłoby ciekawie tam pracować. Można jednak spojrzeć na sprawę z drugiej strony.

  • W ciągu półtora roku nauczyłem się ogromnej ilości rzeczy związanych z tworzeniem oprogramowania.
  • Świetnie się bawiłem biorąc udział w konkursach programistycznych.
  • Pojechałem na kilka dni do Zurychu. Kiedy pojadę tam ponownie?
  • Miałem ciekawą rozmowę kwalifikacyjną w jednej z największych firm IT na świecie.

Zatem wszystko, co wydarzyło się w ciągu tych półtora roku, można po prostu uznać za szkolenie lub szkolenie. A rezultaty tego szkolenia dały o sobie znać. Mój pomysł wyjazdu z Cypru dojrzał (ze względów rodzinnych), pomyślnie przeszedłem kilka rozmów kwalifikacyjnych w innej znanej firmie i po 8 miesiącach przeprowadziłem się. Ale to zupełnie inna historia. Myślę jednak, że mimo wszystko powinienem podziękować Google'owi zarówno za półtora roku, nad którym sam pracowałem, jak i za 2 ciekawe dni w Zurychu.

Co mogę w końcu powiedzieć? Jeśli pracujesz w IT, przygotuj się na rozmowy kwalifikacyjne w Google (Amazon, Microsoft, Apple itp.). Być może pewnego dnia udasz się tam, aby się tam dostać. Nawet jeśli nie chcesz, wierz mi, takie przygotowanie nie pogorszy Cię. W chwili, gdy zorientujesz się, że możesz (choćby przy odrobinie szczęścia) dostać się na rozmowę kwalifikacyjną w jednej z tych firm, otworzy się przed Tobą o wiele więcej dróg niż przed rozpoczęciem przygotowań. A wszystko, czego potrzebujesz po drodze, to cel, wytrwałość i czas. Życzę Ci sukcesu :)

Źródło: www.habr.com

Dodaj komentarz