Den definitive guide til kodningsinterviewet

Opdatering: Efter de råd, der er skrevet nedenfor, fik jeg tilbud fra Google, Microsoft, Amazon, Quantcast og Bloomberg.

Dette er en omfattende guide, der indeholder alt, hvad du har brug for at vide om kodningssamtalen. Den forklarer grundigt, hvad du skal lære, hvordan du skal lære og endnu vigtigere, hvordan du skal præsentere løsningen under samtalen.

Hvis du ønsker at bestå kodningssamtalen, har du fundet den rigtige artikel. Når du har læst dette, vil du måske blive fristet til at søge efter andre artikler om samme emne, for “Måske finder jeg flere tips og tricks, der kan hjælpe mig”.

Sluta lede efter tips og tricks, det er det, der holder dig væk fra dit drømmejob.

Der findes hverken tips eller tricks til at få det job. Det er bare hårdt arbejde, punktum. Så hvis du virkelig vil knuse den samtale, så gå ud og øv dig efter at have læst denne artikel.

Artiklen består af tre dele & tre videoer, og det vil tage omkring 30 minutter at læse.

  1. Hvad er en kodningsinterview?
  2. Hvordan forbereder du dig til kodningsinterviewet?
  3. Hvordan giver du dit bedste under kodningsinterviewet?

Først vil jeg gerne præsentere, så du ved, at jeg er sikker på, hvad jeg taler om.

Største programmeringskonkurrence i Nordvesteuropa

Mit navn er Andrei, og jeg har været konkurrerende programmør i de sidste fem år. Jeg har deltaget i verdensfinalerne i Google HashCode, den største algoritmekonkurrence arrangeret af Google, og før det vandt jeg tre guldmedaljer i Computing Olympiad i Rumænien. Med denne erfaring har jeg udgivet onlinekurset “Introduction to Algorithms and Data Structures in C++”, som har hjulpet over 8000 studerende fra 135 lande med deres første skridt på området.

Nu studerer jeg datalogi på University College London, og i mellemtiden er jeg i gang med at oprette et kursus, der skal hjælpe studerende og unge fagfolk med at forberede sig til en kodningssamtale i de store teknologivirksomheder. Derfor vil jeg i denne artikel dele min erfaring med kodningsinterviewet og fortælle dig den mest lige vej til at bestå det. Du kan nå mig her.

Lad mig stille dig et spørgsmål: Har du nogensinde drømt om at arbejde i en stor tech-virksomhed, som f.eks. Microsoft? Hvis ja, så vær sikker på, at de fleste af os også har gjort det. Og fordi der er så stor efterspørgsel på nogle få dusin job, har de brug for en måde at se, hvilke kandidater der er bedst forberedt.

Hvor du bliver inviteret til kodningssamtalen, skal du søge stillingen og have et CV, der skinner blandt de andre. I denne artikel vil jeg tale om selve kodningsinterviewet, og hvordan du kan forberede dig til det, og ikke om ansøgningsprocessen til jobbet.

For de fleste teknologivirksomheder består kodningsinterviewet af Algoritmer & Datastrukturer problemer. Tænk på disse som problemløsningsspørgsmål, hvor intervieweren søger at vurdere din evne til at løse et problem, som du ikke har set før. Et interview tager ca. 45 minutter, og du får en eller to kodningsproblemer. Intervieweren forventer, at du finder den mest optimale løsning, koder den og forklarer, hvad du lige har kodet.

Sidst har du mulighed for at stille ham nogle spørgsmål om virksomheden eller noget andet, der interesserer dig. Vi vil udførligt diskutere alle disse trin i den sidste del af denne artikel.

Hvordan forbereder man sig til kodningssamtalen?

Jeg vil gerne gøre det klart for dig fra starten: Der findes ikke nogen genvej eller noget trick til at bestå samtalen. Den eneste måde at finde optimale løsninger på algoritmeproblemer på er ved at øve sig og løse så mange problemer som muligt.

Med to ord: Det er hårdt arbejde.

Du kan måske ikke lide det og begynder at lede et andet sted efter et trick til at forstå, hvordan man løser interviewspørgsmål, men det findes ikke. Tænk et øjeblik: Hvis der fandtes et sådant trick, hvorfor ville alle så ikke bruge det og bestå interviewet?

Så du er nødt til at forstå, at den eneste variabel for at bestå interviewet er, hvor meget du øver dig inden. Din erfaring, intelligens og alt andet er allerede fastlagt. Derfor vil den tid, der bruges på øvelse, gøre forskellen mellem de kandidater, der består og ikke består.

Kodeinterviewet er en kamp med dig selv, og den eneste måde at vinde det på er ved at øve sig en masse.

