Konečný průvodce kódovacím pohovorem

Aktualizace: Na základě níže napsaných rad jsem dostal nabídky od společností Google, Microsoft, Amazon, Quantcast a Bloomberg.

Toto je komplexní průvodce, který obsahuje vše, co potřebujete vědět o pohovoru na kódování. Důkladně vysvětluje, co se učit, jak se učit a hlavně jak prezentovat řešení během pohovoru.

Pokud chcete projít pohovorem na kódování, našli jste správný článek. Po jeho přečtení budete možná v pokušení vyhledat další články na stejné téma, protože „třeba najdu další tipy a triky, které mi pomohou“.

Přestaňte hledat tipy a triky, to je to, co vás od vysněné práce odrazuje.

Neexistují žádné tipy ani triky, jak tuto práci získat. Je to jen tvrdá práce, tečka. Takže pokud chcete ten pohovor opravdu rozdrtit, jděte si to po přečtení tohoto článku procvičit.

Článek má tři části &tři videa a jeho přečtení zabere asi 30 minut.

  1. Co je to pohovor na kódování?
  2. Jak se připravit na pohovor na kódování?
  3. Jak ze sebe při pohovoru na kódování vydat to nejlepší?

Nejprve se představím, abyste věděli, že jsem si jistý tím, o čem mluvím.

Největší programátorská soutěž v severozápadní Evropě

Jmenuji se Andrej a posledních pět let se věnuji soutěžnímu programování. Zúčastnil jsem se světového finále Google HashCode, největší algoritmické soutěže pořádané společností Google, a předtím jsem získal tři zlaté medaile na počítačové olympiádě v Rumunsku. Díky těmto zkušenostem jsem vydal online kurz „Úvod do algoritmů a datových struktur v C++“, který pomohl více než 8000 studentům ze 135 zemí s jejich prvními krůčky v oboru.

Teď studuji informatiku na University College London a mezitím vytvářím kurz, který pomáhá studentům a mladým profesionálům připravit se na pohovor na kódování ve velkých technologických společnostech. Proto se v tomto článku chci podělit o své zkušenosti s kódovacím pohovorem a sdělit vám nejpřímější způsob, jak jím projít. Kontaktovat mě můžete zde.

Nechte mě položit otázku: Snili jste někdy o práci ve velké technologické společnosti, jako je Microsoft? Pokud ano, buďte si jisti, že většina z nás také. A protože je o několik desítek pracovních míst tak velký zájem, potřebují způsob, jak zjistit, kteří kandidáti jsou lépe připraveni.

Než vás pozvou na pohovor na kódování, musíte se o pozici ucházet a mít životopis, který mezi ostatními zazáří. V tomto článku budu mluvit o samotném pohovoru na kódování a o tom, jak se na něj můžete připravit, nikoli o procesu žádosti o místo.

U většiny technologických společností se pohovor na kódování skládá z úloh Algoritmy & Datové struktury. Přemýšlejte o nich jako o otázkách na řešení problémů, ve kterých se tazatel snaží zhodnotit vaši schopnost vyřešit problém, se kterým jste se dosud nesetkali. Jeden pohovor trvá zhruba 45 minut a dostanete jeden nebo dva kódovací problémy. Tazatel od vás očekává, že najdete nejoptimálnější řešení, nakódujete ho a vysvětlíte, co jste právě nakódovali.

Nakonec budete mít možnost položit mu několik otázek týkajících se společnosti nebo čehokoli, co vás zajímá. Všechny tyto kroky komplexně probereme v poslední části tohoto článku.

Jak se připravit na pohovor na kódování?“

Chci, abyste měli hned na začátku jasno: žádná taková zkratka nebo trik, jak projít pohovorem, neexistuje. Jediný způsob, jak najít optimální řešení algoritmických problémů, je cvičení, řešení co největšího počtu problémů.

Dvěma slovy, je to tvrdá práce.

Možná se vám to nebude líbit a začnete hledat někde jinde nějaký trik, jak pochopit, jak řešit otázky na pohovoru, ale ten neexistuje. Na chvíli se zamyslete: kdyby takový trik existoval, proč by ho všichni nepoužívali a pohovorem neprošli?

Takže musíte pochopit, že jedinou proměnnou úspěšného absolvování pohovoru je to, jak moc předtím trénujete. Vaše zkušenosti, inteligence a vše ostatní je již pevně dáno. Proto čas strávený praxí bude rozhodovat o tom, kdo projde a kdo ne.

Pohovor na kódování je boj se sebou samým a jediný způsob, jak ho vyhrát, je hodně trénovat.

