Cum să te pregătești pentru un interviu la Google și să nu-l treci. De două ori

Cum să te pregătești pentru un interviu la Google și să nu-l treci. De două ori

Titlul articolului sună ca un eșec epic, dar, de fapt, lucrurile nu sunt atât de clare. În general, această poveste s-a încheiat destul de pozitiv, chiar dacă nu la Google. Dar aceasta este o altă temă pentru un alt articol. În acest articol, voi vorbi despre trei lucruri: cum a decurs procesul meu de pregătire, cum s-au desfășurat interviurile la Google și de ce, din punctul meu de vedere, totul nu este atât de simplu pe cât ar părea.

Cum a început totul

Într-o seară rece de iarnă cipriotă, mi-a venit brusc în minte gândul că cunoștințele mele în știința informaticii sunt foarte departe de a fi medii, și că trebuie să fac ceva în legătură cu asta. Dacă cineva nu a citit de ce seara era cipriotă și rece, poate afla mai multe aici. După ce am reflectat, am decis să încep cu un curs online despre algoritmi și structuri de date. Am auzit de la un fost coleg despre cursul lui Robert Sedgewick de pe Coursera. Cursul este împărțit în două părți (partea 1 și partea 2). Dacă linkurile se schimbă, poți găsi mereu pe Google după numele autorului. Fiecare parte durează 6 săptămâni. La începutul săptămânii sunt prezentate lecții, iar în decursul săptămânii trebuie să finalizezi exerciții. Prima parte a cursului acoperă structuri de date de bază, principalele metode de sortare și complexitatea algoritmilor. A doua parte este deja mai avansată, începând cu grafuri și terminând cu lucruri cum ar fi programarea liniară și intractabilitatea. Gândindu-mă la toate acestea, am ajuns la concluzia că acesta este exact ceea ce am nevoie. Aici, de altfel, cititorul curioși ar putea întreba, ce legătură are asta cu Google. Și, într-adevăr, până în acel moment, Google nu avea legătură. Dar aveam nevoie de un obiectiv, deoarece să lucrez 12 săptămâni seara fără un scop era ceva mai complicat. Și care ar putea fi scopul cunoașterii de noi informații? Sigur, aplicarea lor în practică. În viața de zi cu zi, acest lucru este destul de complicat, dar la un interviu la o companie mare este foarte simplu. O simplă căutare pe Google a arătat că Google (îmi cer scuze pentru tautologie) este una dintre cele mai mari companii din Europa (iar eu mă gândeam exact la Europa) în care se desfășoară astfel de interviuri. De fapt, biroul lor se află la Zürich, Elveția. Așadar, decis: studiem și mergem la interviu la Google.

Pregătirea pentru prima încercare

12 săptămâni au trecut neobservate și am terminat ambele cursuri. Impresiile mele despre cursuri sunt mai mult decât pozitive și le pot recomanda tuturor interesat. Mi-au plăcut cursurile din următoarele motive:

  • Lectorul vorbește un engleză destul de clară
  • Materialul este bine structurat
  • Prezentări superbe, care arată interiorul fiecărui algoritm
  • Selecție corectă de material
  • Exerciții interesante
  • Exercițiile sunt verificate automat pe site, după care se generează un raport

De obicei, lucram la cursuri în felul următor. În 1-2 zile ascultam lecțiile. Apoi dădeam un test rapid pe cunoștințele acumulate. Restul săptămânii lucram la exercițiu în mai multe iterații. După prima primiam între 30% și 70%, următoarele le duceau la 97-100%. Exercițiul constă, de obicei, în implementarea unui algoritm, de exemplu Seam carving sau bzip.

După finalizarea cursurilor mi-am dat seama că multe cunoștințe aduc multe dureri. Dacă înainte știam doar că nu știu nimic, acum am început să conștientizez ce anume nu știu.

