Hvordan man forbereder sig til en jobsamtale i Google og ikke klare det. To gange

Hvordan man forbereder sig til en jobsamtale i Google og ikke klare det. To gange

Artiklen har en overskrift, der lyder som epic fail, men i virkeligheden er det ikke så entydigt. Hele historien endte generelt set ret positivt, selvom det ikke var hos Google. Men det er et emne for en anden artikel. I denne artikel vil jeg beskrive tre ting: hvordan jeg forberedte mig, hvordan interviewene i Google forløb, og hvorfor jeg mener, at tingene ikke er så entydige, som de måske ser ud til.

Hvordan det hele begyndte

En kold cypriotisk vinteraften fik jeg pludselig tanken, at mine kundskaber inden for klassisk computer science var langt fra gennemsnittet, og at jeg måtte gøre noget ved det. Hvis nogen endnu ikke har læst, hvorfor aftenen er cypriotisk og kold, kan man finde ud af det. her. Efter nogle overvejelser blev jeg enige om først at tage et online kursus om algoritmer og datastrukturer. Jeg havde hørt fra en tidligere kollega om Robert Sedgewicks kursus på Coursera. Kurset er delt op i to dele (del 1 og del 2). Hvis linkene skulle ændre sig, kan man altid søge på forfatterens navn. Hver del varer i 6 uger. I starten af ugen udgives der forelæsninger, og i løbet af ugen skal man desuden lave øvelser. Den første del dækker grundlæggende datastrukturer, de vigtigste sorteringer og kompleksiteten af algoritmer. Den anden del er mere avanceret, starter med grafer og slutter med emner som lineær programmering og umulighed. Efter at have overvejet alt dette, kom jeg frem til, at det var præcis det, jeg havde brug for. Her kan den nysgerrige læser spørge, hvad Google har med det at gøre. Og det er sandt, indtil dette punkt havde Google ikke noget at gøre her. Men jeg havde brug for et mål, for det er en smule vanskeligt at arbejde i 12 uger om aftenen uden et mål. Hvad kan være målet med at tilegne sig ny viden? Selvfølgelig dens anvendelse i praksis. I hverdagen er det ret problematisk, men til en jobsamtale i en stor virksomhed er det let. Hurtig googling viste, at Google (uden at skulle være tautologisk) er en af de største virksomheder i Europa (og jeg har netop overvejet Europa), som holder sådanne samtaler. Deres kontor ligger i Zürich, Schweiz. Så det var besluttet — vi lærer og går til samtale hos Google.

Forberedelse til det første forsøg

12 uger er gået hurtigt, og jeg har afsluttet begge kurser. Mine indtryk af kurserne er mere end positive, og jeg kan anbefale dem til alle interesserede. Jeg kunne godt lide kurserne af følgende grunde:

  • Underviseren taler et ganske klart engelsk
  • Materialet er godt struktureret
  • Fantastiske præsentationer, der viser indholdet af hver algoritme
  • Godt udvalgt materiale
  • Interessante øvelser
  • Øvelserne tjekkes automatisk på hjemmesiden, hvorefter der genereres en rapport

Min arbejdsmetode med kurserne var normalt som følger. På 1-2 dage lyttede jeg til forelæsningerne. Derefter tog jeg en hurtig test for at tjekke mine знания. Resten af ugen arbejdede jeg med øvelsen i flere iterationer. Efter den første fik jeg mine 30-70%, og de følgende tog resultatet op til 97-100%. Øvelsen bestod normalt i at implementere en algoritme, f.eks. Seam carving eller bzip.

Efter at have afsluttet kurserne indså jeg, at mange viden kommer med mange bekymringer. Tidligere vidste jeg bare, at jeg ikke vidste noget, men nu er jeg begyndt at indse, hvad præcist jeg ikke ved.

Da det stadig kun var maj måned, og jeg havde planlagt interview i efteråret, besluttede jeg at fortsætte min uddannelse. Efter at have set kravene til stillingen, blev det besluttet at gå parallelt i to retninger: fortsætte med at studere algoritmer og tage et grundkursus i maskinlæring. For det første mål besluttede jeg at skifte fra kurser til en bog og valgte det monumentale værk af Steven Skiena "Algoritmer. En guide til design". Ikke så monumentalt som Knuths, men stadig. For det andet mål gik jeg igen på Coursera og tilmeldte mig Andrew Ng's kursus Machine Learning.

