Des questions auxquelles tout bon développeur Java / Java EE devrait pouvoir répondre? [fermé]

138

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.

Rachel
la source
3
Pourquoi cette question n'est pas en mesure d'obtenir une réponse similaire à la question .Net?
Rachel
5
Bon Dieu :), la question .Net a été posée il y a un an et celle-ci n'a qu'un jour et vous comparez les réponses.
zapping du
1
Pourquoi ne pas modifier votre question et ajouter la phrase "Veuillez répondre à votre propre question.", Afin que les gens puissent même apprendre quelque chose (de nouveau).
r3zn1k
9
"quelle est l'abréviation actuelle pour l'édition d'entreprise";)
Bozho
17
L'anecdote d'Albert Einstein. UN DES collègues d'Einstein lui a demandé un jour son numéro de téléphone. Einstein attrapa un annuaire téléphonique et le rechercha. "Vous ne vous souvenez pas de votre propre numéro?" demanda l'homme, surpris. "Non," répondit Einstein. "Pourquoi devrais-je mémoriser quelque chose que je peux obtenir si facilement dans un livre?" Est-ce que je touche tout le monde;)? Ouais je sais, Einstein ne faisait pas face à un intervieweur ...
SB.

Réponses:

83

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?

Jeff
la source
Oui, chaque développeur doit au moins être conscient des problèmes, même si vous ne les rencontrerez pas nécessairement dans la pratique.
sleske
3
equals () et hashCode () en java @ technofundo.com/tech/java/equalhash.html
pramodc84
70

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.

Jon
la source
8
Certes, mais c'est une question de 20 secondes pour regarder la documentation sur le net ("java collections framework"), tant de personnes intéressantes ne se soucieront peut-être pas de la garder en mémoire.
Manur
127
Non, désolé, n'achetez pas cela, ce sont des connaissances de base que chaque développeur devrait connaître.
Jon
15
J'irais même jusqu'à dire que quiconque pense même à un travail dans le logiciel doit comprendre non seulement cela, mais aussi les différences entre les différents types de listes (ArrayList / LinkedList). Pas nécessairement la meilleure implémentation ou même la notation O (n), mais une compréhension du moment où il est juste d'utiliser quoi.
Révérend Gonzo du
11
+1 @Jon: Je suis généralement abonné à l'école de pensée "pas besoin de mémoriser les détails", mais si vous ne connaissez même pas les différences conceptuelles de base entre ces interfaces de base, alors vous n'êtes certainement pas un bon développeur Java.
Joachim Sauer
13
@Joachim: vous pouvez supprimer le mot «Java» de votre déclaration. Les ensembles, les cartes et les listes sont des notions algorithmiques de base.
CPerkins
44

Une interface peut-elle étendre plusieurs interfaces?

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

ewernli
la source
J'ai confondu un conférencier C ++ hier avec le problème d'héritage des diamants, elle ne le savait pas du tout :)
Esko
2
On m'a posé une fois cette question et j'ai répondu «non». Je pense que c'était le stress et j'ai répondu trop vite. il est toujours difficile de connaître les réponses aux choses que vous n'utilisez jamais.
IAdapter
1
J'élabore un peu plus dans le texte. Répondre "non" est en fait ok. Ce qui est bien avec cette question, c'est que c'est un bon moyen de déclencher une discussion sur les concepts OO et de voir comment le candidat raisonne. Si l'intervieweur que vous vouliez simplement entendre «oui», alors c'est effectivement inutile. L'héritage multiple des interfaces n'est en effet pas si courant d'être connu par cœur.
ewernli
3
Une version plus délicate de cette question est "Java prend-il en charge l'héritage multiple?" auquel la réponse est "en quelque sorte" uniquement pour les interfaces
nsfyn55
23

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.

class Name {
    private String name;

    public Name (String s) {
        this.name = s;
    }

    public void setName(String s) {
        this.name = s;
    }
}

private void test (final Name n) {
    n.setName("test");
}