Deoarece era încă doar luna mai, iar interviul l-am programat pentru toamnă, am decis să continui educația mea. După ce am analizat cerințele postului, am decis să continui pe două direcții: să continui studierea algoritmilor și să urmez un curs de bază în învățarea automată. Pentru prima țintă am decis să fac tranziția de la cursuri la carte și am ales opera monumentală a lui Steven Skiena "Algoritmi. Ghid de dezvoltare" (The Algorithm Design Manual). Nu e la fel de monumental ca al lui Knuth, dar totuși. Pentru a doua țintă, m-am întors pe Coursera și m-am înscris la cursul lui Andrew Ng Machine Learning.

Au trecut încă 3 luni și am terminat cursul și cartea.

Să începem cu cartea. Lectura s-a dovedit a fi destul de interesantă, deși nu tocmai simplă. În principiu, aș recomanda cartea, dar nu așa, dintr-o dată. Per ansamblu, cartea oferă o analiză mai profundă a ceea ce am învățat în cursuri. În plus, am descoperit (dintr-o perspectivă formală) concepte precum euristica și programarea dinamică. E clar că le-am folosit anterior, dar nu știam cum se numesc. De asemenea, cartea conține o serie de povești din viața autorului (War Story), care adaugă un strop de culoare narativului academic. A doua jumătate a cărții poate fi sărită, deoarece se concentrează mai degrabă pe descrierea problemelor existente și a metodelor de soluționare. Este utilă dacă este aplicată regulat în practică, altfel se va uita rapid.

Cursul m-a impresionat foarte mult. Autorul știe clar ce face și povestește într-un mod interesant. În plus, am reținut o parte considerabilă, și anume algebra liniară și bazele rețelelor neuronale, încă din facultate, astfel că nu am întâmpinat dificultăți. Structura cursului este destul de standard. Cursul este împărțit pe săptămâni. În fiecare săptămână, mai întâi au loc prelegeri intercalate cu teste scurte. După prelegeri se dă o sarcină, care trebuie finalizată, trimisă și va fi verificată automat. Pe scurt, lista temelor predate în cadrul cursului este următoarea:
— funcția de cost
— regresia liniară
— coborârea gradientului
— scalarea caracteristicilor
— ecuația normală
— regresia logistică
— clasificarea multiclasă (unu vs toate)
— rețele neuronale
— propagarea inversă
— regularizare
— bias/varianță
— curbe de învățare
— metrice de eroare (precizie, revenire, F1)
— Mașini cu vectori de suport (clasificare cu marjă mare)
— K-means
— Analiza componentelor principale
— detectarea anomaliilor
— filtrare colaborativă (sistem de recomandare)
— coborârea gradientului stochastic, mini-batch, batch
— învățare online
— map reduce
— analiza plafonului
După terminarea cursului, înțelegerea tuturor acestor subiecte a fost prezentă. După 2 ani, aproape totul s-a uitat natural. Recomand celor care nu sunt familiarizați cu învățarea automată și doresc să obțină o bună înțelegere a conceptelor de bază pentru a avansa.

Prima încercare

Era deja septembrie și a venit timpul să mă gândesc la interviu. Deoarece a aplica prin intermediul site-ului era un lucru destul de riscant, am început să caut cunoscuți care lucrează la Google. Am ales datacompboy, deoarece el a fost singurul pe care l-am cunoscut personal (chiar dacă nu direct). A fost de acord să-mi transmită CV-ul, iar în curând am primit un mesaj de la recrutor, care mi-a oferit să rezerv un slot în calendarul său pentru prima conversație. După câteva zile, ne-am auzit. Am încercat să comunicăm prin Hangouts, dar calitatea a fost îngrozitoare, așa că ne-am mutat pe telefon. La început, am discutat rapid despre întrebările standard de tipul cum, de ce și pentru ce, iar apoi am trecut la screening-ul tehnic. Acesta a constat în zeci de întrebări de tipul „care este complexitatea inserării într-un hash map”, „ce tipuri de arbori echilibrați cunoști”. Nu este greu, dacă ai cunoștințe de bază despre aceste lucruri. Screening-ul a decurs bine și, în urma acestuia, am decis să organizăm primul interviu în aproximativ o săptămână.

