web-dev-qa-db-fra.com

Questions d'entretien de C # Multithreading pour un poste de développeur / concepteur senior

Je me demande quel genre de questions d'entrevue ont été posées à un développeur senior ou à un consultant technique sur le multithreading.

Veuillez me fournir certaines des questions d'entrevue qui ont été posées lors de l'entretien sur le multithreading si possible, veuillez poser les questions basées sur le scénario avec quelques questions théoriques. Comme j'ai appris après discussion avec certaines personnes qu'un intervieweur pourrait vous donner un scénario et vous demander de le mettre en œuvre?

@ Veuillez ajouter les questions spécifiques que vous avez déjà rencontrées ou posées à l'autre personne lors de l'entretien, sauf en mentionnant uniquement les concepts, car les personnes passent par les concepts et éprouvent toujours des difficultés à gérer les questions de l'entretien. question pourrait effectivement aider la personne à prendre une longueur d'avance pour le jour J

7
Mohit Bhandari

Je pourrais demander au candidat de décrire au moins 2 ou 3 façons différentes de créer des applications multithread en C #.

  • Utilisation explicite de la classe Thread

  • Threadpool

  • Bibliothèque parallèle de tâches

  • Classe d'action avec fonctions lambda

  • BeginInvoke

  • Contexte

Je voudrais également savoir comment on pourrait se retrouver avec une application multithread sans jamais créer explicitement un thread.

  • Les gestionnaires d'événements peuvent s'exécuter dans un autre thread (SerialPort.DataReceived vient à l'esprit, tout comme un ou deux des trois temporisateurs dans .Net).

Vous pouvez également souhaiter parler des méthodes de création de code rentrant.

  • fermer à clé

  • Monitor.Wait et Monitor.Pulse

  • ManualResetEvent

  • classes/méthodes statiques

D'autres informations pourraient provenir d'un article que j'ai écrit ici .

Enfin, je pourrais demander des expériences où ces leçons ont été apprises au lieu d'une simple décharge de cerveau d'un livre. Un développeur senior aura de nombreuses expériences qui devraient fournir un aperçu de leurs capacités de découverte et de résolution de problèmes.

6
Nate

Une de mes questions préférées:

  1. Comment pouvez-vous créer une interface utilisateur réactive sans utiliser de threads. Réponse attendue: en divisant le travail en petits morceaux et en les mettant en file d'attente sur la boucle de message de l'interface utilisateur. (Eric Lippert a une bonne explication sur la façon de le faire http://blogs.msdn.com/b/ericlippert/archive/2010/10/25/continuation-passing-style-revisited-part-three- musings-about-coroutines.aspx )

Une question intéressante qui ne figure actuellement pas dans une autre réponse:

  1. Expliquez le travail de vol dans TPL. Comment ça marche et pourquoi? Réponse attendue: expliquez comment le noyau propriétaire de la file d'attente extrait les éléments d'un côté tandis qu'un noyau qui ne possède pas la file d'attente "vole" de l'autre côté afin de préserver les lignes de cache du processeur.
2
Stilgar

En plus de toutes les autres réponses, je présenterais également au candidat quelques exemples de sujets et lui ferais remarquer où les problèmes pourraient survenir.

Certains exemples incluraient des conditions de concurrence, des verrouillages ou le fait de faire face à la conversion d'un problème de thread unique à multithread. J'aime particulièrement suivre ce dernier avec une revue de sa conception, en lui laissant expliquer pourquoi, comment et combien d'augmentation de performances améliorerait-il.

2
Jorge Córdoba

J'ai toujours aimé cette matrice: http://www.indiangeek.net/wp-content/uploads/Programmer%20competency%20matrix.htm

Il ne vous fournit pas une boîte de questions prête mais il fournit un ensemble assez exhaustif de champs à partir desquels vous pouvez (devriez) choisir des questions pour classer un candidat.

GJ

1
gjvdkamp

Une bonne méthode que j'ai trouvée consiste à créer quelques classes fictives qui auraient besoin de diverses formes de multithreading, comme utiliser Invoke, WaitHandles, Semiphores, etc. puis imprimer les classes et discuter des options avec le candidat. Il donne à la personne interrogée plus de commentaires sur la façon dont le candidat pense et donne au candidat de proposer des références à des projets précédents, etc.

0
Lloyd