2010-08-05 14 views
3

Je veux écrire une question pré-entrevue (pour Java, mais ce n'est pas important) qui a une réponse différente si vous le regardez vs si vous copiez-collez-le et exécutez-le afin que nous puissions vérifier si les gens fait le problème manuellement. Pour ce faire, j'essaie de trouver un caractère Unicode qui ressemblera à un caractère ASCII à l'écran (de sorte qu'à un moment de ma question, je peux avoir deux méthodes avec le même nom mais avec Integer/int arguments)Y at-il un caractère Unicode qui ressemble à un caractère ASCII (mais n'est pas égal)?

Je sais que c'est potentiellement subversif, mais j'espère que cela donnera une métrique supplémentaire pour valider les autres réponses.

Note: J'ai essayé le 'i' turc - il semble être ascii - existe-t-il une version unicode?

Modifier/NB: On dirait que mes intentions étaient mal compris ... Ces questions sont destinées à être fait manuellement, et non par un compilateur. S'ils copient le texte et compilent alors ils contournent la question, et ceci est prévu pour les trébucher vers le haut (ou plus simplement donner la mauvaise réponse). Ceux qui font les deux vont soit comprendre, ou venir à la vraie interview avec la confusion que nous pouvons les aider à traverser.

Note finale: :(cela ne ressemble pas à c'est vraiment possible - la plupart des éditeurs (sur Windows) va tenter de sauver en CP1252 (en quelque sorte mon 1 fichier économisait en UTF-8), auquel cas je don « t pense qu'il ya des personnages qui fonctionnent sans demander une sorte de sauver erreur

+3

N'est-ce pas comme si un candidat débogeait votre programme écrit dans Whitespace? Il doit y avoir un moyen plus probant et moins irritant d'extraire la capacité cognitive que vous recherchez. – msw

+2

Quelqu'un qui parvient à déjouer votre piège de la mort mérite ici un travail de cryptographie ou un prix pour la pédantologie pas un emploi dans la programmation: P –

+2

Je ne pense pas que l'objectif du PO est de tromper les gens. Je pense que c'est pour déterminer qui a réfléchi au code, et qui est allé le faire. Être «trompé» est la bonne réponse - cela signifie que vous n'avez pas triché. Et qui downvotes une question honnête comme ça de toute façon? – Borealid

Répondre

1

J'ai effectivement trouvé quelque chose qui fonctionne dans l'encodage UTF-8 et CP1252 (de sorte qu'il passera la plupart (tous) les éditeurs de texte?): L'espace insécable!

Enregistré à la position 160 (00A0, 10100000) dans cp1252 et apparemment UTF-8 (wikipedia le note dans la gamme de "deuxième, troisième ou quatrième octet d'une séquence multi-octets"), il fournit un caractère va "juste fonctionner"

Note: Cela a été testé pour fonctionner sur Windows lorsqu'il est copié à partir d'un fichier texte/skype dans l'éditeur de code.Une page web Wordpress ne s'est pas très bien comportée (mais elle a probablement changé le personnage de toute façon). Heureusement, notre organisation n'a pas poursuivi la tactique de "pré-entretien" des problèmes, donc je n'ai pas testé cela de façon définitive sur une page web.

+1

Un octet 0xA0 seul n'est pas valide UTF-8, et bien sûr l'espace insécable dans UTF-8 n'est pas représenté comme un octet 0xA0 seul. –

+0

C'est bon à savoir (+1) - je pensais autant.Cependant, dans le but de cette question, il semble bien fonctionner (le code compile et fonctionne correctement - ou à tort) – Stephen

+2

En UTF-8 ce serait 0xC2 0xA0, voir http://www.fileformat.info/info/unicode /char/a0/index.htm Pour une page Web, vous pouvez utiliser ' ' à la place, mais dans tous les cas, il pourrait être traduit en un espace réel par le navigateur. –

2

Essayez un caractère cyrillique comme « un » ou « l » Jetez un coup d'oeil. http://jrgraphix.net/research/unicode_blocks.php?block=8

Bonne idée, par ailleurs, mais je ne ferais pas de réponse à une surcharge de méthode: j'utiliserais un switch-case en répétant sur une chaîne de caractères, de sorte que rien n'indique que quelque chose ne va pas, et vous pouvez facilement choisir les candidats qui Je connais leur truc.

+0

J'ai ajouté mon code dans la question ... – Stephen

+0

Non, je n'ai pas - Je ne veux pas une recherche google pour afficher le code. Peut-être que je le ferai après cette série d'interviews ... – Stephen

4

Vous pouvez faire quelque chose avec le même sentiment, mais un cas un peu moins obscure:

System.out.println(100l); 
System.out.println(1001); 

Selon la police utilisée, ces deux déclarations peuvent sembler très similaires en effet. (Si c'est le cas avec la police que vous utilisez, le premier nombre est 100L.)

+0

Ainsi, Visual Studio vous avertira même de ne pas le faire. –

+0

@Matt: En effet. J'ai envisagé de journaliser une demande de fonctionnalité pour que cela soit déterminé par la police que vous utilisez. J'aime l'idée d'un commutateur du compilateur pour spécifier la police source :) –

+0

Hmmm. assez sympa, mais je pense que l'un sera trop dur à cacher - il finira sur internet et dans l'éditeur ... cependant, il n'aura pas les problèmes d'encodage des caractères (j'ai eu une erreur de compilation au premier essai quand je à la ligne de commande - nécessaire pour spécifier le codage) – Stephen

2

n-tiret ou m-tiret - ressembler au signe moins.

4

Il y a beaucoup de possibilités - voici juste un couple que j'ai trouvé avec Windows Character Map. Sachez cependant que toutes les polices n'auront pas ces caractères, votre candidat ne verra peut-être pas ce que vous avez l'intention de faire.

ǃ U+01C3: Latin Letter Retroflex Click 
Κ U+039A: Greek Capital Letter Kappa 
‚ U+201A: Single Low-9 Quotation Mark 
′ U+2032: Prime 
1

Le Consortium Unicode a une page dédiée à Confusables: http://unicode.org/cldr/utility/confusables.jsp

Cela montre qu'il ya beaucoup de caractères Unicode qui ressemblent à un ASCII un:

  • similaires à I: І ا ا ℐ ℑ Ⲓ Ɩ Ι | ا I 1 | | Ӏ ᛁ I ߊ l ⵏ ו ן Ⅰ 1 │ l 1 ꓲ | Ⅼ ⏽

  • similaires à 5: 5 Ƽ

  • similaires à K: K Ⲕ ᛕ ꓗ Κ К Ꮶ K

  • similaires à :: ः ઃ ܃᠃: ܄. ᠉ ꞉ ᛬ ︰ ː: ˸:: ⁚ ꓽ

Le degré exact de similitude visuelle dépend de votre police, mais dans la plupart des polices, au moins quelques-unes des Glyphes sera identique à l'ASCII un.