Tématika vývoje softwaru
Na jaká technická témata byste měl být schopen reagovat?
Než se ponoříte do technických témat, na které se Vás mohou ptát během vašeho pohovoru, spojte se s kontaktní osobou, abyste se dozvěděl/a předměty/dovednosti, které budete nejpravděpodobněji diskutovat a ukazovat. Obecně naše technické pohovory typicky vyžadují, abyste předvedl/a kódování a cvičení spojené s návrhem systému na bílou tabuli. Mějte na paměti, že invence je součástí naší DNA a technologie je základním nástrojem, který ovládáme za účelem rozvoje a zlepšení všech aspektů zkušenosti, kterou nabízíme našim zákazníkům. Při revizi níže uvedených témat, mějte na paměti vždy hlavně zákazníka.
Technická témata
Programovací jazyk
Před pohovorem na technickou pozici nepožadujeme žádný specifický programovací jazyk. Zkušenost s některým známým jazykem je ale obecně předpokladem úspěchu. Měli byste být obeznámeni se syntaxí jazyků, jako je Java, Python, C#, C/C++ nebo Ruby. Měli byste také znát některé detaily těchto jazyků, jako to, jak pracuje řízení paměti nebo nejčastěji používané kolekce, knihovny atd.
Datové struktury
Většina práce, kterou děláme, zahrnuje efektivní ukládání a poskytování přístupu k datům. To vyžaduje silné zázemí datových struktur. Budete muset pochopit vnitřní fungování běžných datových struktur a být schopni porovnat a rozlišit jejich použití v různých aplikacích. Budeme očekávat, že budete znát časy průběhů programů pro běžné operace a to, jak používají paměť.
Algoritmy
Váš pohovor se nebude soustředit na zapamatování si algoritmů zpaměti. Správné pochopení většiny běžných algoritmů ale velice usnadní řešení některých otázek. Zvažte tedy zopakování běžných algoritmům, jako jsou traverzály, rozděl a panuj, prohledávání do šířky vs. prohledávání do hloubky a pochopit jejich souvislosti. Znalost průběhů, teoretických omezení a strategie základní implementace různých tříd algoritmů je důležitější než memorování specifických detailů jakýchkoliv algoritmů.
Kódování
Očekávejte, že po Vás budeme chtít napsat synteticky správný kód, ne pseudo kód. Pokud se při kódování bez IDE nebo kódování se specifickém nástroji cítíte trochu nejistí, oprašte své znalosti a seznamte se s kódováním pomocí pera a papíru. Nejdůležitější věcí, kterou dělá software development engineer v Amazonu je psaní škálovatelného, odolného a dobře testované kódu. To jsou hlavní kritéria hodnocení Vašeho kódu. Určitě zkontrolujte hraniční případy a ověřte, aby neprošel žádný špatný vstup. To je Vaše šance, jak ukázat Vaše kódovací dovednosti.
Objektově orientovaný design
Kvalitní design je nadřazený rozšířitelnému, bezchybnému kódu s dlouhou životností. Víme, že jsme schopni takřka bez omezení vyřešit jakýkoliv daný softwarový problém, ale pokud má být software rozšířitelný a udržitelný, je dobrý design softwaru důležitý pro úspěch. Jedním způsobem, jak vytvořit odolný software, je použití objektově orientovaného přístupu. Měli byste mít praktickou znalosti několika obecných a užitečných vzorců společně s tím, jak psát software objektově orientovaným způsobem. Pravděpodobně nebudete požádáni popsat detaily toho. jak pracují jednotlivé vzory, ale očekávejte, že budete muset obhájit svůj výběr designu.
Databáze
Většina softwaru, který píšeme, je založena na datovém skladu. Mnoho výzev, se kterými se technici setkávají při vymýšlení toho, jak co nejefektivněji získávat a skladovat data pro budoucí použití. Amazon byl v čele hnutí v oblasti nerelačních databází. Zpřístupnili jsme služby Amazon Web Services jako DynamoDB vývojářské komunitě tak, že mohou snadno využít benefity nerelačních databází. I když neočekáváme jakoukoliv úroveň zkušeností s nerelačními databázemi, měli byste znát databázové koncepce a jejich aplikace. Čím více znáte souvislosti mezi relačními a nerelačními databázemi, tím lépe budete připraveni.
Distribuovaný výpočet
Systémy v Amazonu musí pracovat s vysokým zatížením za velice přísných podmínek. I když máme některé interní nástroje, které nám pomohou se škálováním, je důležité mít pochopení pro několik základních konceptů distribuovaného výpočtu. Pochopení témat, jako je servisně orientovaná architektura, map reduce, distribuovaná cache, vyvažování zátěže a další, Vám pomůže najít odpovědi na některé z komplikovanějších otázek distribuované architektury, na které můžete narazit.
Operační systémy
Nepotřebujte vědět, jak vytvořit od začátku vlastní operační systém, ale měli byste znát některá témata operačních systémů, která mohou ovlivnit výkonnost kódu (např. řízení paměti, procesy, vlákna, synchronizace, stránkování a multithreading).
Internetová témata
Očekáváme, že naši inženýři budou dobře znát základy fungování internetu. Oprašte znalosti toho, jak fungují prohlížeče na vysoké úrovni, od vyhledávání DNS a TCP/IP, až po socketová připojení. Požadujeme důkladné pochopení základů fungování světové webové sítě.
Obecné strojové učení a umělá inteligence
Očekávejte, že se Vás zeptáme na datové modelování, protokoly train/test, analýzu chyb a statistickou významnost. Například musíte umět formulovat definovaný problém jako strojové učení a navrhnout řešení včetně datových zdrojů, anotace, přístupů modelování a potencionálních úskalí. Pochopte základní metody umělé inteligence/strojového učení a algoritmy, projděte si znovu vaše oblíbené učebnice strojového učení a umělé inteligence.
Chápeme, že seznam věcí, které je třeba si projít, je dost dlouhý. Ujišťujeme Vás, že Vaši tazatelé nebudou hodnotit Vaši schopnost si zapamatovat detaily jakéhokoliv tématu. Budou zkoumat vaši schopnost aplikovat to, co znáte, ve prospěch účinného a efektivního řešení problémů. Protože (někdy) nebudete mít dost času připravit se na technický pohovor, doporučujeme projít si základy počítačových věd a vyzkoušet kódování mimo integrované vývojářské prostředí. To Vám pravděpodobně poskytne ty nejlepší výsledky během daného času.