Kā jau rakstīju twitterī, 2013. gada novembra beigās saņēmu piedāvājumu no Google pievienoties viņu inženieru komandai. Piedāvājuma (LinkedIn) vēstulē tika minēts, ka ar Google Translate tika izlasīts mans blogs (pievērsiet uzmanību tam, ko rakstat sociālajos tīklos un blogos!), un mana pieredze ir viņus ieinteresējusi. Nodomāju, kādēļ gan nepaskatīties, kā atlases process notiek vienā no lielākajiem IT uzņēmumiem pasaulē.

Pēc manas apstiprinošās atbildes saņēmu zvanu no Google HR cilvēka, kas apjautājas par manu izglītību un pieredzi, kā arī uzdeva jautājumu, kāds ir Quicksort algoritma veiktspēja un sliktākais gadījums big O notācijā (šis, manuprāt, būtu jāzina katram IT speciālistam). Pēc sarunas saņēmu apstiprinājumu, ka esmu derīgs pirmajai reālajai intervijai. Saņēmu arī e-pasta vēstuli ar kaudzi materiāliem, kas būtu jāiemācās. Kādam varētu šķist noderīgs šis bloga raksts par pieredzi ar Google, kā arī šī grāmata par programmēšanas intervijām, bet Google kandidātiem obligāti ir jānoskatās sekojošais video:

Decembra sākumā notika pirmā intervija, kurā Google Docs failā, komunicējot caur telefonu, man tika uzdoti uzdevumi. Tā kā C++ esmu programmējis lielāko daļu no savas dzīves, tad sekojošos uzdevumus izvēlējos risināt tieši šajā valodā.

  1. Pirmais uzdevums: tiek dots saraksts ar skaitļiem, man jāuzraksta algoritms, kas izveido jaunu sarakstu, kurā katrs skaitlis ir tikai vienu reizi. Tika prasīts mana risinājuma ātrums un iespējamās optimizācijas.
  2. Otrais uzdevums: tiek dota ciparu virkne, kurā katrs cipars apzīmē ciparu skaitlī. Jāuzraksta funkcija, kas saskaita divas virknes. Piemēram 1, 2, 0 (simts) + 2, 9, 0 = 4, 1, 0. Šim uzdevumam tika prasīts izdomāt dažādus testa piemērus, kā jau minēts iepriekšējā video, tad izdomāt labus testa piemērus ir ļoti svarīgi.

Ar abiem uzdevumiem tiku galā ļoti veiksmīgi un izlaižot nākošo kārtu uzreiz saņēmu piedāvājumu ciemoties viņu birojā. Tā kā decembris bija pilns ar brīvdienām, bet janvāra sākumā ir mana dzimšanas diena, tad sarunājām braucienu organizēt janvāra beigās.

Decembra beigās, lai nepazaudētu kontaktu ar mani, viņi izdomāja uzrīkot vēl vienu tehnisko interviju. Šoreiz man tika dota simbolu virkne, kurā katrs simbols ir skaitlis vai arī jautājuma zīme. Mans uzdevums bija izveidot algoritmu, kas izdrukā visas iespējamās ciparu kombinācijas, kas varētu sanākt no dotās virknes. Piemēram, ja tiktu dots “0??1”, tad man būtu jāizdrukā “0001”, “0011”, “0101” un “1111”. Atgādināšu, ka visa programmēšana notiek Google Doc dokumentā un pārbaudīt pareizrakstību var tikai ar acīm. Cik noprotu, tad viņi pievērš uzmanību arī kļūdām.

Saņēmu kārtejo zvanu un kaudzi ar e-pasta vēstulēm no Google, ka intervija arī bijusi ļoti laba, taču es biju pārcenties un izmantojis pārāk daudz C valodas (pointeri, struktūras) un praktiski nemaz neizmantoju C++. Turpmākajā sarakstē vienojāmies par valsti, uz kuru vēlos doties uz klātienes interviju. Viņi ieteica braukt uz Minheni vai Cīrihi. Tā kā uz Cīrihi sanāk lidot ar pārsēšanos, kā arī Šveice īsti nav tā vieta, kur sapņoju aizbraukt, tad vienojāmies par lidojumu uz Minheni. Atgādināšu, ka Minhenē tiek izstrādāts Google V8 JavaScript dzinis. Caur e-pastiem sakārtojām lidmašīnas biļetes un rezervējām viesnīcu. Sāku gatavoties smagajam interviju procesam Google birojā – 5 intervijām visas dienas garumā. Pirms braukšana izpētīju, kur īsti man ir jāiet, interesanti, ka Google Street View viņu biroja ēka ir aizkrāsota.

Screen Shot 2014-01-31 at 03.02.00

19. janvārī iesēdos lidmašīnā un aizlidoju uz Minheni. Gan turpceļā, gan atpakaļ man vienīgajam lidmašīnā blakus bija brīva vieta (laikam tas tā tika pasūtīts), kā arī viesnīcā tika rezervēta divvietīga istaba. Man pat paveicās un sanāca lidot vienā lidmašīnā ar Ušakovu un Kabanovu (interesanti, ko šie darīja Vācijā). Vācijā esmu bijis vairākos reģionos, un šī zeme man likās ļoti tīra, taču Minhenē biju pārsteigts, ka ielas bija nomētātas ar cigarešu izsmēķiem un citiem gružiem (iespējams, palicis pēc brīvdienu ballītēm).

IMG_5678

