Questions Jury Flashcards
Pouvez-vous lister et définir les principaux concepts de la POO ?
- Encapsulation : C’est le fait de contrôler les accès aux données avec des attributs privés et des getters/setters (accesseurs / mutateurs)
- Héritage : permet de définir une classe qui hérite des attributs et méthodes d’une autre classe.
- Polymorphisme : permet de redéfinir une méthode héritée, et de ce fait, pouvoir l’utiliser de manière différente en fonction de l’objet qui l’appelle.
- Abstraction : permet de se concentrer sur les caractéristiques essentielles d’un objet tout en cachant les détails d’implémentation.
- Interface : permet de spécifier un comportement que les classes doivent implémenter
Comment avez-vous géré la sécurité de votre application ?
- Gestion des authentifications via JWT (JSON Web Token)
- Durée de validité limitée des tokens JWT
- Format du mot de passe robuste
- Stockage en base de données des mots de passe des utilisateurs hachés avec BCrypt
- Gestion des autorisations avec un système de rôles et permissions
- Utilisation du protocole HTTPS pour chiffrer les échanges entre le client et le serveur
- Validation des données côté client avec les fomulaires Angular
- Validation des données côté serveur avec les annotations dédiées
- JPA et les requêtes paramétrées protège l’application contre les injections SQL
- Gestion des CORS et protections CSRF avec Spring Security
- Utilisation de variables d’environnement pour les donées sensibles
- Protection de la base de données avec des droits d’accès stricts
comment avez-vous organisé le travail en équipe ?
- Méthodologie Agile avec Scrum (sprints, réunions régulières telles que daily, rétrospective, revue de sprint)
- Utilisation d’outils de gestion de projet tels que Trello / Jira / GitHub Projects pour suivre l’avancement des tâches et prioriser les développements.
- Découpage des tâches en user stories au sein d’un product backlog, associées à des critères d’acceptation et estimées en points de complexité.
- Mise en place d’un workflow git (branches main, develop, feature/*)
- Répartition des rôles (back-end, front-end, DevOps, tests, UX/UI, PO, SM)
Quels mécanismes avez-vous mis en place pour gérer les erreurs dans votre application ?
BACK END :
- Gestion centralisée des exceptions avec Spring Boot et Global Exception Handler
- Gestion des Exceptions personnalisées (ResourceNotFoundException, UnauthorizedException, etc.)
- Codes HTTP appropriés
FRONT END :
- Messages d’erreur utilisateur personnalisés via des notifications
- Redirection vers une page 404 pour les ressources non trouvées.
- Redirection vers la page de connexion en cas d’erreur 401 (non authentifié).
- Message d’erreur lors du remplissage des formulaires
Comment avez-vous élaboré les maquettes de votre application ?
1- Analyse des besoins utilisateurs
2- Identification des fonctionnalités clés
3- Création du Product Backlog
4- Création de Wireframes pour représenter l’agencement général des éléments sur chaque page
5- Définition d’une charte graphique en prenant en compte l’identité visuelle du produit et les règles d’accessibilité (contraste, taille des polices, couleurs adaptées aux dyslexiques et daltoniens)
6- Design des maquettes pour un rendu visuel plus détaillé : UI
7- Responsive Design pour s’asurer que l’application s’adapte sur différents types d’écrans
8- Création des prototypes interactifs pour tester le parcours utilisateur et d’ajuster les éléments visuels : UX
++- Décomposition des interfaces en composants UI (boutons, cartes, formulaires) pour faciliter l’implémentation dans le framework Angular.
Comment avez-vous installé et configuré votre environnement de travail pour ce projet ?
- Outils et IDE : VS Code et extension pour le front - IntelliJ pour le back
- Java : Version installée (Java 21), installation du JDK, utilisation de Maven.
- Angular : Installation de Node.js, npm et Angular CLI
- Gestion du code : Utilisation de Git, gestion des branches, workflow collaboratif.
- Base de données : installation, configuration et interaction avec des outils comme MySQL Workbench ou via IDE
- Docker : Utilisation de conteneurs pour isoler l’environnement, Docker Compose pour orchestrer les services.
- Automatisation : Mise en place de tests, intégration continue (CI/CD), qualité du code.
Comment avez-vous développé les interfaces utilisateur de votre application ?
- Technologie utilisée : Angular, qui permet une architecture basée sur des composants réutilisables.
- Ergonomie (UX/UI) : charte graphique, design system (framework CSS)
- Accessibilité (contrastes, navigation clavier, attributs ARIA)
- Responsive Design : interface adaptative (CSS Flexbox/Grid et media queries, unité relative)
- Identification des éléments récurrents pour découper l’UI en composants réutilisables (ex. boutons, cartes, modals, formulaires).
Quels sont les outils indispensables à ton environnement de développement ?
Un IDE adapté (ex : IntelliJ, VS Code), un JDK, un gestionnaire de dépendances, un serveur de base de données, un terminal, Git.
Comment assures-tu la compatibilité entre ton environnement local et l’environnement de production ?
En utilisant des conteneurs Docker au sein desquels sont configurées les mêmes versions des outils et dépendances.
Pourquoi utiliser un gestionnaire de versions comme Git ?
Pour suivre l’évolution du code, collaborer efficacement en équipe, et revenir à des versions antérieures si besoin.
Pourquoi utiliser Docker pour un projet ?
Pour garantir un environnement identique sur tous les postes et simplifier le déploiement en production.
Quels fichiers sont nécessaires pour configurer un conteneur Docker ?
Un Dockerfile pour définir l’image et un docker-compose.yml pour orchestrer plusieurs conteneurs.
Quelle est la différence entre le JDK et la JVM ?
La JVM (Java Virtual Machine) exécute le code Java. Le JDK (Java Development Kit) contient la JVM et les outils nécessaires au développement, comme le compilateur javac.
Quels sont les prérequis pour installer et exécuter un projet Angular ?
Node.js (avec npm ou yarn), Angular CLI (npm install -g @angular/cli), et un navigateur pour tester l’application.
Comment t’assures-tu que ton interface respecte la maquette du dossier de conception ?
En utilisant des outils comme Figma ou Adobe XD, en respectant les couleurs, typographies et espacements définis.
Comment rends-tu une interface responsive ?
- Flexbox / Grid
- media queries,
- unités relatives
- frameworks comme Bootstrap ou Angular Material.
Pourquoi est-il important d’adapter une interface à différents types de supports ?
Pour améliorer l’expérience utilisateur (UX) et garantir l’accessibilité sur mobile, tablette et desktop.
Quelles règles d’accessibilité dois-tu respecter lors du développement d’une interface ?
Contraste suffisant, textes alternatifs pour les images, navigation clavier, aria-labels.
Quelles obligations le RGPD impose-t-il pour une interface utilisateur ?
Consentement des cookies, gestion des données personnelles, mentions légales accessibles.
Comment gères-tu un événement utilisateur dans Angular ?
Avec le event binding : <button (click)=”handleClick()”> et en implémentant la méthode dans le component.
Comment récupères-tu des données d’une API dans une interface Angular ?
Avec le service HttpClient et la méthode get(), en s’abonnant avec .subscribe(), ou avec async pipe.
Pourquoi et comment tester une interface utilisateur ?
Pour éviter les régressions avec des tests unitaires et des tests d’intégration.
Quels mécanismes peux-tu mettre en place pour sécuriser une interface ?
Validation des entrées (Form Validators), gestion des erreurs (try/catch), authentification (JWT)
Quels sont les principes SOLID en programmation orientée objet ?
Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.