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 de difficulté croissante:
- Inverser une chaîne
- Inverser une phrase ("bob aime les chiens" -> "chiens aime bob")
- Trouvez la valeur minimale dans une liste
- Trouvez la valeur maximale dans une liste
- Calculer un reste (étant donné un numérateur et un dénominateur)
- Renvoie des valeurs distinctes à partir d'une liste comprenant des doublons (par exemple "1 3 5 3 7 3 1 1 5" -> "1 3 5 7")
- Renvoie des valeurs distinctes et leurs décomptes (c'est-à-dire que la liste ci-dessus devient "1 (3) 3 (3) 5 (2) 7 (1)")
- Étant donné une chaîne d'expressions (uniquement des variables, + et -) et un ensemble de paires variable / valeur (c'est-à-dire a = 1, b = 7, c = 3, d = 14) renvoie le résultat de l'expression ("a + b + c -d "serait -3).
Celles-ci étaient pour Java, et vous pouviez utiliser les bibliothèques standard afin que certaines d'entre elles puissent être extrêmement faciles (comme 6). Mais ils fonctionnent comme FizzBuzz. Si vous avez une idée de la programmation, vous devriez être capable de faire le plus rapidement. Même si vous ne connaissez pas bien la langue, vous devriez au moins être en mesure de donner une idée de la façon de faire quelque chose.
En utilisant ce test, l'un de mes anciens patrons a tout vu, des gens qui ont tout fait assez vite, aux gens qui pouvaient faire le plus assez rapidement, à un gars qui ne pouvait pas répondre à une seule après une demi-heure.
Je devrais également noter: il a laissé les gens utiliser son ordinateur pendant que ces tâches leur étaient confiées. Ils ont été spécifiquement informés qu'ils pouvaient utiliser Google et autres.
Cela ne répond peut-être pas directement à votre question, mais je ne suis pas certain que vous ayez besoin de poser 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 interviewez fait partie de la classe de personnes pour laquelle FizzBuzz est "bien connu", 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 à l'essentiel de l'entrevue.
Pour le dire autrement, quiconque prend le temps de lire Coding Horror vaut la peine d'être interviewé plus loin. Demandez-leur simplement d'écrire la solution très rapidement, discutez-en 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 d'effectuer les tâches de programmation les plus simples."
la source
N'importe lequel des premiers du projet Euler serait probablement bon.
Par exemple:
la source
J'ai trouvé que vérifier une chaîne s'il s'agit d'un palindrome est assez simple qui peut être une désherbeuse décente.
la source
scalar(reverse 'foo') == 'foo'
.Je voulais une question FizzBuzz qui n'implique pas l'opérateur modulo. D'autant plus que j'interroge généralement des développeurs Web pour lesquels l'opérateur modulo ne revient pas si souvent. Et si ce n'est pas quelque chose que vous rencontrez régulièrement, c'est l'une de ces choses que vous recherchez les rares 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:
Le faire dans l'ordre normal c'est facile: multipliez l'indice 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 trop élevée.
Mais pour revenir en arrière, il faut savoir par où commencer. Certains pourraient réaliser intuitivement que 198 (3 * 66) est le multiple le plus élevé 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 plancher () sur une division en virgule flottante de 200 et 3) pour déterminer ce nombre et, ce faisant, fournir quelque chose de plus applicable de manière générique.
Essentiellement, c'est le même genre de problème que FizzBuzz (faire une boucle sur 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.
la source
print [x for x in xrange(3, 200, 3)][::-1]
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és croissantes.
la source
Pour quelque chose de vraiment super simple qui peut être fait en 10 secondes, mais supprimerait les personnes qui ne peuvent pas littéralement programme quoi que ce soit , essayez celui - ci:
Ce n'était pas mon idée, mais a été publiée dans un commentaire de quelqu'un nommé Jacob sur un article de blog consacré à la question originale de FizzBuzz.
Jacob poursuit en disant:
Il y a une autre discussion intéressante après ce commentaire sur le billet de blog original sur les moyens d'effectuer cette permutation de variables sans nécessiter une troisième variable (ajouter / soustraire, xor etc.), et bien sûr, si vous utilisez un langage qui prend en charge cela 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 et élégante à laquelle une personne qui a écrit même 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 apparemment 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 connais de ma propre expérience).
la source
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.
la source
La mise en œuvre de strstr () nécessite une compréhension de base du langage tout en offrant la possibilité d'une optimisation intelligente.
la source
S'il s'agit d'une interview 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?
la source
Consultez la version 6.14 de la FAQ C ++ Lite:
http://www.parashift.com/c++-faq-lite/big-picture.html
la source
Que diriez-vous: je souhaite utiliser un seul entier pour stocker plusieurs valeurs. Décrivez comment cela fonctionnerait.
S'ils n'ont pas la moindre idée des masques de bits et des opérations, ils ne peuvent probablement pas résoudre d'autres problèmes.
la source
Trouver une liste de nombres premiers est une question assez courante, mais elle nécessite encore une réflexion et les réponses que les gens peuvent donner à divers degrés.
Vous seriez également surpris du nombre de personnes qui ont du mal à implémenter une structure de données de type Map / Dictionary.
la source
J'ai demandé à mes candidats de créer un programme de calcul 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 naturel (qui pourraient souvent être posées) sur la récursivité.
la source