Der er gået yderligere 3 måneder, og jeg har afsluttet kurset og bogen.

Lad os starte med bogen. Læsningen viste sig at være ganske interessant, selvom den ikke var helt let. I princippet ville jeg anbefale bogen, men ikke lige med det samme. Generelt giver bogen en dybere analyse af det, jeg har lært på kurserne. Derudover opdagede jeg (set fra et formelt synspunkt) begreber som heuristik og dynamisk programmering. Selvfølgelig har jeg brugt dem før, men jeg vidste ikke, hvad de hed. Bogen indeholder også en del anekdoter fra forfatterens liv (War Story), som lidt bryder den akademiske fremstilling. Den anden halvdel af bogen kan man for øvrigt springe over, da den primært beskriver eksisterende problemer og metoder til at løse dem. Det er nyttigt, hvis man anvender det regelmæssigt i praksis, ellers vil man glemme det med det samme.

Kurset glædede mig mere end forventet. Forfatteren kender tydeligvis sit stof og fortæller det på en interessant måde. Plus, en væsentlig del, nemlig lineær algebra og grundprincipperne for neurale netværk, kunne jeg stadig huske fra universitetet, så jeg havde ikke store vanskeligheder. Kursusstrukturen er temmelig standard. Kurset er opdelt i uger. Hver uge starter med forelæsninger blandet med korte tests. Efter forelæsningerne gives en opgave, som skal udføres, sendes ind og som automatisk vil blive vurderet. Kort sagt, her er listen over emner, der undervises i kurset:
— omkostningsfunktion
— lineær regression
— gradient descent
— feature scaling
— normal ligning
— logistisk regression
— multiclass classification (one vs. all)
— neurale netværk
— backpropagation
— regulering
— bias/variance
— læringskurver
— fejlmetrics (præcision, recall, F1)
— Support Vector Machines (store margin klassifikation)
— K-means
— Principal Components Analysis
— anomalidetektion
— samarbejdende filtrering (rekommendersystem)
— stokastisk, mini-batch, batch gradient descent
— online læring
— map reduce
— ceiling analyse
Efter at have gennemført kurset, havde jeg forståelse for alle disse emner. Efter 2 år var næsten alt naturligvis glemt. Jeg anbefaler det til dem, der ikke kender til maskinlæring og ønsker at få en god forståelse af de grundlæggende ting for at komme videre.

Første forsøg

Det var allerede september og det var tid til at tænke på jobsamtalen. Da det ikke var nemt at ansøge via hjemmesiden, begyndte jeg at lede efter bekendte, der arbejdede i Google. Valget faldt på datacompboy, da han var den eneste, jeg kendte direkte (selv om det ikke var personligt). Han gik med til at give mit CV videre, og snart fik jeg et brev fra rekruttereren, der tilbød at booke en slot i hans kalender til den første samtale. Et par dage senere fandt opkaldet sted. Vi forsøgte at kommunikere via Hangouts, men kvaliteten var forfærdelig, så vi skiftede over til telefon. Først diskuterede vi hurtigt standardspørgsmålene om hvordan, hvorfor og hvad, hvorefter vi gik videre til den tekniske screening. Den bestod af ti spørgsmål i stil med 'hvad er kompleksiteten ved at indsætte i en hash map', 'hvilke balancerede træer kender du til'. Ikke svært, hvis man har en grundlæggende viden om disse emner. Screeningen gik godt, og på baggrund af resultaterne besluttede vi at arrangere det første interview om en uge.

Interviewet foregik også via Hangouts. Først talte vi i cirka 5 minutter om mig, og derefter gik vi videre til opgaven. Opgaven handlede om grafer. Jeg forstod hurtigt, hvad jeg skulle gøre, men valgte ikke den rigtige algoritme. Da jeg begyndte at skrive koden, indså jeg det og skiftede til en anden tilgang, som jeg så færdiggjorde. Intervieweren stillede nogle spørgsmål om algoritmens kompleksitet og spurgte, om det kunne gøres hurtigere. Jeg blev lidt blank og kunne ikke svare. Tiden løb ud, og vi sagde farvel. Senere, omkring 10 minutter efter, indså jeg, at i stedet for Dijkstra-algoritmen, som jeg havde brugt, kunne man specifikt til denne opgave have anvendt bredde-først-søgning, og det ville have været hurtigere. Efter noget tid ringede rekruttereren og sagde, at interviewet i det hele taget var gået godt, og at det ville være godt at organisere et mere. Vi aftalte endnu et interview om en uge.