Det første skridt er at føle sig fortrolig med et almindeligt kodningssprog, såsom C/C++, Java eller Python. Nogle virksomheder accepterer også andre sprog, og det klare flertal holder sig til disse tre. Vælg det sprog, du bedst kan lide, og hold dig til det. Beslut ikke halvvejs gennem forberedelsen, at du ønsker at skifte sprog! I resten af artiklen vil jeg gå ud fra, at du har valgt et sprog og kender godt til dets syntaks.

Nu handler kodningssamtalen typisk om Algoritmer og Datastrukturer. De omfatter nogle grundlæggende emner, som du skal forstå grundigt, og du skal ikke engang overveje at gå til interviewet uden at føle dig fortrolig med dem.

Nedenfor er der en liste over de Algoritmer og Datastrukturer, som du skal kende. Jeg har skrevet dem i rækkefølge efter deres vigtighed, og det er den bedste indlæringsvej.

1) Big O-kompleksitet: Det er et must og danner det underliggende fundament for din algoritmiske tænkning. Forstå, hvad det betyder, og nå frem til det punkt, hvor du kan sige kompleksiteten af en grundlæggende algoritme bare ved at se på den.

2) Arrays: Du bør være fortrolig med begrebet arrays på dette tidspunkt. Dette emne henviser til problemer, hvor arrayet kun bruges til opbevaring, og hvor løsningen omfatter grundlæggende teknikker som f.eks. iteration med to pointere. Et klassisk problem er at kontrollere, om et givet array er en permutation.

3) Strings: Du skal vide, hvordan du kan manipulere en streng i dit sprog, og du skal være bekendt med problemer, der beder dig om at sammenkæde eller rotere dem.

4) Sammenkædede lister: Det er almindeligt at støde på et linked list-problem i interviewet. Her skal du være særlig opmærksom på hjørnetilfælde. Tænk på, hvad der sker, hvis den linkede liste er tom? Eller hvis den kun har ét element? Eller du ønsker at iterere indtil det sidste element? Når du løser et problem med linkede lister, skal du tænke to gange over hjørnetilfælde.

5) Hash-tabeller: Grundlæggende datastruktur, der er til stede i de fleste interviews. Hvis du går dybere ind i et emne, skal du vælge hash-tabeller. Vær flydende i hashtabellernes bibliotek i dit sprog og øv dig på mindst fem problemer. Til sidst skal du tage denne udfordring op: Hvordan finder du det længste underbånd med forskellige poster?

6) Stakke: Du skal være fortrolig med tanken om, at du kun kan manipulere den ene ende af stakken. Løs denne udfordring: Implementer en stak med et MAX API, hvilket betyder, at du på ethvert tidspunkt kan spørge, hvad der er det maksimale element i stakken.

7) Køer: Du må ikke forveksle dem med stakke, fordi de har to ender. Gennemfør det klassiske problem med at simulere en kø ved hjælp af to stakke.

8) Grådige: Denne teknik er ret enkel, og du bruger den sikkert hver dag. Den henviser grundlæggende til at tage den bedst mulige beslutning på et bestemt tidspunkt uden at tage hensyn til fremtidige konsekvenser. Øv dig på et par problemer, og tro ikke, at alle problemer kan løses ved hjælp af Greedy.

9) Primitive typer: Det drejer sig mest om bitmanipulation og grundlæggende operationer på tal. Nogle problemer kan dog blive ret tricky. Hvordan kan man tælle antallet af 1’er i en binær repræsentation?

10) Binære træer: Fokus på traversals, fælles forfædre og rekursivt iterere gennem træerne.

11) Heaps (bunker): De anvendes i vid udstrækning i den virkelige verden, så lær heaps at kende! Øv dig, indtil du kan være sikker på, hvornår du skal bruge en min-heap eller en max-heap. Hvordan vil du udskrive de fem største elementer fra en talrække? Bruger du en min-heap eller en max-heap?

12) Søgning: Søgning er et kernefag, som alle bør kende. Så øv dig på mindst tre problemer ved hjælp af binær søgning.

13) Sortering: Vær sikker på, at du kan implementere mergesort og quicksort. Kend udmærket deres bedste, gennemsnitlige og værst tænkelige kompleksitet. Hvis du har tid, skal du også lære Heapsort.

14) Binære søgetræer: De bliver ofte spurgt til i kodningsinterviewet, og du skal kunne implementere alle deres grundlæggende operationer, herunder sletning af et element!

15) Backtracking: Du skal kunne implementere alle deres grundlæggende operationer, herunder sletning af et element!

