Introduction : pourquoi Java ne pardonne pas le bâclage
\n\nVous avez envoyé votre CV, passé le screening RH, et voilà — une invitation à un entretien technique. Si vous lisez cet article sur pythonlib.ru, c’est soit que vous passez de Python à Java, soit que vous constituez simplement une « base de connaissances ». Dans tous les cas, vous êtes sur la bonne voie.
\n\nJava n’est pas un langage où l’on peut « passer » grâce au charisme. L’écosystème d’entreprise exige une compréhension claire : du JMM (Java Memory Model) au fonctionnement du Garbage Collector. Un entretien Java n’est pas un examen, c’est un dialogue. Mais un dialogue où l’on testera votre résistance.
\n\nDans cet article, j’ai rassemblé une véritable checklist : quoi étudier, comment répondre et — surtout — comment ne pas se ridiculiser en live-coding. Sans blabla, que de la pratique.
\n\n1. Java Core : les fondations à connaître par cœur
\n\nCommençons par les bases. Sans Java Core, personne ne vous écoutera. Voici la liste des sujets que tout candidat doit maîtriser :
\n\n1.1. POO (Programmation Orientée Objet)
\nVous devez être capable d’expliquer le polymorphisme, l’héritage, l’encapsulation et l’abstraction simplement, avec des exemples.
\n\nQuestion piège : « Quelle est la différence entre une classe abstraite et une interface ? »
\nBonne réponse : en Java 8+, les interfaces ont des méthodes par défaut, mais une classe abstraite peut contenir un état (champs), contrairement à une interface.
\n\n// Exemple : classe abstraite\nabstract class Animal {\n protected String name;\n abstract void makeSound();\n}\n\n// Interface avec méthode par défaut\ninterface Movable {\n default void move() {\n System.out.println("Moving...");\n }\n}\n\n1.2. Collections (Java Collections Framework)
\nC’est un must-have. Connaître HashMap, ArrayList, HashSet, TreeMap ne suffit pas. Il faut comprendre :
\n- \n
- Comment fonctionne HashMap (tableau + liste chaînée + arbre rouge-noir depuis Java 8) \n
- La différence entre les itérateurs fail-fast et fail-safe \n
- Quand utiliser LinkedList au lieu d’ArrayList (spoiler : presque jamais) \n
Conseil : Lors de l’entretien, on peut vous demander d’écrire votre propre implémentation de HashMap. Entraînez-vous à l’avance.
\n\n1.3. Exceptions
\nChecked vs Unchecked — un classique. Rappelez-vous : RuntimeException et ses descendants sont unchecked, tout le reste est checked. Et jamais, vous m’entendez, jamais n’utilisez catch (Exception e) {} — c’est un anti-patron.
2. Multithreading : le sujet où 80% des candidats échouent
\n\nJava est l’un des rares langages où le multithreading est intégré au niveau du langage. Lors de l’entretien, on vous interrogera forcément sur synchronized, volatile, AtomicInteger, Lock, Semaphore.
\n\n2.1. Le mot-clé volatile
\nQuestion principale : « volatile garantit-il l’atomicité ? » Réponse : non. Il garantit uniquement la visibilité des modifications entre les threads.
\n\npublic class VolatileExample {\n private volatile boolean flag = true;\n\n public void stop() {\n flag = false; // L’autre thread verra ce changement immédiatement\n }\n}\n\n2.2. Deadlock et comment l’éviter
\nOn peut vous demander d’écrire un code qui provoque un deadlock, puis de le corriger.
\n\n// Deadlock classique\npublic class DeadlockExample {\n private final Object lock1 = new Object();\n private final Object lock2 = new Object();\n\n public void method1() {\n synchronized (lock1) {\n synchronized (lock2) { /* ... */ }\n }\n }\n\n public void method2() {\n synchronized (lock2) {\n synchronized (lock1) { /* ... */ }\n }\n }\n}\n\nSolution : toujours acquérir les verrous dans le même ordre, ou utiliser tryLock() du package java.util.concurrent.locks.