Denne gang gik det værre. Hvis intervieweren første gang var venlig og imødekommende, så var denne gang en smule dyster. Jeg kunne ikke straks løse opgaven, selvom de idéer, jeg kom med, i princippet kunne føre til løsningen. Til sidst, efter et par hints fra intervieweren, indså jeg løsningen. Det viste sig igen at være en bredde-først søgning, bare fra flere punkter. Jeg skrev løsningen, kom i mål tidsmæssigt, men glemte de grænsetilfælde. Efter et stykke tid ringede rekruttereren og meddelte, at intervieweren denne gang var utilfreds, da han mente, jeg havde brugt for mange hints (3 eller 4 stykker) og konstant ændrede koden, mens jeg skrev. Efter de to interviews blev det besluttet ikke at gå videre, men at udsætte det næste interview et år, hvis jeg havde lyst. Så tog vi afsked.

Og jeg har draget et par konklusioner fra denne historie:

  • Teori er godt, men man skal kunne navigere hurtigt i den.
  • Teori uden praksis hjælper ikke. Man skal løse opgaver og gøre kodning til en automatik.
  • Meget afhænger af intervieweren. Og det kan man ikke gøre noget ved.

Forberedelse til andet forsøg

Efter at have overvejet situationen, besluttede jeg at prøve igen om et år. Jeg redigerede let mit mål. Hvis det tidligere primære mål var at lære, og interviewet hos Google var en fjern gulerod, så blev det nu at bestå interviewet som mål, mens læring blev et middel.
Så der blev udviklet en ny plan, som indeholdt følgende punkter:

  • Fortsætte med at studere teori ved at læse bøger og artikler.
  • Løse algoritmiske opgaver i mængden af 500-1000 stykker.
  • Fortsætte med at studere teori ved at se videoer.
  • Fortsætte med at studere teori gennem kurser.
  • Lære om erfaringerne fra andre mennesker med interviews hos Google.

Planen blev gennemført af mig over et år. Jeg vil nu beskrive, hvad jeg lavede for hvert punkt.

Bøger og artikler

Jeg husker ikke engang, hvor mange artikler jeg har læst. Jeg læste dem både på russisk og engelsk. Den mest nyttige side var nok denne her. Her er der samlet en beskrivelse af et stort antal interessante algoritmer med kodeeksempler.

Jeg har læst 5 bøger: 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). De kan opdeles i 2 kategorier. Den første kategori indeholder bøgerne af Sedgewick og Cormen. Det er teori. De andre er til forberedelse til interviews. I sin bog fortæller Sedgewick stort set det samme, som han dækker i sine kurser. Bare i skriftlig form. Der er ikke meget mening i at læse det nøje, hvis du har taget kurset, men det er værd at skimme uanset hvad. Hvis du ikke har set kurset, giver det mening at læse det. Jeg fandt Cormen lidt for kedelig. Jeg klarte det ærligt talt med besvær. Jeg fik kun det herfra master theorem, og nogle få sjældent anvendte datatyper (Fibonacci heap, van Emde Boas tree, radix heap).

Det er værd at læse mindst én bog til interviewforberedelse. De er alle bygget omkring det samme princip. De beskriver interviewprocessen i store teknologiske virksomheder, giver grundlæggende viden fra Computer Science, opgaver relateret til disse grundlæggende emner, løsninger på opgaverne og en gennemgang af løsningerne. Af de tre nævnte ville jeg nok anbefale Cracking the Coding Interview som den primære, mens de andre kan læses efter ønske.

Algoritmiske opgaver

Det var nok det mest interessante punkt i forberedelsen. Man kan selvfølgelig bare sætte sig ned og løse opgaver. Der er mange forskellige websider til dette. Jeg har hovedsageligt brugt tre: Hackerrank, CodeChef og LeetCode. På CodeChef er opgaverne opdelt efter sværhedsgrad, men ikke efter emner. På Hackerrank er de opdelt efter både sværhedsgrad og emner.

