Lors d'un entretien, on m'a demandé comment déterminer si un nombre est positif ou négatif. Les règles sont que nous ne devons pas utiliser les opérateurs relationnels tels que <
y >
des fonctions java intégrées (comme substring
, indexOf
, charAt
y startsWith
), pas de regex, ni d'API.
J'ai fait quelques recherches à ce sujet et le code est donné ci-dessous, mais il ne fonctionne que pour le type entier. Mais ils m'ont demandé d'écrire un code générique qui fonctionne pour les types float
, double
y long
.
// This might not be better way!!
S.O.P ((( number >> 31 ) & 1) == 1 ? "- ve number " : "+ve number );
Des idées de votre côté ?
3 votes
S'il existe un moyen de convertir [quoi que ce soit] en un tableau de bits, vous pourriez examiner le bit le plus significatif pour déterminer si le nombre est positif ou négatif... Par curiosité, en quoi une telle compétence vous serait-elle utile ? Je n'ai pas encore eu de travail mais... il semble bizarre qu'ils vous enlèvent les opérateurs de base :P
147 votes
Question d'entretien stupide et artificielle
4 votes
@ItzWarty "Comment une telle compétence vous aiderait-elle ? "La curiosité vient du fait que, après 5 ans d'expérience en j2ee (j'ai passé un entretien pour un poste en java et je ne m'attendais certainement pas à cette question de leur part :( ), je me suis sentie mal à l'aise de ne pas pouvoir donner de solution avec une formation en CS.
1 votes
@Mitch :) merci, j'espère que l'interviewer se penchera sur cette question.
0 votes
Je ne pense pas qu'ils vous laisseront utiliser l'opérateur ternaire si vous ne pouvez pas utiliser une instruction if ... votre instruction n'est pas différente de l'utilisation d'un if/else.
1 votes
@Mitch et al - la raison pour laquelle les gens posent ce genre de questions est d'essayer de voir à quel point vous êtes doués pour trouver des solutions nouvelles à des problèmes délicats. Le problème est artificiel, mais ils sont plus intéressés par la façon dont vous l'abordez que par le fait que vous obteniez la bonne réponse.
0 votes
@Jess a édité la question, bien vu.
2 votes
@Stephen C : Je comprends la raison. Des entreprises comme Google, Microsoft, etc. ont appris il y a des années que ces questions n'étaient pas les "bonnes" questions d'entretien...
1 votes
@Mitch Wheat, j'ai l'impression que ces questions sont un peu comme demander à la personne que vous interviewez de "réarranger ces bâtons, qui sont dans la formation d'un chameau, pour dessiner le monstre du Loch Ness"... Bien sûr, elles montrent que la personne est capable de penser "hors des sentiers battus"... mais en quoi cela est-il utile dans la vie réelle [ou au travail, plutôt] ?
1 votes
Quelque chose qui pourrait vous aider à faire un brainstorming : graphics.stanford.edu/~seander/bithacks.html#CopyIntegerSign ... Cependant, l'opérateur sizeof est toujours utilisé à cet endroit, et Java [afaik] n'a rien de tel =/
0 votes
Les nombres Java sont-ils toujours signés ? Si c'est le cas, ne pouvez-vous pas simplement convertir le nombre en octets et obtenir le bit signé ? Ou est-ce que quelque chose m'échappe ?
0 votes
@Itzwarty merci pour le lien, mais dans le titre il est dit Integer.
0 votes
@Dalin, cela nécessiterait l'utilisation d'une API, cependant [conversion d'un entier en 4 octets]. De plus, à ce jour, vous ne pouvez pas faire quelque chose comme (octet )(intptr) pour obtenir l'octet le plus significatif... Notez que la logique doit fonctionner pour les types de données 32 bits et 64 bits =/
0 votes
Quelle est l'entrée ? char[], string, int, ou autre ? ?
8 votes
Cependant, la question de l'enquêteur n'était pas assez précise. je cite : "nous ne devrions pas utiliser d'opérateurs conditionnels". ce "==" est aussi un opérateur conditionnel. Il n'est donc pas du tout possible de répondre à cette question. Les deux opérateurs entre parenthèses (<,>) ne constituent pas du tout une explication correcte. L'enquêteur a dû utiliser des mots pour préciser son sens, comme : "En ce qui concerne les opérateurs conditionnels, vous êtes seulement autorisé à utiliser l'opérateur ==". Enquêter sur des questions imprécises, c'est la compétence qui est vraiment nécessaire dans la vie des programmeurs.
1 votes
Intervieweur : "J'ai vu cette astuce dans Java hier. Je veux que tu lises dans mes pensées et que tu l'exécutes pour moi. Tu ne peux pas faire ça, hein ? Hein ?" Hypothétiquement, je suis le candidat : [s'enfuit].
1 votes
C'est une question particulièrement stupide en Java. En C ou C++, peut-être. Mais pas en Java. Si la question peut être résolue sans manipulation de bits, alors c'est un problème de mathématiques, et le langage n'est pas pertinent.
0 votes
@Suresh, choisissez une réponse si vous pensez qu'il est temps de clore la question. C'est comme ça que ça marche ici, tu sais :)
1 votes
boolean isPositiveOrNegative(double number) { return number != 0; }
0 votes
Traduit, la question serait comment réinventer la roue ? attention, il faut que ce soit d'une manière très artificielle !
0 votes
@SureshSankar : Je comprends ! J'ai été dans le même bureau pour un entretien pour un poste en Java également. Les Geeks là-bas n'ont pas l'air de vouloir embaucher. Ils ont l'air d'être dans une mentalité du genre "Je connais la réponse à une question très difficile voyons si vous la connaissez " Si vous avez la réponse à une telle question, ils disent : "Avez-vous déjà vu cette question sur Internet ?" Et si vous ne l'avez pas, "Vous devez revoir vos bases. Continuez d'essayer. Plus de chance la prochaine fois". Quoi qu'il en soit, les questions sans rapport avec le sujet font partie intégrante d'un entretien ;) A la vôtre ;)
0 votes
Gardez à l'esprit que les solutions ci-dessous sont pour Java . D'autres langues ont des règles différentes et souvent plus délicates (comme dans le cas du C, du C++ ou du JavaScript).
0 votes
@OlimilOops En ce qui concerne ...ce "==" est aussi un opérateur conditionnel... mais ce n'est pas le cas ; "==" est une expression relationnel comme le sont
<
y>
. La question était erronée depuis 10 ans en indiquant de manière incorrecte "nous ne devrions pas utiliser conditionnel des opérateurs tels que<
y>
" .