De definitieve gids voor het coderingsinterview

Update: Na het onderstaande advies kreeg ik aanbiedingen van Google, Microsoft, Amazon, Quantcast en Bloomberg.

Dit is een uitgebreide gids die alles bevat wat je moet weten over het coderingsinterview. Het legt grondig uit wat je moet leren, hoe je moet leren en nog belangrijker hoe je de oplossing moet presenteren tijdens het interview.

Als je wilt slagen voor het coderingsinterview, dan heb je het juiste artikel gevonden. Na het lezen van dit artikel ben je misschien geneigd om naar andere artikelen over hetzelfde onderwerp te zoeken, want “misschien vind ik nog wel meer tips en trucs die me zullen helpen”.

Stop met het zoeken naar tips en trucs, dit is wat je weghoudt van je droombaan.

Er zijn geen tips of trucs om die baan te krijgen. Het is gewoon hard werken, punt uit. Dus als je echt dat interview wilt verpletteren, ga dan oefenen na het lezen van dit artikel.

Het artikel bestaat uit drie delen & drie video’s en het zal ongeveer 30 minuten duren om te lezen.

  1. Wat is het coderingsinterview?
  2. Hoe bereid je je voor op het coderingsinterview?
  3. Hoe geef je het beste tijdens het coderingsinterview?

Laat me eerst even voorstellen, zodat je weet dat ik zeker weet waar ik het over heb.

Grootste programmeerwedstrijd van Noordwest-Europa

Mijn naam is Andrei en ik ben al vijf jaar een wedstrijdprogrammeur. Ik heb deelgenomen aan de wereldfinale van Google HashCode, de grootste algoritmische wedstrijd die door Google wordt georganiseerd, en daarvoor heb ik drie gouden medailles gewonnen in de Olympiade van de informatica in Roemenië. Met deze ervaring heb ik de online cursus “Inleiding tot algoritmen en datastructuren in C++” gepubliceerd, die al meer dan 8000 studenten uit 135 landen heeft geholpen met hun eerste stappen in het vakgebied.

Nu studeer ik Computerwetenschappen aan het University College London en ondertussen ben ik een cursus aan het maken om studenten en jonge professionals te helpen zich voor te bereiden op het coderingsgesprek in de grote techbedrijven. Vandaar dat ik in dit artikel mijn ervaring met het coderingsinterview wil delen en je de eerlijkste manier wil vertellen om het te halen. Je kunt me hier bereiken.

Laat me je een vraag stellen: heb je er ooit van gedroomd om in een groot tech bedrijf te werken, zoals Microsoft? Zo ja, dan weet ik zeker dat de meesten van ons dat ook deden. En omdat er zo’n grote vraag is naar enkele tientallen banen, hebben ze een manier nodig om te zien welke kandidaten beter voorbereid zijn.

Voordat je wordt uitgenodigd voor het coderingsgesprek, moet je solliciteren naar de functie en een cv hebben dat schittert tussen de anderen. In dit artikel zal ik het hebben over het eigenlijke coderingsgesprek en hoe je je erop kunt voorbereiden, en niet over het sollicitatieproces voor de baan.

Voor de meeste techbedrijven bestaat het coderingsgesprek uit Algoritmen & Gegevensstructuren problemen. Denk aan deze als probleemoplossende vragen, waarbij de interviewer op zoek is om uw vermogen te evalueren om een probleem op te lossen dat u nog niet eerder hebt gezien. Een interview duurt ongeveer 45 minuten en je krijgt een of twee codeerproblemen. De interviewer verwacht dat je de meest optimale oplossing vindt, deze codeert en uitlegt wat je zojuist hebt gecodeerd.

Ten slotte krijg je de kans om hem enkele vragen te stellen over het bedrijf of over iets dat je interesseert. We zullen al deze stappen uitgebreid bespreken in het laatste deel van dit artikel.

Hoe voor te bereiden op het coderingsinterview?

Ik wil vanaf het begin duidelijk met je zijn: er is niet zo’n snelkoppeling of truc om het interview te slagen. De enige manier om optimale oplossingen voor algoritmische problemen te vinden, is door te oefenen, door zoveel mogelijk problemen op te lossen.

In twee woorden: het is hard werken.

Je vindt het misschien niet leuk en gaat ergens anders op zoek naar een trucje om te begrijpen hoe je interviewvragen moet oplossen, maar dat bestaat niet. Denk eens even na: als er zo’n trucje zou bestaan, waarom zou iedereen het dan niet gebruiken en slagen voor het interview?

Dus, je moet begrijpen dat de enige variabele voor het slagen voor het interview is hoeveel je van tevoren hebt geoefend. Je ervaring, intelligentie en al het andere staat al vast. De tijd die je aan oefening besteedt, zal dus het verschil uitmaken tussen kandidaten die slagen en kandidaten die zakken.