Interviul a avut loc tot prin Hangouts. La început, am discutat câteva minute despre mine, apoi am trecut la problemă. Problema a fost legată de grafuri. Am înțeles rapid ce trebuie să fac, dar am ales un algoritm greșit. Când am început să scriu codul, mi-am dat seama de asta și m-am schimbat pe o altă variantă, pe care am finalizat-o. Intervievatorul a pus câteva întrebări despre complexitatea algoritmului și a întrebat dacă se poate face mai repede. Cumva, m-am blocat și nu am reușit. Asta a fost, iar timpul a expirat și ne-am despărțit. După aproximativ 10 minute, mi-am dat seama că, în loc de algoritmul lui Dijkstra pe care l-am folosit, în această problemă s-ar fi putut folosi căutarea în lățime, ceea ce ar fi fost mai rapid. După o vreme, recrutorul m-a sunat și mi-a spus că interviul, în general, a decurs bine și că ar fi bine să organizăm unul nou. Ne-am înțeles pentru încă unul în aproximativ o săptămână.

De data aceasta, lucrurile au mers mai prost. Dacă prima dată intervievatorul a fost prietenos și comunicativ, de această dată a fost oarecum sumbru. Problema nu am reușit să o înțeleg imediat, deși ideile pe care le-am avut ar fi putut conduce în principiu la o soluție. În cele din urmă, după câteva sugestii din partea intervievatorului, am ajuns la o soluție. De data aceasta, a fost din nou vorba de o căutare în lățime, doar că din mai multe puncte. Am scris soluția, m-am încadrat în timp, dar am uitat de cazurile limită. După un timp, m-a sunat recrutorul și m-a informat că de data aceasta intervievatorul a rămas nemulțumit, deoarece, în opinia sa, am avut nevoie de prea multe sugestii (3 sau 4) și am modificat constant codul în timpul scrierii. Ca urmare a celor două interviuri, s-a luat decizia de a nu continua și de a amâna următorul interviu pentru un an, dacă voi avea dorința. Aici ne-am și despărțit.

Din această poveste, am tras câteva concluzii:

  • Teoria este bună, dar trebuie să te descurci rapid în ea.
  • Teoria fără practică nu ajută. Trebuie să rezolvi probleme și să duci scrierea codului la automatism.
  • Multe depind de intervievator. Și cu asta nu se poate face nimic.

Pregătirea pentru a doua încercare

Reflectând asupra situației, am decis să încerc din nou peste un an. Și am ajustat ușor obiectivul. Dacă mai devreme obiectivul principal era studiul, iar interviul la Google ca o morcovă îndepărtată, acum susținerea interviului era scopul, iar studiul era un mijloc.
Așadar, a fost elaborat un nou plan, care includea următoarele puncte:

  • Continuați să studiați teoria citind cărți și articole.
  • Soluționați sarcini algoritmice în număr de 500-1000 de piese.
  • Continuați să studiați teoria vizionând videoclipuri.
  • Continuați să studiați teoria prin cursuri.
  • Studiați experiența altor oameni în susținerea interviurilor la Google.

Planul a fost realizat de mine în decursul unui an. Mai departe, voi descrie ce am făcut exact pentru fiecare dintre puncte.

Cărți și articole

Numărul de articole citite nu îmi amintesc nici acum, le-am citit atât în rusă, cât și în engleză. Cel mai util site a fost, probabil, acesta. Aici este adunată descrierea unui număr mare de algoritmi interesanți, cu exemple de cod.

