1. ASP.NET Web API (Backend C#) 1.1. Principes Fondamentaux des API REST RESTful: Architecture basée sur des ressources identifiables par des URI. Communication stateless (chaque requête contient toutes les informations nécessaires). Opérations standardisées via les méthodes HTTP. Méthodes HTTP (Verbes): GET : Récupérer une ou plusieurs ressources (idempotent, sûr). POST : Créer une nouvelle ressource (non idempotent). PUT : Mettre à jour/remplacer une ressource existante (idempotent). PATCH : Mettre à jour partiellement une ressource. DELETE : Supprimer une ressource (idempotent). Codes de Statut HTTP: Indiquent le résultat de la requête (ex: $200$ OK, $201$ Created, $400$ Bad Request, $401$ Unauthorized, $403$ Forbidden, $404$ Not Found, $500$ Internal Server Error). 1.2. Architecture et Composants Clés Contrôleurs: Gèrent les requêtes HTTP et renvoient des réponses. Héritent de ControllerBase ou ApiController . Routage: Mappage des URL aux méthodes d'action des contrôleurs (ex: [Route("api/[controller]")] , [HttpGet("{id}")] ). Modèles (DTOs): Classes C# utilisées pour transférer des données entre l'API et le client. Serialization/Deserialization: Conversion automatique des objets C# en JSON (par défaut) ou XML, et inversement. Middleware: Composants dans le pipeline de requêtes HTTP (ASP.NET Core) qui traitent les requêtes et réponses (ex: authentification, journalisation, gestion des erreurs). Injection de Dépendances (DI): Mécanisme pour gérer les dépendances entre objets, améliorant la testabilité et la maintenabilité. 1.3. Sécurité et Bonnes Pratiques Authentification: Vérifie l'identité de l'utilisateur (ex: JWT - JSON Web Tokens, OAuth 2.0). Autorisation: Vérifie les droits d'accès de l'utilisateur authentifié (ex: attributs [Authorize] avec rôles ou politiques). CORS (Cross-Origin Resource Sharing): Mécanisme de sécurité des navigateurs pour autoriser les requêtes web entre domaines différents. Validation des Données: Assurer l'intégrité des données entrantes (ex: Data Annotations, Fluent Validation). Versionnement de l'API: Gérer les changements d'API sans casser les clients existants (par URL, header, query string). 1.4. Questions Fréquentes ASP.NET Web API Q: Comment gérer les erreurs dans une Web API ? R: Retourner des codes de statut HTTP appropriés (4xx pour client, 5xx pour serveur) et des corps de réponse JSON descriptifs. Utiliser un middleware de gestion des erreurs global. Q: Expliquez la différence entre ASP.NET Web API et ASP.NET MVC. R: Web API est conçu pour exposer des services HTTP (données) et n'a pas de concept de vues. MVC est pour les applications web avec des vues HTML. Dans ASP.NET Core, les deux sont unifiés dans ControllerBase . Q: Qu'est-ce que le "model binding" ? R: Processus par lequel les données des requêtes HTTP (corps, URI, query string, headers) sont mappées aux paramètres des méthodes d'action des contrôleurs. 2. React (Frontend JavaScript) 2.1. Principes Fondamentaux Composants: Blocs de construction réutilisables de l'interface utilisateur. Fonctionnels: Fonctions JavaScript qui retournent du JSX (avec Hooks). Classes: Classes ES6 (avec this.state , this.props , méthodes de cycle de vie). JSX: Extension de syntaxe JavaScript qui permet d'écrire du code HTML-like directement dans JavaScript. Props (Propriétés): Données passées d'un composant parent à un enfant. Elles sont unidirectionnelles et immuables . State (État): Données gérées localement par un composant et qui peuvent changer au fil du temps. Les changements déclenchent un re-rendu du composant. Virtual DOM: Représentation en mémoire du DOM réel. React l'utilise pour optimiser les mises à jour de l'UI en comparant deux versions du Virtual DOM et en appliquant uniquement les changements nécessaires au DOM réel. 2.2. Hooks Essentiels useState : Ajoute l'état local à un composant fonctionnel. const [value, setValue] = useState(initialValue); useEffect : Gère les effets secondaires (appels API, abonnements, manipulation du DOM) après le rendu. useEffect(() => { /* side effect */ return () => { /* cleanup */ }; }, [dependencies]); useContext : Permet d'accéder à la valeur d'un Contexte React sans "prop drilling". useReducer : Alternative à useState pour une gestion d'état plus complexe (souvent avec Redux-like state management). useCallback , useMemo : Pour l'optimisation des performances en mémoïsant des fonctions ou des valeurs, évitant des re-calculs inutiles. 2.3. Gestion de l'État & Routage "Lifting State Up": Partager l'état entre frères en le déplaçant vers leur parent commun le plus proche. Context API: Permet de partager des données globales (thème, langue, utilisateur authentifié) à travers l'arbre de composants sans passer les props manuellement à chaque niveau. Bibliothèques de Gestion d'État: Redux, Zustand, Recoil, Jotai pour des applications complexes. React Router DOM: Bibliothèque standard pour le routage côté client ( BrowserRouter , Routes , Route , Link , useNavigate , useParams ). 2.4. Questions Fréquentes React Q: Expliquez le cycle de vie d'un composant React (Hooks). R: Le montage se fait avec useEffect et un tableau de dépendances vide ( [] ). Les mises à jour se font avec useEffect et des dépendances spécifiques. Le démontage est géré par la fonction de nettoyage retournée par useEffect . Q: Comment communiquez-vous entre les composants non liés ? R: Via le Context API, une bibliothèque de gestion d'état globale (Redux, Zustand) ou un Event Bus. Q: Quels sont les avantages de React par rapport à d'autres frameworks ? R: Composants réutilisables, Virtual DOM pour la performance, unidirectionnalité du flux de données, grande communauté et écosystème, JSX pour une syntaxe déclarative. Q: Qu'est-ce que le "prop drilling" et comment l'éviter ? R: Le "prop drilling" est le fait de passer des props à travers des composants intermédiaires qui n'en ont pas directement besoin. On l'évite avec le Context API ou une bibliothèque de gestion d'état. 3. Oracle Database (Base de Données Relationnelle) 3.1. Concepts RDBMS et SQL Table: Structure de données organisée en lignes et colonnes. Ligne (Record): Un ensemble de données pour une entité unique. Colonne (Field): Un attribut spécifique d'une entité. Clé Primaire (PK): Identifiant unique pour chaque ligne d'une table (non nulle, unique). Clé Étrangère (FK): Colonne(s) qui référence(nt) une clé primaire dans une autre table, établissant des relations. Index: Structure de données pour accélérer la récupération des données en permettant un accès direct aux lignes. Types de Commandes SQL: DML (Data Manipulation Language): SELECT , INSERT , UPDATE , DELETE . DDL (Data Definition Language): CREATE , ALTER , DROP (tables, index, etc.). TCL (Transaction Control Language): COMMIT , ROLLBACK , SAVEPOINT . DCL (Data Control Language): GRANT , REVOKE (permissions). 3.2. PL/SQL (Procedural Language/SQL) Extension procédurale de SQL spécifique à Oracle. Permet d'incorporer des structures de contrôle (boucles, conditions) et de déclarer des variables. Procédures Stockées: Blocs de code PL/SQL nommés et stockés dans la base de données, exécutables sur demande. Améliorent la performance (précompilées) et la sécurité. Fonctions: Similaires aux procédures, mais doivent retourner une valeur. Triggers: Blocs PL/SQL qui s'exécutent automatiquement en réponse à des événements spécifiques (INSERT, UPDATE, DELETE) sur une table. Packages: Groupements logiques de procédures, fonctions, variables et types PL/SQL. 3.3. Optimisation et Performance Oracle Indexation Stratégique: Créer des index sur les colonnes utilisées dans les clauses WHERE , JOIN , ORDER BY . Analyse du Plan d'Exécution: Utiliser EXPLAIN PLAN ou des outils comme SQL Developer pour comprendre comment Oracle exécute une requête et identifier les goulots d'étranglement. Maintenance des Statistiques: S'assurer que les statistiques de la base de données sont à jour pour que l'optimiseur puisse choisir les meilleurs plans d'exécution. Éviter les Requêtes N+1: Récupérer les données liées en une seule requête (via JOIN ) au lieu de multiples requêtes. Vues Matérialisées: Pour les requêtes complexes ou les agrégations fréquemment utilisées, les vues matérialisées pré-calculent et stockent les résultats. Gestion des Transactions: Utiliser COMMIT et ROLLBACK de manière appropriée pour garantir l'intégrité des données. 3.4. Connectivité C# à Oracle ADO.NET: Utilisation de fournisseurs de données Oracle (ex: Oracle.ManagedDataAccess.Core ). Objets clés: OracleConnection , OracleCommand , OracleDataReader , OracleDataAdapter . ORM (Object-Relational Mapping): Entity Framework Core avec un fournisseur Oracle (simplifie l'accès aux données en mappant les objets C# aux tables de la base de données). 3.5. Questions Fréquentes Oracle Q: Quand utiliser une procédure stockée plutôt qu'une requête SQL directe ? R: Pour la réutilisabilité, la performance (précompilée), la sécurité (permissions sur la procédure), la simplification de la logique métier côté client, et la réduction du trafic réseau. Q: Qu'est-ce qu'une transaction et pourquoi est-elle importante ? R: Une transaction est une séquence d'opérations exécutées comme une seule unité logique. Elle garantit l'atomicité (tout ou rien), la cohérence, l'isolation et la durabilité (ACID), essentielles pour l'intégrité des données. Q: Comment garantir l'unicité des données dans une table ? R: En utilisant une clé primaire (pour l'identifiant unique de la ligne) ou une contrainte UNIQUE sur une ou plusieurs colonnes. Q: Quel est le rôle de l'optimiseur de requêtes Oracle ? R: L'optimiseur analyse une requête SQL et détermine le plan d'exécution le plus efficace (le chemin le moins coûteux pour récupérer les données) en tenant compte des statistiques, des index, etc.