it-swarm-eu.dev

C # Vícevláknové rozhovory Otázky pro vedoucí pozici vývojáře / designéra

Zajímalo by mě, jaké otázky týkající se rozhovorů byly položeny vedoucímu vývojáři nebo technickému konzultantovi v oblasti multithreadingu.

Laskavě mi poskytněte pár otázek, které byly položeny v rozhovoru o multithreadingu, pokud je to možné, laskavě položte otázky na základě scénáře několika teoretickými otázkami. Jak jsem se dozvěděl po diskuzi s některými lidmi, že vám nějaký čas tazatel může dát scénář a požádat vás, abyste jej implementovali?

@ Laskavě přidejte konkrétní otázky, na které jste se někdy při rozhovoru setkali nebo jste se jich zeptali, kromě toho, že byste se zmínili pouze o pojmech, protože lidé se těmito pojmy procházejí a stále je pro ně obtížné zvládnout otázky na pohovor. Jakékoli úsilí o přidání konkrétních otázek Otázka by ve skutečnosti mohla pomoci člověku získat náskok na d-den

7
Mohit Bhandari

Mohl bych požádat kandidáta, aby popsal alespoň 2 nebo 3 různé způsoby vytváření vícevláknových aplikací v C #.

  • Explicitní použití třídy vlákno

  • Threadpool

  • Paralelní knihovna úloh

  • Akční třída s funkcemi lambda

  • BeginInvoke

  • BackgroundWorker

Také bych se zeptal, jak by někdo mohl skončit s aplikací, která má více podprocesů, aniž by to explicitně vytvořilo vlákno.

  • Obslužné rutiny událostí mohou běžet v jiném vlákně (přijde na mysl SerialPort.DataReceived, stejně jako jeden nebo dva ze tří časovačů v .Net).

Možná budete také chtít mluvit o metodách vytváření kódu pro opětovné zadání.

  • zámek

  • Monitor.Wait a Monitor.Pulse

  • ManualResetEvent

  • statické třídy/metody

Některé další informace by mohly pocházet z příspěvku, který jsem napsal zde .

Nakonec bych mohl požádat o zkušenosti, kde se tyto lekce poučily, místo pouhého výpisu z knihy. Starší vývojář bude mít spoustu zkušeností, které by měly poskytnout informace o jejich schopnostech objevovat a řešit problémy.

6
Nate

Jedna z mých oblíbených otázek:

  1. Jak můžete vytvořit responzivní uživatelské rozhraní bez použití vláken. Očekávaná odpověď: Rozdělením práce na malé kousky a zařazením do fronty ve smyčce zpráv uživatelského rozhraní. (Eric Lippert má dobré vysvětlení, jak to udělat http://blogs.msdn.com/b/ericlippert/archive/2010/10/25/continuation-passing-style-revisited-part-three- musings-about-coroutines.aspx )

Zajímavá otázka, která v současné době není uvedena v jiné odpovědi:

  1. Vysvětlete krádež práce v TPL. Jak to funguje a proč? Očekávaná odpověď: Vysvětlete, jak jádro, které vlastní frontu, extrahuje položky na jedné straně, zatímco jádro, které nevlastní frontu, „ukradne“ z druhé strany, aby se zachovaly řádky mezipaměti CPU.
2
Stilgar

Kromě všech ostatních odpovědí bych také představil uchazeči několik příkladů nití a uvedl jsem mu, kde by se mohly problémy vyskytnout.

Některé příklady by zahrnovaly rasy, blokování nebo přiměly ho, aby převedl problém z jednoho vlákna na vícevláknový. Obzvláště rád sleduji ten poslední s přezkoumáním jeho návrhu a dovolím mu vysvětlit, proč, jak a jak by se zvýšení výkonu zlepšilo.

2
Jorge Córdoba

Tuto matici se mi vždy líbilo: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

Neposkytuje vám připravenou krabici otázek, ale poskytuje docela vyčerpávající sadu polí, z nichž byste mohli (měli) vybírat otázky k hodnocení žadatele.

GJ

1
gjvdkamp

Dobrou metodou, kterou jsem našel, je vytvořit několik simulovaných tříd, které by potřebovaly různé formy multithreadingu, jako je použití Invoke, WaitHandles, Semiphores atd., Poté vytiskněte třídy a prodiskutujte možnosti s uchazečem. Poskytuje dotazované osobě více zpětné vazby o tom, jak si kandidát myslí, a dává kandidátovi možnost nabídnout odkazy na předchozí projekty atd.

0
Lloyd