Questions d'entretien des programmeurs JavaScript professionnels (avec réponses) [fermé]


131

Quelles sont les bonnes questions pour déterminer si le candidat est vraiment un développeur JavaScript pro (côté navigateur)?

Questions qui permettent de distinguer si quelqu'un n'est pas un programmeur JavaScript ad hoc, mais fait vraiment du développement JavaScript professionnel, orienté objet, réutilisable et maintenable.

Veuillez fournir des réponses , afin qu'un programmeur JavaScript intermédiaire et ad hoc puisse interviewer quelqu'un de plus expérimenté, trouver des réponses à quelques-unes de ces questions avancées m'échappera. Veuillez éviter les questions ouvertes .

Veuillez conserver une question / réponse d'entrevue par réponse SO pour une meilleure expérience de lecture et une préparation plus facile à l'entretien.


21
Jamais un développeur JS intermédiaire n'interroge quelqu'un qui est censé être plus avancé! C'est juste fou. Demandez à une personne qualifiée de faire l'entretien.
James

22
@JP - donc si votre développeur senior quitte, alors vous êtes juste foutu?
tvanfosson

15
@JP J'essaye d'employer quelqu'un de mieux que moi. C'est une petite startup, donc je n'ai pas de meilleur choix, sauf si j'utilise une aide extérieure ... mais alors je devrais l'interviewer;)
Janusz Skonieczny

13
@JP: Si vous ne faites que recruter des gens qui sont au plus aussi bons que vous, un jour, vous serez entouré d'idiots stupides. Essayez toujours d'embaucher quelqu'un qui est meilleur que vous.
Gumbo

1
@ Nick: Le problème est que cette question est trop vaste portée et n'a pas de réponse correcte (voir la FAQ des commentaires « sur le sujet). Il est bien adapté pour un article de blog, mais pas si bien adapté à ce format de questions-réponses. Autrefois, nous aurions peut-être migré vers le génie logiciel , mais après de nombreuses menaces de blessures corporelles de la part des mods programmeurs, nous avons dû changer nos habitudes.
Michael Myers

Réponses:


118

Parce que JavaScript est un langage si petit, mais avec une complexité incroyable, vous devriez être en mesure de poser des questions relativement basiques et de savoir si elles sont vraiment aussi bonnes en fonction de leurs réponses. Par exemple, ma première question standard pour évaluer le reste de l'entretien est:

En JavaScript, quelle est la différence entre var x = 1et x = 1? Répondez avec autant ou aussi peu de détails que vous vous sentez à l'aise.

Les programmeurs JS novices peuvent avoir une réponse basique sur les locaux par rapport aux globaux. Les gars JS intermédiaires devraient certainement avoir cette réponse, et devraient probablement mentionner la portée au niveau de la fonction. Quiconque se qualifie de programmeur JS "avancé" devrait être prêt à parler des locaux, des globaux implicites, de l' windowobjet, de la portée de fonction, du levage de déclaration et des chaînes de portée. De plus, je serais ravi d'entendre parler de la question de la [[DontDelete]]priorité (paramètres vs varvs function) et undefined.

Une autre bonne question est de leur demander d'écrire une sum()fonction qui accepte n'importe quel nombre d'arguments et renvoie leur somme. Ensuite, demandez-leur d'utiliser cette fonction (sans modification) pour additionner toutes les valeurs d'un tableau. Ils devraient écrire une fonction qui ressemble à ceci:

function sum() {
  var i, l, result = 0;
  for (i = 0, l = arguments.length; i < l; i++) {
    result += arguments[i];
  }
  return result;
}
sum(1,2,3); // 6

Et ils devraient l'invoquer sur votre tableau comme ceci (le contexte pour applypeut être n'importe quoi, j'utilise habituellement nulldans ce cas):

var data = [1,2,3];
sum.apply(null, data); // 6

S'ils ont ces réponses, ils connaissent probablement leur JavaScript. Vous devriez ensuite leur poser des questions sur des choses non spécifiques à JS comme les tests, les flux de travail, le contrôle de version, etc. pour savoir s'ils sont un bon programmeur .


4
Bonne question. Petit pinaillon: je crois que vous voulez dire "return result" au lieu de "return i".
Conseil de

4
wow, c'est une erreur stupide. J'ai testé la plupart de mon code sur jsFiddle avant de poster, mais je n'ai pas testé celui-ci. Merci :)
bcherry

5
La fonction de somme doit être résiliente aux types non numériques sans générer d'erreurs. De plus, il devrait être capable de traiter les nombres comme des chaînes pour un crédit supplémentaire.
Abadaba

2
+1 pour une grande mention et une distinction pour savoir s'ils sont un bon programmeur.
Demonslay335

3
Cette ligne: for (i = 0, l = arguments.length; i <l; i ++) est incorrecte car arguments.length sera évalué à chaque itération. Si vous assignez l = arguments.length avant la boucle for, c'est mieux. Droite?
thomallen

94

Programmation JS de base

  • Scope of variable
  • C'est quoi Associative Array? Comment l'utilisons-nous?

OOPS JS

  • Difference between Classic Inheritance and Prototypical Inheritance
  • C'est quoi difference between private variable, public variable and static variable? Comment y parvenir dans JS?
  • Comment add/remove properties to objecten temps d'exécution?
  • Comment y parvenir inheritance?
  • Comment faire extend built-in objects?
  • Pourquoi extending array is bad idea?