15) Backtracking: Det betyder grundlæggende, at du genererer alle mulige løsninger og tager dem, der overholder dine krav. Implementer en generator af potensmængden af mængden og n-Queen-problemet.

16) Grafer: De er sandsynligvis den mest anvendte datastruktur inden for datalogi. Vidste du, at ethvert socialt netværk blot er en enorm graf? Øv dig i at lave en kopi af grafen i hukommelsen og i at opdage cyklusser i grafer.

17) Dynamisk programmering: Dynamisk programmering: Dynamisk programmering betragtes af de fleste som det mest skræmmende emne. Men det er det smukkeste, hvis man forstår tankegangen bag det. Så øv dig på de fem mest almindelige spørgsmål og hold dig til dem, indtil du forstår, hvor de tilbagevendende spørgsmål kommer fra.

I det kursus, jeg er ved at oprette nu, forklarer jeg hvert emne i denne rækkefølge. Jeg arbejder stadig på kurset, men du kan få tidlig adgang til nogle af lektionerne og også hjælpe mig med din feedback, ved at tilmelde dig kursets Facebook-gruppe.

Hvis mange emner er ukendte for dig, betyder det, at du skal begynde at øve dig lige efter denne artikel. Du behøver ikke længere søge online efter andre vejledninger, men skal bare gå ud og øve dig. Husk, at interviewet er en kamp med dig selv, jo mere du øver dig, jo større er din chance for at vinde. Det er op til dig at øge dine problemer komfortzone.

Hvordan giver du dit bedste under kodningsinterviewet?

Interviewet har fem dele, som vi vil diskutere i dybden. Se de forklarende videoer for at få virkelige eksempler.

1) Introduktion

Denne del indleder interviewet og tager ca. tre til fem minutter. Intervieweren ønsker at finde ud af mere om dig og giver dig mulighed for at præsentere dig selv. Typisk er han interesseret i, hvilke projekter du har arbejdet på tidligere, og hvilket var det mest imponerende. Nu er det din chance for at brillere, så spil den ikke!

Forsøg ikke at være smigrende. Det er nemt at spotte en falsk personlighed, der forsøger at snyde dig. Mig og alle andre hader disse mennesker, så sørg for at vise din sande personlighed.

Du skal vide på forhånd, hvad du vil sige om dit yndlingsprojekt, så forbered det inden samtalen. Nu siger de fleste mennesker kun to korte sætninger, hvilket er dårligt. Hvilket svar kan du bedst lide?

1) “Jeg arbejdede på en webapplikation til bedre håndtering af patienter på hospitaler. Jeg skrev backend’en i Node.js.”

Den måde, du præsenterer dig selv på, betyder virkelig noget

2) “Et projekt, som jeg virkelig nød, handlede om at skabe en webapplikation til National Health Services of the UK for at hjælpe dem med at administrere patienterne på hospitalet bedre. Det var en del af universitetets pensum, det tog to måneder, og jeg har været leder af et hold på tre personer.

Vi tog projektet fra en grundlæggende idé og omdannede det til en rigtig applikation. Jeg var ansvarlig for kodning af backend i Node.js og database i MongoDB. Det var den første applikation, jeg nogensinde har lavet for en kunde, og jeg var ikke fortrolig med webteknologierne. Udviklingsprocessen var iterativ, og vi lavede nogle fejl undervejs.

I sidste ende overleverede vi med mange funktioner, og min favorit er, at brugerne kan opdatere værelserne på hospitalet i stedet for at være hårdt kodet.

Jeg lærte mange ting af dette projekt, især hvordan man arbejder i et team. Der var nogle øjeblikke, hvor der opstod tekniske problemer eller problemer i teamet, men i sidste ende gik alt godt, og vi fik årets højeste karakter!”

Tegn denne præsentation til din fordel! Intervieweren er virkelig interesseret i at finde ud af mere om dig, så start med en kortfattet introduktion af projektet, hvor du forklarer, hvad det handler om. Fortæl derefter, hvad dit bidrag var (hvis du har hjulpet teamet med en smart idé, så sig det!), og hvad du har lært af udviklingsprocessen. Du kan også nævne, hvilken forskel du har gjort for brugerne.

Du bør tale et-to minutter om dit projekt.

2) Forstå problemet

Intervieweren vil kort fortælle dig om den problemformulering, som du skal løse. Jeg sagde “kortfattet”, fordi han ikke vil give dig mange detaljer om begrænsninger, hjørnetilfælde eller hvordan du modtager dataene. Det er en del af din opgave at spørge om alt det, du har brug for for at løse problemet. Gentag udsagnet højt for at være sikker på, at du har forstået det korrekt.

Skriv en kommentar