Men som jeg hurtigt fandt ud af, er der en mere interessant måde. Og det er konkurrencer (programming challenges eller programming contests). Alle tre sider tilbyder dem. Dog er der et problem med LeetCode — den ubelejlige tidszone. Derfor deltog jeg ikke på den side. Hackerrank og CodeChef tilbyder et stort antal forskellige konkurrencer, fra 1 time til 10 dage. Der er forskellige regler for de forskellige formater, men man kan tale længe om dette. Hovedpointen, hvorfor konkurrencer er gode, er, at det tilfører et konkurrencedygtigt (og endnu engang tautologi) element i læringsprocessen.

Jeg har deltaget i 37 konkurrencer på Hackerrank. Af dem var 32 rangordnede, og 5 var sponsorerede (jeg fik endda 25$ i en af dem) eller for sjov. I de rangordnede konkurrencer nåede jeg 10 gange top 4%, 11 gange top 12% og 5 gange top 25%. Mine bedste resultater var 27/1459 i tre timers konkurrencen og 22/9721 i den ugentlige.

Jeg skiftede til CodeChef, da konkurrencerne på Hackerrank blev sjældnere. I alt deltog jeg i 5 konkurrencer. Mit bedste resultat var 426/5019 i en ti dages konkurrence.

I alt har jeg løst lidt over 1000 opgaver i konkurrencer og bare for sjov, hvilket passede ind i planen. Desværre har jeg ikke længere fritid til at fortsætte med konkurrencer, ligesom jeg ikke har noget mål, som jeg kan tilpasse den tid, jeg ikke har fri. Men det var sjovt. Jeg anbefaler, at dem, der er interesseret, finder ligesindede. Det er meget sjovere at være to eller i en gruppe. Jeg hyggede mig med en ven, så det gik måske så godt.

Videovisning

Efter at have læst bogen af Skiena blev jeg i det hele taget interesseret i det, han laver. Ligesom Sedgwick er han professor på universitetet. Derfor kan man finde videoer af hans kurser online. Jeg besluttede at se kurset COMP300E — Programmeringsudfordringer — 2009 HKUST. Jeg vil ikke sige, at jeg kunne lide det meget. For det første er videokvaliteten ikke så god. For det andet har jeg ikke prøvet at løse opgaverne, der blev behandlet i kurset. Så min engagement var ikke særlig høj.
Også i processen med at løse opgaver, mens jeg forsøgte at finde den rigtige algoritme, stødte jeg på videoer af Tushar Roy. Han arbejdede i Amazon, og nu arbejder han i Apple. Som jeg senere fandt ud af, har han YouTube-kanal, hvor han deler analyser af forskellige algoritmer. På tidspunktet for denne artikel indeholder kanalen 103 videoer. Og jeg må sige, at analyserne han laver er ret godt udført. Jeg har prøvet at se andre forfattere, men det fangede mig ikke. Så denne kanal kan jeg uden tvivl anbefale at se.

Gennemførelse af kurser

Her har jeg ikke lavet meget. Jeg har set videoer fra Android Developer Nanodegree fra Google og gennemført et kursus fra ITMO How to Win Coding Competitions: Secrets of Champions. Nanodegree er ganske udmærket, selvom jeg selvfølgelig ikke lærte noget nyt derfra. ITMO-kurset er lidt sammenklippet i teorien, men opgaverne var interessante. Jeg vil ikke anbefale at starte med det, men i princippet blev tiden brugt på det ikke spildt.

At studere andre menneskers erfaringer

Selvfølgelig har mange mennesker forsøgt at komme ind i Google. Nogle kom ind, andre gjorde ikke. Nogle skrev artikler om det. Af interessante ting vil jeg nok nævne denne og denne. I det første tilfælde havde personen forberedt en liste over, hvad han skulle lære for at blive Software Engineer og komme ind i Google. Han endte dog med at komme ind i Amazon, men det er ikke så vigtigt. Den anden manual er skrevet af Google-ingeniøren Larisa Agarova (Larrr). Ud over dette dokument kan man også læse hendes blog.

Det giver mening at læse anmeldelser om interviews på Glassdoor. De ligner alle hinanden mere eller mindre, men man kan få nogle nyttige oplysninger ud af dem.

Jeg vil ikke nævne links til andre små artikler, da I selv nemt kan finde dem på Google.

Anden omgang