Prvním krokem je cítit se pohodlně v některém z hlavních kódovacích jazyků, jako je C/C++, Java nebo Python. Některé společnosti akceptují i jiné jazyky, jasná většina se drží těchto tří. Vyberte si ten, který se vám nejvíce líbí, a držte se ho. Nerozhodujte se v polovině přípravy, že chcete jazyk změnit! Po zbytek článku budu předpokládat, že jste si jazyk vybrali a dobře znáte jeho syntaxi.

Takže, obvykle se pohovor na kódování týká algoritmů a datových struktur. Zahrnují některá základní témata, kterým musíte důkladně rozumět, a ani neuvažujte o tom, že byste šli na pohovor, aniž byste se v nich cítili dobře.

Níže je uveden seznam Algoritmů a Datových struktur, které musíte znát. Sepsal jsem je v pořadí podle jejich důležitosti a je to nejlepší cesta k učení.

1) Složitost velkého O: Je to nutnost a tvoří základní kámen vašeho algoritmického myšlení. Pochopte, co znamená, a dospějte k tomu, že dokážete říct složitost základního algoritmu pouhým pohledem na něj.

2) Pole: V tuto chvíli byste měli být obeznámeni s pojmem pole. Toto téma se týká problémů, kde pole slouží pouze k ukládání a řešení zahrnuje základní techniky, jako je iterace se dvěma ukazateli. Klasickou úlohou je ověřit, zda je dané pole permutací.

3) Řetězce:

4) Propojené seznamy: Zjistěte, jak v jazyce manipulovat s řetězci, a seznamte se s úlohami, které požadují jejich spojování nebo otáčení: V pohovoru se často setkáte s problémem spojového seznamu. Zde je třeba věnovat zvláštní pozornost rohovým případům. Přemýšlejte, co se stane, když je spojový seznam prázdný? Nebo má jen jeden prvek? Nebo chcete iterovat až k poslednímu prvku? Když řešíte problém se spojovými seznamy, dvakrát se zamyslete nad rohovými případy.

5) Hašovací tabulky: Základní datová struktura, která se vyskytuje ve většině rozhovorů. Pokud se budete hlouběji zabývat jedním tématem, zvolte hashovací tabulky. Plynně ovládejte knihovnu hashovacích tabulek svého jazyka a procvičte si alespoň pět úloh. Nakonec přijměte tuto výzvu: „Jak byste našli nejdelší podpole s různými položkami?“

6) Zásobníky: Seznamte se s tím, že můžete manipulovat jen s jedním koncem zásobníku. Vyřešte tento úkol: Implementujte zásobník s API MAX, což znamená, že se v každém okamžiku můžete zeptat, jaký je maximální prvek v zásobníku.

7) Fronty: Nepleťte si je se zásobníky, protože mají dva konce. Implementujte klasický problém simulace fronty pomocí dvou zásobníků.

8) Chamtivost: Tato technika je poměrně jednoduchá a pravděpodobně ji používáte každý den. V podstatě se týká přijetí nejlepšího možného rozhodnutí v určitém okamžiku, aniž by se zvažovaly budoucí důsledky. Procvičte si několik problémů a nemyslete si, že každý problém lze vyřešit pomocí Greedy.

9) Primitivní typy: Zabývá se především manipulací s bity a základními operacemi s čísly. Některé problémy se však mohou stát poměrně složitými. Jak spočítat počet jedniček v binární reprezentaci?“

10) Binární stromy: Zaměřte se na procházení, společné předky a rekurzivní iteraci stromů.

11) Hromady: Jsou hojně využívány v reálných aplikacích, proto se seznamte s hromadami! Trénujte, dokud si nebudete jisti, kdy použít minihromadu a kdy maxihromadu. Jak byste vypsali pět největších prvků z posloupnosti čísel? Použijete min-heap nebo max-heap?“

12) Vyhledávání: Vyhledávání je základní téma, které by měl znát každý. Proto si procvičte alespoň tři úlohy s použitím binárního vyhledávání.

13) Třídění: Ujistěte se, že umíte implementovat mergesort a quicksort. Znát velmi dobře jejich nejlepší, průměrnou a nejhorší složitost. Pokud máte čas, naučte se také Heapsort.

14) Binární vyhledávání stromů:

15) Zpětné vyhledávání (backtracking): Na ně se hojně ptají při pohovoru o kódování a vy musíte umět implementovat všechny jejich základní operace, včetně odstranění prvku!

15) Zpětné vyhledávání: V podstatě znamená vygenerovat všechna možná řešení a vzít ta, která respektují vaše požadavky. Implementujte generátor mocninné množiny množiny a problém n-tice.