Am citit 5 cărți: Algorithms, ediția a 4-a (Sedgewick, Wayne), Introduction to Algorithms, ediția a 3-a (Cormen, Leiserson, Rivest, Stein), Cracking the Coding Interview, ediția a 4-a (Gayle Laakmann), Programming Interviews Exposed, ediția a 2-a (Mongan, Suojanen, Giguere), Elements of Programming Interviews (Aziz, Lee, Prakash). Acestea pot fi împărțite în 2 categorii. În prima intră cărțile lui Sedgewick și Cormen. Acestea sunt teoretice. Celelalte sunt pentru pregătirea interviului. Sedgewick explică în carte ceea ce predă și în cursurile sale. Doar că este în format scris. Nu are prea mult sens să citești cu atenție dacă ai urmat cursul, dar merită să dai o privire. Dacă nu ai urmărit cursul, atunci are sens să o citești. Mie Cormen mi s-a părut prea plictisitor. Am învins, sincer spus, cu greu. Am reținut doar teorema stăpânului, da și câteva structuri de date mai puțin folosite (Fibonacci heap, van Emde Boas tree, radix heap).

Merită să citești cel puțin o carte pentru pregătirea interviului. Toate sunt construite după un principiu similar. Descriu procesul interviului în mari companii de tehnologie, oferă concepte de bază din Computer Science, probleme legate de aceste concepte de bază, soluții pentru probleme și analiza soluțiilor. Dintre cele trei menționate, probabil aș recomanda Cracking the Coding Interview ca fiind principală, iar celelalte după dorință.

Probleme algoritmice

Acesta a fost probabil cel mai interesant aspect al pregătirii. Poate, desigur, să stai și să rezolvi problemele în mod brut. Există multe site-uri pentru asta. Eu am folosit în principal trei: Hackerrank, CodeChef și LeetCode. Pe CodeChef problemele sunt clasificate după dificultate, dar nu și după teme. Pe Hackerrank sunt clasificate atât după dificultate, cât și după teme.

Dar, așa cum am descoperit imediat pentru mine, există o modalitate mai interesantă. Și aceasta este competiția (programming challenges sau programming contests). Toate cele trei site-uri oferă așa ceva. Totuși, cu LeetCode există o problemă - fusul orar inconfortabil. De aceea nu am participat pe acest site. Hackerrank și CodeChef oferă o varietate destul de mare de competiții, cu o durată de la 1 oră până la 10 zile. Diferitele formate au reguli diferite, dar asta ar putea fi o discuție lungă. Esența principală, de ce competițiile sunt bune, este introducerea unui element competițional (și din nou tautologie) în procesul de învățare.

În total, am participat la 37 de competiții pe Hackerrank. Dintre acestea, 32 au fost competiții cu rating, iar 5 au fost sponsorizate (am câștigat chiar 25$ în una dintre ele) sau doar pentru distracție. În competițiile cu rating, am intrat de 10 ori în top 4%, de 11 ori în top 12% și de 5 ori în top 25%. Cele mai bune rezultate au fost 27/1459 în cadrul unei competiții de 3 ore și 22/9721 în cadrul unei competiții săptămânale.

Am trecut pe CodeChef atunci când competițiile pe Hackerrank au devenit mai rare. În total, am reușit să particip la 5 competiții. Cel mai bun rezultat a fost 426/5019 în cadrul unei competiții de zece zile.

În total, la competiții și doar așa, am reușit să rezolv puțin peste 1000 de probleme, ceea ce se încadra în planul meu. Acum, din păcate, nu am timp liber pentru a continua activitatea de competiție, la fel cum nu am un obiectiv sub care să pot încadra timpul meu ocupat. Dar a fost distractiv. Recomand celor care sunt interesați să găsească alte persoane cu aceleași pasiuni. Împreună sau în grup este mult mai interesant. Eu m-am distrat cu un prieten, așa că poate de aceea a și mers atât de bine.

Redare video