Og så er der gået et år. Det har været et ganske hæftigt år med undervisning. Men til den nye efterårsperiode nærmede jeg mig med meget dybere teoretiske viden og udviklede praktiske færdigheder. Inden for det angivne forberedelsesår var der stadig et par uger tilbage, da jeg pludselig fik en mail fra en rekrutterer fra Google, som spurgte, om jeg stadig havde lyst til at arbejde i Google, og om jeg ville tale med ham. Naturligvis var jeg ikke imod. Vi blev enige om at tale sammen efter en uge. Jeg fik også anmodning om et opdateret CV, til hvilket jeg vedhæftede en kort beskrivelse af, hvad jeg havde gjort i løbet af året på arbejdet og generelt.

Efter snakken om livet blev det besluttet, at der ville være et Hangouts-interview om en uge, ligesom sidste år. Ugen gik, interview-tidspunktet kom, men intervieweren dukkede ikke op. 10 minutter gik, jeg begyndte allerede at blive nervøs, da nogen pludselig dukkede op i chatten. Som det senere viste sig, kunne min interviewer af en eller anden grund ikke dukke op, og de fandt hastigt en erstatning. Personen var ikke helt klar, hverken teknisk eller i forhold til interviewet. Men derefter gik alt godt. Jeg løste opgaven hurtigt, forklarede, hvor der kunne være faldgruber, og hvordan man kunne undgå dem. Vi diskuterede flere forskellige varianter af opgaven, algoritmens kompleksitet. Derefter talte vi i yderligere 5 minutter, ingeniøren delte sine indtryk af at arbejde i München (det så ud til, at de ikke fandt en hastig erstatning i Zürich), og det var dét.

Samme dag kontaktede en rekrutterer mig og fortalte, at interviewet var gået glimrende, og de var klar til at invitere mig til et interview på kontoret. Næste dag talte vi sammen via Hangouts og diskuterede detaljerne. Da jeg skulle have lavet visum, besluttede vi at fastsætte interviewet til en måned senere.

Mens jeg forberedte dokumenterne, diskuterede jeg også med rekruttereren det kommende interview. Det standard interview i Google består af 4 algoritmiske opgaver og et System Design. Men da jeg ansøgte som Android-udvikler, blev jeg informeret om, at en del af interviewet ville have Android-specifik praktisk. Hvilke specifikt og hvad denne specifik indebærer, kunne rekruttereren ikke få mig klædt ordentligt på til. Så vidt jeg forstod, blev dette introduceret for nylig, og han var selv ikke helt opdateret. Jeg blev også tilmeldt to træningssessioner: hvordan man gennemfører et algoritmisk interview og hvordan man gennemfører et System Design interview. Sessionerne var af middel godhed. Ingen kunne heller fortælle mig, hvad der bliver spurgt til Android-udviklere. Derfor gik min forberedelse denne måned ud på følgende:

  • At købe en whiteboard og skrive 2-3 dusin af de mest populære algoritmer på den fra hukommelsen. 3-5 stykker hver dag. I alt blev hver skrevet flere gange.
  • At genopfriske forskellige oplysninger om Android, som jeg ikke bruger hver dag.
  • At se flere videoer om Big Scale og alt det der.

Som jeg allerede har nævnt, lavede jeg samtidig dokumenter til rejsen. Først skulle jeg give nogle oplysninger for at få lavet en invitationsbrev. Derefter brugte jeg lang tid på at finde ud af, hvem der i Cypern lavede visum til Schweiz, da det schweiziske konsulat ikke håndterede dette. Det viste sig, at det var det østrigske konsulat, der tog sig af det. Jeg ringede og fik en tid. De krævede en bunke dokumenter, men ikke noget særligt interessant. Billede, pas, opholdstilladelse, en masse forskellige certifikater, og selvfølgelig invitationsbrevet. Brevet kom dog aldrig. I sidste ende tog jeg af sted med en almindelig printout, og det gik fint. Selve brevet kom først efter 3 dage, og det cypriotiske FedEx kunne ikke finde min adresse, så jeg måtte selv hente det. Samtidig fik jeg en pakke fra det samme FedEx, som også ikke kunne levere til mig, fordi de ikke fandt adressen, og som havde ligget der siden juni (5 måneder, Karl). Da jeg ikke vidste om det, havde jeg naturligvis ikke forudset, at de havde det. Jeg fik mit visum til tiden, hvorefter de bookede et hotel til mig og tilbød flymuligheder. Jeg justerede mulighederne, så det var mere bekvemt. Der var ingen direkte fly, så i sidste ende fløj jeg derned via Athen og hjem via Wien.

