Je pense qu'il y a ces questions faciles fizzbuzz, inverser une chaîne, etc., et puis il y a certaines questions alors que si vous ne les avez pas vues auparavant, il est difficile d'obtenir la solution optimale prévue avec la pression supplémentaire de l'entretien et le court laps de temps contraintes. Le pire, c'est que parfois des recruteurs sans connaissances techniques posent certaines de ces questions et recherchent une réponse très précise ... Si vous ne donnez pas la réponse optimale, ils pensent que vous êtes un idiot absolu. Même si votre réponse fonctionne, résout le problème et bien qu'elle ne soit pas optimale, elle n'est pas trop inefficace ...
Quelques exemples:
Comment mélangeriez-vous un jeu de cartes? Ils recherchent la méthode Fisher-Yates http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffleles autres réponses sont "incorrectes" ... Ce n'est pas quelque chose que vous êtes susceptible de savoir à moins que vous ne vouliez mélanger les cartes avant et que vous ne l'ayez spécifiquement recherché. Vous pourriez tomber dessus au cours de la réponse, mais d'après ce que j'ai vu, ils s'attendent à ce que vous connaissiez ce rhume, il est donc peu probable qu'il y ait beaucoup de temps pour permettre de trouver la solution. Une autre façon moins efficace (mais peut-être plus évidente) consiste à créer un nouveau tableau avec un pointeur sur le tableau d'origine et un nombre qui est un nombre aléatoire, puis à trier le tableau par le nombre aléatoire. Utilisez ensuite le tableau trié pour construire un nouveau tableau de cartes. En tout cas, je n'ai eu aucun crédit pour l'avoir présenté à un recruteur.
Un autre exemple est la question de savoir comment vous pourriez détecter un numéro en double dans une liste de n nombres allant de 1 à n-1. La réponse évidente (qui est relativement efficace dans une perspective temporelle) est d'utiliser une table de hachage pour insérer chaque élément et si vous en trouvez un déjà inséré, vous avez trouvé le doublon. La réponse optimale est parce que les nombres sont compris entre 1 et n s'il n'y a pas de doublons, vous pouvez obtenir la somme attendue en n (n + 1) / n. Ensuite, si vous résumez le tableau, vous obtenez la somme réelle qui est nd inférieure à la somme attendue. Donc en gros n - (Somme attendue - Somme réelle) = numéro en double ... C'est un cas assez spécial .... J'ai déjà vu quelque chose auparavant dans un article en ligne sur les problèmes d'entrevue il y a longtemps sur un sujet similaire avec la même astuce, donc J'allais bien ...
Un autre, inversez tous les mots d'une chaîne sans utiliser d'espace supplémentaire. J'ai dû y penser et le recruteur était assez impatient dans les 5 minutes que je pensais (couper et rejoindre la chaîne à l'envers, ou passer mot à mot dans un nouveau tableau sont tous les deux très faciles). Je suis arrivé à trouver la bordure du dernier mot, à trouver la fin du premier mot et à décaler constamment la liste entière de 1, puis à insérer la lettre appropriée. Répétez ensuite jusqu'à ce que vous ayez atteint la fin de la liste. Cette méthode a fonctionné et l'intervieweur a accepté (il était un peu technique), mais c'est assez inefficace. Quand je suis rentré chez moi, j'ai cherché la réponse optimale, et c'est simplement inverser la liste, puis inverser chaque mot individuel. Certaines personnes pourraient trouver cela,
Maintenant, c'est vrai une fois que vous avez vu certains de ces problèmes, vous pouvez les résoudre plus facilement. Parce qu'il y a des questions similaires avec certaines des mêmes astuces. Je connais surtout la formule n (n-1) / 2 et la liste des nombres a plusieurs variantes. Mais je ne sais toujours pas ce que ces questions testent. Un FizzBuzz est quelque chose que tout le monde devrait pouvoir faire (même si j'ai vu des variations qui ne sont pas si simples, auquel cas je commence à me demander si cela est réaliste pour une situation d'entrevue sans pouvoir taper / déboguer le code). Certaines de ces questions sont évidentes une fois que vous les voyez, mais si vous ne les avez pas vues, elles ne sont pas évidentes. Après tout ce que quelqu'un a mentionné, il a fallu des années pour que la première implémentation correcte de la recherche binaire apparaisse ... À l'heure actuelle, la recherche binaire est si évidente car tout le monde peut en savoir plus.
Néanmoins, je pense que le pire est lorsque des personnes non techniques posent des questions car elles ne peuvent pas apprécier que votre solution soit correcte mais pas optimale. Ils savent juste que votre solution n'est pas celle présentée et donc tout est faux, vous n'obtenez aucun crédit pour la tentative. Même les solutions non optimales montrent souvent une connaissance des constructions de programmation. À moins que je ne programme des jeux de poker, je me fiche de savoir si quelqu'un peut bien mélanger un jeu de cartes. Et même si je l'étais, après leur avoir montré l'algorithme efficace, je suis sûr que n'importe qui à moitié décent pourrait le suivre.
Les questions du modèle semblent simplement donner un avantage aux candidats qui ont passé un entretien plus longtemps car ils sont plus susceptibles d'avoir vu plus de questions du modèle. Même FizzBuzz, la première fois que vous le voyez, vous risquez de paniquer, mais comme vous le voyez encore et encore, vous vous y habituez. La meilleure chose à faire est de lancer un défi de codage qui nécessite une logique métier personnalisée. Par exemple, créez un ensemble de données (tableau d'objets / enregistrements), puis créez des règles métier à appliquer à chaque objet et renvoyez une réponse. Par exemple, un certain type de notation, etc. mais des règles très personnalisées). Bien qu'ils aient probablement vu des enregistrements en boucle et appliqué une logique un million de fois, vos règles seront uniques, donc ils devraient au moins comprendre et mettre en œuvre avec succès les règles que vous avez créées.
Disons le salaire projeté et une liste de candidats et leurs 3 meilleurs jeux vidéo préférés, et peut-être un salaire de départ. Les candidats qui aiment Zelda obtiennent une pénalité de 300, les candidats qui aiment la petite sirène reçoivent un bonus de 200. Les candidats qui aiment Donkey Kong et Super Mario Brothers mais pas le Dr Mario obtiennent un bonus de 300. Les candidats qui aiment Metroid ou Kid Icarus obtiennent un bonus de 200, etc ... Cela semble un peu fou, mais cela vous montrerait leur capacité à traduire les règles métier en constructions de programmes logiques et à tester leur compréhension de la logique booléenne. Globalement pas très différent de fizzbuzz, sauf qu'il n'utilise pas de module et de boucles. Vous pouvez bien sûr leur donner la liste et les faire parcourir en boucle et imprimer les résultats à l'écran en utilisant également des critères de sortie spécifiques.