Les offres décrivent un socle assez stable : Java 17 ou 21, Spring Boot, Spring Data JPA sur PostgreSQL ou Oracle, Angular, une API REST, Docker, une chaîne Jenkins ou GitLab CI, souvent SonarQube. Les versions, elles, varient beaucoup. Une application tourne encore sous Spring Boot 2.7 et Angular 12 quand une autre démarre sur Spring Boot 4 et Angular 21. Demandez sur quelles versions la personne a travaillé et quelles montées de version elle a menées.
Les profils vraiment équilibrés sont rares. La plupart penchent vers le back, avec un Angular appris sur le tas, ou vers le front, avec un Spring Boot limité aux contrôleurs. Le côté faible se repère vite : RxJS réduit à des subscribe imbriqués, signals inconnus, JPA utilisé sans savoir quand Hibernate lance ses requêtes. Décidez avant l'entretien quel côté le poste exige, et notez les deux séparément.
Angular a beaucoup bougé depuis la version 16 : composants standalone, signals, blocs @if et @for, puis, depuis la version 21, des nouvelles applications sans zone.js et testées avec Vitest. Côté Java, Spring Boot 4 est sorti fin 2025 avec Spring Framework 7 et Jackson 3. Un candidat resté sur Angular 12 peut être solide s'il sait ce qui l'attend. Le PDF compte 30 questions et un cas de 20 minutes.
La pile Java et Angular, couche par couche
Java 21 et 25
Les deux dernières versions LTS de Java, publiées en 2023 et 2025. Les offres demandent encore souvent Java 11 ou 17 sur l'existant. Les records, le pattern matching et les threads virtuels (Java 21) changent la façon d'écrire le code : demandez lesquels la personne utilise vraiment.
Spring Boot 3 et 4
Le framework qui porte l'API REST, la configuration, la sécurité et l'accès aux données. Spring Boot 4, sorti fin 2025, s'appuie sur Spring Framework 7, Jakarta EE (Servlet 6.1) et Jackson 3, exige Java 17 au minimum et ajoute des clients HTTP déclaratifs et le versionnement d'API. Beaucoup d'applications tournent encore en 2.7 ou 3.x.
Spring Data JPA et Hibernate
La couche qui transforme les tables en objets Java. Elle fait gagner du temps et cache des requêtes : chargement à la demande, problème N+1, transactions. C'est là que les profils plutôt front montrent leurs limites.
Spring Security et OAuth2
La sécurité de l'API. En général, l'application vérifie un jeton JWT émis par un fournisseur d'identité comme Keycloak ou Entra ID, puis contrôle les rôles endpoint par endpoint. Vérifiez que la personne sait où se fait vraiment le contrôle d'accès.
Angular
Le framework front de Google, une version majeure tous les six mois (Angular 22 depuis juin 2026). Les versions récentes ont apporté les composants standalone, les signals, les blocs @if, @for et @defer, et la détection des changements sans zone.js, par défaut dans les nouvelles applications depuis la version 21.
RxJS
La bibliothèque de flux asynchrones utilisée par HttpClient, les formulaires et le routeur. Les opérateurs switchMap, debounceTime ou forkJoin reviennent partout. Les signals prennent une partie de son rôle pour l'état, et les deux cohabitent avec toSignal et toObservable.
OpenAPI et génération de clients
La description standard d'une API REST. springdoc-openapi la produit à partir du code Spring, openapi-generator en tire un client Angular typé. Le contrat devient vérifiable en CI au lieu de vivre dans un document.
Tests : JUnit, Testcontainers, Vitest
JUnit et Mockito côté Java, Testcontainers pour tester sur une vraie base dans Docker, MockMvc ou RestTestClient pour les contrôleurs. Côté Angular, Vitest est l'outil par défaut des nouveaux projets, Karma et Jasmine restent courants sur l'existant, Playwright ou Cypress pour les parcours complets.
Build, Docker et CI
Maven ou Gradle pour Java, npm pour Angular, des images Docker, une chaîne Jenkins ou GitLab CI avec SonarQube. Le poste demande au minimum de comprendre la chaîne qui livre son code et de savoir lire un build en échec.
Le développeur full-stack Java Angular reçoit en général une fonctionnalité de bout en bout : la table, l'API, l'écran, les tests. Le quotidien tourne autour de listes paginées, de formulaires de saisie, de règles de validation et d'appels entre services. Dans les grandes équipes, le poste se découpe parfois en dominante back ou front malgré le titre. La maintenance d'un existant demande surtout de lire du code ancien et de mener des montées de version ; un nouveau développement attend Java 21, Spring Boot 3 ou 4 et un Angular récent avec signals. Les certifications Oracle Java ou Spring existent, l'entretien reste le meilleur moyen de vérifier la pratique.
Six compétences à noter séparément, côté back et côté front
- Spring Boot et conception d'API REST
- JPA, Hibernate et transactions
- Angular : signals et détection des changements
- RxJS et appels HTTP
- Contrat OpenAPI et sécurité de bout en bout
- Tests, build et production
Du contrôleur Spring au composant Angular : les questions à poser
Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.
Question 1 · confirmé
Un écran Angular liste 50 commandes avec leur client, et les logs montrent 51 requêtes SQL. Que se passe-t-il côté Hibernate, et comment corrigez-vous ?
Une bonne réponseUn problème N+1 : l'association vers le client est chargée à la demande, et chaque commande déclenche sa propre requête, souvent pendant la sérialisation JSON. Corrections : un JOIN FETCH ou un @EntityGraph sur la méthode du repository, une projection en DTO (un record) avec les seules colonnes affichées, ou le chargement par lots (hibernate.default_batch_fetch_size). Il vérifie le résultat dans les logs SQL ou les statistiques Hibernate.
Signal d'alerte« On passe l'association en EAGER », ce qui déplace le problème sur tous les écrans, ou « on ajoute un cache ».
Question 2 · confirmé
Un champ de recherche Angular appelle l'API à chaque frappe, et des résultats anciens s'affichent parfois après les récents. Comment écrivez-vous ce flux ?
Une bonne réponsevalueChanges du contrôle, puis debounceTime, distinctUntilChanged, un filtre sur la longueur et switchMap vers l'appel HTTP : switchMap annule la requête précédente, ce qui règle l'ordre des réponses. Le catchError se place à l'intérieur du switchMap pour qu'une erreur ne coupe pas le flux. Le résultat s'affiche avec le pipe async ou toSignal, qui gèrent le désabonnement. Il sait expliquer la différence avec mergeMap, concatMap et exhaustMap.
Signal d'alerteDes subscribe imbriqués, un mergeMap qui laisse les réponses arriver dans le désordre, ou un catchError placé à l'extérieur qui termine le flux à la première erreur.
Question 3 · confirmé
Une méthode annotée @Transactional ne fait pas de rollback quand une exception est levée. Quelles causes cherchez-vous ?
Une bonne réponseUn appel depuis une autre méthode de la même classe, qui ne passe pas par le proxy Spring. Une exception vérifiée : par défaut, Spring n'annule que sur RuntimeException et Error, sauf rollbackFor. Une exception attrapée dans la méthode et jamais relancée. Une méthode privée, ou un objet créé avec new hors du contexte Spring. Un mauvais gestionnaire de transactions quand il y a plusieurs bases.
Signal d'alerte« On met @Transactional sur toutes les classes », sans savoir comment fonctionne le proxy.
Question 4 · senior
L'équipe veut retirer zone.js d'une application Angular existante. Qu'est-ce qui risque de ne plus se rafraîchir à l'écran ?
Une bonne réponseSans zone.js, Angular ne relance plus la détection des changements après un setTimeout, une promesse ou le callback d'une bibliothèque tierce. L'écran se met à jour quand un signal lu dans le template change, quand markForCheck est appelé (le pipe async le fait), sur un événement du template ou via setInput. Les composants qui modifient une propriété simple dans un subscribe ne bougent plus. Il migre d'abord en OnPush et corrige, passe l'état en signals, puis active provideZonelessChangeDetection ; c'est le comportement par défaut des nouvelles applications depuis Angular 21.
Signal d'alerte« Rien ne change, zone.js n'est qu'une dépendance », ou des appels à detectChanges ajoutés partout pour compenser.
Question 5 · confirmé
Le contrat d'API change côté Spring Boot et le front Angular casse en recette. Comment l'évitez-vous ?
Une bonne réponseUn contrat OpenAPI comme source unique : produit par springdoc à partir du code, ou écrit d'abord avec génération des interfaces Spring. Le client TypeScript et ses modèles sont générés dans le build du front (openapi-generator, cible typescript-angular). La CI compare la spec avec la précédente et bloque un changement cassant. On ajoute des champs plutôt que d'en renommer, et l'API se versionne quand il le faut. Les DTO restent séparés des entités JPA.
Signal d'alerteDes interfaces TypeScript recopiées à la main, ou des entités JPA renvoyées telles quelles en JSON.
Recevez la fiche d'entretien complète en PDF
La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.
- 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
- Le niveau visé pour chaque question
- Une mise en situation de 20 minutes et ce qu'on attend du candidat
- La grille d'évaluation de 1 à 4, axe par axe
Java et Angular : les points à trancher avant de recruter
Faut-il un profil aussi fort en Java qu'en Angular ?
Rarement. Fixez le côté qui porte le poste. Sur une application où la complexité est dans les règles métier et les données, privilégiez le Java et acceptez un Angular correct. Sur des écrans riches, avec beaucoup d'interactions et de formulaires, inversez. Le minimum de l'autre côté : savoir lire et modifier le code sans aide, comprendre le contrat d'API et tester ce que l'on livre.
Quelles versions d'Angular et de Spring Boot exiger ?
Exigez la pratique des versions de votre application, et une idée claire des suivantes. Sur Angular, un profil resté avant la version 16 doit apprendre les signals, les composants standalone et le fonctionnement sans zone.js. Sur Spring, le passage de javax à jakarta (Spring Boot 3) et l'arrivée de Jackson 3 (Spring Boot 4) sont les marches à connaître. Une montée de version déjà menée vaut plus qu'une liste de versions sur le CV.
Mise en situation ou test technique : que proposer à un développeur Java Angular ?
Une petite fonctionnalité complète sur un projet fourni, en une heure et demie à deux heures : un endpoint Spring Boot avec sa requête JPA et son test, un écran Angular qui l'appelle et affiche les erreurs. Ajoutez un défaut volontaire, comme un N+1 ou un abonnement jamais fermé. La relecture du code avec le candidat compte autant que le résultat.
NgRx est-il un prérequis ?
Non, sauf si votre application l'utilise déjà. NgRx structure un état complexe partagé entre beaucoup d'écrans, avec un coût en code et en apprentissage. Beaucoup d'applications s'en passent avec des services, des signals et quelques BehaviorSubject. Un développeur qui sait expliquer quand un store devient utile, et comment il l'organiserait, prendra en main NgRx ou SignalStore en quelques semaines.
Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.





