Jag skriver om sanningen, inte om tips och tricks
Uppdatering: Jag har fått erbjudanden från Google, Microsoft, Amazon, Quantcast och Bloomberg.
Detta är en omfattande guide som innehåller allt du behöver veta om kodningsintervjun. Den förklarar grundligt vad du ska lära dig, hur du ska lära dig och ännu viktigare hur du ska presentera lösningen under intervjun.
Om du vill klara kodningsintervjun har du hittat rätt artikel. Efter att ha läst den här kanske du frestas att söka efter andra artiklar om samma ämne, för ”kanske hittar jag fler tips och tricks som kan hjälpa mig”.
Sluta leta efter tips och tricks, det är detta som håller dig borta från ditt drömjobb.
Det finns inga tips eller tricks för att få det där jobbet. Det är bara hårt arbete, punkt slut. Så om du verkligen vill krossa den där intervjun, gå och öva efter att ha läst den här artikeln.
Artikeln består av tre delar & tre videor och det kommer att ta cirka 30 minuter att läsa.
- Vad är kodningsintervjun?
- Hur förbereder man sig för kodningsintervjun?
- Hur ger man sitt bästa under kodningsintervjun?
För det första vill jag presentera, så att du vet att jag är säker på vad jag talar om.
Jag heter Andrei och jag har varit tävlingsprogrammerare de senaste fem åren. Jag har deltagit i världsfinalen av Google HashCode, den största algoritmiska tävlingen som anordnas av Google, och innan dess vann jag tre guldmedaljer i datatävlingen Computing Olympiad i Rumänien. Med denna erfarenhet har jag publicerat online-kursen ”Introduction to Algorithms and Data Structures in C++” som har hjälpt över 8 000 studenter från 135 länder med sina första steg inom området.
Nu studerar jag datavetenskap vid University College London och under tiden skapar jag en kurs för att hjälpa studenter och unga yrkesverksamma att förbereda sig för kodningsintervjuer på de stora teknikföretagen. Därför vill jag i den här artikeln dela med mig av mina erfarenheter av kodningsintervjun och berätta det rakaste sättet att klara den. Du kan nå mig här.
Låt mig ställa en fråga till dig: Har du någonsin drömt om att arbeta i ett stort teknikföretag, som Microsoft? Om så är fallet kan du vara säker på att de flesta av oss också har gjort det. Och eftersom det finns en så stor efterfrågan på några dussin jobb behöver de ett sätt att se vilka kandidater som är bäst förberedda.
För att du ska bli inbjuden till kodningsintervjun måste du ansöka om jobbet och ha ett CV som lyser upp bland de andra. I den här artikeln kommer jag att tala om själva kodningsintervjun och hur du kan förbereda dig för den, och inte om ansökningsprocessen för jobbet.
För de flesta teknikföretag består kodningsintervjun av Algoritmer & Problem med datastrukturer. Tänk på dessa som problemlösningsfrågor, där intervjuaren vill utvärdera din förmåga att lösa ett problem som du inte har sett förut. En intervju tar ungefär 45 minuter och du får ett eller två kodningsproblem. Intervjuaren förväntar sig att du ska hitta den mest optimala lösningen, koda den och förklara vad du just har kodat.
Sist får du chansen att ställa några frågor till honom om företaget eller något annat som intresserar dig. Vi kommer att diskutera alla dessa steg utförligt i den sista delen av den här artikeln.
Hur förbereder man sig för kodningsintervjun?
Jag vill vara tydlig med dig från början: det finns ingen genväg eller något trick för att klara intervjun. Det enda sättet att hitta optimala lösningar på algoritmiska problem är att öva och lösa så många problem som möjligt.
Med två ord är det hårt arbete.
Du kanske inte gillar det och börjar leta någon annanstans efter ett trick för att förstå hur man löser intervjufrågor, men det finns inte. Tänk efter en sekund: om det skulle finnas ett sådant trick, varför skulle inte alla använda det och klara intervjun?
Så du måste förstå att den enda variabeln för att klara intervjun är hur mycket du övar innan. Din erfarenhet, intelligens och allt annat är redan fastställt. Därför kommer den tid som läggs på övning att göra skillnaden mellan kandidater som klarar sig och misslyckas.
Kodningsintervjun är en kamp med dig själv, och det enda sättet att vinna den är att öva mycket.
Det första steget är att känna sig bekväm med ett vanligt kodningsspråk, som C/C++, Java eller Python. Vissa företag accepterar även andra språk, men den klara majoriteten håller sig till dessa tre. Välj det du tycker bäst om och håll dig till det. Bestäm dig inte halvvägs genom förberedelserna för att du vill byta språk! I resten av artikeln utgår jag från att du har valt ett språk och känner väl till dess syntax.
Nu handlar kodningsintervjun vanligtvis om algoritmer och datastrukturer. De innefattar några grundläggande ämnen som du måste förstå grundligt, och överväg inte ens att gå till intervjun utan att känna dig bekväm med dem.
Nedanför finns en lista över de algoritmer och datastrukturer som du måste kunna. Jag har skrivit dem i den ordning de är viktiga och det är den bästa inlärningsvägen.
1) Big O-komplexitet: Det är ett måste och utgör den underliggande grunden för ditt algoritmiska tänkande. Förstå vad det betyder och kom till den punkt då du kan säga komplexiteten hos en grundläggande algoritm bara genom att titta på den.
2) Arrays: Du bör vara bekant med begreppet matriser vid den här tidpunkten. Det här ämnet avser problem där matrisen endast används för lagring och lösningen omfattar grundläggande tekniker, t.ex. iterering med två pekare. Ett klassiskt problem är att kontrollera om en given array är en permutation.
3) Strängar: Vet hur man manipulerar en sträng i ditt språk, och var bekant med problem som ber dig att sammanlänka eller rotera dem.
4) Länkade listor: Det är vanligt att man stöter på ett problem med länkade listor i intervjun. Här måste du vara särskilt uppmärksam på hörnfallen. Tänk på vad som händer om den länkade listan är tom? Eller om den bara har ett element? Eller om du vill iterera fram till det sista elementet? När du löser ett problem med länkade listor ska du tänka två gånger på hörnfallen.
5) Hashtabeller: Grundläggande datastruktur som förekommer i de flesta intervjuer. Om du går djupare in i ett ämne ska du välja hashtabeller. Bli flytande i biblioteket för hashtabeller i ditt språk och öva på minst fem problem. Till slut kan du anta den här utmaningen: Hur skulle du hitta den längsta delmängden med distinkta poster?
6) Staplar: Du måste vara bekant med idén att du bara kan manipulera den ena änden av en stapel. Lös den här utmaningen: Implementera en stapel med ett MAX API, vilket innebär att du vid varje tillfälle kan fråga vad som är det högsta elementet i stapeln.
7) Köer: Förväxla dem inte med stackar, eftersom de har två ändar. Genomför det klassiska problemet med att simulera en kö med hjälp av två staplar.
8) Girighet: Den här tekniken är ganska enkel och du använder den förmodligen varje dag. Den hänvisar i princip till att ta det bästa möjliga beslutet i ett visst ögonblick, utan att ta hänsyn till framtida konsekvenser. Öva dig på några problem och tro inte att alla problem kan lösas med hjälp av Greedy.
9) Primitiva typer: Det handlar mest om bitmanipulation och grundläggande operationer på tal. Vissa problem kan dock bli ganska knepiga. Hur kan man räkna antalet 1:or i en binär representation?
10) Binära träd: Fokusera på traverser, gemensamma förfäder och rekursivt iterera genom träden.
11) Högar: De används ofta i verkliga tillämpningar, så lär känna heaps! Öva tills du kan vara säker på när du ska använda en min-heap eller en max-heap. Hur skulle du skriva ut de fem största elementen i en talföljd? Använder du en min-heap eller en max-heap?
12) Sökning: Sökning är ett kärnämne som alla bör kunna. Öva därför på minst tre problem med binär sökning.
13) Sortering: Se till att du kan implementera mergesort och quicksort. Känn mycket väl till deras bästa, genomsnittliga och värsta komplexitet. Om du har tid, lär dig även Heapsort.
14) Binärsöksträd: Du måste kunna genomföra alla deras grundläggande operationer, inklusive radering av ett element!
15) Backtracking: Du måste kunna genomföra alla deras grundläggande operationer, inklusive radering av ett element!
15) Backtracking: Du måste kunna genomföra alla deras grundläggande operationer, inklusive radering av ett element: Det innebär i princip att generera alla möjliga lösningar och ta de lösningar som uppfyller dina krav. Implementera en generator för potensmängden av mängden och n-Queen-problemet.
16) Grafer: De är förmodligen den mest använda datastrukturen inom datavetenskap. Visste du att varje socialt nätverk bara är en enorm graf? Öva på att göra en kopia av grafen i minnet och upptäcka cykler i grafer.
17) Dynamisk programmering: Dynamisk programmering: Dynamisk programmering ses av de flesta som det mest skrämmande ämnet. Men det är det vackraste om man förstår tankegången bakom det. Så öva på de fem vanligaste frågorna och håll dig till dem tills du förstår var de återkommande frågorna kommer ifrån.
I kursen, som jag skapar nu, förklarar jag varje ämne i denna ordning. Jag arbetar fortfarande med kursen, men du kan få tidig tillgång till några av lektionerna och även hjälpa mig med din feedback genom att gå med i kursens Facebook-grupp.
Om många ämnen är obekanta för dig betyder det att du måste börja öva direkt efter den här artikeln. Du behöver inte längre söka på nätet efter andra guider, utan bara gå och öva. Kom ihåg att intervjun är en kamp med dig själv, ju mer du övar desto större chans att vinna. Det är upp till dig att öka dina problem komfortzon.
Hur ger du ditt bästa under kodningsintervjun?
Intervjun har fem delar som vi kommer att diskutera på djupet. Titta på de förklarande videorna för verkliga exempel.
1) Introduktion
Denna del inleder intervjun och tar cirka tre till fem minuter. Intervjuaren vill veta mer om dig och ger dig möjlighet att presentera dig själv. Typiskt sett är han intresserad av vilka projekt du har arbetat med tidigare och vilket som var det mest imponerande. Det här är din chans att glänsa, så slösa inte bort den!
Försök inte att vara smickrande. Det är lätt att upptäcka en falsk personlighet som försöker lura dig. Jag och alla andra hatar dessa personer, så se till att du visar din sanna personlighet.
Du måste veta i förväg vad du ska säga om ditt favoritprojekt, så förbered det innan intervjun. Nu säger de flesta bara två korta meningar, vilket är dåligt. Vilket svar tycker du bäst om?
1) ”Jag arbetade med en webbapplikation för att bättre hantera patienter på sjukhus. Jag skrev backend i Node.js.”
Sättet du presenterar dig själv har verkligen betydelse
2) ”Ett projekt som jag verkligen gillade handlade om att skapa en webbapplikation för den nationella hälsovårdsmyndigheten i Storbritannien för att hjälpa dem att hantera patienterna på sjukhuset bättre. Det ingick i universitetets läroplan, det tog två månader och jag har varit ledare för ett team på tre personer.
Vi tog projektet från en grundidé och förvandlade det till en riktig tillämpning. Jag var ansvarig för att koda backend i Node.js och databas i MongoDB. Det var den första applikationen jag skapade för en kund och jag var inte bekant med webbteknikerna. Utvecklingsprocessen var iterativ och vi gjorde en del misstag på vägen.
I slutändan överlevererade vi med många funktioner, och min favorit är att användarna kan uppdatera rummen på sjukhuset, i stället för att de är hårt kodade.
Jag lärde mig många saker från det här projektet, särskilt hur man arbetar i ett team. Det fanns några tillfällen då tekniska problem eller teamproblem uppstod, men i slutändan gick allt bra och vi fick årets högsta betyg!”
Vänd den här presentationen till din fördel! Intervjuaren är verkligen intresserad av att få veta mer om dig, så börja med en kortfattad introduktion av projektet och förklara vad det handlar om. Säg sedan vad du bidrog med (om du hjälpte teamet med en smart idé, säg det!) och vad du lärde dig av utvecklingsprocessen. Du kan också nämna vilken skillnad du gjorde för användarna.
Du bör prata en-två minuter om ditt projekt.
2) Förstå problemet
Intervjuaren berättar kortfattat om den problemställning som du ska lösa. Jag sa ”kortfattat” eftersom han inte kommer att ge dig många detaljer om begränsningar, hörnfall eller hur du får data. Det ingår i ditt arbete att fråga efter allt du behöver för att lösa problemet. Upprepa uttalandet högt för att vara säker på att du har förstått det korrekt.