După ce am citit cartea lui Skiena, m-am interesat de domeniul în care activează. Ca și Sedgwick, el este profesor la universitate. Din acest motiv, pe internet se pot găsi înregistrări video ale cursurilor sale. Am decis să vizionez cursul COMP300E — Provocări de programare — 2009 HKUST. Nu pot spune că mi-a plăcut foarte mult. Pe de o parte, calitatea video nu era foarte bună. Pe de altă parte, nu am încercat să rezolv singur problemele discutate în cadrul cursului. Așa că implicarea mea a fost destul de scăzută.
De asemenea, în procesul de rezolvare a problemelor, încercând să găsesc algoritmul corect, am dat peste videoclipurile lui Tushar Roy. El a lucrat la Amazon și acum lucrează la Apple. Așa cum am aflat mai târziu, el are canalul de YouTube, unde postează analize ale diferitelor algoritmi. La momentul scrierii acestui articol, canalul conținea 103 videoclipuri. Și trebuie să spun că analiza realizată de el este foarte bine făcută. Am încercat să mă uit la alți autori, dar nu mi-au plăcut. Așa că, acest canal îl recomand cu certitudine pentru vizionare.

Participarea la cursuri

În acest domeniu nu am făcut nimic deosebit. Am vizionat videoclipuri din Android Developer Nanodegree de la Google și am urmat un curs de la ITMO Cum să câștigi competiții de programare: secretele campionilor. Nanodegree este destul de bun, deși, evident, nu am învățat nimic nou de acolo. Cursul de la ITMO are puțin o teorie îngrămădită, dar cerințele au fost interesante. Nu aș recomanda să înceapă cu acesta, dar, în principiu, timpul petrecut nu a fost irosit.

Aproape toate acestea sunt pentru a învăța din experiența altora.

Desigur, mulți oameni au încercat să ajungă la Google. Unii au reușit, alții nu. Unii au scris articole despre asta. Din lucrurile interesante aș sublinia aceasta și aceasta. În primul caz, persoana și-a pregătit o listă cu ceea ce trebuie să învețe pentru a deveni Software Engineer și a ajunge la Google. Până la urmă, a ajuns la Amazon, dar asta nu mai contează atât de mult. Al doilea manual este scris de inginerul Google, Larisa Agarova (Larrr). Pe lângă acest document, poți citi și blogul ei.

Are sens să citești recenziile despre interviuri pe Glassdoor. Toate sunt mai mult sau mai puțin asemănătoare, dar poți extrage informații utile.

Nu voi face referiri la alte articole mai mici, le puteți găsi singuri pe Google.

Al doilea încercare

Și iată că a trecut un an. A fost un an plin în ceea ce privește studiul. Dar cu noua toamnă mă pregăteam cu cunoștințe teoretice mult mai profunde și abilități practice bine exersate. Cu câteva săptămâni înainte de termenul stabilit pentru pregătire, am primit un e-mail de la un recrutor de la Google, în care mă întreba dacă mai am dorința de a lucra la Google și dacă sunt de acord să discut cu el. Evident, am fost de acord. Ne-am înțeles să ne auzim prin telefon peste o săptămână. De asemenea, mi-au solicitat un CV actualizat, la care am adăugat un scurt rezumat al realizărilor mele din anul respectiv la locul de muncă.

După discuția despre viață, am decis că peste o săptămână va avea loc un interviu pe Hangouts, ca și anul trecut. A trecut săptămâna, a venit timpul interviului, dar intervievatorul nu a apărut. A trecut 10 minute, deja începeam să mă neliniștesc, când dintr-o dată cineva a intrat în chat. Așa cum am aflat mai târziu, intervievatorul meu, dintr-un motiv oarecare, nu a putut să apară și i-au găsit rapid un înlocuitor. Persoana nu era foarte pregătită nici în ceea ce privește configurarea computerului, nici în ceea ce privește conducerea interviului. Dar apoi totul a decurs bine. Am rezolvat rapid problema, am explicat unde pot apărea capcane și cum le pot ocoli. Am discutat despre diferite variante ale problemei și complexitatea algoritmului. Apoi am mai vorbit timp de 5 minute, inginerul a împărtășit impresiile lui despre munca în München (pare-se că în Zurich nu au găsit urgent un înlocuitor), și asta a fost.

