Jaké .NET otázky mohu u pohovoru očekávat?

Autor: Aaron Cao · Aktualizováno

Jaké .NET otázky mohu u pohovoru očekávat?
Očekávejte otázky na běhové prostředí (CLR, garbage collection, hodnotové a referenční typy), jazykové prvky (async a await, LINQ, generika, záznamy), frameworky (middleware a dependency injection v ASP.NET Core, EF Core) a situace jako únik paměti v dlouho běžící službě nebo pomalý koncový bod API. Tazatelé hodnotí způsob uvažování.

Očekávejte otázky na běhové prostředí (CLR, garbage collection, hodnotové a referenční typy), jazykové prvky (async a await, LINQ, generika, záznamy), frameworky (middleware a dependency injection v ASP.NET Core, EF Core) a situace jako únik paměti v dlouho běžící službě nebo pomalý koncový bod API. Tazatelé hodnotí způsob uvažování.

Které otázky na runtime a jazyk otevírají .NET pohovor?

Tazatelé začínají tam, kde začíná framework: u běhového prostředí. Očekávejte vysvětlení, co dělá Common Language Runtime (načítá sestavení, za běhu kompiluje mezilehlý jazyk a spravuje paměť), a poté podrobnější otázky na garbage collection. Řetězec doplňujících otázek je předvídatelný: proč je garbage collector generační, co způsobí, že objekt přežije do pozdější generace, k čemu slouží halda velkých objektů a proč vůbec existují IDisposable a using, když je paměť spravovaná. Na poslední otázku odpovězte zmínkou o nespravovaných prostředcích, jako jsou popisovače souborů a připojení, které garbage collector neumí včas uvolnit.

  • Hodnotové a referenční typy. Kde každý z nich žije, co pro ně znamená kopírování a jaké náklady má boxing.
  • async a await. Vysvětlete, že očekávaná úloha uvolní volající vlákno, místo aby ho blokovala, proč je async void vyhrazeno obslužným rutinám událostí a jaký deadlock mají lidé na mysli, když varují před .Result.
  • LINQ. Pastí je odložené vykonání: dotaz IEnumerable se spustí při enumeraci, nikoli při zápisu, a dotaz vůči databázovému provideru se přeloží do SQL pouze u výrazů, kterým provider rozumí.
  • Generika, rozhraní a záznamy. Omezení, důvody pro použití rozhraní namísto základních tříd kvůli testovatelnosti a přínos hodnotové rovnosti záznamu.

Každou odpověď doplňte mechanismem a jedním důsledkem. Tazatelé chtějí slyšet, že sběr nulté generace je levný, protože většina objektů zaniká brzy; pouhé vyjmenování generací bez vysvětlení nestačí.

Jak vypadají otázky na ASP.NET Core a EF Core?

Jste si jistí při psaní kontrolerů, ale obáváte se, že otázky budou mířit na infrastrukturu, které se dotýkáte jen zřídka. Tato obava je oprávněná, protože právě zde se objevují otázky na framework. Následuje infrastruktura v pořadí, v jakém se na ni obvykle ptají, včetně souvisejících doplňujících otázek.

  • Pipeline požadavku. Middleware běží v pořadí registrace a každá komponenta rozhoduje, zda zavolá následující. Doplňující otázka: kde je autentizace vzhledem k autorizaci a co se stane, když je zaregistrujete v opačném pořadí?
  • Životnosti dependency injection. Singleton žije po celou dobu běhu aplikace, scoped po dobu jednoho požadavku a transient se vytvoří při každém vyřešení. Klasickou pastí je vložení služby scoped, například databázového kontextu, do singletonu; buďte připraveni vysvětlit, proč je to chyba.
  • Konfigurace a options. Vrstvené zdroje, přepsání podle prostředí a vzor options pro typovaná nastavení.
  • EF Core. Sledování změn a kdy je u dotazů pouze pro čtení vypnout, problém N+1 a jeho řešení pomocí eager loadingu nebo projekce, migrace a upřímné určení bodu, kdy ručně napsaný dotaz překoná LINQ.
  • Testování. Jak rozhraní a kontejner DI usnadňují testování služby a co in-memory provider prokazuje a neprokazuje o skutečné databázi.

Nejlepší kandidáti tyto věci propojí: kontext scoped vyřešený uvnitř singletonové služby na pozadí není vědomostní chyták, ale skutečná chyba paměti a správnosti, kterou už tazatelé nasadili do produkce. Chtějí slyšet, že byste explicitně vytvořili scope.

Jak probíhají situační otázky?

Ve výběrových kolech na seniorní pozice dostanete příznak problému a tazatel sleduje váš postup. Typický příklad: backendový vývojář při pohovoru na seniorní pozici v logistické společnosti dostane informaci, že využití paměti API v ASP.NET Core roste celé dny, dokud se kontejner nerestartuje. Silná odpověď nehádá. Kandidát se zeptá, co se změnilo, prověří objekty zachycené statickými cachemi nebo dlouhodobými odběry událostí, vyhledá služby scoped držené singletony, zkontroluje růst haldy velkých objektů a před návrhem opravy pořídí snímek paměti. Tazatel hodnotí pořadí vyšetřování.

Další opakující se situace: koncový bod, který je pomalý jen při zatížení, kdy se odpověď přesune od synchronních databázových volání k async, vyčerpání fondu připojení a ukládání do cache; race condition ve sdílené kolekci a náklady souběžných kolekcí a možností zamykání; požadavek, který musí zavolat tři navazující služby, a způsob řešení časových limitů, opakovaných pokusů a částečného selhání; a migrace, která musí přidat sloupec bez odstávky. V každém případě uveďte omezení, zvolte mechanismus a nahlas popište kompromis.

Tyto situace jsou mnohem snazší, pokud jste si je nacvičili nahlas s doplňujícími otázkami. Právě k tomu slouží režim simulovaného pohovoru; banky otázek pro další jazyky a role najdete v části otázky k pohovoru podle role a tématu.

Může AI asistent při pohovoru pomoci s .NET otázkami?

V konverzačních kolech ano, v rámci uvedených omezení. Nativní desktopová aplikace SubcueAI pro macOS a Windows zachycuje systémový zvuk i váš mikrofon a zobrazuje stručné návrhy odpovědí v místním překryvném okně. Když se tedy tazatel zeptá, proč je kontext scoped uvnitř singletonu chybou, máte mechanismus na obrazovce a můžete ho vysvětlit vlastními slovy. Rozšíření prohlížeče pokrývá hovory na kartě prohlížeče v Chrome a Edge a zachycuje pouze zvuk z karty se schůzkou. K hovoru se nepřipojuje žádný bot a do stránky schůzky se nic nevkládá; nastavení najdete na stránce s návodem.

Omezení: hlídané hodnocení, nahrávání obrazovky, firemně spravovaný notebook nebo živé programování, při kterém pod dohledem píšete C#, sem nepatří. Asistent je nejslabší právě tam, kde pohovor vyžaduje psaní kódu. Nejsilnější je u výše uvedených otázek na runtime, framework a kompromisy. Nejprve mu poskytněte svůj životopis, aby návrhy odpovídaly systémům, které jste skutečně vytvořili; tento profil se nachází v nástroji pro tvorbu životopisu.

Časté dotazy

Proč má .NET garbage collector generace?

Většina objektů zaniká brzy, takže častý a levný sběr nejnovější generace uvolní většinu paměti bez procházení celé haldy. Přeživší objekty jsou povýšeny a sbírají se méně často, což u typických způsobů alokace zkracuje pauzy.

Jaký je v ASP.NET Core rozdíl mezi singleton, scoped a transient?

Singleton se vytvoří jednou pro aplikaci, scoped jednou pro každý požadavek a transient při každém vyřešení. Vložení služby scoped do singletonu ji zachytí po celou dobu běhu aplikace, což je častá chyba u databázových kontextů.

Co await skutečně dělá?

Zaregistruje zbytek metody jako pokračování a vrátí řízení volajícímu, takže je vlákno během dokončování očekávané práce volné. Blokování úlohy pomocí .Result nebo .Wait může místo toho způsobit deadlock v kontextech, které dané vlákno potřebují získat zpět.

Co je problém N+1 v EF Core?

Jde o načtení seznamu nadřazených záznamů a následné spuštění samostatného dotazu pro potomky každého z nich. Eager loading pomocí Include nebo projekce pouze potřebných polí z toho udělají jeden či dva dotazy.

Může SubcueAI pomoci během hlídaného .NET programovacího testu?

Ne. Hlídaná a nahrávaná hodnocení sem nepatří a živé programování pod dohledem je vaše vlastní práce. SubcueAI je určen pro konverzační kola a před nimi můžete trénovat v režimu simulovaného pohovoru.

Související otázky

← Více o Otázky k pohovoru podle role a tématu