it-swarm.it

C # Multithreading Intervista per una posizione di sviluppatore / designer senior

Mi chiedo che tipo di domande di intervista sono state poste a uno sviluppatore senior o consulente tecnico sul multithreading.

Per favore, forniscimi alcune delle domande dell'intervista che sono state poste nell'intervista sul multithreading, se possibile, metti gentilmente le domande basate sullo scenario con alcune domande teoriche. Come sono venuto a conoscenza dopo la disconnessione con alcune persone che qualche volta l'intervistatore potrebbe darti uno scenario e chiederti di implementarlo?

@ Gentilmente aggiungi le domande specifiche che hai mai affrontato o fatto all'interlocutore nell'intervista oltre a menzionare solo i concetti perché le persone passano attraverso i concetti e trovano ancora difficile gestire le domande dell'intervista. domanda potrebbe effettivamente aiutare la persona a ottenere un vantaggio per il d-day

7
Mohit Bhandari

Potrei chiedere al candidato di descrivere almeno 2 o 3 modi diversi per creare applicazioni multi-thread in C #.

  • Uso esplicito della classe Thread

  • ThreadPool

  • Task Libreria parallela

  • Classe d'azione con funzioni lambda

  • BeginInvoke

  • BackgroundWorker

Vorrei anche chiedere come si potrebbe finire con un'applicazione multi-thread senza mai creare esplicitamente un thread.

  • I gestori di eventi possono essere eseguiti in un altro thread (viene in mente SerialPort.DataReceived, così come uno o due dei tre timer in .Net).

Potresti anche voler parlare dei metodi per creare il codice di rientro.

  • serratura

  • Monitor.Wait e Monitor.Pulse

  • ManualResetEvent

  • classi/metodi statici

Alcune ulteriori informazioni potrebbero provenire da un post che ho scritto qui .

Infine, potrei chiedere esperienze in cui queste lezioni sono state apprese invece di una semplice scarica di cervello da un libro. Uno sviluppatore senior avrà molte esperienze che dovrebbero fornire informazioni sulle loro capacità di scoperta e risoluzione dei problemi.

6
Nate

Una delle mie domande preferite:

  1. Come puoi creare un'interfaccia utente reattiva senza usare i thread. Risposta prevista: suddividendo il lavoro in piccoli pezzi e accodandoli nel ciclo di messaggi dell'interfaccia utente. (Eric Lippert ha una buona spiegazione su come farlo http://blogs.msdn.com/b/ericlippert/archive/2010/10/25/continuation-passing-style-revisited-part-three- musings-about-coroutines.aspx )

Una domanda interessante non attualmente elencata in un'altra risposta:

  1. Spiega il lavoro rubato in TPL. Come funziona e perché? Risposta prevista: Spiegare in che modo il core proprietario della coda estrae gli elementi da un lato mentre un core che non possiede la coda "ruba" dall'altro lato al fine di preservare le linee della cache della CPU.
2
Stilgar

Oltre a tutte le altre risposte, presenterei al candidato un paio di esempi di thread e gli farei indicare dove potrebbero sorgere i problemi.

Alcuni esempi includono condizioni di gara, interblocchi o il fatto che faccia convertire un problema da single thread a multithread. Mi piace in particolare seguire l'ultimo con una revisione del suo design, facendogli spiegare perché, come e quanto aumento delle prestazioni dovrebbe migliorare.

2
Jorge Córdoba

Mi è sempre piaciuta questa matrice: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

Non ti fornisce una scatola pronta di domande ma fornisce un insieme abbastanza esaustivo di campi da cui potresti (dovresti) scegliere le domande per classificare un candidato.

GJ

1
gjvdkamp

Un buon metodo che ho trovato è quello di creare alcune classi simulate che avrebbero bisogno di varie forme di multithreading, come usare Invoke, WaitHandles, Semiphores ecc., Quindi stampare i classe e discutere le opzioni con il candidato. Fornisce all'intervistato più feedback su come pensa il candidato e offre al candidato da offrire in riferimento a progetti precedenti ecc.

0
Lloyd