În aceeași zi, m-a contactat un recrutor care mi-a spus că interviul a decurs excelent și că sunt pregătiți să mă invite la un interviu la birou. A doua zi ne-am auzit prin Hangouts și am discutat detalii. Deoarece trebuia să îmi fac viză, am decis să programăm interviul peste o lună.

În timp ce pregăteam documentele, discutam cu recrutorul despre interviul care urma. Interviul standard la Google constă din 4 întrebări algoritmice și un System Design. Totuși, având în vedere că mă angajam ca dezvoltator Android, mi s-a spus că o parte din interviu va fi specifică Android. Care vor fi exact și în ce va consta specificitatea, nu am reușit să scot din recrutor. Din câte am înțeles, aceasta a fost introdusă relativ recent și el însuși nu era foarte la curent. Am fost, de asemenea, programat pentru două sesiuni de antrenament: cum să trec interviul algoritmic și cum să trec interviul System Design. Sesiunile au fost de utilitate medie. Nici acolo nimeni nu a putut să-mi explice ce întrebări primesc dezvoltatorii Android. Așadar, pregătirea mea în această lună s-a rezumat la următoarele:

  • Cumpărarea unui tablou alb și scrierea din memorie a 2-3 zeci dintre cele mai populare algoritmi. Câte 3-5 pe zi. În total, fiecare a fost scris de mai multe ori.
  • Reîmprospătarea memoriei cu diverse informații despre Android pe care nu le folosesc în fiecare zi.
  • Vizionarea unor videoclipuri despre Big Scale și tot așa.

Așa cum am menționat, în paralel am pregătit documentele pentru călătorie. La început, m-au întrebat datele necesare pentru a face o scrisoare de invitație. Apoi am încercat mult timp să aflu cine face vize pentru Elveția pe cipru, deoarece ambasada elvețiană nu se ocupă de asta. Așa am descoperit că consulatul Austriac se ocupă de aceste vize. Am sunat și m-am programat pentru o întâlnire. Acolo au cerut o grămadă de documente, dar nimic prea interesant. Fotografie, pașaport, permis de ședere, o mulțime de adeverințe și, bineînțeles, scrisoarea de invitație. Între timp, scrisoarea nu a sosit. În cele din urmă, am mers cu o simplă printare și a funcționat perfect. Scrisoarea a venit abia după vreo 3 zile, iar FedEx-ul cipriot nu a reușit să îmi găsească adresa, așa că a trebuit să mă duc să o iau personal. În aceeași vizită, am primit tot la FedEx un colet pe care nu au reușit să mi-l livreze, deoarece nu mi-au găsit adresa, și care a stat acolo din iunie (5 luni, Carl). Deoarece nu aveam cunoștință de el, nu am anticipat că îl au. Am obținut viza la timp, după care mi-au rezervat hotelul și mi-au propus opțiuni de zbor. Am ajustat opțiunile pentru a fi mai convenabil. Zboruri directe nu mai erau, așa că am zburat acolo prin Atena, iar întoarcerea am făcut-o prin Viena.

După ce toate formalitățile pentru călătorie au fost rezolvate, au trecut câteva zile, iar eu am plecat efectiv spre Zurich. Am ajuns fără aventuri. De la aeroport până în oraș am luat trenul — rapid și convenabil. După ce m-am rătăcit puțin prin oraș, am găsit hotelul și m-am cazat. Deoarece hotelul era rezervat fără masă, am luat cina în apropiere și am adormit, fiindcă zborul era dimineața și deja mă simțeam obosit. A doua zi, am luat micul dejun la hotel (contra cost) și m-am îndreptat spre biroul Google. În Zurich, Google are câteva birouri. Interviul meu nu era la cel central. De fapt, biroul arăta destul de obișnuit, astfel că nu am avut ocazia să văd toate avantajele unui „birou normal” Google. M-am înregistrat la administrator și am așteptat. După un timp, a ieșit un recrutor și mi-a explicat planul zilei, după care m-a dus în camera unde urmau să se desfășoare interviurile. În plan erau 3 interviuri, prânzul și încă 2 interviuri.