Nākošajā dienā ierados Google birojā adresē “Dienerstraße 12”, kur atsevišķā telpā pie liela ekrāna man notika pirmā saruna ar ASV biroju. Saņēmu norādījumus, ka sekos 3 intervijas, kurām sekos pusdienas, kuru laikā izlems, vai pielaist mani pie atlikušajām divām intervijām, kā arī visa koda rakstīšana notiks tikai un vienīgi uz tāfeles. Diemžēl birojā īpaši daudz fotografēt negribējās, bet lūk šādi izskatās ieeja:

IMG_5686

Pirmajā intervijā pats intervētājs tika eksaminēts (tam līdzi bija cilvēks, kas pārbauda intervijas kvalitāti). Uzdevums: dots 4×4 laukums ar burtiem, man bija jāizstrādā algoritms, kas atrod visus vārdus šajā laukumā (tā esot populāra spēle Vācijā). Kad uzrakstīju risinājumu, man prasīja izdomāt dažādas optimizācijas metodes, kā arī izdomāt labus testpiemērus.

Otrajā intervijā prasīja dažādus jautājumus par vairākiem pavedieniem, kā arī uzdeva uzdevumu: atrast vai meklējamais teksts sakrīt ar doto pie nosacījumiem, ka jautājuma zīme (?) atbilst vienam jebkuram simbolam, bet zvaigznīte (*) atbilst jebkuram skaitam simbolu (var būt arī 0). Piemēram, “A*Z” atbilst “ABZ” un “AZ”, bet neatbilst “ABC”, savukārt “A?Z” atbilst “ABZ”, bet neatbilst ne “AZ”, ne “ABC”. Pēc risinājuma uzrakstīšanas, man uzdeva dažādus jautājumus par algoritma ātrumu un optimizācijas iespējām.

Trešā intervija bija ļoti teorētiska – man lika izdomāt sistēmas arhitektūru Google Maps karšu skatīšanai. Bija jāizdomā gan algoritmi, gan serveru risinājumi (DNS, load balanseri, apstrādes serveri, keša serveri, datubāzes). Tika dotas dažādas problēmas, kuras bija jārisina esošajā arhitektūrā.

Pēc trešās intervijas pienāca pusdienu laiks, beidzot varēju nedaudz atpūtināt smadzenes un roku no rakstīšanas. Protams, kā jau visos Google birojos, arī šeit bija sava ēdnīca, kurā varēja ēst visu ko vēlies. Kā jau īstam latvietim, gribējās kartupeļus (pat sajutu to smaržu), bet nekur tos nevarēju atrast (ņemot vērā latviešu potato jokus, neuzdrošinājos kādam prasīt par tiem :)), tāpēc manas pusdienas izskatījās šādi:

IMG_5682

Laikam pirmās trīs intervijas biju izturējis, jo pēc pusdienām tiku uzaicināts uz ceturto interviju. Šajā intervijā man tika dots uzdevums izdrukāt visus skaitļus, kuru cipari neatkārtojas. Uzdevums vienkāršs, taču saņēmu aizrādījumus no intervētāja, ka mans kods nav pareizs, bet beigās izrādījās, ka kļūdījies ir viņš. Nākošajā uzdevumā man tika dots laukums, kurā ir ūdens un sauszemes laukumi. Man bija jāatrod, vai ir kāds ūdens laukums, kas ir atdalīts no citiem ūdens laukumiem.

Pēdējā intervijā mani pārbaudīja V8 komandas vadītājs. Man tika jautāts par template sintaksi, kā arī implicit castiem. Kad to atbildēja, tad viņš man sāka uzdot uzdevumus, kuros man bija jāiztēlojas, ka implicit casti ir iespējami arī starp klasēm ar dažādiem template argumentiem (tas zināmu iemeslu dēļ, protams, nav atļauts). Lai arī ikdienā nodarbojos ar C++ koda apstrādi un aizsardzību, tomēr uzdevumi nedaudz lika palauzīt galvu. Pēc tam man bija jāizveido iterators, kas apvieno sarakstu ar iteratoriem un atgriež vērtības pamīšus no visiem.

Kopumā man patika ļoti brīvā darba atmosfēra (mājdzīvnieki, galdi nokrāmēti ar Lego Zvaigžņu karu kuģiem utt.), pilns ledusskapis ar Coca-cola stikla pudelēm, bezmaksas pusdienas un kopumā attieksme pret cilvēkiem. Pirms braukšanas mājās vēl nobildēju viņu galda futbola galdu.

IMG_5685

Pēc nedēļas saņēmu zvanu no Google, kurā man izskaidroja, ka man ļoti labi padevās algoritmu domāšana, kā arī arhitektūras izveide, taču pirmspēdējā (nepaspēju uzrakstīt kodu) un pēdējā intervija mani iegāza (nogurums, uztraukums). Apsveica, ka tiku tik tālu, cik retais tiek (cik lasīju, tad uz Google vakancēm regulāri piesakās tūkstošiem programmētāju), kā arī retais tur tiek ar pirmo piegājienu (kandidātiem ir ļauts mēģināt intervijas vēlreiz pēc 12 mēnešiem). Ja vēlies kandidēt uz programmatūras inženiera (programmētāja) amatu Google (vai citos lielos uzņēmumos), tad šīs grāmatas (protams, ar to vien nepietiek) tev ir jāzina no galvas:

Ja tev ir kādi jautājumi, iebildumi, vēlies padomu vai arī padalīties ar savu pieredzi, vari droši rakstīt man (sociālajos tīklos) vai arī komentēt tepat.