Het coderingsinterview is een gevecht met jezelf, en de enige manier om het te winnen, is door veel te oefenen.

De eerste stap is dat u zich vertrouwd moet voelen met een gangbare codeertaal, zoals C/C++, Java of Python. Sommige bedrijven accepteren ook andere talen, maar de overgrote meerderheid houdt het bij deze drie. Kies de taal die je het leukst vindt en blijf daarbij. Besluit niet halverwege de voorbereiding dat je van taal wilt veranderen! Voor de rest van het artikel ga ik ervan uit dat je een taal hebt gekozen en de syntax goed kent.

Nou, typisch gaat het coderingsinterview over Algoritmen en Datastructuren. Dit zijn enkele fundamentele onderwerpen die je goed moet begrijpen, en denk er zelfs niet aan om naar het interview te gaan als je je er niet vertrouwd mee voelt.

Hieronder vind je een lijst van de algoritmen en gegevensstructuren die je moet kennen. Ik heb ze in volgorde van belangrijkheid geschreven en het is het beste leertraject.

1) Big O complexity: Het is een must en vormt de onderliggende basis van je algoritmisch denken. Begrijp wat het betekent en kom op het punt waarop je de complexiteit van een basisalgoritme kunt zeggen door er alleen maar naar te kijken.

2) Arrays: Op dit punt zou je bekend moeten zijn met het concept van arrays. Dit onderwerp heeft betrekking op problemen waarbij de array alleen voor opslag wordt gebruikt en de oplossing basistechnieken bevat, zoals itereren met twee pointers. Een klassiek probleem is te controleren of een gegeven array een permutatie is.

3) Strings: Weet hoe je een string moet manipuleren in je taal, en wees vertrouwd met problemen die je vragen ze aan elkaar te plakken of te roteren.

4) Gekoppelde Lijsten: Het komt vaak voor dat je in het interview een linked list probleem tegenkomt. Hier moet je speciale aandacht besteden aan de hoekgevallen. Bedenk wat er gebeurt als de gekoppelde lijst leeg is? Of slechts één element heeft? Of je wilt itereren tot het laatste element? Als je een probleem oplost met gelinkte lijsten, denk dan goed na over de hoekgevallen.

5) Hash Tables: Fundamentele datastructuur die in de meeste interviews voorkomt. Als je dieper op een onderwerp ingaat, kies dan hashtabellen. Wees vloeiend in de hash tabellen bibliotheek van je taal en oefen ten minste vijf problemen. Ga uiteindelijk de volgende uitdaging aan: Hoe vind je de langste subarray met verschillende entries?

6) Stacks: Wees vertrouwd met het idee dat je slechts één uiteinde van de stack kunt manipuleren. Los deze uitdaging op: Implementeer een Stack met een MAX API, wat betekent dat je op elk moment kunt vragen wat het maximale element in de stack is.

7) Wachtrijen: Verwar ze niet met stacks, want ze hebben twee uiteinden. Implementeer het klassieke probleem van het simuleren van een wachtrij met behulp van twee stapels.

8) Greedy: Deze techniek is vrij eenvoudig en je gebruikt hem waarschijnlijk elke dag. Het komt erop neer dat men op een bepaald moment de best mogelijke beslissing neemt, zonder rekening te houden met toekomstige gevolgen. Oefen een paar problemen, en denk niet dat elk probleem kan worden opgelost met Greedy.

9) Primitieve typen: Het gaat vooral om bitmanipulatie en basisbewerkingen op getallen. Sommige problemen kunnen echter behoorlijk lastig worden. Hoe tel je het aantal 1’en in een binaire weergave?

10) Binaire bomen: Focus op traversals, gemeenschappelijke voorouders en recursief itereren door de bomen.

11) Heaps: Ze worden veel gebruikt in de echte wereld toepassing, dus maak kennis met heaps! Oefen tot je zeker weet wanneer je een min-heap of een max-heap moet gebruiken. Hoe zou je de grootste vijf elementen uit een getallenreeks afdrukken? Gebruik je een min-heap of een max-heap?

12) Zoeken: Zoeken is een kernonderwerp dat iedereen zou moeten kennen. Oefen dus minstens drie problemen met binair zoeken.

13) Sorteren: Zorg ervoor dat je mergesort en quicksort kunt implementeren. Ken zeer goed hun beste, gemiddelde en slechtste complexiteit. Als je tijd hebt, leer dan ook Heapsort.

14) Binaire zoekbomen: Ze worden veel gevraagd in het coderingsinterview, en je moet in staat zijn om al hun basisoperaties uit te voeren, inclusief het verwijderen van een element!

15) Backtracking: Het betekent in feite het genereren van alle mogelijke oplossingen en neem degene die voldoen aan uw eisen. Implementeer een generator van de machtverzameling van de verzameling en het n-Queen probleem.

