J'étais en train de passer en revue les Questions que tout bon développeur .Net devrait être en mesure de répondre et j'ai été très impressionné par le contenu et l'approche de cette question, et donc dans le même esprit, je pose cette question pour Java / Java EE Developer.
À votre avis, à quelles questions un bon programmeur Java / Java EE devrait-il être en mesure de répondre?
Je marque cette question comme un wiki communautaire car elle n'est pas spécifique à l'utilisateur et elle vise à servir la communauté de programmation dans son ensemble.
Dans l'attente de quelques réponses étonnantes.
EDIT : Veuillez également répondre aux questions, comme suggéré dans les commentaires, afin que les gens puissent également apprendre quelque chose de nouveau concernant la langue.
la source
Réponses:
Quelle est la relation entre hashCode () et equals ()? Quelle est la signification de ces méthodes? Quelles sont les conditions de leur mise en œuvre?
la source
Quelle est la différence entre Set, Map et List?
Je suis toujours étonné de voir combien de personnes ne connaissent pas celle-ci lors d'un entretien téléphonique.
la source
La plupart des gens répondent «non», car ils savent que java n'a pas d'héritage multiple. Mais une interface peut toujours étendre plusieurs interfaces (mais une classe ne peut pas étendre plusieurs classes). Cela ne conduit pas au problème du diamant.
Si la réponse est «non», l'enquêteur devrait demander «pourquoi cela serait- il interdit?». Ensuite, vous commencez à y penser et vous devriez réaliser qu'il n'y a pas de problème avec cela.
Vous avez donc appris quelque chose (par vous-même) lors de l'entretien et vous avez montré à l'intervieweur que vous êtes capable de raisonner sur les classes, les objets, l'héritage, le polymorphisme, etc. C'est en fait beaucoup mieux qu'un candidat qui connaît la réponse par cœur mais ne le sait pas comprendre pourquoi
la source
Utilisation du mot-clé final dans les appels de méthode. Par exemple, pourquoi le test de méthode dans le code ci-dessous ne donne aucune erreur de compilation malgré l'utilisation du qualificatif final pour le paramètre de méthode.
la source
final
mot - clé appliqué à l'Name
objet, pas auname
champ de la classeName
n
est déclaré comme final, ce qui signifie qu'il ne peut pas être réaffecté dans letest
corps de la méthode. Cela ne provoque pas d'erreur car la méthodetest
ne tente pas de réaffecter le paramètre, elle définit simplement une propriété sur le paramètre ...n = new Name("test");
provoquerait une erreur de compilation ...Un certain est la comparaison de la chaîne. Différence entre
la source
Question piège: Quels types de paramètres sont passés par référence en Java?
Il est étonnant de voir combien de personnes perroquent encore le mantra "les primitives sont passées par valeur, les objets sont passés par référence".
la source
Vous avez dit "Bien", "Développeur". Voici mes 2 cents aussi .. :)
Pour J2EE:
Je peux penser à beaucoup, beaucoup, beaucoup plus d'entre eux mais cela fera l'affaire pour l'instant :)
la source
Quelle est la différence entre String, StringBuffer et StringBuilder?
la source
"Qu'est-ce qu'un descripteur de déploiement?"
Si le candidat frémit involontairement, il a déjà travaillé avec des EJB pré-3.0.
la source
De nombreuses questions et entretiens sont disponibles sur http://www.techinterviews.com/interview-questions/java et je ne vois pas vraiment l'intérêt de copier / coller une sélection d'entre eux.
Non, c'est à vous de créer votre propre compilation de choses que vous jugez importantes. Personnellement, je procède toujours en deux étapes: d'abord quelques questions pour avoir une idée de base de l'expérience et des compétences, puis une situation de résolution de problèmes. Je ne suis en effet pas convaincu que pouvoir répondre à des questions connues fasse de vous un bon ou un mauvais résolveur de problèmes inconnus . Donc, je préfère demander aux gens de résoudre un problème donné, de leur donner quelques exigences, et leur demander d'écrire du code (mais pas sur papier). Je leur laisse le temps de revenir vers moi et de vérifier comment ils l'ont fait, leur style de codage, comment ils ont utilisé les API suggérées, etc.
Cela étant dit, ma question préférée est "qu'est-ce que vous n'aimez pas à propos de Java?" (dans l'esprit de celui-ci ). C'est vraiment une excellente question, elle vous donne un retour immédiat sur combien un candidat a utilisé Java et exploré son API et s'il est juste religieux ou non (comme l'a écrit l'OP).
Mise à jour: comme suggéré par CPerkins, une meilleure formulation pour la question suggérée ci-dessus pourrait être "Qu'est-ce que vous aimeriez le plus voir changé en Java?". Et en effet, je préfère cette façon.
la source
Qu'est-ce que 'System', 'out', 'println' dans System.out.println? Que se passe-t-il lorsque vous appelez «mettre» sur HashMap?
la source
la source
new
ou^
ou>>
,<<
et>>>
). Si je pouvais changer autre chose, ce serait pour ajouter une véritable sémantique appel par référence. Une troisième chose serait d'ajouterunsigned
des types intégraux.la source
Si vous embauchez des diplômés ayant une «expérience» Java, une question simple comme Ecrire du code qui provoquera la levée d'une exception NullPointerException peut distinguer les candidats qui ont utilisé Java récemment, et ne se sont pas arrêtés simplement lorsqu'ils ont terminé leur unité / cours.
la source
Qu'est-ce qui sera imprimé?
Réponse : CoolReturn + 1
Un peu plus difficile:
Réponse : CoolReturn
la source
Quelle est la différence entre une classe abstraite et une interface? Quand utiliseriez-vous chacun d'eux?
Beaucoup de développeurs Java ne le savent pas, j'ai demandé à la plupart des gens sur mon cours d'informatique à l'université et la grande majorité n'a pas pu y répondre.
la source
Des questions simples telles que,
Bien que ceux-ci soient très basiques, de nombreux développeurs ne connaissent pas les réponses. Je suggère de les poser avant les requêtes liées au code.
la source
Les 5 principales questions J2EE / JEE
La liste des questions d'intergiciel J2EE / JEE auxquelles j'ai été confronté est exceptionnellement longue, mais voici le top 5 qui m'a été posé et qui a conduit à de bonnes discussions:
Cette question conduit généralement à diverses discussions intéressantes sur les messages empoisonnés, les files d'attente d'erreurs, etc.,
Cette question me permet généralement de discuter en termes de quand utiliser des abonnés durables, quand utiliser les files d'attente, etc.,
Cela conduit à de merveilleuses discussions sur le chargement paresseux, la réhydratation, etc., cela a même conduit à comparer et à opposer JPA avec les beans Entity. J'ai trouvé utile d'être préparé et d'être clair dans les concepts.
Toute solution, du simple serveur Web basé sur des solutions SOAP / REST sophistiquées, et toute solution intermédiaire, devrait être suffisante. En outre, selon l'intervieweur, cela conduit parfois à des discussions très intéressantes sur des sujets tels que certaines idées de conception - WSDL d'abord, style doc, intermédiaires SOAP, etc., cela peut conduire à des questions telles que la liste des améliorations dans JAX-WS sur JAX -RPC, ou SOAP1.2 sur SOAP1.1, dont les réponses sont généralement basées sur ce dont je me souviens.
Cette question se pose de nombreuses manières, du modèle de localisateur de service aux
javax.naming.Context
questions.Une autre question délicate que je trouve troublante, mais que j'ai souvent rencontrée est: Comment les bibliothèques dépendantes sont-elles regroupées dans une archive?
ou Visibilité de différentes classes dans une archive groupée.
Si la discussion ne mène pas à la hiérarchie des chargeurs de classes des différents serveurs d'applications, des archives de ressources, etc., il est préférable de démissionner et de passer à autre chose.
Les 5 principales questions Java:
C'est la mère de toutes les questions. Une fois que vous pouvez effectivement envoyer l'intervieweur dans ce domaine, et si vous êtes prêt, le reste de l'entretien reste généralement ici. Assurez - vous de savoir
Set
,List
,Map
et l'importance deObject.equals()
etObject.hashCode()
dans chaque mise en œuvre de ces interfaces.Ces questions sont utiles si l'intervieweur a l'esprit ouvert. Si l'enquêteur a déjà une solution spécifique en tête et que la vôtre ne correspond pas à la sienne, vous êtes pratiquement condamné. Il vaut mieux être d'accord avec la réponse «Je comprends que d'autres solutions sont possibles».
C'est une question à coup sûr avec de nombreux intervieweurs. Autant je déteste ça, il vaut mieux être préparé. Au moins, en me souvenant de quelques-uns avec lesquels j'ai travaillé, et en menant la discussion dans une autre direction, cela évite et résout largement et efficacement le problème.
On m'a demandé à maintes reprises de signaler un modèle GoF dans l'API Java. Mieux vaut être préparé pour celui-ci.
la source
Différence entre un serveur Web et un conteneur Web
la source
Qu'est-ce que vous aimez le plus, le moins dans Java et pourquoi?
la source
pourquoi substitueriez-vous la méthode toString ()?
la source
Une question Java plus pure:
Quelle est la différence entre dormir et attendre? Peu de gens comprennent réellement comment l'attente fonctionne.
Comment devez-vous gérer les exceptions InterruptedExceptions?
la source
C'est la question à laquelle j'ai été confrontée dans mon entretien.
Pourquoi la méthode main en Java est-elle appelée comme public static void main (String [] args)?
Répondre:
1. main () doit être déclaré public car il est appelé par JVM chaque fois que l'exécution du programme démarre. La JVM n'appartient pas à notre package de programme.
Afin d'accéder à main en dehors du paquet, nous devons le déclarer comme public.Si nous le déclarons comme autre chose que public, il affiche une erreur d'exécution mais pas une erreur de temps de compilation
2. main () doit être déclarée statique car si une méthode est déclarée statique, nous pouvons appeler cette méthode en dehors de la classe en utilisant ClassName.methodName ();
La JVM charge d'abord la classe Test, vérifie les arguments de la ligne de commande et appelle la méthode principale en tant que Test.main ();
3. main () doit être déclarée comme void main () car JVM n'attend aucune valeur de main (). Donc, elle doit être déclarée comme void.
Si un autre type de retour est fourni, il s'agit d'un RunTimeError, c'est-à-dire NoSuchMethodFoundError.
4. main () doit avoir des arguments String en tant que tableaux car JVM appelle la méthode main en passant l'argument de ligne de commande. Comme ils sont stockés dans un objet tableau de chaînes, il est passé comme argument à main ().
la source
public static void main(String... args)
si vous le souhaitez :-) Il a la même signature que[]
Quelle est la différence entre J2SE et J2EE (ou JSE et JEE)?
Un développeur devrait être en mesure de souligner que l'édition entreprise est essentiellement une définition d'interface (c'est-à-dire une spécification) qui peut être implémentée par les fournisseurs. Alors que l'édition standard est une implémentation à part entière
la source
Comment
volatile
affecte- t-il l'optimisation du code par le compilateur?la source
Que diriez-vous de ce qu'est un bean session et décrivez certaines différences entre les beans session stateless et stateful.
la source
Écrivez un programme pour accepter deux nombres entiers et afficher le plus grand des deux nombres dans un fichier à l'emplacement de votre choix. Décrivez maintenant ce que fait chaque déclaration.
Il est possible d'approfondir assez profondément à partir de la signification de la déclaration d'importation, jusqu'à la fin anormale
la source
Core: 1. Quelles sont les exceptions cochées et non cochées? 2. Lors de l'ajout d'une nouvelle exception dans le code, quel type (coché / non coché) utiliser quand?
Servlet: 1. Quelle est la différence entre response.sendRedirect () et request.forward ()?
la source
Comment ça
threads
marche? C'est quoisynchronized
? S'il y a deuxsynchronized
méthodes dans une classe, elles peuvent être exécutées simultanément par deux threads. Vous serez surpris d'entendre de nombreuses personnes répondre oui . Ensuite, toutes les questions liées au fil, par exemple blocage , famine, etc.la source
thread
exécute la méthode, aucun autrethread
ne peut obtenir le verrou.Une chose que de nombreux programmeurs Java ne savent pas, c'est que les chaînes sont immuables, alors utilisez StringBuilder ou StringBuffer!
la source
s += "a" + "b" + "c"
enStringbuilder.append(...)
scénario. Mais il n'optimiser une boucle. Le code de cette réponse finira par créer un total de 201 chaînes, 100 StringBuilders et (selon l'implémentation) 300 s différents à l' intérieur de ces StringBuilders, et environ 425 000 + caractères. Le changer pour utiliser un StringBuilder carrément réduira cela à 1 chaîne, 1 StringBuilder et 13-15 s internes en utilisant seulement ~ 8k caractères à la place comme il se doit.for
char[]
char[]