Le code Java implémente le jugement de parité, attirant d'innombrables programmeurs à concurrencer

La question d'entrevue la plus simple de l'histoire de Java, mais personne ne peut la passer?

 

C'est probablement la question d'entrevue Java la plus simple de l'histoire.

Le problème est très simple, complétez le code et déterminez si un entier est impair:

public boolean isOdd(int i)

Je crois qu'un nombre considérable de personnes se préparent déjà à vomir, tant que quiconque a lu "Programmation Pearl" connaît la réponse à cette question et la raison extrêmement simple. Mais ne vous précipitez pas pour maudire la rue, que vous le croyiez ou non, de nombreuses réponses à cette question écrite ressemblent à ceci:

public boolean isOdd(int i) {
    if (i % 2 == 1) {
        System.out.println("是奇数");
    } else {
        System.out.println("是偶数");
    }
}

Ensuite, compilez-le, trouvez l'erreur, grattez-vous la tête, changez-le tout au plus en ceci:

public boolean isOdd(int i) {
    if (i % 2 == 1) {
        return true;
    } else {
        return false;
    }
}

Eh bien, j'avoue que je peux avoir des problèmes dans ma capacité à filtrer les CV, mais que vous le croyiez ou non, de nombreux programmeurs qui ont travaillé pendant quelques années dans de grandes usines écriront du code comme ci-dessus.

J'ai donc continué à guider:

Moi: "Quel type de valeur est requis pour la définition de cette fonction?"

Le candidat s'est penché sur le sujet: "Type booléen".

Moi: "Alors, quelle est la valeur de l'expression entre parenthèses après votre si?"

Pour mener à cette étape, jusqu'à 20% des candidats ont tout de même choisi d'abandonner, indiquant qu'ils ne savaient pas. Eh bien, je ne connais vraiment pas votre confiance dans les entretiens pour ce poste. Mais la plupart des gens y réfléchissent et ils répondront à la bonne réponse:

Candidat: "C'est aussi un type booléen."

Moi: "Alors quoi?"

Bien qu'un petit nombre de candidats ne l'aient pas dit, mais je peux voir qu'ils pensent que ce n'est qu'une coïncidence et ne savent pas comment passer à l'étape suivante. Cependant, après que la plupart des gens y auront pensé, il sera toujours optimisé dans le code suivant:

public boolean isOdd(int i) {
    return i % 2 == 1;
}

Enfin passé le premier niveau, et guidé le deuxième niveau:

Moi: "Alors je passe un -1?"

Après y avoir réfléchi, près de la moitié des gens diront avec rigueur qu'on leur a enseigné que seuls les nombres naturels ont des nombres pairs et impairs depuis l'enfance, et les nombres négatifs n'ont pas de nombres pairs ou impairs. Les autres personnes ont accepté ce paramètre et y ont réfléchi pendant un certain temps, en le changeant comme suit:

public boolean isOdd(int i) {
    return i % 2 == 1 || i % 2 == -1;
}

Et après l'invite, optimisez ceci:

public boolean isOdd(int i) {
    return i % 2 != 0;
}

Eh bien, c'est de loin le premier code qui peut être compilé et qui répond pleinement aux besoins. Pour être honnête, il a été rédigé comme tel au début. S'il n'y a pas d'autres lacunes évidentes, je peux essentiellement le transmettre ici. J'avoue que mes exigences sont relativement faibles, mais les personnes qui viennent à l'entrevue peuvent directement écrire que ce n'est vraiment pas trop. Si on l'estime grossièrement, cela représente probablement 10 à 20%.

Mais ce n'est pas encore fini, il y a le troisième niveau le plus important:

Moi: "Y a-t-il une meilleure façon?"

Candidat: "?"

Moi: "Je pense que le fonctionnement du modulo est lent, y a-t-il une solution plus rapide?"

À l'exception de quelques personnes qui peuvent le comprendre par elles-mêmes, la grande majorité (sans exagération) des candidats ont indiqué qu'ils ne le savaient pas ou ne le savaient pas, alors la prochaine étape a été demandée:

Moi: "Quelle est la différence entre convertir des nombres pairs et impairs en binaire?"

Une partie considérable des candidats a déclaré qu'ils ne comprenaient pas ce que sont les opérations binaires et binaires, et certains ont également déclaré que java n'était pas un langage C. Sans les étudier, c'est comme si de nombreux commentaires me donnaient l'impression de faire semblant. Un petit nombre de candidats y réfléchissent et répondront timidement.

Candidat: "Le dernier numéro impair est 1 et le dernier numéro pair est 0."

Moi: "Alors quoi?"

Ce qui est étrange ici, c'est que la plupart des candidats qui peuvent en parler ici se souviendront de l'opération de décalage. Je ne sais vraiment pas pourquoi, bien que cette question puisse en effet avoir cette opération:

public boolean isOdd(int i) {
    return i >> 1 << 1 != i;
}

Mais ce n'est pas du tout le cas! ! !

Bref, en tout cas, il n'y a vraiment pas beaucoup de gens qui peuvent écrire le résultat suivant après les différents conseils du troisième niveau. Les gens qui peuvent écrire sans aucun conseil au début n'en ont vu que deux jusqu'à présent, l'un que j'ai emmené partout avec moi et l'autre qui a rejeté mon offre.

public boolean isOdd(int i) {
    return (i & 1) == 1;
}

Ne pensez pas que c'est fini! Le boss ultime est ici:

Moi: "Est-ce plus rapide que l'opération de module ci-dessus?"

Candidat: "Bien sûr, l'arithmétique des bits doit être rapide."

Moi: "Mais nous avons testé le code réel et constaté que l'opération au niveau du bit ci-dessus et l'opération modulo, le temps d'exécution réel est à peu près le même, pourquoi?"

L'esprit du candidat mmp: "Vous me taquinez depuis longtemps?"

Cependant, la personne qui peut vraiment répondre à la raison, je ne l’ai pas vu lors de l’interview, peut-être parce que Daniel ne pouvait pas mépriser mon entreprise. Seulement dans une entreprise, un collègue y a pensé et m'a donné la bonne réponse.

Est-ce que les entreprises que j'ai rencontrées sont trop basses ...

Hé, je pense que ce n'est pas mal, je peux l'aimer et l'encourager, je veux voir des choses plus intéressantes sur les programmeurs

1. Mesdames et Messieurs, faites attention à mon compte public WeChat original "Java Architects Alliance", concentrez-vous sur la vie du programme intéressant et utile, et assurez-vous que vous gagnerez quelque chose après la lecture, ne croyez pas que vous m'avez frappé.

 

A publié 78 articles originaux · J'aime1 · Visiteurs1256

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42864905/article/details/105328197
conseillé
Classement