Efter at alle formaliteterne med rejsen var på plads, gik der et par dage, og jeg fløj faktisk til Zürich. Jeg ankom uden problemer. Fra lufthavnen til byen tog jeg tog — hurtigt og bekvemt. Efter at have været lidt rundt i byen fandt jeg hotellet og tjekkede ind. Da hotellet var booket uden mad, spiste jeg middag i nærheden og faldt derefter i søvn, da flyet var om morgenen, og jeg allerede var træt. Næste dag fik jeg morgenmad på hotellet (for ekstra penge) og tog til Google-kontoret. Google har flere kontorer i Zürich. Mit interview var ikke i det centrale. Og generelt så kontoret ret normalt ud, så jeg fik ikke chancen for at se alle godbidderne fra et 'normalt' Google-kontor. Jeg registrerede mig hos administratoren og satte mig ned for at vente. Efter et stykke tid kom rekruttereren og fortalte mig planen for dagen, hvorefter han førte mig til et rum, hvor interviewene skulle foregå. I planen var der 3 interviews, frokost og yderligere 2 interviews.

Interview nummer ét

Det første interview var netop om Android. Det var faktisk slet ikke relateret til algoritmer. En overraskelse, må man sige. Nå, men det var også mere almindeligt. Jeg blev bedt om at lave en bestemt UI-komponent. Først diskuterede vi, hvad og hvordan. Jeg foreslog at lave løsningen i RxJava og forklarede, hvad og hvorfor jeg ville gøre det. De sagde, at det var fint, men lad os gøre det med Android-frameworket. Og så skulle vi endda skrive koden på tavlen. Det var ikke bare komponenten, men hele aktiviteten, der brugte denne komponent. Det var jeg ikke forberedt på. En ting er at skrive en algoritme på 30-50 linjer på tavlen, noget helt andet er grøden af Android-kode, selvom jeg forkortede og kommenterede med noget i stil med "nå, det behøver jeg ikke skrive, da det er åbenlyst". Det blev en eller anden blanding på tre tavler. Jeg løste opgaven, men det så skræmmende ud.

Interview nummer to

Denne gang var interviewet om algoritmer. Og der var to interviewere. Den ene var selve intervieweren, og den anden var en ung padawan (shadow interviewer). Jeg skulle finde på en datastruktur med bestemte egenskaber. Først diskuterede vi problemet som sædvanligt. Jeg stillede forskellige spørgsmål, og intervieweren svarede. Efter et stykke tid bad de mig om at skrive nogle metoder til den opfundne struktur på tavlen. Denne gang lykkedes det rimeligt, dog med nogle småfejl, som jeg rettede efter interviewernes forslag.

Interview nummer tre

Denne gang var det System Design, som pludselig også viste sig at være Android. Jeg skulle udvikle en app med bestemte funktioner. Vi diskuterede kravene til appen, serveren og kommunikationsprotokollen. Derefter begyndte jeg at beskrive, hvilke komponenter eller biblioteker jeg ville bruge til at bygge appen. Men da jeg nævnte Job Scheduler, stod jeg pludselig stille. Sagen er den, at jeg aldrig har brugt det i praksis, da jeg i det øjeblik, det blev udgivet, lige var skiftet til at støtte apps, hvor der slet ikke var nogen opgaver, der kunne anvende det. Det samme skete ved udviklingen af de efterfølgende. I teorien ved jeg, hvad det er, hvornår og hvordan det bruges, men jeg har ikke erfaring med brugen. Og det så ud til, at intervieweren ikke var særlig tilfreds med det. Så bad de mig om at skrive koden. Ja, når man udvikler en app, skal man straks skrive koden. Atter igen Android-kode på tavlen. Det blev igen noget skræmmende.

Frokost

Der skulle have været en anden person, men han kom ikke. Google laver også fejl. I sidste ende gik jeg til frokost med den tidligere interviewer, hendes kollega, og lidt senere sluttede den næste interviewer sig til os. Frokosten var helt anstændig. Igen, da dette ikke var hovedkontoret i Zürich, så kantinen ganske almindelig ud, selvom den var meget hyggelig.

Interview nummer fire

Endelig algoritmer i ren form. Jeg løste den første opgave ret hurtigt og effektivt, men mistede fokus på et grænsetilfælde. Men med interviewers hjælp (han gav det specifikke grænsetilfælde) fandt jeg problemet og rettede det. Naturligvis skulle jeg skrive koden på tavlen. Derefter fik jeg en lignende, men sværere opgave. Til den fandt jeg et par suboptimale løsninger og var tæt på at finde den optimale, men manglede 5-10 minutter for at færdiggøre tanken. Og jeg nåede ikke at skrive koden til den.