Interviul numărul unu

Primul interviu a fost pe Android. Și, din păcate, nu a avut deloc legătură cu algoritmii. O surpriză, totuși. Dar hai să trecem peste, așa e mai obișnuit. Mi s-a cerut să realizez un anumit component UI. Mai întâi am discutat despre ce și cum. Am propus o soluție folosind RxJava, descriind ce anume și de ce aș face. Mi s-a spus că este bine, dar să facem cu instrumentele framework-ului Android. Și să scriem codul pe tablă. De fapt, nu doar componenta, ci întreaga activitate care folosește acest component. La așa ceva nu am fost pregătit. E o treabă să scrii pe tablă un algoritm de 30-50 de linii, iar alta să scrii cod Android, chiar și cu scurtături și comentarii de genul „ei bine, asta nu o voi scrie, că e evident”. A ieșit un fel de salată pe 3 table. Adică, am rezolvat sarcina, dar a arătat ciudat.

Interviul numărul doi

De data aceasta interviul a fost despre algoritmi. Și au fost doi intervievatori. Unul era, de fapt, intervievatorul, iar celălalt era un tânăr padawan (intervievator ascuns). Trebuia să inventez o structură de date cu anumite proprietăți. La început, ca de obicei, am discutat problema. Am pus diferite întrebări, intervievatorul a răspuns. După un timp, mi s-a cerut să scriu câteva metode ale structurii inventate pe tablă. De data aceasta, mai mult sau mai puțin, am reușit, chiar dacă cu câteva greșeli mici pe care le-am corectat cu ajutorul intervievatorului.

Interviul numărul trei

De data aceasta a fost un Design de Sistem, care dintr-o dată s-a dovedit a fi și Android. Trebuia să dezvolt o aplicație cu anumite funcționalități. Am discutat cerințele pentru aplicație, pentru server, pentru protocolul de comunicare. Apoi am început să descriu ce componente sau biblioteci aș folosi pentru construirea aplicației. Apoi, când a fost menționat Job Scheduler, am avut o mică blocare. Ideea este că nu l-am folosit niciodată în practică, pentru că în momentul în care a apărut, m-am mutat pe suportul aplicațiilor unde nu erau sarcini pentru utilizarea lui. La dezvoltarea ulterioare a fost la fel. Adică, știu teoretic ce e și cum se aplică, dar nu am experiență în aplicare. Și se pare că asta nu i-a plăcut foarte mult intervievatorului. Apoi mi s-a cerut să scriu cod. Da, la dezvoltarea aplicației trebuie să scrii direct cod. Din nou, cod Android pe tablă. A ieșit iar ciudat.

Prânz

Ar fi trebuit să vină o altă persoană, dar nu a venit. Chiar și Google mai greșește uneori. În final, am ieșit la prânz cu intervievatorul anterior, colegul ei, și puțin mai târziu s-a alăturat următorul intervievator. Prânzul a fost destul de decent. Din nou, având în vedere că nu era sediul principal din Zurich, cantina arăta destul de obișnuită, deși foarte plăcută.

Interviul numărul patru

În sfârșit, algoritmi în formă pură. Prima problemă am rezolvat-o destul de repede și eficient, deși am greșit cu un caz limită, dar cu ajutorul intervievatorului (el a oferit acest caz limită) am găsit problema și am corectat-o. Normal, trebuia să scriu codul pe tablă. Apoi mi s-a dat o problemă similară, dar mai complexă. Pentru aceasta am găsit câteva soluții neoptimizate și aproape am găsit soluția optimă, nu mi-au fost suficiente 5-10 minute pentru a finaliza gândirea. Și nu am reușit să scriu codul pentru aceasta.

Interviul numărul cinci

