Hogyan készüljünk a Google interjúra, és ne menjünk át rajta. Kétszer

Hogyan készüljünk a Google interjúra, és ne menjünk át rajta. Kétszer

A cikk címe epic failként hangzik, de valójában nem ilyen egyértelmű a helyzet. Összességében ez a történet pozitívan zárult, bár nem a Google számára. De ez már egy másik cikk témája. Ebben a cikkben három dologról fogok beszélni: hogyan zajlott a felkészülési folyamatom, hogyan zajlottak a Google-beli interjúk, és hogy miért gondolom, hogy minden nem olyan egyértelmű, mint amilyennek tűnik.

Hogyan kezdődött az egész

Egy hideg ciprusi téli estén hirtelen megfogalmazódott bennem a gondolat, hogy a klasszikus számítástechnikában szerzett ismereteim messze elmaradnak a közepestől, és ezzel valamit kezdeni kellene. Ha valaki még nem olvasta, miért hideg és téli Cipruson, arról itt lehet tájékozódni. itt. Néhány gondolkodás után arra döntöttem, hogy először egy online kurzust kell elvégeznem az algoritmusokról és az adatszerkezetekről. Egy volt kollégámtól hallottam Robert Sedgewick kurzusáról a Courserán. A kurzus két részből áll (1. rész és 2. rész). Ha esetleg a linkek megváltoznának, mindig rá lehet keresni a szerző nevére. Mindkét rész 6 hétig tart. A hét elején előadások kerülnek bemutatásra, a hét folyamán pedig gyakorlati feladatokat kell megoldani. Az első rész a főbb adatszerkezeteket, a legfontosabb rendezési módszereket és az algoritmusok bonyolultságát fedi le. A második rész már fejlettebb, gráfokkal kezdődik, és olyan témákkal zárul, mint a-lineáris programozás és az intractability. Mindezt mérlegelve arra a következtetésre jutottam, hogy ez pontosan az, amire szükségem van. Itt egyébként a kíváncsi olvasó megkérdezheti, hogy vajon miért fontos itt a Google. Valójában eddig nem volt jelentős szerepe. De szükségem volt egy célra, hiszen 12 hét esténként, cél nélkül kicsit nehézkes. Milyen cél lehet az új ismeretek megszerzésében? Természetesen a gyakorlatba ültetésük. A mindennapi életben ez elég problémás, de egy nagyobb cég interjújában könnyen megvalósítható. Egy gyors google keresés megmutatta, hogy a Google (elnézést a tautológiáért) az egyik legnagyobb cég Európában (mivel én pontosan Európát néztem) ahol ilyen interjúkat tartanak. A központjuk Zürichben, Svájcban található. Így eldöntöttem - tanulunk és megyünk interjúzni a Google-ba.

Felkészülés az első próbálkozásra

12 hét észrevétlenül eltelt, és befejeztem mindkét kurzust. A kurzusokról alkotott benyomásaim több mint pozitívak, és mindenkinek ajánlom őket, akit érdekel. A kurzusok tetszésének okai a következők:

  • Az előadó érthetően beszél angolul.
  • Az anyag jól strukturált.
  • Gyönyörű prezentációk, amelyek bemutatják minden algoritmus belső működését.
  • Jól megválasztott anyag.
  • Érdekes feladatok.
  • A feladatokat automatikusan ellenőrzik az oldalon, majd készül egy jelentés.

A kurzusok elvégzése általában így zajlott nálam. 1-2 nap alatt meghallgattam az előadásokat. Ezután egy gyors tesztet tettem az anyag ismeretéből. A hét hátralévő részében többször is elvégeztem a feladatot. Az első alkalommal 30-70%-ot kaptam, a következő alkalmak már 97-100%-ra javították az eredményt. A feladat általában egy algoritmus megvalósítására vonatkozott, például: Seam carving vagy bzip.

A kurzusok befejezése után rájöttem, hogy sok tudás sok bánattal jár. Ha korábban csak azt tudtam, hogy semmit sem tudok, most már kezdtem tisztában lenni azzal, hogy pontosan mit nem tudok.

Mivel még csak május volt, és az interjút őszre terveztem, úgy döntöttem, hogy folytatom a tanulmányaimat. Az álláshirdetés követelményeinek áttekintése után úgy döntöttem, hogy párhuzamosan két irányban haladok: folytatom az algoritmusok tanulmányozását és elvégzek egy alap kurzust a gépi tanulásról. Az első célra úgy döntöttem, hogy a kurzusok helyett egy könyvbe kezdek, és kiválasztottam Steven Skiena monumentális munkáját, az „Algoritmusok. Fejlesztési útmutató” című könyvet. Nem olyan monumentális, mint Knuth műve, de mégis. A második célomhoz ismét a Coursera-ra mentem, és jelentkeztem Andrew Ng kurzusára. Machine Learning.

Még 3 hónap eltelt, és befejeztem a kurzust és a könyvet.

Kezdjük a könyvvel. Az olvasás elég érdekesnek bizonyult, bár nem volt egyszerű. Tulajdonképpen ajánlanám a könyvet, de nem azonnal. Összességében a könyv mélyebb elemzést nyújt arról, amit a kurzusokon tanultam. Ezen kívül felfedeztem (formális szempontból) olyan dolgokat, mint a heurisztikák és a dinamikai programozás. Természetesen korábban már használtam őket, de hogy mi a nevük, azt nem tudtam. A könyvben található néhány anekdota az szerző életéből (War Story), amelyek kissé feloldják az előadás akadémikus jellegét. A könyv második felét egyébként érdemes kihagyni, ott inkább a meglévő problémák és megoldási módszerek leírása zajlik. Hasznos, ha rendszeresen alkalmazzák a gyakorlatban, különben azonnal elfelejti az ember.

A kurzus több mint elégedettséggel töltött el. A szerző nyilvánvalóan tudja, miről beszél, és érdekes módon magyaráz. Ráadásul a kurzus jelentős részét, nevezetesen a lineáris algebrát és a neurális hálózatok alapjait még az egyetemen tanultam, ezért nem voltak különösebb nehézségeim. A kurzus struktúrája elég standard. A kurzus hetekre van bontva. Minden héten először előadások következnek rövid tesztekkel keverve. Az előadások után egy feladatot adnak, amelyet el kell készíteni, elküldeni, és automatikusan ellenőrzik. Röviden a kurzuson tanított anyag a következő:
— költségfüggvény
— lineáris regresszió
— gradiens csökkenés
— jellemzők skálázása
— normál egyenlet
— logisztikus regresszió
— többosztályos klasszifikáció (egy a sok ellen)
— neurális hálózatok
— hátrameneti terjedés
— regularizáció
— torzítás/variancia
— tanulási görbék
— hiba metrikák (pontosság, visszahívás, F1)
— Támogató Vektor Gépek (nagy margós klasszifikáció)
— K-means
— Főkomponens-analízis
— anomáliák észlelése
— kollaboratív szűrés (ajánlórendszer)
— stokasztikus, mini-tét és tét gradiens csökkenések
— online tanulás
— map reduce
— ceiling elemzés
A kurzus elvégzése után minden témában volt megértésem. Két év múlva azonban már szinte mindent természetesen elfelejtettünk. Ajánlom azoknak, akik nem ismerik a gépi tanulást, és szeretnék megérteni az alapvető dolgokat, hogy tovább tudjanak lépni.

Első próbálkozás

Már szeptember volt, és elérkezett az idő, hogy elgondolkodjak az interjún. Mivel a weboldalon való pályázás meglehetősen nehézkes, az ismerősök keresésével kezdtem, akik a Google-nál dolgoznak. A választásom datacompboy, mert ő volt az egyetlen, akit közvetlenül ismertem (bár nem személyesen). Beleegyezett, hogy továbbítja az önéletrajzomat, és nemsokára kaptam egy levelet a toborzótól, amelyben arra kértek, hogy foglaljak egy időpontot a naptárában az első beszélgetéshez. Pár nap múlva megtörtént a hívás. Próbáltunk a Hangouts-on keresztül kommunikálni, de a minőség borzasztó volt, így telefonra váltottunk. Először gyorsan átbeszéltük az alapvető kérdéseket, hogy miért is csinálom ezt, majd áttértünk a technikai szűrésre. Ez egy tucat kérdésből állt, mint például „milyen nehézség van a hash map-be való beszúrásnál” és „milyen kiegyensúlyozott fákat ismersz”. Nem nehéz, ha van alapvető tudásunk ezekről a dolgokról. A szűrés jól sikerült, és az eredmények alapján úgy döntöttünk, hogy szervezünk egy első interjút egy héten belül.

Az interjú ismét Hangouts-on történt. Először öt percig beszélgettünk rólam, majd áttértünk a feladatra. A feladat grafokkal kapcsolatos volt. Gyorsan rájöttem, hogy mit kellene tenni, de nem a megfelelő algoritmust választottam. Amikor elkezdtem írni a kódot, ráébredtem erre, és áttértem egy másik megoldásra, amit be is fejeztem. Az interjúztató néhány kérdést tett fel az algoritmus bonyolultságáról, megkérdezte, hogy lehetne-e gyorsabb. Valahogy elakadtam és nem tudtam válaszolni. Ekkor lejárt az idő, és elköszöntünk. Néhány perc múlva azonban rájöttem, hogy a Dijkstra-algoritmus helyett, amelyet használtam, ebben a konkrét feladatban szélességi keresést is alkalmazhattam volna, és az gyorsabb lett volna. Rövid idő múlva a toborzó felhívott, és elmondta, hogy az interjú összességében jól sikerült, és szükség lenne egy másikra. Megállapodtunk, hogy még egy hét múlva találkozunk.

Ezúttal rosszabbul alakultak a dolgok. Míg az első interjún a vállalkozó barátságos és szószátyár volt, ezúttal valami komorabb. Az első feladatot nem tudtam azonnal megoldani, bár az általam felvetett ötletek alapvetően elvezethettek volna a megoldáshoz. Végül, miután pár tippet kaptam az interjútól, megértettem a megoldást. Ezúttal újra a széles keresés volt a megoldás, csak több pontból. Megírtam a megoldást, időben végeztem, de elfelejtettem figyelembe venni a határeseteket. Egy idő után felhívott a toborzó, és közölte, hogy ezúttal az interjúzó elégedetlen volt, mivel szerinte túl sok tippet kértem (3 vagy 4 darab), és folyamatosan módosítottam a kódot írás közben. A két interjú eredményeként úgy döntöttek, hogy nem folytatjuk, hanem elhalasztjuk a következő interjút egy évre, ha lesz rá igényem. Így búcsúztunk el.

Ebből a történetből néhány következtetést vontam le:

  • A teoria jó, de gyorsan kell benne tájékozódni.
  • A teoria gyakorlás nélkül nem segít. Feladatokat kell megoldani és a kódot automatikussá kell tenni.
  • Sok minden függ az interjúzótól. Ezen nem lehet változtatni.

A második nekifutásra való felkészülés

A helyzet átgondolása után úgy döntöttem, hogy egy év múlva megpróbálom még egyszer. Kicsit módosítottam a célt. Ha korábban a fő célom a tanulás volt, és az interjú a Google-nál olyan távoli répa, most az interjú teljesítése volt a cél, és a tanulás volt az eszköz.
Tehát egy új tervet dolgoztunk ki, amely a következő pontokat tartalmazta:

  • Folytatni a teoria tanulmányozását könyvek és cikkek olvasásával.
  • Megoldani algoritmikus feladatokat 500-1000 darab mennyiségben.
  • Folytatni a teoria tanulmányozását videók nézésével.
  • Folytatni a teoria tanulmányozását kurzusok révén.
  • Megismerni más emberek tapasztalatait a Google-nál történt interjúkról.

A tervet egy év alatt valósítottam meg. A következőkben leírom, hogy mit pontosan tettem minden egyes ponthoz.

Könyvek és cikkek

A már elolvasott cikkek számát már nem is tudom, hiszen olvastam őket oroszul és angolul is. A leghasznosabb oldal valószínűleg ez: ez itt. Itt sok érdekes algoritmus leírását találhatjuk kódkészletekkel.

Öt könyvet olvastam el: Algorithms, 4th edition (Sedgewick, Wayne), Introduction to Algorithms 3rd Edition (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview 4th edition (Gayle Laakmann), Programming Interviews Exposed 2nd edition (Mongan, Suojanen, Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Ezeket két kategóriába lehet sorolni. Az elsőbe Sedgewick és Cormen könyvei kerülnek. Ezek elméleti művek. A többi könyv pedig az interjúra való felkészülést szolgálja. Sedgewick a könyvében körülbelül ugyanazt mutatja be, mint ami a kurzusaiban is van. Csak írásos formában. Nincs különösebb értelme figyelmesen olvasni, ha részt vettél a kurzuson, de érdemes rápillantani. Ha viszont nem nézted meg a kurzust, akkor érdemes elolvasni. Cormen számomra kissé unalmasnak tűnt. Őszintén szólva nehezen átvészeltem. Csak annyit tudtam megérteni belőle, hogy master theorem, valamint néhány ritkábban használt adatszerkezetet (Fibonacci heap, van Emde Boas fa, radix heap).

Legalább egy könyvet érdemes elolvasni az interjúra való felkészüléshez. Mindegyik hasonló elveken alapul. Leírják az interjú folyamatát a nagy technológiai vállalatoknál, alapvető dolgokat mutatnak be a számítástechnika terén, feladványokat az alapvető dolgokra, megoldásokat a feladványokhoz és a megoldások elemzését. A három említett közül valószínűleg a Cracking the Coding Interview-t ajánlanám fő könyvnek, a többiek pedig igény szerint.

Algoritmikus feladatok

Talán ez volt a legérdekesebb része a felkészülésnek. Persze le lehet ülni és csak simán megoldani a feladatokat. Erre sokféle weboldal áll rendelkezésre. Én főleg hármat használtam: Hackerrank, CodeChef és LeetCode. A CodeChefen a feladatokat nehézség szerint csoportosították, de témák szerint nem. A Hackerrank viszont mind nehézség, mind téma szerint csoportosítja azokat.

De ahogy azonnal rájöttem, van egy érdekesebb módszer is. Ez pedig a versenyek (programming challenges vagy programming contests). Mindhárom weboldal kínál ilyeneket. A LeetCode esetében viszont van egy probléma – nem praktikus az időzónája. Ezért azon a weboldalon nem vettem részt. A Hackerrank és a CodeChef elég sokféle versenyt kínál, amelyek hossza 1 órától 10 napig terjedhet. Különböző formátumúak, és eltérő szabályokkal rendelkeznek, de erről tovább is lehetne beszélni. A legfőbb lényeg, amiért a versenyek jók, az a versenyszellemet (és ismét um déjà vu) hoznak az oktatás folyamatába.

Összesen 37 versenyen vettem részt a Hackerrankon. Ezekből 32 rangsorolt, míg 5 vagy szponzorált (még 25 dollárt is kaptam az egyikből) vagy szórakozásból volt. A rangsorolt versenyekben 10 alkalommal a legjobb 4%-ba, 11 alkalommal a legjobb 12%-ba és 5 alkalommal a legjobb 25%-ba kerültem be. A legjobb eredményeim 27/1459 a 3 órás versenyen és 22/9721 a heti versenyen voltak.

A CodeChef-re akkor váltottam, amikor a Hackerrankon egyre ritkábban rendeztek versenyeket. Összesen 5 versenyen sikerült részt vennem. A legjobb eredményem 426/5019 volt egy tíznapos versenyen.

Összesen, versenyeken és csak úgy, több mint 1000 feladatot oldottam meg, ami belefért a tervembe. Jelenleg sajnos nincs szabad időm a versenyszerű tevékenység folytatására, és célom sincs, ami alá be tudnám számítani az időmet. De nagyon szórakoztató volt. Ajánlom azoknak, akik érdeklődnek ez iránt, hogy találjanak társakat. Ketten vagy egy csoportban sokkal érdekesebb. Én egy barátommal szórakoztam ezzel, így talán ezért is alakult jól.

Videó megtekintés

Miután elolvastam Szkjéna könyvét, alapvetően érdekelt az, amit csinál. Ahogy Szedzsvik, ő is professzor az egyetemen. Ennek megfelelően az interneten videofelvételeket találhatunk az előadásairól. Úgy döntöttem, hogy megnézem a kurzust COMP300E — Programozási kihívások — 2009 HKUST. Nem mondanám, hogy nagyon élveztem. Először is, a videó minősége nem túl jó. Másodszor, nem próbáltam meg önállóan megoldani a kurzus keretein belül tárgyalt feladatokat. Tehát az elkötelezettségem nem volt túl magas.
A feladatok megoldása során, próbálva megtalálni a helyes algoritmust, a Tushar Roy videóira is rátaláltam. Ő az Amazonnál dolgozott, most pedig az Apple-nél. Ahogy később rájöttem, van egy YouTube csatornája, ahol különböző algoritmusok elemzését teszi közzé. A cikk írásának pillanatában a csatorna 103 videót tartalmaz. És el kell mondanom, hogy az elemzést nagyon jól végzi. Próbáltam más szerzők videóit is nézni, de valahogy nem ragadott meg. Így ezt a csatornát határozottan ajánlom megtekintésre.

Kurzusok elvégzése

Itt túl sok mindent nem csináltam. Megnéztem a Google Android Developer Nanodegree videóit, és elvégeztem az ITMO kurzusát Hogyan nyerjük meg a kódolási versenyeket: A bajnokok titkai. A Nanodegree egészen jó, bár természetesen semmi újat nem tanultam belőle. Az ITMO kurzus elmélete kissé összecsapottnak tűnt, de a feladatok érdekesek voltak. Nem ajánlanám a kezdéshez, de alapvetően nem volt pocsékba vesztegetett idő.

Más emberek tapasztalatának megismerése

Természetesen sokan megpróbáltak bejutni a Google-ba. Valaki sikerült, valaki nem. Egyesek cikkeket írtak erről. Az érdekes dolgok közül talán kiemelném ezt és ezt. Az első esetben az illető készített egy listát arról, hogy mit kell megtanulnia ahhoz, hogy Software Engineer legyen, és bejusson a Google-ba. Végül az Amazonhoz került, de ez már nem olyan fontos. A második útmutatót egy Google mérnök, Larisa Agarova írta (Larrr). Ezen dokumentum mellett érdemes elolvasni a blogját.

Érdemes elolvasni az interjúkkal kapcsolatos véleményeket a Glassdoor-on. Mindegyik nagyjából hasonló, de hasznos információt kaphatunk belőlük.

Nem hozok fel linkeket más kisebb cikkekre, ezeket ti is remekül meg tudjátok találni a Google-ban.

Második kör

És íme, eltelt egy év. Nagyon tartalmas volt az oktatás szempontjából. De az új őszre sokkal mélyebb elméleti tudással és gyakorolt gyakorlati készségekkel közeledtem. Mielőtt lejárt volna a felkészülésre szánt időm, még hetek voltak hátra, amikor hirtelen érkezett egy email a Google-tól, amelyben megkérdezték, hogy még mindig szeretnék-e ott dolgozni, és nem bánnám-e, ha beszélgetnénk. Természetesen nem bánom. Megállapodtunk, hogy egy hét múlva felhívjuk egymást. Kérték az önéletrajzomat is, amelyhez hozzáfűztem egy rövid leírást arról, mit csináltam az év során a munkában és egyáltalán.

Miután beszélgettünk az életemről, úgy döntöttünk, hogy egy hét múlva lesz egy Hangouts interjú, minden úgy, mint tavaly. Egy hét eltelt, elérkezett az interjú ideje, de az interjúztató nem jelent meg. Tíz perc telt el, és már kezdtem idegeskedni, amikor hirtelen valaki belépett a csevegésbe. Kiderült, hogy az interjúztató valamiért nem tudott megjelenni, és sürgősen találtak egy helyettesítőt. A személy nem volt teljesen felkészülve sem a számítógép beállítása, sem az interjú lebonyolítása szempontjából. De utána minden jól ment. A feladatot gyorsan megoldottam, kifejtettem, hol lehetnek buktatók és hogyan lehet őket elkerülni. Megbeszéltünk különböző lehetőségeket a feladatra, az algoritmus nehézségére. Ezután még öt percet beszélgettünk, az mérnök elmondta a müncheni munkájának tapasztalatait (Zürichben valószínűleg nem találtak sürgős helyettesítést), majd ott elköszöntünk.

Ugyanezen a napon felvette velem a kapcsolatot egy toborzó, aki közölte, hogy a interjú remekül sikerült, és készen állnak meghívni az irodába. Másnap a Hangouts-on beszélgettünk, és megvitattuk a részleteket. Mivel vízumot kellett kérnem, úgy döntöttünk, hogy egy hónap múlva ütemezzük az interjút.

Miközben készítettem a dokumentumokat, a toborzóval párhuzamosan megbeszéltem a közelgő interjút. A Google standard interjúja 4 algoritmusos tesztből és egy rendszertervezésből áll. De mivel Android fejlesztőnek jelentkeztem, azt mondták, hogy az interjú egy része az Androidspecifikus lesz. Hogy pontosan mik lesznek és mi a specifika, azt a toborzóból nem tudtam kihozni. Ahogy megértettem, ezt viszonylag nem rég vezették be, és ő sem volt teljesen tisztában vele. Emellett kétszeres gyakorló ülésekre is beírtak: az algoritmusos interjú lebonyolítására és a rendszertervezési interjú lebonyolítására. Az ülések közepes hasznosságúak voltak. Ott sem tudott senki elmondani, hogy mit kérdeznek az Android fejlesztőktől. Ezért az én felkészülésem erre a hónapra a következőre korlátozódott:

  • Tábla vásárlására és 2-3 tucat a legnépszerűbb algoritmus megírására emlékezetből. Naponta 3-5 algoritmus. Összességében mindegyiket többször is írtam.
  • A különböző Android információk felfrissítésére, amelyeket nem használok minden nap.
  • Néhány videó megtekintésére a Big Scale-ről és ehhez hasonlókról.

Ahogy már mondtam, párhuzamosan elkészítettem az utazáshoz szükséges dokumentumokat. Először is, kértek tőlem adatokat az értesítési levél megírásához. Aztán sokáig próbáltam kideríteni, ki készít vízumokat Svájcba Cipruson, mivel a svájci nagykövetség ezzel nem foglalkozik. Kiderült, hogy ezt az osztrák konzulátus végzi. Felhívtam őket és időpontot kértem. Ott egy csomó dokumentumot kértek, de semmi különöset. Fénykép, útlevél, tartózkodási engedély, rengeteg különböző igazolás és természetesen az értesítési levél. Közben az értesítési levél viszont nem érkezett meg. Végül egy sima kinyomtatott változattal mentem, és ez teljesen bevált. Maga a levél még három nap után érkezett meg, és a ciprusi FedEx nem tudta megtalálni a címemet, ezért magamnak kellett érte menni. Egyúttal megkaptam egy másik csomagot is a FedEx-nél, amelyet ők sem tudtak nekem kézbesíteni, mert nem találták a címet, és ami június óta (öt hónapja, Karl) ott várakozott. Mivel nem tudtam róla, természetesen nem is feltételeztem, hogy náluk van. Az vízumot időben megkaptam, ezt követően lefoglalták nekem a szállodát, és javasolták a repülési lehetőségeket. A lehetőségeket átkonfiguráltam, hogy kényelmesebb legyen. Közvetlen járatok már nem voltak, végül Athénon keresztül repültem oda, és Bécsen keresztül vissza.

Miután minden utazással kapcsolatos formai ügyintézés rendeződött, eltelt még néhány nap, és elindultam Zürichbe. Kaland nélkül érkeztem meg. A repülőtérről vonattal mentem a városba — gyors és kényelmes. Kicsit eltévedve a városban megtaláltam a szállodát és bejelentkeztem. Mivel a szállás nem tartalmazott étkezést, vacsoráztam a közelben, majd aludni mentem, mivel a járatom reggel indult, és már aludni akartam. Másnap reggel a szállodában reggeliztem (külön díj ellenében), majd a Google irodájába indultam. Zürichben a Google-nak több irodája is van. Az interjúm nem a központi irodában zajlott. Egyébként az iroda elég átlagosan nézett ki, így nem volt lehetőségem megtekinteni a „normális” Google-iroda összes extráját. Bejelentkeztem az administratornál és várakozni kezdtem. Néhány idő elteltével megjelent a toborzó, elmondta a napi tervet, majd elvezetett a szobába, ahol az interjúknak kellett zajlania. A tervben három interjú, ebéd és még két interjú szerepelt.

Első interjú

Az első interjú éppen az Androidról szólt. Aztán teljesen eltért az algoritmusoktól. Meglepetés, mindenesetre. De rendben van, így talán még szokványosabb. Kértek, hogy készítsek egy meghatározott UI komponenst. Először megbeszéltük, hogy mit és hogyan. Javasoltam, hogy az RxJava segítségével oldom meg, elmondtam, hogy mit és miért csinálnék. Azt mondták, hogy ez persze jó, de inkább használjuk az Android keretrendszer eszközeit. Ráadásul írjunk kódot a táblára. Nem csak a komponensről, hanem az egész Activityről, ami ezt a komponenst használja. Erre nem voltam felkészülve. Egy dolog a táblán írni egy 30-50 soros algoritmust, és egy másik dolog az Android kódot írni, még ha rövidítésekkel és olyan megjegyzésekkel is, mint „na, ezt nem írom, mert úgyis nyilvánvaló”. Egyfajta vinigret lett belőle három táblán. Tehát a feladatot megoldottam, de így elég furán nézett ki.

Második interjú

Ez alkalommal az algoritmusokról volt szó. Két interjúztató volt. Az egyik tényleg az interjúztató, a másik egy fiatal tanítvány (shadow interviewer). Kitalálni egy adatstruktúrát meghatározott tulajdonságokkal. Először, mint általában, megbeszéltük a problémát. Különböző kérdéseket tettem fel, az interjúztató válaszolt. Egy idő után kértek, hogy írjak néhány metódust a kitalált struktúráról a táblára. Ez alkalommal valahogy sikerült, bár pár apró hibával, amelyeket az interjúztató javaslata alapján javítottam.

Harmadik interjú

Ez alkalommal a System Designról volt szó, ami váratlanul szintén Android lett. Egy alkalmazást kellett kifejleszteni meghatározott funkciókkal. Megbeszéltük az alkalmazásra, a szerverre, és a kommunikációs protokollra vonatkozó követelményeket. Ezután elkezdtem leírni, milyen komponenseket vagy könyvtárakat használnék az alkalmazás létrehozása során. A Job Scheduler említésekor viszont egy kis akadozás következett be. Az a helyzet, hogy sosem használtam ezt a gyakorlatban, mivel amikor megjelent, éppen az alkalmazások támogatására álltam át, ahol nem voltak feladatok a felhasználására. A későbbi fejlesztések során is ugyanez volt a helyzet. Tehát elméletben tudom, mi ez, mikor és hogyan alkalmazzák, de a használatban nincs tapasztalatom. Ez látszólag nem tetszett az interjúztatónak. Aztán kértek, hogy írjak kódot. Igen, az alkalmazás fejlesztése közben azonnal kódot kell írni. Megint csak Android kódot a táblára. Ismét csúnyán sikerült.

Ebéd

Egy másik embernek kellett volna érkeznie, de nem jött el. A Google-nál is előfordulnak hibák. Végül a korábbi interjúztatónővel és a kollégájával mentem ebédelni, majd később csatlakozott a következő interjúztató. Az ebéd egészen kellemes volt. Ismét, mivel ez nem a főiroda Zürichben, az étkező meglehetősen átlagosnak tűnt, azonban nagyon kellemes volt.

Negyedik interjú

Végre tiszta algoritmusok. Az első feladatot viszonylag gyorsan és hatékonyan megoldottam, igaz, egy határhelyzetet elszalasztottam, de az interjúztató segítségével (ő adta meg ezt a határhelyzetet) megtaláltam a problémát és kijavítottam. Persze a kódot a táblán kellett írni. Ezután egy hasonló, de nehezebb feladatot kaptam. Ehhez találtam pár nem optimális megoldást, és majdnem megtaláltam az optimálisat, de 5-10 perc hiányzott ahhoz, hogy végigvigyem a gondolatot. A kódot már nem tudtam megírni hozzá.

Ötödik interjú

Ismét Android interjú. Érdekes, miért tanultam az algoritmusokat egész évben?
Először volt néhány egyszerű kérdés. Aztán az interjúztató írt a táblára egy kódot, és megkérdezte, hogy találok-e benne hibákat. Megtaláltam, elmagyaráztam, kijavítottam. Megbeszéltük. Aztán pedig elkezdődtek a váratlan kérdések, mint például „miért csinálja az X osztály az Y módszer”, „mi van belül az Y módszerben”, „miért csinálja a Z osztály”. Néhányra természetesen válaszoltam, de aztán elmondtam, hogy az utóbbi időben a munkám során nem találkoztam ezzel, így nem emlékszem pontosan, ki, mit és hogyan csinál a részletekben. Ezt követően az interjúztató érdeklődött, hogy mit csinálok most. A kérdések ebben a témában folytatódtak. Ekkor már sokkal jobban válaszoltam.

Miután befejeztem az utolsó interjút, visszaadták a belépőmet, sok szerencsét kívántak, és elküldtek. Kicsit sétáltam a városban, vacsoráztam, majd a szállodába mentem, ahol aztán aludni tértem, mivel a járatom reggel megint korán indult. Másnap sikeresen eljutottam Ciprusra. A toborzó kérésére visszajelzést írtam az interjúról, és kitöltöttem egy speciális szolgáltatás formanyomtatványát a költségek visszatérítésére. Minden költség közül a Google csak a repülőjegyeket fizeti közvetlenül. A szállodát, az étkezést és az utazást a pályázónak kell kifizetnie. Ezután kitöltjük a formanyomtatványt, csatoljuk a bizonylatokat, és elküldjük egy külön irodának. Ők ezt feldolgozzák, és elég gyorsan átutalják a pénzt a számlára.

Másfél hétbe telt, hogy feldolgozzák az interjúk eredményeit. Aztán értesítettek, hogy „kicsit a mérce alatt” teljesítettem. Vagyis nem voltam elég jó. Konkrétan, 2 interjú jól sikerült, 2 nem annyira, a System Design pedig nagyon nem sikerült. Ha legalább 3 jól sikerült volna, akkor talán lenne esélyem, de így esélytelen. Azt javasolták, hogy egy év múlva próbálkozzak újra.

Eleinte persze csalódott voltam, mivel sok energiát fektettem a felkészülésbe, és az interjú időpontjára már éretlen volt a gondolat, hogy elhagyjam Ciprust. A Google-nál való elhelyezkedés és Svájcba költözés remek lehetőségnek tűnt.

Zárás

És itt elérkeztünk a cikk végéhez. Igen, kétszer nem mentem át a Google interjúján. Ez szomorú. Valószínűleg érdekes lenne ott dolgozni. De a dolgot egy másik szögből is meg lehet nézni.

  • Másfél év alatt hatalmas mennyiségű dolgot tanultam meg a szoftverfejlesztésről.
  • Nagy örömmel vettem részt programozási versenyeken.
  • Elutaztam pár napra Zürichbe. Mikor jutok oda legközelebb?
  • Érdekes tapasztalatot szereztem egy a világ legnagyobb IT vállalata egyik interjúján.

Így tehát az elmúlt másfél év mindent csak tanulásnak, vagy edzésnek tekinthető. És ennek az edzésnek meg is lett az eredménye. A gondolatom, hogy elhagyjam Ciprust, megfogalmazódott (néhány családi okból), sikeresen átmentem több interjún egy másik neves cégnél, és 8 hónap múlva költöztem. De ez már egy teljesen másik történet. Mindazonáltal azt gondolom, hogy a Google-nak meg kellene köszönnöm ezeket a másfél évet, amelyeket önfejlesztéssel töltöttem, és a 2 érdekes napot Zürichben.

Mit mondhatnék végül? Ha az IT világában dolgozol, készülj fel a Google (Amazon, Microsoft, Apple stb.) interjújára. Talán egyszer csak bejutsz. Még ha nem is akarsz, hidd el, ez a felkészülés nem fog ártani. Abban a pillanatban, amikor megérted, hogy képes vagy (legalábbis a kedvező körülmények között) átmenni az egyik ilyen cég interjúján, sokkal több út nyílik meg előtted, mint a felkészülésed előtt. És minden, amire szükséged lesz az úton, az a cél, a kitartás és az idő. Sok sikert kívánok 🙂

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster