Questions liées à OO Design dans les entretiens techniques [clôturé]


14

J'ai assisté à plusieurs entretiens récemment et les entreprises m'ont demandé de répondre à plusieurs fois aux questions «concevoir un [insérer le modèle]».

  1. Est-ce normal dans l'industrie de nos jours? Je suis dans le monde du logiciel depuis plus de deux décennies et j'ai assisté à ma part d'entrevues, mais je vois ce modèle émerger récemment.
  2. Je pense que la question est très ouverte. Par exemple: on m'a demandé de dessiner un diagramme de classe pour "Concevoir un parking". Je ne sais pas à quel niveau de détail l'intervieweur s'attend. C'était dans un test en ligne où je devais joindre un diagramme visio, donc je ne pouvais pas leur demander quelles étaient leurs attentes.
  3. Utilisez-vous ce genre de questions dans votre processus d'entrevue? Sont-ils liés uniquement aux diagrammes de classes ou demandez-vous également des séquences, des organigrammes et des DRE (bien sûr, en fonction de la nature du poste). Ont-ils été efficaces dans votre processus d'embauche?

* Modifier pour la réponse de Kevin *

Par exemple: Une question complète pourrait être "Concevoir un système de gestion de parking qui peut être utilisé pour trouver des emplacements vacants"

Je peux être fait avec 2 classes, ParkingLotet Slotou je pourrais continuer à ajouter IVehicleet Vehicleet Caret Motorcycleclasses. Où dois-je tracer la ligne?

public class ParkingLot
{
   IVehicle Vehicle {set; get;}

   List<Slot> GetEmptySlots() { };
}

public class Vehicle : IVehicle
{
  Slot SlotNum {set; get;}
}

public class Slot
{
  int Row {set; get;}
  int Column {set; get; }
}

Les problèmes de «conception de tout » remontent à des décennies.
Blrfl

Demandez toujours - Voulez-vous une réponse simple et précise à ce problème? Ou voulez-vous une réponse plus robuste au problème générique?
Chris Cudmore

Réponses:


10
  1. Dans une certaine mesure, oui. Tout le monde peut réciter la syntaxe ou copier / coller son chemin à travers une solution. Nous voulons embaucher des gens capables de résoudre des problèmes.

  2. Ils s'attendent à ce que vous documentiez suffisamment la conception pour pouvoir la comprendre (et pas plus que cela).

  3. Je demande aux gens comment ils résoudraient le problème XYZ, oui. Habituellement, ils le décrivent verbalement. Je veux voir s'ils posent des questions pour clarifier les exigences. Je veux voir comment ils communiquent avec d'autres programmeurs. Je veux voir s'ils peuvent penser debout.

Cela m'a été utile. Je ne veux pas de singes codés, je veux des ingénieurs logiciels.


Je n'ai pas pu poser de questions pour clarifier les exigences car cela m'a été demandé dans le cadre d'un test en ligne. Je comprends que juger de leurs compétences en communication peut être en partie le motif d'une telle question. Mais cela aide-t-il vraiment à comprendre leurs compétences analytiques et de conception?
Nick

1
@nick - dunno. Les tests en ligne sont d'un avantage discutable en premier lieu. En personne, il donne un aperçu des compétences en conception.
Telastyn

6

Je trouve ces questions plutôt stupides. La vraie réponse est "quels sont les cas d'utilisation?" Sans cas d'utilisation, aucune conception n'est nécessaire. Par exemple, voici une réponse parfaitement raisonnable à la question du parking:

class ParkingLot {
 boolean isFull();
 void carEntered();
 void carExited();
}

Il satisfait un cas d'utilisation évident.


Suggérez-vous que ces questions n'ont de valeur que lorsque des cas d'utilisation leur sont associés? S'il y a eu des cas d'utilisation, comment déterminez-vous encore la profondeur de ce que l'intervieweur attend? S'il vous plaît voir modifier **
Nick

2
Je suggère qu'avant de concevoir quoi que ce soit, je serais d'accord sur les cas d'utilisation avec l'intervieweur.
kevin cline

1
Cela n'en fait pas une question idiote. Au contraire, cela permet de découvrir si un candidat est capable de clarifier des exigences vagues. C'est une compétence essentielle.
Cameron Skinner

1
Ce n'est pas idiot si l'intervieweur sait qu'il n'y a pas assez d'informations pour commencer à concevoir quoi que ce soit.
kevin cline

Je suis d'accord avec votre réponse et votre commentaire ci-dessus. Il y a toujours la possibilité avec ce genre de question que l'intervieweur l'a simplement prise parce qu'il "l'aimait" sans vraiment savoir à quoi cela sert (évalue la capacité du candidat à exiger les bons détails / obligatoires à un problème incomplet / vague / générique). À son tour, cela peut conduire l'intervieweur à traiter tout type de question / clarification de suivi comme une «mauvaise approche» du problème.
Shivan Dragon

5

Vous démontrez en fait une utilisation de cette question dans votre édition, où vous ne parvenez pas à concevoir un modèle réalisable.

public class ParkingLot
{
   IVehicle Vehicle {set; get;}

   List<Slot> GetEmptySlots() { };
}

public class Vehicle : IVehicle
{
  Slot SlotNum {set; get;}
}

public class Slot
{
  int Row {set; get;}
  int Column {set; get; }
}

var parkingLot = new ParkingLot();
var v1 = new Vehicle();
v1.Slot = parkingLot.GetEmptySlots()[0];
parkingLot.Vehicle = v1; // WHAT!??

Vous mentionnez également la création Caret les Motorcycleclasses, ce qui n'a pas beaucoup de sens sans plus de considération. Votre conception ne bénéficiera d'aucune sous-classe Vehicle. Si vous introduisez Motorcyclesans aucune différence de comportement Vehicle, je considérerais cela comme un échec.

Si vous n'avez pas repéré le seul Vehicleproblème, nous ferions à peu près une interview en direct. Si vous corrigiez cela (éventuellement en faisant cela List<IVehicle>), je l'utiliserais comme point de départ pour regarder l'évolution de votre conception. Il y a une raison pour laquelle les exigences sont basiques, et il n'y a pas de cas d'utilisation bien définis - c'est à peu près la façon dont le monde fonctionne.

Je pourrais vous lancer la nouvelle exigence selon laquelle "deux motos peuvent se garer dans un emplacement" pour voir comment vous évolueriez votre conception pour la gérer. Alors peut-être que nous aurons une conversation sur la concurrence (Et si nous avons deux entrées et deux voitures s'arrêtent simultanément - votre conception échouera-t-elle? Comment? Que pouvons-nous faire pour y remédier?). D'autres avenues possibles à explorer seraient de savoir comment mettre en œuvre le stationnement assigné, facturer le stationnement, les tarifs par rangée (peut-être que les rangées plus proches doivent payer plus), le stationnement limité dans le temps et comment trouver les délinquants, etc., etc.

Je considérerais également votre réflexion sur les parkings comme une indication de votre capacité générale à analyser intelligemment un problème. Si vous devez me demander des cas d'utilisation de base et / ou trouver des cas excentriques (comme des offres spéciales 2 pour 1 sur le stationnement), je commence à m'inquiéter fortement que vous n'ayez jamais réellement utilisé un parking avant et que nous sommes va avoir du mal à communiquer sur quelque chose de légèrement compliqué.


3

J'avais l'habitude de les demander - en arrière lorsque nous avons créé des diagrammes de classes pour la génération de code. Je le fais encore à l'occasion, mais pas régulièrement. J'aime la question car elle me permet de voir la personne réfléchir.

Il est destiné à être ouvert. C'est bon. Il n'y a pas de bonne réponse. Je n'ai pas de réponse en tête; Je veux voir où ça mène. Je pense que c'est une meilleure question à poser en personne, pas un «e-mail en réponse». Il s'agit de communication, d'hypothèses et d'interaction; pas seulement une réponse!


"J'aime la question parce qu'elle me permet de voir la personne penser" -> Que recherchez-vous exactement lorsque vous évaluez ses capacités de réflexion? Est-ce la vitesse à laquelle ils résolvent le problème? Est-ce la solution finale? Est-ce à quel point ils vont dans la création de classes, d'interfaces? Est-ce ainsi qu'ils démontrent à quel point ils connaissent les concepts POO (héritage, polymorphisme, etc.)?
Nick

Sont-ils méthodiques? Pensent-ils à ce qui pourrait mal tourner? Pensent-ils à des alternatives? Déclarent-ils rapidement la défaite à la question étrange? (Je demande généralement quelque chose comme un téléphone, pas un objet que la plupart des gens ont conçu auparavant?). Je ne cherche pas la vitesse (à moins que quelqu'un prenne 15 minutes avant même de commencer à dire quoi que ce soit!)
Jeanne Boyarsky

3
  1. J'ai vu ce type d'interviews il y a au moins 12 ans. C'est l'approche que j'utilise depuis 6 ans. L'expérience montre qu'il sélectionne de meilleurs candidats pour le poste que de poser 20 questions et de leur attribuer une note sur 20.

  2. Encore une fois, je le rendrais très ouvert aussi. Le but est de fournir un espace au candidat pour démontrer sa capacité. Avoir un candidat qui a posé des questions pertinentes à ce stade serait un plus. Tout comme un candidat faisant de bonnes hypothèses, mais signalant qu'il s'agissait d'hypothèses, et qu'elles devraient être examinées avant la mise en œuvre.

  3. Je demande à tous les employés potentiels de démontrer les compétences dont ils ont besoin pour le travail lors de l'entretien. Pour les programmeurs, ils devront implémenter du code et parler de leur conception pour cela. Il est très efficace pour prévenir les mauvaises embauches, mais soyez prêt à un taux d'échec de 90% lors de l'entretien.


Rendre la question ouverte est acceptable tant que je peux demander intelligemment à l'intervieweur des informations spécifiques. Quand on m'a demandé de le faire en ligne, tout ce que je pouvais faire était de deviner la solution. Posez-vous généralement des questions de conception lorsque vous réalisez un entretien en face à face?
Nick

J'ai tendance à faire les deux. Un défi de programmation technique, qu'ils soumettent par email avant d'être invité à un entretien, ainsi que différents exercices en face à face.
Michael Shaw

Ces défis ouverts n'ont pas de réponse correcte unique et tout le reste est faux. Leur objectif est d'identifier les personnes qui ont de bons processus de réflexion, de prendre des décisions judicieuses et d'évaluer le soutien dont elles auront besoin pour exécuter les tâches.
Michael Shaw

2

La conception d'un petit système est en fait un exercice très pertinent à poser lors d'un entretien. Il montre vos compétences pour trouver une bonne solution logicielle à un problème de domaine.

Cependant, je trouve étrange de simplement demander à publier un diagramme de classe en ligne sans interaction humaine:

  • Ils manqueront l'essentiel - le raisonnement derrière le diagramme et ce qui vous a amené à concevoir les choses de cette façon.
  • Il n'y a pas de "parapet" pour empêcher le demandeur d'aller trop loin. Si vous reflétez une implémentation finale dans le diagramme, vous aurez probablement des dizaines de classes et un schéma illisible.
  • Pouvoir dessiner un diagramme de classe UML n'est pas vraiment une compétence essentielle, c'est juste une notation OO parmi d'autres. La possibilité de créer des conceptions solides est.

Dans une interview en direct, les étapes idéales que j'attendrais d'un candidat seraient:

  • Discutez du problème avec le recruteur et commencez à exprimer verbalement une solution de base, posez des questions et ajustez-le lorsque le recruteur donne des besoins plus précis.
  • Levez-vous et esquissez une vue d'ensemble du système et comment les composants peuvent interagir ensemble. Peut-être le style UML le plus pur, peut-être simplement des boîtes et des cercles.
  • Rédiger un test, soit un test d'acceptation de haut niveau ou un test unitaire pour l'un des composants / classes.
  • Commencez à écrire l'implémentation correspondante.

Espérons qu'à un moment donné, le recruteur aura rassemblé suffisamment d'informations sur les compétences du candidat et l'appellera un jour. Le but n'est pas de mettre en œuvre une solution de travail complète (à moins qu'il s'agisse de l'un de ces services non rémunérés lors d'entretiens déguisés).


0

Les questions POO sont ouvertes. Il n'y a pas de bonne ou de mauvaise réponse, mais il y a certains principes que les enquêteurs s'attendent à voir (comme utiliser un constructeur pour initialiser des variables, garder vos méthodes petites, utiliser l'encapsulation / composition / polymorphisme / héritage le cas échéant, etc.).

Attendez-vous toujours à des questions sur la structure des données, la POO et la base de données dans les entretiens, elles sont très courantes. Des livres comme «cracker l'entrevue de codage» et «entrevues de programmation exposées» peuvent vous aider à vous préparer.


-1

On m'avait demandé de sortir un design pour un parking il n'y a pas si longtemps. Je n'ai reçu aucun cas d'utilisation en premier lieu, mais j'en ai mentionné quelques-uns plus tard. Je crois que ma conception ne correspondait pas à ce que l'enquêteur avait en tête. J'accepte que toute conception de logiciel ne soit valable que pour un cas d'utilisation donné. Revenons à cette question d'entrevue, je crois que mon intervieweur n'avait aucune expérience de conception dans le monde réel. Ces gens croient qu'ils savent ce qu'ils demandent. C'est une autre histoire, que ce soit vrai ou non.


1
comment cela répond-il à la question posée?
gnat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.