DOM et JS

  • Difference between browser detection and feature detection
  • DOM Event Propagation
  • Event Delegation
  • Event bubbling V/s Event Capturing

Divers

  • Graceful Degradation V/s Progressive Enhancement

17
ceci est pour l'embauche de JS Gurus.
Andreas

22
Soyez prêt à ce qu'un développeur JS dise quelque chose comme ceci: JavaScript n'a pas de tableaux associatifs. JavaScript possède cependant des littéraux d'objet, qui peuvent être utilisés comme des tableaux associatifs. En outre, les propriétés des objets sont accessibles en utilisant la notation par points ou des crochets et des chaînes.
Christopher Parker

8
Ce sont des bases pour quelqu'un qui se qualifierait de «développeur JavaScript». Je pense que la profondeur de la réponse est la façon dont vous les évalueriez en tant que gourou ou non.
Ryan Ore

8
Vous voulez dire «héritage prototypique». Erreur commune.
wizzard

4
@wizzard vous vouliez dire `` erreur typique '': p
Nick


17

(Je suppose que vous voulez dire JavaScript côté navigateur)

Demandez-lui pourquoi, malgré sa connaissance infinie de JavaScript, c'est toujours une bonne idée d'utiliser des frameworks existants tels que jQuery, Mootools, Prototype, etc.

Réponse: bon code de codeurs, réutilisation de bons codeurs. Des milliers d'heures de travail ont été consacrées à ces bibliothèques pour extraire les capacités DOM des implémentations spécifiques au navigateur. Il n'y a aucune raison de passer par vous-même tous les maux de tête du DOM du navigateur juste pour réinventer les correctifs.


5
@Tim Down: certes, mais si vous trouvez un package réputé, alors presque toutes les parties du package auront été examinées par des personnes compétentes. Et en tant qu'utilisateur d'un package open source, vous pouvez soumettre des corrections lorsque vous trouvez des erreurs, en ajoutant également votre expertise.
PanCrit

Certes, connaissez la roue - mais n'utilisez pas toujours les mêmes pneus pour différents terrains. Par exemple. Pourquoi utiliser toute la lib jQuery alors que tout ce dont vous avez besoin est le transport Ajax, etc. (pour votre projet) - microjs.com
Ali

1
La réponse à cette question est une question en soi - pourquoi utilisons-nous un IDE et non un simple bloc-notes pour éditer notre code? :)
Navin Israni

11

Demandez-leur comment ils s'assurent que leurs pages continuent d'être utilisables lorsque l'utilisateur a désactivé JavaScript ou que JavaScript n'est pas disponible.

Il n'y a pas de réponse unique, mais vous cherchez une réponse en parlant de certaines stratégies d' amélioration progressive .

L'amélioration progressive comprend les principes de base suivants:

  • le contenu de base doit être accessible à tous les navigateurs
  • les fonctionnalités de base doivent être accessibles à tous les navigateurs
  • Le balisage sémantique clairsemé contient tout le contenu
  • la mise en page améliorée est fournie par CSS lié en externe
  • le comportement amélioré est fourni par [[JavaScript discret | discret]], JavaScript lié en externe
  • les préférences du navigateur de l'utilisateur final sont respectées

1
LA meilleure question pour embaucher un JS de niveau architecte :)
Navin Israni

Tout d'abord, convainquez-moi qu'une personne avec JS désactivé vaut la peine d'investir dans le vrai Web et non dans le dark-web. ces utilisateurs sont probablement trop paranoïaques ou ignorants de l'utilisation d'un navigateur et ont désactivé JS par erreur, de toute façon, leurs chances de conversion sont minces.
vsync


6

Demandez "Quel cadre de test unitaire utilisez-vous? Et pourquoi?"

Vous pouvez décider si l'utilisation d'un cadre de test est vraiment nécessaire, mais la conversation peut vous en dire long sur l'expertise de la personne.


1
À titre de référence, QUnit est incroyable: docs.jquery.com/QUnit
Goyuix

0

les programmeurs intermédiaires doivent avoir une maîtrise technique de leurs outils.

s'il a réussi les questions techniques de l'écran du téléphone ci-dessus, faites-lui esquisser quelque chose de stupide sur place, comme un raccourcisseur d'URL ajax. puis le griller sur son portefeuille. pas de portfolio étonnant = développeur intermédiaire dans ce domaine et pas le type que vous voulez en charge de votre nouveau projet brillant.


4
Les portefeuilles sont au mieux une mesure médiocre - dans le monde d'aujourd'hui, JS est un outil parfaitement accepté dans le monde des entreprises, où les projets battent probablement tous les portefeuilles que vous pourriez voir et où les dépôts publics ne sont pas une chose.
Ilya Ayzenshtok

1
@IlyaAyzenshtok CECI fait partie de mon dilemme. Difficile pour moi de montrer un portefeuille quand 99% de mon travail est propriétaire / derrière un mur de paiement / interne ...
Spartacus

1
@Spartacus - vous pouvez prendre des captures d'écran et expliquer à l'intervieweur votre règle et les obstacles en cours de route. en ce qui concerne les projets open-source, ils sont un excellent moyen d'évaluer une personne avant un entretien pour ajuster les questions par rapport au niveau de codage de la personne vu dans les projets.
vsync
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.