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ě.