Quelles sont les bonnes questions et réponses à propos des entretiens java concernant les génériques et les annotations?
Quelles sont les bonnes java questions d'entrevue et les réponses concernant les génériques et les annotations?
source d'informationauteur Daniel Honig
Vous devez vous connecter pour publier un commentaire.
Depuis Java 5 est sorti, j'ai vu des dizaines de gens de ne pas comprendre pourquoi, étant donné une interface
I
et les classesA
etB extends A
vous ne pouvez pas passer uneI<B>
où unI<A>
est nécessaire. Beaucoup de gens trouvent qu'il contre-intuitif.Pour tester la capacité d'une personne à raison sur les médicaments Génériques, alors je voudrais d'abord leur demander si il est possible d'affecter à un
I<B>
à unI<A>
de référence tel que décrit ci-dessus. Si non, pourquoi pas? S'ils se trompent, dites-leur qu'ils ont tort et demandez-leur d'essayer de remplir les blancs, ici, de montrer pourquoi ce serait par exemple le type de l'onu-sûr si l'on pouvait compiler:À ce stade, il devrait être assez facile et je serais un peu inquiet si ils ne pouvaient pas construire un tel exemple. Un exemple est
Ce test:
http://tests4geeks.com/test/java
contient quelques questions sur les annotations.
Il ne contient pas de questions sur les génériques. Mais au lieu de cela, il ya quelques autres thèmes intéressants comme:
Multi-Threading,
Mémoire,
Algorithmes et Structures de Données,
De la programmation orientée objet,
etc.
Class Enum<E extends Enum<E>>
assurer?<T> List<? extends T> x()
utile signature?Plus difficile:
Question: Comment pouvez-vous déterminer à quel type d'objet générique est l'aide à l'exécution?
Réponse: Il n'est pas possible de déterminer le type par type d'effacement.
Q: Quelle est la différence entre une table de hachage et une table de hachage?
Un: table de hachage est synchronisé, Hashmap ne l'est pas.
Q: Décrivez la sérialisation des objets java avec le javax.xml.bind.Marshaller de l'interface et des annotations.
Un: Décrire quelque chose comme cela dans un contexte significatif devrait être acceptable:
@XmlRootElement
class Employee {
...
}
Génériques: Poser une question conçus pour voir s'ils comprennent type d'effacement.
Annotations: leur Demander ce que leur favori annotation est, et comment il fonctionne (vous n'avez pas besoin d'une explication technique détaillée, mais vous cherchez quelque chose de plus que la "magie").
Annotations: Quels sont les risques? (le compilateur peut entrer dans une boucle infinie et de la confiture, le processus de construction).
Génériques: Comment construire un mixin l'utilisation de génériques? (écrire une classe générique qui prend un paramètre, puis de l'étendre à la sous-classe en tant que paramètre).
Aussi, +1 sur le type d'effacement.
Si vous êtes à la recherche pour une rock star Java programmeur, vous pouvez créer assez peu avancé, les questions de l' Les génériques chapitre Bloch Effectif de Java. Des choses comme homogène ou hétérogène des conteneurs (la cage d'oiseau et la cage du lion des exemples de l'un des tutoriels java), effacement, etc.
En moins d'ancienneté gens j'ai d'abord regarder pour comprendre pourquoi on voudrait génériques (vous seriez surpris de voir combien les gens ne l'apprécie pas et croyez-Java 2 façon de faire les choses toujours les règles), et des choses comme ça.
Dans les annotations, j'aime poser des questions sur le "Remplacement" de l'annotation et de ses avantages. J'aime aussi avoir une discussion plus approfondie sur les avantages et les inconvénients des annotations et quand il est approprié de les utiliser - je ne suis pas un fan de exagérée de la méta-programmation. C'est aussi une bonne occasion de voir si quelqu'un utilise Hibernate ou JUnit avec des annotations.
Voici quelques je viens de faire:
-- [Méfiant génériques] décommentant l'un de ces lignes causer des problèmes? Ceux qui, le cas échéant? Pourquoi ou pourquoi pas?
-- [Contraintes] Seulement
Animals
devrait aller dansCages
. Comment pouvons-nous renforcer les définitions de classe ci-dessus de sorte qu'elles reflètent cette nouvelle exigence?-- [Ennuis judiciaires] Vous ne pouvez pas instancier un tableau d'un type générique. Donc, quelque chose comme
new List<Animal>[10]
est illégal. Pouvez-vous imaginer un scénario où, si ce ont été juridique, vous devez exécuter des ennuis?Réponses laissé comme exercice au lecteur -- vous n'allez pas apprendre quoi que ce soit si vous n'avez pas vous-même! Mais voici quelques conseils.
?
veux dire? Vous rappelez-vous le terme de "covariance"?Object[] arr = new List<String>[]
. Pouvez-vous écrire un peu de code qui met quelque chose dansarr
'sLists
qui ne devrait pas aller là-bas?"Ce genre de choses sont des annotations bon?" et "quel type de choses sont des annotations mauvais?" vient à l'esprit.
Annotations sont bons à la méta-programmation, mais comme un possible meilleur-pratique, le code qui a travaillé avec les annotations doivent encore travailler si vous prenez tous.
Ou pas. Votre kilométrage peut varier, mais vous voudrez probablement tous vos anciens développeurs d'accord là-dessus.
Ici sont un couple de sur les médicaments génériques:
1)
Question: Si j'avais cette méthode, comment pourrais-je créer une nouvelle instance de type
T
et l'assigner à une variable appeléeitem
à l'intérieur de cette méthode (à supposerClass<T>
a un constructeur par défaut)?Réponse:
2)
Question: Si vous voulais indiquer que le générique s'étend la classe de base, mais vous ne savez pas ce que la classe qui étend la classe de base jusqu'à l'exécution, comment pouvez-vous déclarer le générique?
Réponse: Utilisez un caractère générique:
<? extends SomeBaseClass>