sateesh
la source
J'aimerais vraiment connaître la réponse à cette question. Cela semble très intéressant.
Rachel
@Rachel: La raison est que le finalmot - clé appliqué à l' Nameobjet, pas au namechamp de la classeName
ryanprayogo
20
Eh bien, le paramètre nest déclaré comme final, ce qui signifie qu'il ne peut pas être réaffecté dans le testcorps de la méthode. Cela ne provoque pas d'erreur car la méthode testne 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 ...
rjohnston
7
Ajout aux commentaires de @ rjohnston: l'utilisation du paramètre final for method n'assure pas l'immuabilité d'une instance de classe. S'il y a un besoin d'immuabilité, la classe (Nom dans le cas présent) doit être conçue de manière (par exemple, dans le cas présent, ne fournissez pas le setter)
sateesh
Merci à tous pour le partage d'informations précieuses. J'apprécie vraiment vos contributions à ce sujet.
Rachel
19

Un certain est la comparaison de la chaîne. Différence entre

String helloWorld = "Bonjour le monde";
helloWorld == "Hello World";
"Hello World" .equals (helloWorld);

zapping
la source
14
À peu près sûr que vous devez faire quelque chose comme new String ("Hello World"). Les constantes de chaîne ne sont-elles pas extraites d'un pool, un peu comme l'effet intern () aurait, donc rendant les deux déclarations vraies?
Steven Schlansker
17

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".

Chinmay Kanchi
la source
4
Je me demande si la bonne réponse est toujours celle à donner lors d'une interview. Dans un endroit pour lequel j'ai interviewé, l'intervieweur a également répété la même chose.
MAK
2
J'ai remarqué une différence entre les gens qui ont étudié le C comme première langue et ceux qui ont étudié le C ++ comme première langue pour répondre à cette question sur Java. Probablement parce que les utilisateurs C apprennent que passer un pointeur vers une valeur est un "passage par référence".
Uri
23
C'est une question stupide car la «mauvaise» réponse deviendra probablement techniquement juste si vous demandez également «quelles conséquences a le passage par référence? . C'est juste une question de définition de ce que signifie passer par référence et n'a donc pas beaucoup de valeur dans le monde Java car il n'y a qu'une seule façon de passer des objets. Il est plus important de comprendre ce qui se passe réellement que d'utiliser une définition arbitraire pour passer par référence comme vous le souhaitez.
x4u du
3
Cette question est au moins problématique, car elle repose principalement sur la définition exacte de «passer par valeur» / «passer par référence», qui est souvent mal utilisée. Bien que je convienne qu'un bon développeur devrait connaître les définitions, il est plus important de comprendre les conséquences. Si vous comprenez le comportement réel de Java, alors connaître le nom correct du concept n'est pas très significatif, car ce n'est pas quelque chose dont vous discutez dans la pratique, car cela ne change jamais.
sleske
3
Euh, les objets sont passés par référence en Java. Vous ne pouvez pas passer un objet par valeur; entre autres, les objets n'existent jamais sur la pile. Les références sont passées par valeur, bien sûr.
Sean Owen
17

Vous avez dit "Bien", "Développeur". Voici mes 2 cents aussi .. :)

  • Que signifie une "exception vérifiée"?
  • Lequel est préférable d'utiliser et quand: des assertions ou des exceptions pour gérer des conditions inattendues?
  • Pourquoi la classe String est finale? (ou n'est-ce pas?;))
  • sont les méthodes wait, notify et notifyAll de la classe Object?
  • Pourquoi la classe Thread n'est-elle pas définitive? Pourquoi étendre Thread, jamais?
  • Pourquoi il existe deux classes Date; un dans le package java.util et un autre dans java.sql?
  • Que se passe-t-il si une exception est lancée dans le bloc finally? Le reste est-il finalement exécuté ou non?
  • Il y a bien un garbage collector, mais alors la fuite de mémoire est-elle totalement absente dans une application Java? Si non, comment cela?

Pour J2EE:

  • Est-il bon d'avoir des variables d'instance / statiques dans un servlet? Pourquoi pas? Alors, où stockez-vous "état"?
  • continuer sur la question ci-dessus: qu'est-ce et où est un "état" pour une application (web)?
  • Que se passe-t-il si j'ai commencé à créer / fermer des connexions DB dans "JSP"?
  • Quels sont les moyens de gérer les exceptions JSP? essayer-attraper? Hmmm .. y a-t-il autre chose?

Je peux penser à beaucoup, beaucoup, beaucoup plus d'entre eux mais cela fera l'affaire pour l'instant :)

Elister
la source
8
Les réponses seraient bien, je ne connais pas la réponse à certaines d'entre elles.
MAK
Les exceptions cochées sont celles qu'un programme doit avoir un plan à gérer si elles se produisent. S'il n'y a pas de bloc try / catch autour de quelque chose qui lève une exception vérifiée, le programme ne se compilera pas. wait, notify et notifyAll sont destinés à la synchronisation des threads, et en Java, tous les objets peuvent être synchronisés. J'étendrais Thread (par opposition à l'implémentation de Runnable) si conceptuellement la classe nécessite son propre thread, c'est-à-dire qu'elle a besoin de faire une gestion, et ne représente pas une tâche qui pourrait être exécutée sur un autre thread de travail.
ZoFreX
Si une exception est levée dans un bloc finally, le reste ne s'exécutera pas. Dans un programme Java «pur», les fuites de mémoire canoniques n'existent pas. Cependant, la mémoire peut toujours être utilisée, ce qui ne devrait pas être le cas si les structures de données contiennent des références à des objets qui ne sont plus nécessaires. Si vous utilisez des bibliothèques natives, leurs ressources devront peut-être être gérées, par exemple dans SWT, il est important d'appeler .dispose () sur certains actifs pour s'assurer qu'ils ne fuient pas.
ZoFreX
2
Utilisez des assertions pour les erreurs «Cela ne devrait jamais arriver» qui doivent être traitées dans le développement. Utilisez des exceptions pour les erreurs susceptibles de se produire lors de l'exécution, et le programme devra les traiter d'une manière ou d'une autre.
MatrixFrog
16

Quelle est la différence entre String, StringBuffer et StringBuilder?

Thunderhashy
la source
5
String - classe immuable représentant un String. StringBuffer - modèle de générateur introduit dans les anciennes versions de Java qui se synchronise sur chaque opération (ou la majorité d'entre elles) à utiliser pour créer une chaîne. StringBuilder - introduit dans Java 5 (JDK 1.5), une classe qui partage l'API StringBuffer à utiliser pour créer une chaîne qui ne se synchronise pas à chaque opération (ou à la majorité d'entre elles). Étant donné que la construction de chaînes a tendance à se produire dans un seul thread, StringBuilder est préféré à cette fin dans les runtimes / JDK Java qui le prennent en charge.
MetroidFan2002
13

"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.

Michael Borgwardt
la source
le faire "frissonne involontairement + transpire fortement + tombe mort après avoir répété cette question 2 fois de plus", je ressens parfois que c'est la "seule et unique" raison pour laquelle ils ont ajouté / soutenu toute la chose Annotations! :)
Elister
12

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.

Pascal Thivent
la source
Je n'aime pas la question "qu'est-ce que vous n'aimez pas à propos de Java?", Je mentirais, car cela ressemble à "pourquoi vous avez quitté votre dernière entreprise?". plus ils pourraient penser - "si vous détestez Java, nous ne vous proposerons pas le travail".
IAdapter
@ 01 C'est votre droit mais je ne suis pas d'accord avec vous et je pense que vous avez manqué le point de cette question.
Pascal Thivent
1
J'ai généralement vu cela mettre plus comme: "Qu'est-ce que vous aimeriez le plus voir changé en Java", plutôt que "n'aime pas".
CPerkins
@CPerkins C'est en effet une meilleure formulation, meilleure que "n'aime pas" et bien meilleure que "haine" (dans la référence). Merci.
Pascal Thivent
11

Qu'est-ce que 'System', 'out', 'println' dans System.out.println? Que se passe-t-il lorsque vous appelez «mettre» sur HashMap?

Adisesha
la source
quelle est la réponse? Je ne pense jamais à quelle classe système !! Je me demande de connaître l'asnwer :)
palAlaa
10
  1. Expliquez les différents modificateurs d'accès utilisés en Java. J'ai eu beaucoup de gens aux prises avec cela, en particulier l'accès par défaut.
  2. Si vous pouviez changer une chose à propos du langage ou de la plate-forme Java, quelle serait-elle? Les bons développeurs auront une réponse ici, tandis que ceux qui ne sont pas vraiment intéressés par le développement s'en moquent probablement.
  3. Si leur CV dit quelque chose comme s'ils utilisent EJB2.1, demandez-leur à propos d'EJB3 pour voir ce qu'ils en savent. Les meilleurs développeurs suivront les derniers développements même s'ils n'utilisent pas les nouvelles versions.
Mark
la source
3
S'il y avait juste une chose que je pouvais changer, j'ajouterais une surcharge d'opérateurs au langage, probablement avec juste un ensemble restreint d'opérateurs surchargeables (c'est-à-dire pas de surcharge newou ^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'ajouter unsigneddes types intégraux.
Chinmay Kanchi
1
délégués et fermetures et peut-être une expression lambda, mais ce n'est pas vraiment nécessaire. Les méthodes d'extension seraient également formidables. Ils peuvent vraiment nettoyer le code s'ils sont utilisés correctement.
Joel
10
  • Quel est le contrat général en cas de dépassement des égaux?
  • La meilleure option préfère-t-elle des listes ou des tableaux?
  • Quelles sont les conventions de dénomination généralement acceptées?
  • Comment fonctionne la sérialisation?
  • Comment implémenter Comparable?
  • Quels sont les avantages d'utiliser les déclarations préparées de JDBC?
  • Qu'est-ce que Java EE?
  • Qu'est-ce qu'un conteneur et quels services fournit-il?
JuanZe
la source
9

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.

David
la source
16
"Throw new NullPointerException ()" est-il une réponse correcte?
Thorbjørn Ravn Andersen
1
Eh bien, c'est à l'intervieweur. S'ils montraient un exemple de test d'une variable et de lancement d'un NPE avec un message utile, je serais heureux. Si je pensais qu'ils utilisaient cette réponse parce qu'ils ne pouvaient pas trouver un code qui lancerait légitimement un NPE, je serais inquiet.
David
9

Qu'est-ce qui sera imprimé?

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder.append("+1");
    }
}

Réponse : CoolReturn + 1

Un peu plus difficile:

public void testFinally(){
    System.out.println(setOne().toString());

}

protected StringBuilder setOne(){
    StringBuilder builder=new StringBuilder();
    try{
        builder.append("Cool");
        return builder.append("Return");
    }finally{
        builder=null;  /* ;) */
    }
}

Réponse : CoolReturn

zaletniy
la source
le premier code indique que finalement est toujours excuté même si l'instruction return était disponible dans le bloc try, mais je n'ai pas obtenu le deuxième code ?? que s'est-il passé lorsque le générateur d'instructions = null; se produire ??
palAlaa
3
@Alaa, c'est presque comme si une valeur temporaire était définie sur le générateur, le générateur est défini sur null dans le bloc finally, puis la valeur temporaire est ce qui est retourné.
déter
1
@VextoR, oui Alaa a donné une belle description. Ce code vérifie comment la personne interrogée comprend le bloc try ... finally avec retour à l'intérieur, et la portée des variables en général, la gestion des variables
zaletniy
4
L'instruction return renvoie la référence à l'objet StringBuilder. La modification de la référence dans le finally ne fait rien à la référence qui est réellement retournée. Cependant, la modification du contenu de l'objet affecte ce qui est renvoyé, comme dans le premier exemple.
Derek Litz
8

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.

ZoFreX
la source
La seule différence est que la classe abstraite peut contenir des méthodes non abstraites.
TBH
1
C'est la réponse que vous auriez si vous lisiez un livre Java, bien sûr. Bien que vous puissiez également ajouter qu'elles peuvent également contenir des variables membres: P Mais la différence dans le moment de les utiliser, et pourquoi, est encore plus intéressante.
ZoFreX
1
l'utilisation de l'interface me fournit une technique très puissante qui est le polymophisme, qui peut appeler n'importe quelle méthode surchargée à partir de classes qui implémentent l'interface de manière apparente, sans avoir besoin de connaître le type de chaque classe enfant.
palAlaa
@TBH - N'oubliez pas que, dans le modèle d'héritage unique que Java utilise actuellement, vous ne pouvez étendre qu'une seule classe abstraite, pour un ensemble de fonctionnalités - mais vous pouvez combiner plusieurs interfaces dans une seule classe pour que plusieurs fonctionnalités soient implémentées sans restriction d'héritage.
MetroidFan2002
8

Des questions simples telles que,

  • Qu'est-ce que JRE et JDK?
  • Pourquoi Java revendique-t-il l'interopérabilité?

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.

Ravisha
la source
Je ne connais pas la partie JDK / JRE. Par exemple, il n'y a pas une telle distinction sur le Mac. Donc, en tant que développeur Java sur Mac, il n'y a vraiment aucun besoin de le savoir.
Fabian Steeg
Je pense que c'est une bonne question, et si cela aide à exposer les personnes suffisamment malavisées pour tenter un développement Java sérieux sur un Mac, c'est encore mieux. Sérieusement, si vous prétendez être un développeur Java mais que vous ne savez pas sur quel lien de téléchargement cliquer sur java.sun.com, il y a un problème.
Mark B
Bien être un développeur java, il ne faut pas s'inquiéter du tout de la plate-forme sur laquelle il / elle travaille. Comprendre les outils java semble une exigence de base. sur le système d'exploitation dans lequel je travaille.
Ravisha
@mbaird Cela se présente comme un commentaire plutôt méchant. Bien que je développe sur un Mac et que je sache ce que sont les JRE / JDK, soyons honnêtes, dans un développement réel, est-ce vraiment important? Surtout avec les IDE qui font de l'utilisation de la ligne de commande une chose du passé, un développeur Java a besoin de savoir comment utiliser le langage plus que toute autre chose.
Alexis King
6

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:

  1. Que se passe-t-il lorsqu'un MDB rencontre une exception qu'il ne peut pas gérer?
    Cette question conduit généralement à diverses discussions intéressantes sur les messages empoisonnés, les files d'attente d'erreurs, etc.,
  2. Compte tenu d'un sujet JMS et de quelques consommateurs sur différentes JVM, des questions sur divers scénarios avec et sans consommateurs durables.
    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.,
  3. Si vous êtes coincé dans une situation où l'accès au contenu d'un POJO Hibernate / JPA conduit à des exceptions, comment le résoudre?
    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.
  4. Comment fournir un simple service Web?
    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.
  5. Injection de ressources JEE 5
    Cette question se pose de nombreuses manières, du modèle de localisateur de service aux javax.naming.Contextquestions.

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:

  1. Questions sur java.util.collections
    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, Mapet l'importance de Object.equals()et Object.hashCode()dans chaque mise en œuvre de ces interfaces.
  2. Refactoring des questions
    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».
  3. Questions sur le multi-threading dans JDK5, en comparaison avec les versions antérieures de JDK, j'ai trouvé qu'il était préférable de se préparer avec les classes de package java.util.concurrent . Le livre de Doug Lea a la plupart des réponses.
  4. Quoi de neuf dans JDK1.6 / JDK1.7 ...?
    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.
  5. Modèles dans l'API Java
    On m'a demandé à maintes reprises de signaler un modèle GoF dans l'API Java. Mieux vaut être préparé pour celui-ci.
CMR
la source
5

Différence entre un serveur Web et un conteneur Web

user256777
la source
5

Qu'est-ce que vous aimez le plus, le moins dans Java et pourquoi?

Carsten
la source
5

pourquoi substitueriez-vous la méthode toString ()?

SWD
la source
4

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?

David Nouls
la source
4

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 ();

class Sample
{
     static void fun()
     {
           System.out.println("Hello");       
     }
}

class Test
{
      public static void main(String[] args)
      {
                Sample.fun();
      }
}

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 ().

Sai Upadhyayula
la source
Vous pouvez utiliser public static void main(String... args)si vous le souhaitez :-) Il a la même signature que[]
corsiKa
3

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

oxbow_lakes
la source
4
La capacité de garder la terminologie marketing claire est-elle vraiment si importante en fin de compte?
Laurence Gonsalves
@Laurence - c'est une chose ridicule à dire. Il y a une vraie différence entre les deux choses que vous seriez étonné de voir combien de développeurs supposés expérimentés ne comprennent tout simplement pas
oxbow_lakes
Ce que je veux dire, c'est que si quelqu'un est un bon codeur, je m'en fiche s'il connaît la différence entre J2SE et J2EE.
Laurence Gonsalves
J'ai lu la question comme étant "des choses qu'un développeur JEE + JSE devrait savoir", auquel cas je pense qu'il est pertinent de comprendre la différence entre les deux technologies.
oxbow_lakes
4
@ Thorbjørn Ravn Andersen Je doute que la plupart des codeurs Java, y compris les bons, soient parfaitement conscients de la distinction ci-dessus, "l'édition entreprise est essentiellement une définition d'interface ... Alors que l'édition standard est une implémentation à part entière". Pour la plupart des bons codeurs Java, la distinction qui compte est de savoir quelles API sont disponibles. Par exemple: les servlets font partie d'EE, etc. En tout cas, tout comme je pense qu'il est plus important de trouver de bons programmeurs que de bons programmeurs en langage X, je pense qu'il est plus important de trouver de bons programmeurs Java que de bons programmeurs JSE / JEE.
Laurence Gonsalves
3

Comment volatileaffecte- t-il l'optimisation du code par le compilateur?

romain
la source
3
Cette entrée doit également contenir la bonne réponse.
Thorbjørn Ravn Andersen
Je ne me souviens pas de la réponse complète, regardez cette lection youtube.com/ ... pour une bonne explication. En bref: supposons que la méthode utilise une variable volatile à un moment donné. Ensuite, le compilateur n'optimise pas le code de cette méthode après ce point.
Roman
2

Que diriez-vous de ce qu'est un bean session et décrivez certaines différences entre les beans session stateless et stateful.

Kristian
la source
2

É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

Toutes les personnes
la source
2

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 ()?

YoK
la source
pouvez-vous s'il vous plaît répondre à ces questions? C'est la première fois pour moi de connaître les "exceptions cochées et non cochées" !!
palAlaa
Une simple recherche sur Google peut vous conduire à des réponses: google.co.in
...
1

Comment ça threadsmarche? C'est quoi synchronized? S'il y a deux synchronizedmé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.

fastcodejava
la source
2
C'est parce que la réponse "est" oui ...
Fortega
@Fortega - Comment est-ce possible? Chaque méthode a un verrou sur l'objet. Si l'un d'eux threadexécute la méthode, aucun autre threadne peut obtenir le verrou.
fastcodejava
1
Si vous avez deux objets du même type, vous pouvez appeler la première méthode sur le premier objet et la deuxième méthode sur le deuxième objet simultanément. A moins que les méthodes ne soient statiques bien sûr.
Fortega
2
Si vous ne comprenez pas correctement comment se déroule le verrouillage, ce n'est pas vraiment une évidence. De plus, même si cela peut être une évidence, cela ne signifie pas que ma réponse était incorrecte :-)
Fortega
1
La réponse pourrait prêter à confusion pour les programmeurs qui n'utilisaient pas de threads dans leur travail, mais je pense que c'est une bonne
chose
1

Une chose que de nombreux programmeurs Java ne savent pas, c'est que les chaînes sont immuables, alors utilisez StringBuilder ou StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
Shervin Asgari
la source
Et des nombres tels que Integer, Long et ainsi de suite
Arthur Ronald
En termes de performances, il n'y a plus de différence entre la concaténation de chaînes immuables et l'utilisation de StringBuilder. C'est parce que les compilateurs java modernes optimiseront la concaténation: java.sun.com/docs/books/jls/third_edition/html/ ... Il est préférable d'utiliser la méthode la plus lisible.
Brent Wilson
1
@BrentWilson ce que vous liez ne fera pas ce que vous pensez. Cela se transformera s += "a" + "b" + "c"en Stringbuilder.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. forchar[]char[]
corsiKa