Interview nummer fem

Og igen Android interview. Jeg undrer mig over, hvorfor jeg har lært algoritmer hele året?
Først blev der stillet et par enkle spørgsmål. Så skrev intervieweren kode på tavlen og bad mig finde problemerne i den. Jeg fandt dem, forklarede og rettede dem. Vi diskuterede det. Derefter kom der et par uventede spørgsmål i stil med 'hvad gør metode Y i klasse X', 'hvad er der inde i metode Y', 'hvad gør klasse Z'. Jeg svarede på noget af det, men sagde derefter, at jeg ikke havde beskæftiget mig med det i mit arbejde på det seneste og naturligvis ikke kunne huske, hvad, hvem og hvordan i detaljer gør. Efter det spørger intervieweren, hvad jeg laver nu. Og spørgsmålene begyndte at dreje sig om det. Her svarede jeg væsentligt bedre.

Efter det sidste interview fik jeg mit adgangskort taget, de ønskede mig held og lykke og sendte mig afsted. Jeg gik lidt rundt i byen, spiste middag og gik tilbage til hotellet, hvor jeg faldt i søvn, da flyet igen var tidligt om morgenen. Næste dag kom jeg fint til Cypern. Jeg skrev feedback om interviewet efter anmodning fra rekruttereren og udfyldte en formular i en særlig service til refusion af udgifter. Af alle udgifter betaler Google kun flybilletter direkte. Hotel, mad og transport betales af kandidaten. Derefter udfylder vi formularen, vedlægger kvitteringerne og sender til et særligt bureau. De behandler det og overfører ret hurtigt pengene til kontoen.

Det tog halvanden uge at behandle interviewresultaterne. Efterfølgende fik jeg at vide, at jeg var "a bit below the bar". Det vil sige, jeg ramte ikke helt niveauet. For at være mere specifik, så gik 2 interviews godt, 2 gik ikke så godt, og System Design gik rigtig skidt. Hvis bare 3 af dem var gået godt, kunne jeg have kæmpet om det, men nu er der ikke chancer. Jeg blev tilbudt at prøve igen om et år.

I starten blev jeg selvfølgelig skuffet, da jeg havde lagt meget arbejde i forberedelserne, og på tidspunktet for interviewet var jeg allerede begyndt at overveje at forlade Cypern. At få job hos Google og flytte til Schweiz virkede som en fremragende mulighed.

Konklusion

Og her nærmer vi os artikelns afsluttende del. Ja, jeg er to gange blevet afvist til interview hos Google. Det er trist. Det ville nok have været spændende at arbejde der. Men man kan også se situationen fra en anden vinkel.

  • I løbet af halvandet år har jeg lært en masse ting om softwareudvikling.
  • Jeg har haft stor glæde af at deltage i programmeringskonkurrencer.
  • Jeg tog en tur til Zürich i et par dage. Hvornår kommer jeg derhen igen?
  • Jeg fik en interessant interviewoplevelse i et af verdens største IT-selskaber.

Derfor kan man simpelthen betragte alt, der er sket i løbet af disse halvandet år, som læring eller træning. Resultaterne af denne træning gjorde sig gældende. Min idé om at forlade Cypern modnede (af familiemæssige grunde), jeg bestod flere interviews hos et andet kendt firma, og efter 8 måneder flyttede jeg. Men det er en helt anden historie. Ikke desto mindre mener jeg, at jeg alligevel skal takke Google for disse halvandet år, hvor jeg arbejdede med mig selv, samt for 2 interessante dage i Zürich.

Hvad kan jeg sige til sidst? Hvis du arbejder inden for IT, så forbered dig på interviews hos Google (Amazon, Microsoft, Apple osv.). Måske en dag får du mulighed for at komme ind. Selvom du ikke ønsker det, så tro mig, sådanne forberedelser vil ikke skade dig. I det øjeblik, du indser, at du kan (selv om det kun er under heldige omstændigheder) bestå interviewet hos et af disse selskaber, vil der åbne sig mange flere veje for dig, end der gjorde før du begyndte din forberedelse. Alt hvad du har brug for på vejen er mål, vedholdenhed og tid. Jeg ønsker dig held og lykke 🙂

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster