Comment réussir un entretien Java : analyse des questions les plus fréquentes avec exemples
Un entretien pour un poste de développeur Java ne consiste pas seulement à vérifier la théorie, mais aussi à démontrer une pensée pratique. Les employeurs veulent voir que vous n'avez pas simplement mémorisé la syntaxe, mais que vous comprenez comment fonctionne la machine virtuelle, comment les collections sont structurées et comment écrire du code thread-safe. Dans cet article, nous avons rassemblé les questions clés souvent posées lors des entretiens techniques et fourni des réponses détaillées avec des exemples en Java.
1. Questions sur les bases de Java Core et la POO
Tout entretien commence par les principes de base. L'intervieweur vérifie à quel point vous comprenez le paradigme de la programmation orientée objet et la structure du langage. Voici les 3 questions les plus fréquentes de cette catégorie.
Quelle est la différence entre une classe abstraite et une interface ?
C'est un classique. Une classe abstraite peut contenir à la fois des méthodes abstraites et des méthodes normales avec implémentation, ainsi que des champs et des constructeurs. Une interface (avant Java 8) ne contenait que des signatures de méthodes. À partir de Java 8, les interfaces ont introduit les méthodes default et static, et avec Java 9, les méthodes private. La principale différence : vous ne pouvez hériter que d'une seule classe abstraite, mais vous pouvez implémenter plusieurs interfaces.
// Classe abstraiteabstract class Animal { String name; abstract void sound(); void sleep() { System.out.println("Zzz"); }}
// Interfaceinterface Flyable { void fly(); default void glide() { System.out.println("Gliding..."); }}
class Bird extends Animal implements Flyable { @Override void sound() { System.out.println("Chirp"); } @Override public void fly() { System.out.println("Flying"); }}Qu'est-ce que le polymorphisme ? Donnez un exemple.
Le polymorphisme est la capacité d'un objet à prendre plusieurs formes. En Java, il est réalisé via l'héritage et les interfaces. L'exemple le plus courant est la redéfinition de méthodes.
List<String> list = new ArrayList<>();// Référence de type List, mais objet ArrayList.// La méthode add() sera appelée depuis l'implémentation d'ArrayList.list.add("Exemple de polymorphisme");Quelle est la différence entre == et equals() ?
== compare les références (adresses mémoire), tandis que equals() compare le contenu logique. Pour les classes wrapper (Integer, String), equals() est redéfini et compare les valeurs. Cependant, pour Integer, il existe un cache de -128 à 127, donc == peut se comporter de manière inattendue.
Integer a = 100;Integer b = 100;System.out.println(a == b); // true (les deux proviennent du cache)
Integer c = 200;Integer d = 200;System.out.println(c == d); // false (objets différents)System.out.println(c.equals(d)); // true2. Collections Java : structures de données et algorithmes
Les collections sont le cœur de toute application Java. Sans les comprendre, il est impossible de réussir un entretien, même pour un niveau Junior. Les intervieweurs aiment poser des questions sur la complexité des opérations et le fonctionnement interne.
Comment fonctionne HashMap ? Comment fonctionne le hachage ?
HashMap stocke les paires clé-valeur dans un tableau de « buckets ». Lors de l'ajout d'un élément, le code de hachage de la clé est calculé et le numéro du bucket est déterminé en fonction de celui-ci. Si le bucket contient déjà des éléments, une liste chaînée ou un arbre est utilisé (si plus de 8 éléments). Dans Java 8+, pour optimiser les collisions, la liste est transformée en arbre rouge-noir.
Map<String, Integer> map = new HashMap<>();map.put("Java", 1);map.put("Python", 2);// Si "Java" et "Python" ont le même hashCode — il y aura une collision.System.out.println(map.get("Java")); // O(1) en moyenneQuelle est la différence entre ArrayList et LinkedList ? Quand utiliser l'un ou l'autre ?
ArrayList est basé sur un tableau dynamique. L'accès par index est O(1), l'insertion/suppression au milieu est O(n). LinkedList