16) Grafy: Jsou pravděpodobně nejpoužívanější datovou strukturou v informatice. Věděli jste, že každá sociální síť je jen obrovský graf? Procvičte si vytváření kopie grafu v paměti a detekci cyklů v grafech.

17) Dynamické programování: Dynamické programování je většinou považováno za nejstrašidelnější téma. Je však nejkrásnější, pokud pochopíte myšlení, které za ním stojí. Procvičte si tedy pět nejčastějších otázek a držte se jich, dokud nepochopíte, odkud se berou rekurence.

V kurzu, který nyní vytvářím, vysvětluji jednotlivá témata v tomto pořadí. Na kurzu stále pracuji, ale můžete získat předčasný přístup k některým lekcím a také mi pomoci svou zpětnou vazbou, když se připojíte ke skupině kurzu na Facebooku.

Pokud je pro vás mnoho témat neznámých, znamená to, že musíte začít procvičovat hned po tomto článku. Už nemusíte hledat na internetu jiné příručky, prostě jděte a cvičte. Nezapomeňte, že pohovor je boj se sebou samým, čím více budete trénovat, tím větší máte šanci vyhrát. Záleží jen na vás, jak zvýšíte svou komfortní zónu problémů.

Jak ze sebe vydat během pohovoru na kódování to nejlepší?“

Pohovor má pět částí, které si podrobně probereme. Podívejte se na vysvětlující videa, kde najdete reálné příklady.

1) Úvod

Tato část zahajuje pohovor a trvá asi tři až pět minut. Tazatel se o vás chce dozvědět více informací a dává vám možnost se představit. Obvykle ho zajímá, na jakých projektech jste již pracovali a který z nich byl nejpůsobivější. Nyní máte šanci zazářit, tak ji nepromarněte!“

Nesnažte se být lichotiví. Je snadné rozpoznat falešnou osobnost, která se vás snaží oklamat. Já i všichni ostatní takové lidi nesnášíme, takže se ujistěte, že ukážete svou pravou osobnost.

Musíte předem vědět, co budete říkat o svém oblíbeném projektu, takže si to připravte před pohovorem. Většina lidí teď řekne jen dvě krátké věty, což je špatně. Která odpověď se vám líbí více?“

1) „Pracoval jsem na webové aplikaci pro lepší správu pacientů v nemocnicích. Backend jsem napsal v Node.js.“

Na tom, jak se prezentujete, opravdu záleží

2) „Projekt, který mě opravdu bavil, se týkal vytvoření webové aplikace pro Národní zdravotní službu Spojeného království, která jim měla pomoci lépe spravovat pacienty v nemocnici. Byl součástí univerzitních osnov, trval dva měsíce a já jsem vedl tříčlenný tým.

Projektu jsme se věnovali od základní myšlenky až po skutečnou aplikaci. Byl jsem zodpovědný za kódování backendu v Node.js a databáze v MongoDB. Byla to první aplikace, kterou jsem kdy vytvořil pro klienta, a s webovými technologiemi jsem nebyl obeznámen. Proces vývoje byl iterativní a cestou jsme udělali několik chyb.

Nakonec jsme se předháněli v mnoha funkcích a moje nejoblíbenější je, že uživatelé mohou aktualizovat pokoje v nemocnici, místo aby byly natvrdo zakódované.

Na tomto projektu jsem se naučil mnoho věcí, zejména jak pracovat v týmu. V některých chvílích se vyskytly technické nebo týmové problémy, ale nakonec vše dopadlo dobře a dostali jsme nejvyšší známku roku!“

Proměňte tuto prezentaci ve svůj prospěch! Tazatel má skutečně zájem dozvědět se o vás více, proto začněte stručným představením projektu a vysvětlete, o co se jedná. Pak řekněte, jaký byl váš přínos (pokud jste týmu pomohli s nějakým chytrým nápadem, řekněte to!) a co jste se z procesu vývoje naučili. Můžete se také zmínit o tom, co jste změnili pro uživatele.

O svém projektu byste měli mluvit jednu až dvě minuty.

2) Pochopení problému

Tazatel vám stručně sdělí zadání problému, který musíte vyřešit. Řekl jsem „stručně“, protože vám nesdělí mnoho podrobností o omezeních, rohových případech nebo o tom, jak obdržíte data. Součástí vaší práce je zeptat se na vše, co k vyřešení problému potřebujete. Zopakujte si zadání nahlas, abyste se ujistili, že jste ho pochopili správně.

Napsat komentář