web-dev-qa-db-fra.com

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

Je traversais des questions que tout bon développeur .Net devrait pouvoir répondre et j'ai été très impressionné par le contenu et l'approche de cette question, et dans le même esprit, je pose cette question pour Java/Développeur Java EE.

Quelles questions pensez-vous qu'un bon programmeur Java/Java EE puisse-t-il répondre?

Je marque cette question comme étant un wiki de communauté, car elle n’est pas spécifique à un utilisateur et vise à servir la communauté de la programmation au sens large.

Dans l'attente de réponses étonnantes.

EDIT: Veuillez répondre aux questions aussi, comme suggéré dans les commentaires, afin que les gens puissent apprendre quelque chose de nouveau en ce qui concerne la langue.

138
Rachel

Quelle est la relation entre hashCode () et equals ()? Quelle est la signification de ces méthodes? Quelles sont les conditions pour les implémenter?

83
Jeff

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.

70
Jon

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'intervieweur devrait demander "pourquoi serait il serait interdit?". Ensuite, vous commencez à y penser et vous devez réaliser qu’il n’y a pas de problème.

Alors, vous avez appris quelque chose (par vous-même) au cours 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

44
ewernli

L'utilisation de final mot clé dans les appels de méthode. Par exemple, pourquoi la méthode tester dans le code ci-dessous ne donne aucune erreur de compilation malgré l'utilisation de final qualificatif 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");
}
 </ code>
23
sateesh

Une comparaison sûre de chaîne. Différence entre

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

19
zapping

Vous avez dit "bien", "développeur". Voici mes 2 cents aussi .. :)

  • Que signifie une "exception vérifiée"?
  • Quel est le meilleur à utiliser et à quel moment: Assertions ou Exceptions pour gérer des conditions inattendues?
  • Pourquoi la classe String est-elle finale? (ou n'est-ce pas?;))
  • sont les méthodes wait, notify et notifyAll dans la classe Object?
  • Pourquoi la classe Thread n'est-elle pas finale? Pourquoi devrais-je prolonger le fil, jamais?
  • Pourquoi il y a deux classes de 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 enfin? Le reste est-il finalement exécuté ou non?
  • Il existe un bon ramasse-miettes, mais la fuite de mémoire est-elle totalement absente dans une application Java? Si non comment?

Pour J2EE:

  • Est-il bon d'avoir des variables d'instance/statiques dans une servlet? Pourquoi pas? Alors où stockez-vous "l'état"?
  • continue sur la question ci-dessus: quoi et où est un "état" pour une application (web)?
  • Que se passe-t-il si j'ai commencé à créer/fermer des connexions à la base de données 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 d'autres, mais ça ira pour le moment :)

17
Elister

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 continuent à perroquet les manteaux "les primitives sont passées par valeur, les objets sont passés par référence".

17
Chinmay Kanchi

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

16
Thunderhashy

"Qu'est-ce qu'un descripteur de déploiement?"

Si le candidat frémit involontairement, il a déjà travaillé avec des EJB antérieurs à la version 3.0.

13
Michael Borgwardt

De nombreuses questions et interviews sont disponibles sur le site 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 elles.

Non, c’est à vous de créer votre propre compilation de choses que vous pensez être 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ème. Je ne suis en effet pas convaincu que le fait de pouvoir répondre à une question connue fasse de vous un bon ou un mauvais inconnu solutionneur de problèmes. Je préfère donc demander aux gens de résoudre un problème donné, de leur donner des exigences et de leur demander d’écrire du code (mais pas sur papier). Je leur laisse un peu de temps pour revenir vers moi et vérifier comment ils l'ont fait, leur style de codage, comment ils ont utilisé les API suggérées, etc.

Ceci étant dit, ma question préférée est "qu'est-ce que vous n'aimez pas de Java?" (dans l'esprit de celui-ci ). C’est vraiment une excellente question, elle vous donne un retour immédiat sur la manière dont un candidat a utilisé Java et exploré son API, et s’il est juste religieux à ce sujet ou non (comme l’a écrit le PO).

Mise à jour: Comme suggéré par CPerkins, une meilleure formulation de la question suggérée ci-dessus pourrait être "Qu'est-ce que vous aimeriez le plus voir changer en Java?". Et en effet, je préfère cette façon.

12
Pascal Thivent

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

11
Adi
  1. Expliquez les différents modificateurs d'accès utilisés en Java. Beaucoup de gens ont du mal à résoudre ce problème, en particulier l'accès par défaut.
  2. Si vous pouviez changer une chose à propos du langage ou de la plateforme Java, de quoi s'agirait-il? Les bons développeurs auront une réponse ici, tandis que ceux qui ne s'intéressent pas vraiment au développement ne s'en soucient probablement pas.
  3. Si leur CV indique quelque chose comme s'ils utilisaient EJB2.1, posez-leur des questions sur EJB3 pour savoir ce qu'ils en savent. Les meilleurs développeurs resteront au courant des derniers développements, même s'ils n'utilisent pas les versions les plus récentes.
10
Mark
  • Quel est le contrat général en cas d'égalité?
  • Est-ce que la meilleure option est de préférer les listes ou les tableaux?
  • Quelles sont les conventions de nommage généralement acceptées?
  • Comment fonctionne la sérialisation?
  • Comment mettre en œuvre 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?
10
JuanZe

Si vous embauchez des diplômés avec Java "expérience", posez une question simple telle que: Écrivez du code qui provoquera une exception NullPointerException peut identifier les candidats qui ont utilisé Java. _ récemment, et ne pas juste arrêter quand ils ont fini leur unité/cours.

9
David

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

9
zaletniy

Des questions simples telles que,

  • Qu'est-ce que JRE et JDK?
  • Pourquoi Java réclame-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 que ceux-ci soient demandés avant les requêtes liées au code.

8
Ravisha

Quelle est la différence entre une classe abstraite et une interface? Quand utiliseriez-vous chacun d'eux?

Beaucoup de Java développeurs ne le savent pas. J'ai demandé à la plupart des gens de mon cours d'informatique à l'université et la grande majorité ne pouvait pas y répondre.

8
ZoFreX

Top 5 des questions J2EE/JEE

La liste des problèmes de middleware J2EE/JEE auxquels j'ai été confrontée est exceptionnellement longue, mais voici le top 5 des questions qui m'ont été posées et qui ont donné lieu à de bonnes discussions:

  1. Que se passe-t-il lorsqu'une MDB rencontre une exception qu'elle ne peut pas gérer?
    Cette question donne généralement lieu à diverses discussions intéressantes sur les messages de poison, les files d’erreur, etc.
  2. Etant donné un sujet JMS et quelques consommateurs sur différentes machines virtuelles, des questions sur différents scénarios avec et sans consommateurs durables.
    Cette question me permet généralement de déterminer quand utiliser des abonnés durables, quand utiliser des files d'attente, etc.
  3. Si vous êtes bloqué dans une situation où l'accès à un contenu POJO Hibernate/JPA entraîne des exceptions, comment le résoudre?
    Cela mène à de merveilleuses discussions sur le chargement paresseux, la réhydratation, etc. Cela a même conduit à comparer et contraster l'APP avec les haricots Entity. J'ai trouvé utile d'être préparé et de bien comprendre les concepts.
  4. Comment fournir un simple service Web?
    Toute solution, du simple serveur Web aux solutions SOAP/REST sophistiquées, en passant par toutes les solutions intermédiaires, devrait suffire. De plus, selon l’intervieweur, cela conduit parfois à des discussions très intéressantes sur des sujets tels que certaines idées de conception - WSDL en premier, style doc, SOAP intermédiaires, etc. Dans JAX-WS sur JAX-RPC, ou SOAP1.2 sur SOAP1.1, les réponses sont généralement basées sur le degré de mémorisation dont je me souviens.
  5. injection de ressources JEE 5
    Cette question se pose de plusieurs manières, en partant du motif Service Locator pour javax.naming.Context questions.

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 conduit pas à la hiérarchie du chargeur de classes de différents serveurs d’applications, archives de ressources, etc., il est préférable de démissionner et de poursuivre.

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 débarquer l'intervieweur dans cette zone et si vous êtes prêt, le reste de l'interview reste généralement ici. Assurez-vous de connaître Set, List, Map et l'importance de Object.equals() et Object.hashCode() dans chaque implémentation de ces interfaces.
  2. Questions de refactoring
    Celles-ci sont utiles si l'intervieweur a l'esprit ouvert. Si l'intervieweur a déjà une solution en tête et que la vôtre ne correspond pas à la sienne, vous êtes pratiquement condamné. Il est préférable d’accepter la réponse "Je comprends que d’autres solutions sont possibles".
  3. Questions sur le multi-threading dans JDK5, comparaison avec les versions antérieures de JDK J'ai constaté qu'il est préférable de se préparer avec Java.util.concurrent classes de paquets. Le livre de Doug Lea a la plupart des réponses.
  4. Quoi de neuf dans JDK1.6/JDK1.7 ...?
    C’est une question sûre avec de nombreux intervieweurs. Autant que 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 dirigeant la discussion dans une autre direction, nous évitons et résolvons le problème en grande partie et efficacement.
  5. Modèles dans Java API
    On m'a souvent demandé de signaler un modèle GoF dans l'API Java. Mieux vaut être préparé pour celui-ci.
6
CMR

Qu'aimez-vous le plus/le moins à propos de Java et pourquoi?

5
Carsten

Différence entre un serveur Web et un conteneur Web

5
user256777

pourquoi voudriez-vous remplacer la méthode toString ()?

5
SWD

Une question plus pure Java:

Quelle est la difference entre sleep et wait? Peu de gens comprennent réellement le fonctionnement de l’attente.

Comment avez-vous besoin de gérer les exceptions InterruptedExceptions?

4
David Nouls

Telle est la question à laquelle j'ai été confronté dans mon interview.

Pourquoi la méthode main dans Java est-elle appelée en tant que voic statique public principal (String [] args)?

Répondre:

1. main () doit être déclaré public car il est appelé par la machine virtuelle Java chaque fois que l'exécution du programme démarre. JVM n'appartient pas à notre package de programme.

Afin d’accéder à main hors du paquet, nous devons le déclarer comme public. Si nous le déclarons autrement que public, il affiche un erreur d’exécution mais pas Erreur de compilation

2. main () doit être déclaré statique , car si une méthode est déclarée statique, nous pouvons l'appeler en dehors de la classe à l'aide de ClassName.MethodName ();

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

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

La machine virtuelle Java 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é comme void main () car JVM n'attend aucune valeur de main (). Elle doit donc être déclarée comme void.

Si un autre type de retour est fourni, il s'agit d'une RunTimeError, c'est-à-dire NoSuchMethodFoundError.

4. main () doit avoir les arguments String comme tableaux , car la machine virtuelle Java appelle la méthode main en transmettant argument en ligne de commande.Quand ils sont stockés dans un objet tableau de chaînes, ().

4
Sai Upadhyayula

Quelle est la différence entre J2SE et J2EE (ou JSE et JEE)?

Un développeur doit être en mesure de souligner que l'édition entreprise est essentiellement une définition d'interface (c'est-à-dire une spécification) pouvant être implémentée par les fournisseurs. Considérant que l'édition standard est une implémentation à part entière

3
oxbow_lakes

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

3
Roman

Ecrivez un programme qui accepte deux entiers et affiche le plus grand des deux nombres dans un fichier situé à l'emplacement de votre choix. Décrivez maintenant le rôle de chaque énoncé.

Il est possible de creuser assez profondément à partir de la signification de la déclaration d'importation, jusqu'à une terminaison anormale

2
Everyone

Que diriez-vous d’un bean de session et décrivez certaines différences entre les beans de session sans état et avec état?.

2
Kristian

Noyau: 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é/décoché) à utiliser quand?

Servlet: 1. Quelle est la différence entre response.sendRedirect () et request.forward ()?

2
YoK

Une chose que beaucoup de programmeurs Java ne savent pas, c'est que les chaînes sont immuables. Utilisez donc StringBuilder ou StringBuffer!

String s = "";
for(int i = 0; i < 100; i++) {
  s += "Strings " + "are " + "immutable, " + " so use StringBuilder/StringBuffer to reduce memory footprint";
}
1
Shervin Asgari

Comment fonctionne threads? Qu'est-ce que synchronized? S'il existe deux méthodes synchronized dans une classe, elles peuvent être exécutées simultanément par deux threads. Vous serez surpris d'entendre beaucoup de gens répondre oui. Ensuite, toutes les questions liées aux threads, par exemple impasse, famine etc.

1
fastcodejava

Quand utiliseriez-vous des Beans Session ou des Beans Message Driven?

Comment les transactions sont-elles gérées dans les beans de session?

Quelle est la différence entre les beans de session locaux et distants? Cette question concerne davantage le fait de savoir que les RPC sont visibles ou non, puisqu’une méthode exposée en mode local ou distant peut toujours fonctionner différemment (les effets secondaires sur les paramètres sont possibles avec les paramètres locaux, mais pas avec les paramètres distants).

Un bon test est: ne posez jamais les questions dans le même ordre. Avec la délocalisation, nous avons constaté qu’ils donnaient parfois la réponse dans le mauvais ordre :-). En conséquence, vous devez vous assurer que vous pouvez réellement voir la personne que vous interrogez.

0
David Nouls

Q. Donnez un exemple concret de scénario dans lequel vous utiliserez GenericServlet et non HttpServlet?

0
akjain

Décrivez les différences entre les "quatre" (pas trois;) types de classe interne.

0
mP.

Excellentes questions et bonnes réponses de tous. Il est agréable de voir ce type de questions. Je voudrais ajouter un peu plus ce qui peut rendre ce référentiel de réponses plus riche.

Pour le noyau Java le mot-clé est-il principal dans Java? Plus d'infos

Java est indépendant de la plate-forme, qu'en est-il de la machine virtuelle Java?

Pouvons-nous avoir un constructeur privé en classe, si oui, à quoi sert-il.

Pourquoi avons-nous besoin de constructeurs dans la classe abstraite alors que nous ne pouvons pas l'instancier? Plus d'infos

Au lieu de tout, il y a beaucoup plus de questions liées au noyau Java. Plus d'infos

0
Sanjay Jain

Avantages et inconvénients des classes thread-safe et du code explicitement synchronisé et exemples de bonnes applications des deux. Il n'est souvent pas correct de faire confiance aux classes thread-safe pour garantir la cohérence des données dans les applications multithreads.

0
Dan