Quelqu'un a-t-il de bonnes questions de type FizzBuzz qui ne sont pas le problème FizzBuzz?
J'interroge quelqu'un et FB est relativement bien connu et pas si difficile à mémoriser, donc mon premier arrêt dans la recherche d'idées est ma nouvelle dépendance SO.
J'ai vu une petite liste de problèmes de programmation relativement simples utilisés pour éliminer les candidats, tout comme FizzBuzz. Voici quelques-uns des problèmes que j'ai vus, par ordre croissant de difficulté:
Celles-ci étaient pour Java, et vous pouvez utiliser les bibliothèques standard afin que certaines d'entre elles soient extrêmement faciles (comme 6). Mais ils fonctionnent comme FizzBuzz. Si vous avez une idée de la programmation, vous devriez pouvoir le faire assez rapidement. Même si vous ne connaissez pas bien la langue, vous devriez au moins être en mesure de donner l'idée derrière la façon de faire quelque chose.
En utilisant ce test, l'un de mes précédents patrons a tout vu, des gens qui ont tout compris assez rapidement, aux gens qui pouvaient faire le plus rapidement, à un gars qui ne pouvait pas répondre à un seul après une demi-heure.
Je dois également noter: il a laissé les gens utiliser son ordinateur pendant qu'on leur confiait ces tâches. Ils ont été spécifiquement informés qu'ils pourraient utiliser Google et autres.
Peut-être que cela ne répond pas directement à votre question, mais je ne suis pas certain que vous deviez trouver un autre problème. En plus d'être "facile à mémoriser", la question FizzBuzz est tout simplement "facile", et c'est le point. Si la personne que vous interrogez appartient à la classe de personnes à laquelle FizzBuzz est "bien connue", alors elle appartient à la classe de personnes qu'une question de type FizzBuzz ne filtrerait pas. Cela ne signifie pas que vous les embauchez sur place, mais cela signifie qu'ils devraient être en mesure de passer au travers et de passer à la viande de l'entretien.
Pour le dire autrement, quiconque prend le temps de lire Coding Horror mérite une interview plus approfondie. Demandez-leur simplement d'écrire la solution très rapidement, d'en discuter brièvement (par exemple, comment testez-vous cela?), Puis passez à la question suivante. Et comme le dit l'article, "il est vraiment étonnant de voir combien de candidats sont incapables des tâches de programmation les plus simples".
N'importe lequel des premiers de Project Euler serait probablement bon.
Par exemple:
Problème 25
La séquence de Fibonacci est définie par la relation de récurrence:
Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.
Les 12 premiers termes seront donc:
F1 = 1 F2 = 1 F3 = 2 F4 = 3 F5 = 5 F6 = 8 F7 = 13 F8 = 21 F9 = 34 F10 = 55 F11 = 89 F12 = 144
Le 12ème terme, F12, est le premier terme à contenir trois chiffres.
Quel est l'indice du premier terme de la séquence de Fibonacci à contenir 1 000 chiffres?
J'ai trouvé que vérifier une chaîne s'il s'agit d'un palindrome est assez simple et peut être un bon désherbeur.
Je voulais une question FizzBuzz qui n'implique pas l'opérateur modulo. D'autant plus que j'interview généralement des développeurs web pour qui l'opérateur modulo ne revient tout simplement pas si souvent. Et si ce n'est pas quelque chose que vous rencontrez régulièrement, c'est une de ces choses que vous recherchez les quelques fois où vous en avez besoin.
(Certes, c'est un concept que, idéalement, vous auriez dû rencontrer dans un cours de mathématiques quelque part en cours de route, mais c'est un sujet différent.)
Donc, ce que j'ai trouvé est ce que j'appelle, sans imagination, Threes in Reverse. L'instruction est:
Écrivez un programme qui imprime, dans ordre inverse , tous les multiples de 3 entre 1 et 200.
Pour le faire dans l'ordre normal, c'est facile: multipliez l'index de boucle par 3 jusqu'à ce que vous atteigniez un nombre qui dépasse 200, puis quittez. Vous n'avez pas à vous soucier du nombre d'itérations à terminer après, vous continuez jusqu'à ce que vous atteigniez la première valeur qui est trop élevée.
Mais en reculant, il faut savoir par où commencer. Certains pourraient se rendre compte intuitivement que 198 (3 * 66) est le plus grand multiple de 3, et en tant que tel, coder en dur 66 dans la boucle. D'autres pourraient utiliser une opération mathématique (division entière ou un plancher () sur une division en virgule flottante de 200 et 3) pour déterminer ce nombre, et ce faisant, fournir quelque chose de plus génériquement applicable.
Essentiellement, c'est le même genre de problème que FizzBuzz (parcourir les valeurs et les imprimer, avec une torsion). Celui-ci est un problème à résoudre qui n'utilise rien d'aussi (relativement) ésotérique que l'opération modulo.
Pour quelque chose de vraiment super simple qui peut être fait en 10 secondes, mais qui supprimerait les personnes qui ne peuvent littéralement rien programmer , essayez celle-ci:
Demandez: montrez-moi (sur papier, mais mieux sur un tableau blanc) comment vous échangeriez les valeurs de deux variables.
Ce n'était pas mon idée, mais c'était posté dans un commentaire par quelqu'un nommé Jacob sur un article de blog tout sur la question FizzBuzz originale.
Jacob poursuit:
S'ils ne commencent pas à créer une troisième variable, vous pouvez à peu près radier cette personne. J'ai trouvé que je pouvais couper un tiers à la moitié de mes candidats (à ce moment-là, non filtrés) avec cette seule question.
Il y a une autre discussion intéressante après ce commentaire sur le blog original sur les façons d'effectuer cet échange de variable sans nécessiter une troisième variable (ajout/soustraction, xor etc.), et bien sûr, si vous utilisez un langage qui prend en charge cette dans une seule instruction/opération, ce n'est peut-être pas un si bon test.
Bien que ce ne soit pas mon idée, je voulais publier ceci ici, car c'est une question si simple, si élégante et facile à laquelle une personne qui a écrit le plus simple des programmes peut (et devrait) répondre en 10 secondes environ. Il ne nécessite pas non plus l'utilisation d'opérateurs quelque peu obscurs comme l'opérateur modulo, que beaucoup de gens, qui sont par ailleurs des programmeurs assez décents, ne sont tout simplement pas familiers (ce que je sais de ma propre expérience).
Fibonacci, inverser une chaîne, compter le nombre de bits définis dans un octet sont d'autres courants. Project Euler a également une grande collection de difficulté croissante.
Demandez-leur d'écrire une application pour renvoyer les facteurs d'un nombre donné. C'est facile à faire et difficile à bien faire en peu de temps. Vous pouvez voir leur style et la façon dont ils réfléchissent aux problèmes en peu de temps.
Renvoie l'index de la première occurrence de la chaîne X dans la chaîne Y
L'implémentation de strstr () nécessite une compréhension de base du langage tout en offrant la possibilité d'une optimisation intelligente.
S'il s'agit d'un entretien C/C++, assurez-vous que la personne connaît les pointeurs.
Général - algorithme simple (liste chaînée [simple/double]). Renseignez-vous sur la complexité de l'ajout dans chaque cas (au début, à la fin, les optimisations ...)?
(Général) Comment trouvez-vous min et max à partir d'un tableau (taille N) avec seulement 3 * N/2 comparaisons?
C/C++: Comment optimiseriez-vous plusieurs "strcat" dans un tampon?
Découvrez 6.14 depuis le C++ FAQ Lite:
Que diriez-vous: je veux utiliser un seul entier pour stocker plusieurs valeurs. Décrivez comment cela fonctionnerait.
S'ils n'ont aucune idée des masques de bits et des opérations, ils ne peuvent probablement pas résoudre d'autres problèmes.
Trouver une liste de nombres premiers est une question assez courante, mais elle nécessite encore une certaine réflexion et il existe différents degrés de réponses que les gens pourraient donner.
Vous seriez également surpris du nombre de personnes qui ont du mal à implémenter une structure de données de type Carte/Dictionnaire.
J'ai demandé à mes candidats de créer un programme pour calculer factoriel d'un nombre donné dans n'importe quelle pseudo-langue de leur choix. C'est un problème assez facile à résoudre et il se prête bien aux questions de suivi naturelles (qui pourraient souvent être posées) sur la récursivité.