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.
Quelle est la relation entre hashCode () et equals ()? Quelle est la signification de ces méthodes? Quelles sont les conditions pour les implémenter?
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.
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
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>
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);
Vous avez dit "bien", "développeur". Voici mes 2 cents aussi .. :)
Pour J2EE:
Je peux penser à beaucoup, beaucoup, beaucoup d'autres, mais ça ira pour le moment :)
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".
Quelle est la différence entre String, StringBuffer et StringBuilder?
"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.
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.
Qu'est-ce que 'System', 'out', 'println' dans System.out.println? Que se passe-t-il lorsque vous appelez "mettre" sur HashMap?
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.
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
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 que ceux-ci soient demandés avant les requêtes liées au code.
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.
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:
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.
Set
, List
, Map
et l'importance de Object.equals()
et Object.hashCode()
dans chaque implémentation de ces interfaces.Qu'aimez-vous le plus/le moins à propos de Java et pourquoi?
Différence entre un serveur Web et un conteneur Web
pourquoi voudriez-vous remplacer la méthode toString ()?
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?
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, ().
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
Comment volatile
affecte-t-il l'optimisation du code par le compilateur?
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
Que diriez-vous d’un bean de session et décrivez certaines différences entre les beans de session sans état et avec état?.
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 ()?
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";
}
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.
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.
Q. Donnez un exemple concret de scénario dans lequel vous utiliserez GenericServlet et non HttpServlet?
Décrivez les différences entre les "quatre" (pas trois;) types de classe interne.
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
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.