Și din nou interviu pe Android. Mă întreb de ce am studiat algoritmii toată anul?
La început au fost câteva întrebări simple. Apoi intervievatorul a scris pe tablă un cod și m-a rugat să găsesc problemele din el. Am găsit, am explicat, am corectat. Am discutat. Apoi au început câteva întrebări neașteptate, de genul „ce face metoda Y în clasa X?”, „ce se află în interiorul metodei Y?”, „ce face clasa Z?”. La ceva am răspuns, dar apoi am spus că în ultima vreme nu m-am confruntat cu asta și, prin urmare, nu-mi amintesc detaliile despre cine, ce și cum face. După aceasta, intervievatorul m-a întrebat ce fac acum. Și întrebările au continuat în acea direcție. Aici am răspuns mult mai bine.

După ce am terminat ultimul interviu, mi-au luat badge-ul, mi-au urat noroc și m-au trimis acasă. Am făcut o plimbare prin oraș, am luat cina și m-am dus la hotel, unde am căzut în somn, deoarece zborul a fost din nou devreme dimineața. A doua zi am ajuns cu bine în Cipru. La cererea recrutorului, am scris un feedback despre interviu și am completat un formular într-un serviciu special pentru a returna banii cheltuiți. Din toate cheltuielile, Google plătește direct doar biletele. Hotelul, mesele și transportul sunt plătite de candidat. Apoi completăm formularul, atașăm chitanțele și le trimitem la o companie specială. Aceștia le procesează și transferă destul de repede banii în cont.

A durat o lună și jumătate pentru a procesa rezultatele interviului. După care mi s-a comunicat că am fost «puțin sub standard». Asta înseamnă că am fost puțin sub așteptări. Mai exact, 2 interviuri au mers bine, 2 nu foarte bine, iar System Design a mers foarte prost. Dacă măcar 3 dintre ele ar fi mers bine, aș fi avut șanse, dar acum nu am nicio șansă. Mi s-a sugerat să încerc din nou peste un an.

La început, desigur, m-am simțit dezamăgit, deoarece am investit multe eforturi în pregătire, iar în momentul interviului aveam deja în minte gândul de a părăsi Cipru. Să mă angajez la Google și să mă mut în Elveția părea o opțiune excelentă.

Concluzie

Și aici ajungem la partea finală a articolului. Da, nu am trecut de două ori interviul la Google. Este trist. Probabil ar fi fost interesant să lucrez acolo. Dar se poate privi și din altă perspectivă.

  • În unsprezece luni am învățat o mulțime de lucruri legate de dezvoltarea software-ului.
  • Am avut o mare plăcere participând la competiții de programare.
  • Am fost pentru câteva zile la Zurich. Când voi mai ajunge acolo?
  • Am avut o experiență interesantă de interviu la una dintre cele mai mari companii IT din lume.

Astfel, tot ce s-a întâmplat în aceste unsprezece luni poate fi considerat o formare sau un antrenament. Și rezultatele acestui antrenament s-au făcut simțite. Gândul meu de a părăsi Cipru s-a maturizat (din anumite motive familiale), am trecut cu succes prin câteva interviuri la o altă companie cunoscută și după 8 luni m-am mutat. Dar aceasta este o poveste complet diferită. Totuși, cred că ar trebui să îi mulțumesc lui Google atât pentru acești unsprezece luni în care m-am dezvoltat, cât și pentru cele 2 zile interesante în Zurich.

Ce pot spune la final. Dacă lucrați în IT, pregătiți-vă pentru interviurile la Google (Amazon, Microsoft, Apple etc.). Poate că, cândva, veți reuși să ajungeți acolo. Chiar dacă nu doriți, să știți că o astfel de pregătire nu vă va face rău. În momentul în care veți înțelege că puteți (chiar și doar printr-un concurs favorabil de împrejurări) să treceți de interviul la una dintre aceste companii, vor apărea mult mai multe oportunități decât înainte de a începe pregătirea. Tot ce aveți nevoie pe acest drum este un scop, perseverență și timp. Vă doresc succes 🙂

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster