100+ otázek k pohovoru na kódování pro programátory

Vyřešte tyto často kladené problémy s kódováním, abyste při příštím pohovoru na pozici programátora uspěli.

20. září, 2019 – 13 minut čtení

.

image_credit- Coderust 3.0: Rychlejší příprava na kódovací pohovor s interaktivními výzvami & Vizualizace

Kódovací pohovory jsou v životě programátora tak důležitou věcí, že mu to prostě nemůže projít. Je to první překážka, kterou musí překonat, aby získali práci softwarového vývojáře, kterou si přáli po celou dobu školní a vysokoškolské docházky.

Aby to bylo ještě horší, na internetu najdete tolik lidí, kteří říkají, že kódovací pohovor je chybný, přijímací proces pro programátory je na nic a podobně, ale nemusíte jim věnovat pozornost, alespoň ne na začátku své kariéry.

Mají sice pravdu, ale jsou ve vlaku, do kterého se snažíte nastoupit. Bez ohledu na to, jak moc kritizují kódovací pohovory a proces přijímání programátorů, mnozí z nich prošli stejnou cestou až tam, kde jsou.

Všichni víme, že systém kódovacích pohovorů není dokonalý a mnozí se ho snaží změnit, ale dokud se nezmění, musíte dodržovat jeho pravidla, abyste se do systému dostali. To je něco, s čím se musí vypořádat zkušení vývojáři, jako juniorský vývojář by vaší prioritou mělo být projít kódovacím pohovorem a získat práci, kterou chcete.

Jako autor blogu o Javě a publikace na médiu Medium dostávám spoustu dotazů týkajících se problémů s kódováním a jejich řešením, a proto neustále píšu články, jako je tento, které přímo i nepřímo pomohly mnoha programátorům v jejich kariéře.

V tomto článku se s vámi podělím o 100 nejlepších problémů z pohovorů o práci programátora, které by měl znát každý programátor.

Teď, když jsem vyjasnil nejasnosti, že pohovor o kódování je důležitý a neměli byste se rozptylovat, pojďme se pustit do skutečné práce. Velkou otázkou je, na co se připravit na Coding Interviews?

No, nejdůležitější je připravit se na úlohy kódování založené na datové struktuře, jako jsou úlohy kódování založené na polích, úlohy kódování řetězců, úlohy spojových seznamů, úlohy binárních stromů atd.

Kromě otázek založených na datové struktuře se většina pohovorů na pozice programátorů ptá také na algoritmy, návrh, manipulaci s bity a obecné logické otázky, které popíšu v této části.

Je důležité, abyste si tyto koncepty procvičili, protože při skutečném pohovoru je někdy jejich řešení složité. Tím, že jste si je předtím procvičili, se s nimi nejen seznámíte, ale také získáte větší jistotu při vysvětlování řešení tazateli.

Jeden z hlavních problémů s kódovacími problémy je, že na pohovorech jsou stovky a tisíce kódovacích problémů, existují dokonce stránky jako LeetCode, HackerRank, Codewars, Topcoder, freeCodeCamp, HackerEarth, které trénují programátory na kódovací pohovory se spoustou náročných otázek, což někdy začátečníka hledajícího práci prostě zahltí.

Věřím v jednoduchost a 10 % úsilí, které přináší 90 % výsledků, a proto jsem shromáždil 100 nejlepších kódovacích problémů, které nejsou příliš těžké a zároveň jsou často kladeny na skutečných pohovorech.

Řešení těchto problémů vám nejen dodá sebedůvěru, ale také vám pomůže rozpoznat některé z nejčastějších algoritmických vzorů, které vám pomohou vyřešit i některé neokoukané problémy na skutečných pohovorech.

Zdroje pro kódovací pohovory

Výběr dobrých zdrojů je velmi důležitý pro váš úspěch u kódovacích pohovorů. Pokud si vyberete špatný zdroj, pak více než o peníze přijdete o drahocenný čas, který potřebujete na přípravu, a proto věnujte nějaký čas hledání dobrého zdroje.

Pokud potřebujete doporučení, níže jsou uvedeny některé z mých vyzkoušených zdrojů pro důkladné učení datových struktur a algoritmů pro pohovory na kódování:

  • Datové struktury a algoritmy: Pro vývojáře v jazyce Java: Deep Dive Using Java. Naučte se o polích, propojených seznamech, stromech, hashtabulkách, zásobnících, frontách, hromadách, algoritmech třídění a vyhledávání
  • Algoritmy a datové struktury v Pythonu pro ty, kteří milují Python
    Průvodce implementací nejaktuálnějších algoritmů od nuly: pole, propojené seznamy, grafové algoritmy a třídění
  • JavaScript Algorithms and Data Structures Masterclass by Colt_Steele for JavaScript programmers. The Missing Computer Science and Coding Interview Bootcamp. Naučte se vše, co potřebujete, abyste uspěli u obtížných kódovacích pohovorů.
  • Mastering Data Structures & Algoritmy s využitím C a C++ pro ty, kteří jsou dobří v C/C++
  • Datové struktury v Javě: An Interview Refresher by The Educative Team to refresh important Data Structure and algorithms concepts in Java. Tento kurz obsahuje podrobný přehled všech běžných datových struktur a poskytuje podrobnosti na úrovni implementace v Javě, aby se čtenáři mohli dobře vybavit.
  • Grokking the Coding Interview: Je to jako meta kurz pro kódovací pohovory, který vás nenaučí, jak řešit kódovací problémy, ale místo toho vás naučí, jak řešit konkrétní typ kódovacích problémů pomocí vzorů. Zvládněte těchto 15 základních vzorů k otázkám na pohovoru a budete schopni řešit vše, s čím se na pohovoru setkáte

A pokud dáváte přednost knihám, není lepší než Cracking The Coding Interview od Gayle Laakmann McDowell, která představuje více než 189 otázek z programování a jejich řešení. Dobrá kniha, jak se v krátké době připravit na pracovní pohovor na programování. Btw, také vydělám nějaké peníze, pokud si koupíte některý z těchto zde uvedených zdrojů.

Několik tipů pro přijímací pohovory na kódování

  1. Není lepší způsob, jak si vést dobře u přijímacích pohovorů na kódování, než procvičit co nejvíce problémů s kódováním. Nejenže si tak vytrénujete rozpoznávání algoritmických vzorců v problémech, ale také získáte tolik potřebnou sebedůvěru při řešení problému, se kterým jste se dosud nesetkali.
  2. Mým druhým tipem je naučit se co nejvíce o datových strukturách a algoritmech. Jedná se o rozšíření předchozího tipu, ale zahrnuje také čtení a nejen procvičování. Pokud například víte o hashovací tabulce, snadno zvládnete i mnoho problémů založených na polích a čítačích. Totéž platí pro stromy a grafy.
  3. Výběr správné datové struktury je velmi důležitou součástí pohovoru pro vývoj softwaru a kódování, a dokud je nebudete znát, nebudete si moci vybrat.
  4. Časujte se – kandidáti, kteří řeší problémy na pohovoru v časovém limitu a rychle, mají větší šanci, že u pohovoru uspějí, takže byste se měli také časovat.
  5. Přemýšlejte o okrajových případech a projděte jimi svůj kód. Dobrými okrajovými případy mohou být prázdný vstup, nějaký podivný vstup nebo nějaký opravdu velký vstup, abyste otestovali okrajové podmínky a limity.
  6. Po vyřešení problému jej zkuste vysvětlit kamarádovi nebo kolegovi, jak se také zajímá o kódování problémů. To vám napoví, zda jste problém skutečně pochopili, nebo ne. Pokud to dokážete snadno vysvětlit, znamená to, že jste pochopili. Diskuse také donutí vaši mysl pracovat a mohli byste přijít s alternativním řešením a dokázat najít některé nedostatky ve stávajících algoritmech.
  7. Dalším užitečným tipem, jak vyniknout u pohovorů na kódování, je dostavit se na pohovor na kódování a hodně jich absolvovat. Po každém pohovoru zjistíte, že se zlepšujete, a to vám také pomůže získat více nabídek, což vám dále umožní lépe vyjednávat a získat těch 30 až 50 tisíc navíc, které obvykle necháváte ležet na stole, pokud máte v ruce jen jednu nabídku.
  8. Btw, pokud jste připraveni na Coding Interview, můžete si také udělat kvíz od TripleByte a jít přímo do finálního kola pohovorů u špičkových technologických společností, jako jsou Coursera, Adobe Acrobat, Dropbox, Grammarly, Uber, Quora, Evernote, Twitch a mnoho dalších. O společnosti Triplebyte jsem dříve nevěděl, ale poskytuje uchazečům o zaměstnání skvělou službu. Patří jim velký dík.

Top 100 Coding Problems from Programming Job Interviews

Až nebudete ztrácet čas, zde je můj seznam 100 nejčastěji kladených kódovacích problémů z pracovních pohovorů na programování. Abyste získali většinu z tohoto seznamu, doporučuji problém skutečně vyřešit.

Dělejte to sami, ať už se zaseknete, protože jen tak se to naučíte. Po vyřešení několika problémů získáte jistotu. Také doporučuji podívat se na řešení, když se zaseknete nebo až po vyřešení problému, tím se naučíte porovnávat různá řešení a přistupovat k problému z jiného úhlu.

  1. Jak je implementován algoritmus bublinového třídění? (řešení)
  2. Jak je implementován algoritmus slučovacího třídění? (řešení)
  3. Jak se počítá výskyt daného znaku v řetězci? (řešení)
  4. Jak vypíšete první neopakující se znak z řetězce? (řešení)
  5. Jak převedete daný řetězec na int jako atoi()? (řešení)
  6. Jak implementujete algoritmus bucket sort? (řešení)
  7. Jak implementujete algoritmus počítacího třídění? (řešení)
  8. Jak odstraníte duplicity z pole na místě? (řešení)
  9. Jak v Javě reverzujete pole na místě? (řešení)
  10. Jak se odstraňují duplicity z pole bez použití nějaké knihovny? (řešení)
  11. Jak se implementuje algoritmus radixového třídění? (řešení)
  12. Jak prohodíte dvě čísla bez použití třetí proměnné? (řešení)
  13. Jak zjistíte, zda se dva obdélníky navzájem překrývají? (řešení)
  14. Jak navrhnete prodejní automat? (řešení)
  15. Jak zjistíte chybějící číslo v daném poli celých čísel od 1 do 100? (řešení)
  16. Jak najdete duplicitní číslo v daném celočíselném poli? (řešení)
  17. Jak najdete duplicitní čísla v daném poli, pokud obsahuje více duplicit? (řešení)
  18. Rozdíl mezi stabilním a nestabilním algoritmem třídění? (odpověď)
  19. Jak se realizuje iterační algoritmus quicksort? (řešení)
  20. Jak zjistíte největší a nejmenší číslo v nesetříděném celočíselném poli? (řešení)
  21. Jak reverzujete spojový seznam na místě? (řešení)
  22. Jak přidat prvek doprostřed spojového seznamu? (řešení)
  23. Jak v Javě seřadit spojový seznam? (řešení)
  24. Jak najdete všechny dvojice celočíselného pole, jejichž součet je roven zadanému číslu? (řešení)
  25. Jak implementujete algoritmus pro třídění vkládáním? (řešení)
  26. Jak se v Javě odstraňují duplicity z daného pole? (řešení)
  27. jak odstranit duplicitní znak z řetězce String? (řešení)
  28. Jak zjistit maximálně se vyskytující znak v daném řetězci String? (řešení)
  29. Jak se seřadí celočíselné pole na místě pomocí algoritmu quicksort? (řešení)
  30. Jak obrátíte daný řetězec na místě? (řešení)
  31. Jak vypíšete duplicitní znaky z řetězce? (řešení)
  32. Jak zjistíte, zda jsou dva řetězce navzájem anagramy? (řešení)
  33. Jak zjistíte všechny permutace řetězce? (řešení)
  34. Jak lze pomocí rekurze převrátit daný řetězec? (řešení)
  35. Jak zjistíte, zda je daný řetězec palindrom? (řešení)
  36. Jak zjistíte délku nejdelšího podřetězce bez opakování znaků? (řešení)
  37. Je dán řetězec str, Jak zjistíte nejdelší palindromický podřetězec ve str? (řešení)
  38. Jak zjistíte, zda řetězec obsahuje pouze číslice? (řešení)
  39. Jak odstranit N-tý uzel z konce spojového seznamu? (řešení)
  40. Jak sloučit dva setříděné propojené seznamy? (řešení)
  41. Jak převést setříděný seznam na binární vyhledávací strom? (řešení)
  42. Jak najít duplicitní znaky v daném řetězci? (řešení)
  43. Jak spočítat počet samohlásek a souhlásek v daném řetězci? (řešení)
  44. Jak obrátíte slova v dané větě, aniž byste použili nějakou knihovní metodu? (řešení)
  45. Jak zjistíte, zda jsou dva řetězce vzájemnou rotací? (řešení)
  46. Jak převést pole bajtů na řetězec? (řešení)
  47. Jak odstraníte daný znak z řetězce String? (řešení)
  48. Jak najdete prostřední prvek jednosvazkového seznamu při jednom průchodu? (řešení)
  49. Jak zjistíte, zda daný spojový seznam obsahuje cyklus? Jak zjistíte počáteční uzel cyklu? (řešení)
  50. Jak obrátíte spojový seznam? (řešení)
  51. Jak reverzujete jednosvazkový seznam bez rekurze? (řešení)
  52. Jak se odstraňují duplicitní uzly v nesetříděném spojovém seznamu? (řešení)
  53. Jak zjistíte délku jednosvazkového seznamu? (řešení)
  54. Jak zjistíte třetí uzel od konce v jednosvazkovém seznamu? (řešení)
  55. Jak zjistíte součet dvou spojovaných seznamů pomocí zásobníku? (řešení)
  56. Jaký je rozdíl mezi polem a spojovým seznamem? (odpověď)
  57. Jak odstranit duplicity ze setříděného spojového seznamu? (řešení)
  58. Jak najít uzel, ve kterém začíná průnik dvou jednosvazkových seznamů. (řešení)
  59. Je dán spojový seznam a hodnota x, rozdělte jej tak, aby všechny uzly menší než x přicházely před uzly většími nebo rovnými x. (řešení)
  60. Jak zjistit, zda je daný spojový seznam palindrom? (řešení)
  61. Jak odstranit ze spojového seznamu celých čísel všechny prvky, které se shodují s danou hodnotou? (řešení)
  62. Jak se implementuje binární vyhledávací strom? (řešení)
  63. Jak se v daném binárním stromu provádí obcházení s předřazením? (řešení)
  64. Jak provedete procházení daného binárního stromu v preorderu bez rekurze? (řešení)
  65. Jak provedete inorder traversal v daném binárním stromu? (řešení)
  66. Jak vypíšete všechny uzly daného binárního stromu pomocí inorder traversalu bez rekurze? (řešení)
  67. Jak implementujete algoritmus procházení pořadí? (řešení)
  68. Jak procházíte binární strom pomocí postorder traversal bez rekurze? (řešení)
  69. Jak se vypisují všechny listy binárního vyhledávacího stromu? (řešení)
  70. Jak spočítáte počet listových uzlů v daném binárním stromu? (řešení)
  71. Jak provedete binární vyhledávání v daném poli? (řešení)
  72. Jak prohodit dvě čísla bez použití třetí proměnné? (řešení)
  73. Jak zjistit, zda se dva obdélníky navzájem překrývají? (řešení)
  74. Jak navrhnout prodejní automat? (řešení)
  75. Jak implementovat LRU Cache ve vašem oblíbeném programovacím jazyce? (řešení)
  76. Jak zjistit, zda je dané číslo palindrom? (řešení)
  77. Jak zjistit, zda je dané číslo Armstrongovo číslo? (řešení)
  78. Jak najít všechny prvočinitele daného čísla? (řešení)
  79. Jak v Javě zjistit, zda je dané číslo kladné nebo záporné? (řešení)
  80. Jak najít největší prvočinitel daného integrálního čísla? (řešení)
  81. Jak vypsat všechna prvočísla až do daného čísla? (řešení)
  82. Jak vytisknout Floydův trojúhelník? (řešení)
  83. Jak vytisknout Pascalův trojúhelník? (řešení)
  84. Jak vypočítat odmocninu z daného čísla? (řešení)
  85. Jak zjistit, zda je dané číslo prvočíslo? (řešení)
  86. Jak v Javě sečíst dvě čísla bez použití operátoru plus? (řešení)
  87. Jak zjistit, zda je dané číslo sudé/liché bez použití aritmetického operátoru? (řešení)
  88. Jak vypsat danou strukturu pyramidy? (řešení)
  89. Jak v Javě najít nejvyšší opakující se souvětí z daného souboru? (řešení)
  90. Jak v Javě obrátit dané celé číslo? (řešení)
  91. Jak v Javě převést desítkové číslo na dvojkové? (řešení)
  92. Jak v Javě zjistit, zda je daný rok přestupný? (řešení)
  93. Lze implementovat binární vyhledávací algoritmus bez rekurze? (řešení)
  94. Rozdíl mezi stabilním a nestabilním algoritmem třídění? (odpověď)
  95. Co je to Algoritmus prohledávání do hloubky pro binární strom? (řešení)
  96. Jak se implementuje iterační algoritmus quicksort? (řešení)
  97. Jak se implementuje algoritmus třídění vkládáním? (řešení)
  98. Jak se implementuje algoritmus slučovacího řazení? (řešení)
  99. Jaký je rozdíl mezi srovnávacími a nesrovnávacími algoritmy řazení? (odpověď)
  100. Jak se implementují algoritmy Eratosthenova síta pro prvočísla? (řešení)

Těchto mnoho otázek by mělo stačit, ale pokud potřebujete více takových kódovacích otázek, můžete si vzít na pomoc knihy jako Cracking The Code Interview od Gayle Laakmann McDowell, která představuje 189+ programovacích otázek a řešení. Dobrá kniha, jak se v krátké době připravit na pracovní pohovor na programování.

Teď jste připraveni na pohovor na kódování

Tyto jsou některé z nejčastějších otázek mimo datové struktury a algoritmy, které vám pomohou při pohovoru dopadnout opravdu dobře.

O spoustu těchto otázek jsem se také podělil na svém blogu, takže pokud vás to opravdu zajímá, můžete si je tam kdykoli vyhledat.

Tyto běžné otázky týkající se kódování, datové struktury a algoritmů jsou ty, které potřebujete znát, abyste mohli úspěšně absolvovat pohovor s jakoukoli společností, velkou či malou, na jakoukoli úroveň programátorské práce.

Pokud hledáte práci v oblasti programování nebo vývoje softwaru v roce 2019, můžete začít svou přípravu s tímto seznamem otázek týkajících se kódování, a pokud jste připraveni na pohovor, pak můžete také absolvovat kvíz společnosti TripleByte a postoupit přímo do závěrečného kola pohovorů u špičkových technologických společností, jako jsou Coursera, Adobe, Dropbox, Grammarly a mnoho dalších.

Tento seznam poskytuje dobrá témata k přípravě a také pomáhá vyhodnotit vaši přípravu a zjistit vaše silné a slabé stránky.

Dobrá znalost datových struktur a algoritmů je důležitá pro úspěch na pohovorech o kódování a právě na ně byste měli zaměřit největší pozornost.

Další vzdělávání
Datové struktury a algoritmy:
10 knih pro přípravu na technické programátorské/kódovací pohovory
10 knih o algoritmech, které by si měl přečíst každý programátor
5 nejlepších knih o datových strukturách a algoritmech pro vývojáře v Javě
Od 0 do 1: &Algoritmy v Javě
Analýza datové struktury a algoritmů – pracovní pohovor
20+ úloh na kódování na bázi řetězců z pohovorů
20+ úloh na propojené seznamy z pohovorů
20+ základních úloh na algoritmy z pohovorů

Závěrečné poznámky

Díky, Dostali jste se až na konec článku … Hodně štěstí u pohovoru na programování! Určitě to nebude snadné, ale podle těchto otázek na vyhledávání a třídění algoritmů jste o krok blíž než ostatní. Mimochodem, čím více otázek v praxi vyřešíte, tím lepší bude vaše příprava.

Takže, pokud si myslíte, že 100 otázek z programování je málo a potřebujete jich více, pak se podívejte na těchto dalších 50 otázek z programování pro telefonické pohovory a na tyto knihy a kurzy pro důkladnější přípravu.

Všechno nejlepší k pohovoru na programování.

Další články, které by se vám mohly líbit:

Napsat komentář