Chapitre 22
22 - Interviews
> 60 questions d'entretien (30 comportementales + 30 techniques) pour préparer vos entretiens Java
Chapitre 22 — Interviews
60 questions d'entretien (30 comportementales + 30 techniques) pour preparer vos entretiens Java
Partie A : Questions comportementales (30)
Leadership & Collaboration (Q1-Q8)
Q1 — Decrivez une situation ou vous avez du convaincre votre equipe d'adopter une nouvelle technologie.
Structure de reponse (STAR) :
- Situation : Equipe utilisait Java 8, besoin de virtual threads
- Tache : Convaincre de migrer vers Java 21
- Action : POC demontrant les gains de performance, benchmarks, article de blog interne
- Resultat : Migration en 2 sprints, 40% de reduction des erreurs de concurrence
Conseil : Montrez que vous etes pragmatique, pas un "technology evangelist" aveugle.
Q2 — Comment gerer un conflit technique au sein de l'equipe ?
Approche :
- Separer les personnes du probleme
- Demander des faits et des donnees (benchmarks)
- POC de chaque approche
- Decision collective avec quorum
- Documenter et passer a autre chose
Exemple : Desaccord Spring Boot vs Quarkus. Benchmarks sur le projet reel, cout de migration, ecosysteme. Decision = Spring Boot (ecosysteme large).
Q3 — Decrivez votre plus grand echec technique. Qu'en avez-vous appris ?
Modele : Echec reel + lessons learned + application ulterieure
Exemple : Deploiement vendredi soir sans rollback automatique → 3h d'incident. Lecon : deploiement progressif, canary release, runbooks. Desormais systematique.
Q4 — Comment abordez-vous le mentoring d'un developpeur junior ?
Approche :
- Pair programming les 2 premieres semaines
- Code review constructive (critiquer le code, pas la personne)
- Petites tasks progressives
- Revue de code en direct
- Retrospective des PRs
Q5 — Decrivez un projet complexe que vous avez mene de A a Z.
Structure : Contexte metier → Architecture → Implementation → Tests → MEP → Retour
Exemple : Migration monolithe → microservices. 12 services, 8 equipes, 6 mois. API-first, CI/CD, tests de contrat.
Q6 — Comment priorisez-vous la dette technique ?
Quadrant :
| Urgent/Important | Important/Pas Urgent |
|---|---|
| Bug de securite | Refactoring majeur |
| Perf degradation | Migration tech |
Reponse : La dette technique est un investissement. On la priorise comme les features. Roadmap technique dediee (20% du temps).
Q7 — Comment donnez-vous du feedback negatif a un collegue ?
Methode SBI :
- Situation : "Hier pendant la revue de code..."
- Behavior : "...tu as approuve une PR avec des bugs"
- Impact : "...ce qui a cause un incident en prod"
Conseil : Feedback prive, specifique, oriente solution.
Q8 — Que faites-vous si vous n'etes pas d'accord avec la decision de votre manager ?
Approche :
- Comprendre les contraintes du manager
- Proposer des alternatives
- Accepter la decision si elle est prise (disagree and commit)
- Documenter les risques
Resolution de problemes (Q9-Q16)
Q9 — Decrivez un bug complexe que vous avez resolu.
Exemple : Fuite memoire en production. Heap dump analysis → ThreadLocal non nettoye dans un pool de threads → objets retenus. Solution : try-finally avec remove().
Q10 — Comment diagnostiquez-vous un probleme de performance ?
Approche :
- Definir le SLO (p95 latency, throughput)
- Profiling CPU (async profiler)
- Profiling allocation
- JFR recording
- GC logs analysis
- Database query analysis
- Reseau/latency
Q11 — Comment gerer un incident de production ?
Runbook :
- Stop the bleeding (rollback, feature flag)
- Diagnose (logs, metrics, traces)
- Fix or workaround
- Post-mortem (blameless)
- Action items
Q12 — Comment testez-vous un systeme distribue ?
Approche :
- Unit tests (JUnit 5, Mockito)
- Integration tests (Testcontainers)
- Contract tests (Pact)
- End-to-end tests
- Chaos engineering
- Performance/load tests
Q13 — Quelle est votre approche pour optimiser une requete JPA lente ?
Processus :
- Activer SQL logging et slow query log
- Analyser le plan d'execution
- Verifier les indexes
- Chercher N+1 (JOIN FETCH)
- Pagination
- Cache (L2 cache, Redis)
- Requete native si necessaire
Q14 — Comment assurez-vous la securite d'une API REST ?
Checklist :
- HTTPS only
- Authentication (JWT/OAuth2)
- Authorization (@PreAuthorize)
- Input validation (@Valid)
- Rate limiting
- CORS configure
- CSRF protection
- Security headers
- Audit logging
Q15 — Comment gerer le passage a l'echelle d'une application ?
Axes :
- Vertical : Plus de CPU/RAM (limite)
- Horizontal : Plus d'instances (load balancer)
- Cache : Redis, CDN
- Async : Queue, events
- Database : Read replicas, sharding
- Microservices : Decoupage
Q16 — Quelle est votre experience avec CI/CD ?
Pipeline type :
- Build (Maven/Gradle)
- Tests unitaires
- Analyse SonarQube
- Tests integration (Testcontainers)
- Build image Docker
- Scan de securite (Trivy)
- Deploiement staging
- Tests E2E
- Deploiement production (canary/blue-green)
- Monitoring
Gestion d'echecs et conflits (Q17-Q22)
Q17 — Racontez un moment ou vous avez manque un deadline.
Approche honnete :
- Communication precoce du risque
- Proposition de perimetre reduit
- Plan de rattrapage
- Lecon : mieux estimer, buffer temps
Q18 — Comment reagissez-vous a un code review tres critique ?
Attitude :
- Remercier le reviewer
- Comprendre chaque point
- Ne pas prendre personnellement
- Ameliorer le code
- Proposer des standards d'equipe
Q19 — Que faites-vous si un membre de l'equipe ne contribue pas ?
Approche :
- Check-in prive pour comprendre (charge de travail, probleme perso, skills)
- Offrir du support / pair programming
- Ajuster les taches si necessaire
- Escalader si persiste
Q20 — Decrivez une situation de mise en production difficile.
Exemple : Migration DB avec downtime zero. Schema changes progressifs, dual writes, feature flags, rollback plan. 4h de fenetre, 2h effectives.
Q21 — Comment gerer la pression d'un incident critique ?
Techniques :
- Respiration, focus
- Delegation (chacun son role)
- Communication transparente
- Blameless culture
- Post-mortem structure
Q22 — Que faites-vous si on vous demande l'impossible ?
Reponse : Expliquer pourquoi c'est impossible, proposer des alternatives realistes, demander des compromis (scope/time/quality triangle).
Communication technique (Q23-Q27)
Q23 — Comment expliquez-vous un concept complexe a un non-technique ?
Exemple : "Le microservice, c'est comme une equipe specialisee : chaque equipe fait un travail precis et communique via des emails (APIs)."
Q24 — Comment rediger une documentation technique efficace ?
Principes :
- README : pourquoi, comment demarrer
- Architecture : ADR, diagrammes C4
- API : OpenAPI/Swagger
- Operations : Runbook, playbook
- Garder a jour (docs as code)
Q25 — Comment mener une retrospective efficace ?
Format :
- Start/Stop/Continue
- Action items (SMART)
- Blameless
- Rotating facilitator
- Max 1h
Q26 — Comment donner une presentation technique convaincante ?
Structure :
- Problem statement
- Solution (code, demo)
- Benchmarks / results
- Lessons learned
- Q&A
Q27 — Comment gerez-vous les questions pendant une presentation ?
Conseils :
- "Bonne question, je note et j'y reviens"
- Parking lot pour les hors-sujet
- Prendre le temps de reflechir
- "Je ne sais pas, je vais verifier"
Vision produit et technique (Q28-Q30)
Q28 — Comment equilibrez-vous qualite et velocite ?
Reponse : La qualite n'est pas optionnelle. TDD, code review, CI/CD sont des accelerateurs, pas des freins. La dette technique se paye avec interet.
Q29 — Comment restez-vous a jour techniquement ?
Veille :
- Baeldung, Inside Java newsletter
- Conference Devoxx (annuel)
- JEPs tracking
- Petits projets perso
- Contribution open source
Q30 — Quelle est votre vision de l'architecture logicielle dans 5 ans ?
Tendances :
- Virtual threads comme norme
- Native compilation (GraalVM, Leyden)
- AI-assisted development
- Platform engineering
- Event-driven architecture
- Cloud-native par defaut
Partie B : Questions techniques (30)
Java Core (Q1-Q8)
Q1 — Quelle est la difference entre un record et une classe ?
Reponse : Les records sont des classes transport implicites (final, equals/hashCode/toString generes automatiquement). Champs : composants du record. Pas d'heritage. Ideaux pour les DTOs, Value Objects.
Q2 — Expliquez le modele memoire Java (JMM).
Points cles :
- Happens-before : ordre partiel des operations
- Volatile : visibilite garantie
- Synchronized : mutual exclusion + visibilite
- Atomicity : operations atomiques
- Reordering : le compilateur peut reordonner
Q3 — Comment fonctionne le garbage collection ? Comparez G1, ZGC, Shenandoah.
| GC | Pause | Throughput | Heap |
|---|---|---|---|
| G1 | ~50ms | Eleve | 4-64 Go |
| ZGC | <10ms | Moyen | 512Go+ |
| Shenandoah | <10ms | Moyen | Grand |
G1 : Region-based, concurrent marking, compaction partielle ZGC : Colored pointers, load barriers, concurrent compaction Shenandoah : Forwarding pointers, Brooks pointers
Q4 — Expliquez les virtual threads (Project Loom).
Concepts :
- Threads legers, millions par application
- Mount/unmount sur les platform threads (carrier threads)
- Pas de pool, creation/destruction quasi-gratuite
- Compatibles avec synchronized (pinning)
- Structured concurrency pour la gestion de cycle de vie
try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
Future<String> user = scope.fork(() -> fetchUser());
Future<Integer> orders = scope.fork(() -> fetchOrders());
scope.join();
return new Result(user.resultNow(), orders.resultNow());
}
Q5 — Quelle est la difference entre synchronized et ReentrantLock ?
synchronized : implicite, bloc, ne peut pas etre interrompu
ReentrantLock : explicite, tryLock(timeout), lockInterruptibly(), fair ou non
Q6 — Comment fonctionne ConcurrentHashMap ?
- Segments internes (Java 7) → Node arrays (Java 8+)
- Lock striping : verrouillage fin par bucket
- CAS pour les operations non-contentieuses
computeIfAbsentatomique- Iterateurs faiblement consistants
Q7 — Expliquez le pattern matching en Java 21.
switch (obj) {
case String s when s.length() > 5 -> "Long string: " + s;
case String s -> "Short string";
case Integer i -> "Number: " + i;
case null -> "Null";
default -> "Unknown";
}
- Type patterns, guarded patterns
- Record patterns :
case Point(int x, int y) -> ... - null support depuis Java 21
Q8 — Que sont les Sealed Classes et les Permits ?
public sealed class Vehicle permits Car, Truck, Motorcycle {}
- Hierarchie controlee
- Pattern matching exhaustif (pas de default necessaire si tous les cas couverts)
permitsliste les sous-classes autorisees- Les sous-classes doivent etre final, sealed, ou non-sealed
Spring / Spring Boot (Q9-Q14)
Q9 — Expliquez le cycle de vie d'un bean Spring.
- Bean definition (parsing XML/annotations/@Bean)
- Instantiation
- Dependency injection (constructor/setter/field)
- Initialization (
@PostConstruct,InitializingBean) - Proxy (AOP, transaction)
- Ready
- Destruction (
@PreDestroy,DisposableBean)
Q10 — Quelle est la difference entre @Component, @Service, @Repository, @Controller ?
@Component: stereotype generique@Service: service metier@Repository: DAO avec traduction des exceptions JPA@Controller: MVC controller- Tous sont des
@Componentavec des semantiques differentes
Q11 — Comment fonctionne l'auto-configuration Spring Boot ?
@EnableAutoConfigurationimporteAutoConfigurationImportSelector- Lecture de
spring.factories/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports - Conditions (
@ConditionalOnClass,@ConditionalOnProperty,@ConditionalOnMissingBean) - ApplicationContext rafraichi avec les beans conditionnellement crees
Q12 — Comment gerer les transactions en Spring ?
@Transactionalsur methode publique- Propagation : REQUIRED, REQUIRES_NEW, NESTED, SUPPORTS, NOT_SUPPORTED, NEVER, MANDATORY
- Isolation : DEFAULT, READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
- Rollback :
@Transactional(rollbackFor = Exception.class, noRollbackFor = SomeException.class) - AOP proxy : appelle la methode sur le proxy, pas sur
this
Q13 — Expliquez Spring Security 6.0 SecurityFilterChain.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/api/public/**").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated())
.oauth2ResourceServer(oauth2 -> oauth2.jwt())
.csrf(csrf -> csrf.disable());
return http.build();
}
- Remplace
WebSecurityConfigurerAdapter(deprecated) - Lambda DSL
- Multiple SecurityFilterChain beans via
@Orderou@ConditionalOnMissingBean
Q14 — Quelle est la difference entre Spring MVC et WebFlux ?
| Spring MVC | Spring WebFlux |
|---|---|
| Servlet API | Reactive (Reactor) |
| Thread per request | Event loop |
| Blocking I/O | Non-blocking |
| Tomcat, Jetty | Netty, Undertow |
| Imperatif | Declaratif (Mono/Flux) |
JPA / Hibernate (Q15-Q18)
Q15 — Expliquez le probleme N+1 et ses solutions.
Probleme : 1 requete pour la liste + N requetes pour chaque association. Solutions :
JOIN FETCHen JPQL@EntityGraph(attributePaths = {"association"})@BatchSize(size = 20)- Appel explicite (HINT
PASS_DISTINCT_THROUGH)
Q16 — Quelle est la difference entre FetchType.EAGER et FetchType.LAZY ?
EAGER : chargement immediat (JOIN ou requete supplementaire). Defaut pour @*ToOne. Risque N+1 ou produit cartesien. LAZY : proxy cree, charge a l'acces. Defaut pour @*ToMany. Probleme si acces hors transaction (LazyInitializationException).
Q17 — Comment fonctionne le cache Hibernate ?
- L1 cache : Session, toujours actif, invisible
- L2 cache : SessionFactory (Hazelcast, Redis, EHCache)
- Query cache : caches les resultats de requetes
- Cache region : par entite, collection, requete
@Cacheable,@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
Q18 -- Expliquez l'Optimistic Locking vs Pessimistic Locking.
Optimistic : @Version (timestamp ou long). Check au flush. ObjectOptimisticLockingFailureException.
Pessimistic : LockModeType.PESSIMISTIC_WRITE. SELECT ... FOR UPDATE. Verrouillage DB.
Architecture et System Design (Q19-Q23)
Q19 — Concevez un systeme de URL shortener (tinyurl).
Composants :
- API Gateway
- Service de generation (base62, ID generator)
- Cache Redis (hot URLs)
- Database (read replicas)
- CDN pour les redirects
Flow :
- POST /shorten → genere ID → stocke en DB → retourne short URL
- GET /{shortId} → check Redis → redirect 301 → log analytics async
Scale : Bloom filter pour les IDs deja utilises, consistent hashing pour le cache.
Q20 — Concevez un systeme de paiement.
Composants :
- Payment Service (orchestration)
- Gateway Adapters (Stripe, PayPal)
- Fraud Detection Service
- Ledger Service (comptable)
- Notification Service
- Dead Letter Queue
Flow :
- Validate order
- Reserve payment (2-phase)
- Process payment
- Update ledger
- Notify
- Handle failures (retry, DLQ, reconciliation)
Q21 — Expliquez l'architecture hexagonale (ports/adapters).
[Controllers] → [Application] → [Domain] ← [Repository Interfaces]
↓ ↓
[DTOs] [Domain Entities]
↓ ↓
[Web Adapter] [JPA Adapter]
- Domain : pur Java, aucune infrastructure
- Ports : interfaces dans le domaine
- Adapters : implementation des ports (REST, JPA, Kafka)
- Dependances : tout pointe vers le domaine
Q22 — CQRS et Event Sourcing : quand et pourquoi ?
CQRS : Separation lecture/ecriture. Utile quand les models de lecture et ecriture sont differents. Event Sourcing : Stocke les evenements, derive l'etat. Utile pour audit, temporal queries, complexite du domaine.
Quand : Domaines complexes (finance, assurance, e-commerce), audit obligatoire. Quand pas : CRUD simple, reporting standard.
Q23 — Comment passer du monolithe aux microservices ?
Strategie Strangler Fig :
- Identifier les bounded contexts
- Extraire un service a la fois
- Feature flags pour le basculement
- Anti-corruption layer
- Database per service (eventuellement)
- Observabilite (tracing, metrics, logs)
Coding Challenges (Q24-Q27)
Q24 — Implementez une fonction qui verifie si une chaine est un palindrome.
boolean isPalindrome(String s) {
if (s == null) return false;
String cleaned = s.toLowerCase().replaceAll("[^a-z0-9]", "");
return cleaned.equals(new StringBuilder(cleaned).reverse().toString());
}
Q25 — Trouvez le premier caractere non-repetitif dans une chaine.
Optional<Character> firstNonRepeating(String s) {
var counts = new LinkedHashMap<Character, Integer>();
s.chars().forEach(c -> counts.merge((char) c, 1, Integer::sum));
return counts.entrySet().stream()
.filter(e -> e.getValue() == 1)
.map(Map.Entry::getKey)
.findFirst();
}
Q26 — Implementez une file d'attente avec deux stacks.
class QueueWithStacks<T> {
private final Stack<T> in = new Stack<>();
private final Stack<T> out = new Stack<>();
public void enqueue(T item) { in.push(item); }
public T dequeue() {
if (out.isEmpty()) {
while (!in.isEmpty()) out.push(in.pop());
}
return out.pop();
}
public boolean isEmpty() { return in.isEmpty() && out.isEmpty(); }
}
Q27 — Inversez un arbre binaire (invert binary tree).
TreeNode invertTree(TreeNode root) {
if (root == null) return null;
var temp = root.left;
root.left = invertTree(root.right);
root.right = invertTree(temp);
return root;
}
System Design approfondi (Q28-Q30)
Q28 — Concevez un systeme de chat en temps reel.
Composants :
- WebSocket Gateway (Spring WebFlux)
- Redis Pub/Sub (distribution)
- Cassandra pour l'historique
- Kafka pour les evenements
- CDN pour les fichiers/media
Scale : Horizontal scaling des WebSocket connections, consistent hashing pour le routing.
Q29 — Concevez un systeme de recommandations.
Composants :
- User profile service
- Item catalog service
- Recommendation engine (collaborative filtering, ML)
- Cache Redis (hot recommendations)
- Batch processing (Spark)
- Online serving (low latency)
Architecture : Lambda architecture (batch + speed layer).
Q30 — Concevez une plateforme de streaming video (Netflix-like).
Composants :
- CDN (video chunks)
- Encoding pipeline (FFmpeg, parallel)
- Catalog service
- User service
- Recommendation service
- Analytics pipeline
Encoding : Multiple bitrates (HLS/DASH), adaptive streaming, hot content caching.
Preparation finale
Semaine avant l'entretien
- Revoir les fondamentaux Java (JMM, GC, concurrency)
- Spring Boot auto-configuration
- Design patterns (Strategy, Factory, Observer)
- Algorithmes (1-2 problemes LeetCode par jour)
- System design (1-2 designs)
Pendant l'entretien
- Pensez a voix haute
- Clarifiez les exigences
- Commencez simple, optimisez apres
- Testez mentalement votre solution
- Discutez des trade-offs
Questions a poser au recruteur
- Stack technique actuelle ?
- Process CI/CD ?
- Dette technique connue ?
- Onboarding process ?
- Bilan de l'equipe (seniors/juniors) ?