16) Grafieken: Ze zijn waarschijnlijk de meest gebruikte datastructuur in de informatica. Wist je dat elk sociaal netwerk gewoon een enorme grafiek is? Oefen met het maken van een kopie van de grafiek in het geheugen en het detecteren van cycli in grafieken.

17) Dynamisch programmeren: Dynamisch programmeren wordt door de meesten gezien als het engste onderwerp. Maar het is het mooiste als je de gedachtegang erachter begrijpt. Dus, oefen de top vijf meest voorkomende vragen en blijf erbij tot je begrijpt waar de recurrenties vandaan komen.

In de cursus, die ik nu aan het maken ben, leg ik elk onderwerp in deze volgorde uit. Ik ben nog steeds bezig met de cursus, maar je kunt vervroegde toegang krijgen tot een aantal van de lessen en me ook helpen met je feedback, door lid te worden van de cursus Facebook-groep.

Als veel onderwerpen onbekend voor je zijn, betekent dit dat je direct na dit artikel moet beginnen met oefenen. Zoek niet meer online naar andere gidsen, maar ga gewoon oefenen. Vergeet niet dat het interview is een gevecht met jezelf, hoe meer je oefenen, hoe groter je kans om te winnen. Het is aan jou om je problemen comfort zone te vergroten.

Hoe geef je het beste tijdens het coderingsinterview?

Het interview heeft vijf onderdelen die we diepgaand zullen bespreken. Bekijk de uitlegvideo’s voor echte voorbeelden.

1) Inleiding

Met dit onderdeel begint het interview en het duurt ongeveer drie tot vijf minuten. De interviewer wil meer over u te weten komen en geeft u de kans uzelf voor te stellen. Doorgaans is hij geïnteresseerd in de projecten waaraan u eerder hebt gewerkt en welke het meest indrukwekkend was. Dit is je kans om te schitteren, dus verspil hem niet!

Probeer niet vleiend te zijn. Het is makkelijk om een nep-persoonlijkheid te herkennen die je probeert te misleiden. Ik en alle anderen hebben een hekel aan die mensen, dus zorg ervoor dat je je ware persoonlijkheid laat zien.

Je moet van tevoren weten wat je gaat zeggen over je favoriete project, dus bereid het voor op het gesprek. Nu zeggen de meeste mensen slechts twee korte zinnen, wat slecht is. Welk antwoord vind je leuker?

1) “Ik heb gewerkt aan een webapplicatie om patiënten in ziekenhuizen beter te kunnen beheren. Ik schreef de backend in Node.js.”

De manier waarop je jezelf presenteert, doet er echt toe

2) “Een project waar ik echt van genoten heb, was het maken van een webapplicatie voor de National Health Services van het Verenigd Koninkrijk om hen te helpen de patiënten in het ziekenhuis beter te beheren. Het was een onderdeel van het universitaire curriculum, het duurde twee maanden en ik was de leider van een team van drie.

We namen het project van een basisidee en maakten er een echte toepassing van. Ik was verantwoordelijk voor het coderen van de backend in Node.js en de database in MongoDB. Het was de eerste applicatie die ik ooit voor een klant heb gemaakt en ik was niet bekend met de webtechnologieën. Het ontwikkelingsproces was iteratief, en we maakten een aantal fouten op de weg.

Op het einde, we over-delivered met veel functies, en mijn favoriete is dat de gebruikers de kamers van het ziekenhuis kunnen bijwerken, in plaats van hard coded.

Ik heb veel dingen geleerd van dit project, vooral hoe te werken in een team. Er waren een paar momenten waarop er technische of teamproblemen ontstonden, maar uiteindelijk is alles goed gegaan en hebben we het hoogste cijfer van het jaar gekregen!”

Van deze presentatie maak je een voordeel! De interviewer is echt geïnteresseerd om meer over jou te weten te komen, dus begin met een beknopte inleiding van het project, waarin je uitlegt waar het over gaat. Vertel vervolgens wat jouw bijdrage was (als je het team hebt geholpen met een slim idee, zeg het dan!), en wat je hebt geleerd van het ontwikkelingsproces. Je kunt ook vermelden welk verschil je hebt gemaakt voor de gebruikers.

Je moet een-twee minuten praten over je project.

2) Begrijp het probleem

De interviewer zal je kort de probleemstelling vertellen die je moet oplossen. Ik zei ‘kort’ omdat hij je niet veel details zal geven over de beperkingen, corner cases of hoe je de gegevens krijgt. Het hoort bij je taak om alles te vragen wat je nodig hebt om het probleem op te lossen. Herhaal de verklaring hardop om er zeker van te zijn dat je het goed begrepen hebt.

Plaats een reactie