Les offres associent Java, souvent 17 ou plus, Spring Boot, une API REST, React avec TypeScript, parfois Redux, et Docker. Certaines ajoutent Kafka, Kubernetes ou GitHub Actions. React n'impose ni routeur, ni gestion d'état, ni façon d'appeler l'API : chaque projet assemble ses briques (Vite, React Router, TanStack Query, Redux Toolkit ou Zustand, React Hook Form). Demandez quelles briques la personne a choisies sur son dernier projet, et pourquoi.
Deux pièges reviennent. Côté front, des effets qui rechargent les données en boucle, des réponses d'API rangées dans Redux avec des indicateurs de chargement recodés partout, des listes qui se figent. Côté sécurité, un jeton OAuth2 stocké dans localStorage par habitude et des droits vérifiés seulement dans les routes React. Un profil confirmé explique pourquoi l'IETF recommande un backend for frontend pour les applications sensibles, et comment Spring Security le met en place.
Vérifiez la fraîcheur des connaissances. Create React App est abandonné depuis février 2025 au profit de Vite ou d'un framework, React 19 a apporté les Actions pour les formulaires, et le React Compiler mémoïse les composants depuis sa version 1.0. Côté Java, Spring Boot 4 est sorti fin 2025. Un candidat qui démarre encore ses projets avec Create React App a décroché de l'écosystème depuis un moment.
Spring Boot d'un côté, React de l'autre : les briques du poste
Java et Spring Boot
Java 17, 21 ou 25 et Spring Boot pour l'API REST, la configuration et la sécurité. Spring Boot 4, sorti fin 2025, repose sur Spring Framework 7 et Jackson 3 et apporte des clients HTTP déclaratifs. Beaucoup d'applications tournent encore en Spring Boot 3.
Spring Data JPA et Hibernate
L'accès à la base, PostgreSQL le plus souvent. Pratique, mais il génère des requêtes que le développeur doit savoir lire : chargement à la demande, problème N+1, transactions. Un profil plutôt front s'y montre souvent plus fragile.
Spring Security et OAuth2
Deux rôles possibles pour l'application Spring : resource server, qui vérifie le jeton JWT envoyé par React, ou client OAuth2 dans un backend for frontend, qui garde les jetons côté serveur et donne une session au navigateur. Keycloak et Entra ID sont des fournisseurs d'identité fréquents.
React 19 et TypeScript
React en est à la version 19.3 (septembre 2026). La version 19 a ajouté les Actions et useActionState pour les formulaires, la 19.2 le composant Activity et useEffectEvent. Le React Compiler, stable depuis octobre 2025, mémoïse automatiquement. TypeScript est devenu la norme dans les offres.
Vite, React Router ou Next.js
Vite construit la plupart des applications monopages servies à côté d'une API Spring, depuis l'abandon de Create React App en février 2025. Next.js ou React Router en mode framework ajoutent du rendu serveur et un serveur Node, utiles seulement si le besoin existe.
TanStack Query, Redux Toolkit, Zustand
TanStack Query gère les données venues de l'API : cache, rechargement, invalidation. Redux Toolkit, encore cité dans beaucoup d'offres, et Zustand servent à l'état propre à l'interface. Un bon profil sait expliquer lequel il utilise pour quoi.
OpenAPI et types générés
springdoc-openapi décrit l'API à partir du code Spring. openapi-typescript, orval ou openapi-generator en tirent des types ou un client TypeScript. Le contrat devient vérifiable dans la CI.
Tests : JUnit, Testcontainers, Vitest, MSW
JUnit, Mockito et Testcontainers côté Java. Vitest ou Jest avec React Testing Library côté front, MSW pour simuler l'API au niveau réseau, Playwright pour les parcours complets.
Le développeur full-stack Java React livre une fonctionnalité entière : endpoint Spring Boot, requêtes JPA, règles de sécurité, écran React et tests. Comme React laisse beaucoup de choix d'architecture, son niveau se lit dans ses décisions sur l'état, les appels d'API et l'organisation du code, plus que dans une liste de hooks récitée. Côté serveur, on attend le niveau d'un développeur Spring Boot confirmé. Le front est le plus souvent une application Vite servie à côté de l'API, plus rarement une application Next.js qui appelle Spring Boot depuis son propre serveur. Le titre cache souvent une dominante, back ou front, à préciser dès l'offre.
Du jeton OAuth2 au hook React, les compétences à couvrir
- React : hooks, rendu et performance
- État client et données serveur
- Spring Boot : API, validation et intégrations
- JPA, SQL et performance côté serveur
- Sécurité OAuth2 de bout en bout
- Tests, outillage et livraison
Cinq situations entre React et Spring Boot à soumettre au candidat
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 · senior
Où l'application React doit-elle garder ses jetons OAuth2, et que change un backend for frontend (BFF) écrit avec Spring ?
Une bonne réponseSi React est un client public : flux authorization code avec PKCE, jeton d'accès en mémoire, refresh token à rotation. localStorage reste lisible par n'importe quel script injecté. Avec un BFF, Spring Security joue le client confidentiel (oauth2Login), garde les jetons côté serveur et ne donne au navigateur qu'un cookie de session HttpOnly, Secure et SameSite ; le relais du jeton vers les API se fait côté serveur. Le navigateur ne voit jamais le jeton. La RFC 10017 de l'IETF (août 2026), consacrée aux applications navigateur, place le BFF en premier pour les applications sensibles.
Signal d'alerte« On met le jeton dans localStorage, tout le monde fait comme ça », ou le flux implicite encore utilisé.
Question 2 · junior à confirmé
Un useEffect qui charge des données envoie des requêtes en boucle. Quelles causes cherchez-vous ?
Une bonne réponseUne dépendance qui change à chaque rendu : un objet, un tableau ou une fonction recréés dans le composant, ou un setState dans l'effet qui modifie une de ses propres dépendances. Les corrections : des dépendances primitives, l'objet sorti du composant ou créé dans l'effet, useMemo ou useCallback si besoin, ou une bibliothèque comme TanStack Query qui gère cache et déduplication. Il prévoit un nettoyage (AbortController) pour ignorer les réponses arrivées trop tard.
Signal d'alerteRetirer la dépendance du tableau et désactiver la règle exhaustive-deps d'ESLint.
Question 3 · junior à confirmé
Comment validez-vous une requête de création côté Spring Boot, et comment l'écran React affiche-t-il les erreurs champ par champ ?
Une bonne réponseUn DTO, souvent un record, annoté avec Bean Validation (@NotBlank, @Email, @Valid sur les objets imbriqués), et @Valid dans le contrôleur. Un @RestControllerAdvice transforme l'erreur en 400 au format ProblemDetail (RFC 9457) avec la liste des champs fautifs. Les règles métier, comme un e-mail déjà pris, renvoient 409 ou 422. Côté React, le formulaire (React Hook Form avec un schéma Zod, par exemple) valide tout de suite et place les erreurs du serveur sur les bons champs avec setError.
Signal d'alerteUne validation faite seulement en React, ou une erreur 500 pour une saisie incorrecte.
Question 4 · confirmé
Pourquoi utiliser TanStack Query, ou un outil équivalent, plutôt que ranger les réponses d'API dans Redux ?
Une bonne réponseIl sépare l'état serveur, une copie en cache de données qui vivent dans Spring (chargement, erreur, expiration, rechargement, déduplication, invalidation après modification), de l'état client (une modale ouverte, un filtre en cours). TanStack Query gère le premier ; RTK Query fait la même chose dans l'écosystème Redux. Redux Toolkit ou Zustand gardent leur place pour un état client complexe. Après une création, il invalide la requête de liste ou fait une mise à jour optimiste avec retour arrière.
Signal d'alerte« Redux pour tout », avec isLoading et la gestion d'erreur recodés dans chaque slice, ou ne connaître que useEffect et useState.
Question 5 · confirmé
Un endpoint de tableau de bord met quatre secondes à répondre. Comment trouvez-vous où passe le temps ?
Une bonne réponseIl mesure d'abord : traces (Micrometer Tracing ou OpenTelemetry), temps par étape, logs SQL et nombre de requêtes pour repérer un N+1, plan d'exécution (EXPLAIN ANALYZE) et index manquant. Il regarde aussi la sérialisation d'un gros graphe d'entités, des appels HTTP externes faits en série qu'on peut lancer en parallèle, un pool HikariCP saturé. Le cache vient après, avec une règle d'invalidation. Dans le navigateur, l'onglet réseau sépare temps serveur et temps d'affichage.
Signal d'alerte« On ajoute un cache Redis » avant d'avoir trouvé la cause.
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
React et Java dans le même profil : vos questions
D'un profil Java Angular à un poste Java React, quel écart ?
Oui, la partie Spring Boot est identique et TypeScript se retrouve des deux côtés. L'écart se situe dans la façon de penser le front : Angular fournit l'injection de dépendances, les formulaires et RxJS, React laisse choisir chaque brique et repose sur les hooks. Vérifiez qu'il comprend le cycle de rendu de React et les dépendances d'un useEffect. Comptez quelques semaines pour qu'il soit autonome sur un projet existant.
Next.js a-t-il sa place avec un back Spring Boot ?
Parfois. Next.js apporte le rendu serveur, utile pour des pages publiques qui doivent être bien référencées ou s'afficher très vite. Pour une application métier derrière une connexion, une application Vite qui appelle Spring Boot suffit dans la plupart des cas et évite un second serveur à exploiter. Si votre front est en Next.js, ajoutez des questions sur les Server Components et la mise en cache.
Comment construire le test technique d'un développeur Java React ?
Donnez un petit projet existant, avec un endpoint Spring Boot et un écran React, et demandez une évolution en une heure et demie : un filtre ajouté de bout en bout, avec validation et gestion des erreurs. Glissez un défaut, comme un useEffect sans nettoyage ou un N+1. Faites ensuite relire le code au candidat à voix haute : ses choix d'état et de sécurité en disent beaucoup.
Redux est-il encore indispensable ?
Non. Beaucoup d'offres le citent parce que l'application existante l'utilise. Sur un nouveau projet, TanStack Query couvre les données de l'API et un état client simple tient dans des useState, un Context ou Zustand. Redux Toolkit garde du sens pour un état client riche partagé entre de nombreux écrans. Si votre code est en Redux, vérifiez que le candidat connaît Redux Toolkit plutôt que l'ancien style à base de switch.
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.





