Vous êtes sur la page 1sur 6

JAVA/J2EE

JDK : Il comprend notamment le compilateur Java, les bibliothèques Java standard, et divers autres outils
nécessaires pour développer et déboguer des programmes en Java.

JRE : Le JRE est un environnement dans lequel les programmes Java peuvent s'exécuter

JVM : C'est une machine virtuelle qui permet l'exécution de programmes Java indépendamment de la plate-forme.

Interface vs Classe abstraite : Une interface est une collection de méthodes abstraites, tandis qu'une classe
abstraite peut contenir à la fois des méthodes abstraites et des méthodes concrètes.

Surcharge de méthode : La surcharge de méthode permet à une classe d'avoir plusieurs méthodes avec le même
nom mais des signatures différentes.

Différence entre String, StringBuffer et StringBuilder : String est immuable, StringBuffer est mutable mais
synchronisé, StringBuilder est mutable et non synchronisé.

Utilisez String lorsque vous avez besoin d'une chaîne immuable et que vous ne prévoyez pas de modifications
fréquentes. (concat replace startsWith endsWith split)

Utilisez StringBuffer lorsque vous manipulez des chaînes dans un environnement multithreadé où la
synchronisation est nécessaire. (insert delete reverse append)

Utilisez StringBuilder lorsque vous manipulez des chaînes dans un environnement monothreadé et que vous avez
besoin de meilleures performances que celles offertes par StringBuffer. . (insert delete reverse append)

equalsIgnoreCase(String anotherString) : Compare cette chaîne à une autre chaîne, en ignorant la casse.

trim() : Retourne une copie de cette chaîne avec les espaces en début et fin supprimés.(all)

split(String regex) : Divise cette chaîne en utilisant l'expression régulière spécifiée comme délimiteur.

append(String str) : Ajoute la chaîne spécifiée à la fin de cette séquence.

Map est une structure de données qui associe des paires clé-valeur où chaque clé est unique.

HashMap est une implémentation de Map qui ne garantit pas l'ordre des éléments.Les opérations de base (get,
put, remove)

LinkedHashMap maintient l'ordre d'insertion des éléments, ce qui signifie que les éléments sont parcourus dans
l'ordre où ils ont été insérés.

TreeMap est une implémentation de Map qui maintient les clés triées selon leur ordre naturel ou un comparateur
fourni.

Une List est une collection ordonnée d'éléments où les éléments peuvent être répétés.

ArrayList utilise un tableau dynamique pour stocker les éléments.L'accès aux éléments par leur indice est rapide,
mais l'insertion et la suppression en milieu de liste peuvent être coûteuses car cela peut nécessiter le décalage des
éléments.

LinkedList est implémentée en utilisant une liste doublement chaînée.L'accès par indice peut être plus lent que
dans ArrayList, mais les opérations d'insertion et de suppression en milieu de liste sont plus efficaces car elles
nécessitent seulement de mettre à jour les références des nœuds.

Un Set est une collection d'éléments uniques. pas de double dans les SET

HashSet utilise une table de hachage pour stocker les éléments, ce qui permet des opérations de recherche,
d'insertion et de suppression rapides.Il ne garantit pas l'ordre des éléments.

LinkedHashSet maintient l'ordre d'insertion des éléments, tout en offrant des performances similaires à HashSet.

TreeSet maintient les éléments triés dans l'ordre naturel ou selon un comparateur fourni.
ArrayList vs LinkedList : ArrayList utilise un tableau dynamique, LinkedList utilise une liste chaînée.

Gestion de la mémoire en Java : Java utilise le garbage collection pour gérer automatiquement la mémoire en
libérant les objets qui ne sont plus référencés.

Equals() vs == : Equals() compare le contenu, == compare les références mémoire.

Méthodes equals() et hashCode() : equals() compare le contenu des objets, hashCode() renvoie un code de
hachage pour l'objet.

La Sérialisation en Java est le processus de conversion d'un objet en un flux d'octets, qui peut être stocké dans un
fichier ou transmis sur le réseau, et de le désérialiser ultérieurement pour le restaurer dans sa forme d'objet
d'origine. Cela permet de persister les objets et de les transmettre entre différentes machines virtuelles Java.

Threading en Java : Le threading permet l'exécution simultanée de plusieurs threads pour améliorer les
performances.

Pour créer et démarrer un nouveau thread en Java, vous pouvez soit étendre la classe Thread et implémenter la
méthode run(), soit implémenter l'interface Runnable et passer une instance de cette classe à un objet Thread.
Ensuite, vous pouvez appeler la méthode start() sur l'objet Thread pour démarrer l'exécution du thread.

Méthodes synchronized et concurrentes : synchronized garantit l'accès exclusif à une ressource partagée, les
méthodes concurrentes peuvent être exécutées simultanément par plusieurs threads.

JIT Compiler : Le compilateur Just-In-Time traduit le bytecode Java en code machine au moment de l'exécution.

Singleton : Le Singleton est un modèle de conception qui garantit qu'une classe n'a qu'une seule instance et fournit
un point d'accès global à cette instance.

Modèle de conception Observer : Permet à un objet (observateur) de surveiller les changements dans un autre
objet (sujet).

Modèle de conception MVC : Divise une application en trois composants principaux : le Modèle, la Vue et le
Contrôleur.

Modèle de conception Builder : Permet la construction d'un objet étape par étape.

Modèle de conception Factory : Définit une interface pour créer un objet, mais laisse le choix des classes
concrètes à ses sous-classes.

Modèle de conception Proxy : Fournit un substitut ou un espace réservé pour un autre objet pour contrôler l'accès
à cet objet.

Modèle de conception Adapter : Permet à une interface existante d'être utilisée comme une autre interface.

Modèle de conception Composite : Permet de traiter des objets individuels et des compositions d'objets de
manière uniforme.

Modèle de conception Strategy : Permet de définir une famille d'algorithmes, d'encapsuler chacun d'eux et de les
rendre interchangeables.

Modèle de conception DAO isole la logique d'accès aux données. Dans J2EE, il est utilisé pour séparer la logique
d'accès aux données de la logique métier.

Principe SOLID : Ensemble de principes de conception (Single Responsibility, Open/Closed, Liskov Substitution,
Interface Segregation, Dependency Inversion).

Singleton thread-safe : Utilise généralement une initialisation tardive ou un blocage pour assurer la sécurité du
thread.

Transactions (JTA) : Java Transaction API permet la gestion des transactions dans les applications Java.

Wait(), notify(), notifyAll() : Méthodes utilisées pour la gestion de la concurrence dans Java.

Expressions lambda : Fonctions anonymes qui peuvent être utilisées pour simplifier le code.
Gérer les threads concurrentes : Utilisez des mécanismes de synchronisation tels que les verrous pour éviter les
conflits d'accès aux ressources partagées.

Le cycle de vie d'une servlet comprend l'initialisation, le service, la destruction et peut inclure des phases
supplémentaires comme l'activation et la passivation pour les servlets distribuées.

Un EJB est un composant logiciel serveur qui encapsule la logique métier d'une application J2EE.

Une transaction J2EE est une séquence d'opérations atomiques qui sont soit toutes exécutées avec succès, soit
aucune n'est exécutée. La gestion des transactions J2EE est assurée par le conteneur EJB, qui coordonne les
transactions en utilisant les services JTA (Java Transaction API).

Un intercepteur est un composant qui permet d'intercepter et de traiter des appels à des méthodes de
composants EJB, ajoutant des fonctionnalités telles que la journalisation ou la sécurité.

Qu'est-ce que JMS (Java Message Service) est une API qui permet aux applications Java d'envoyer et de recevoir des
messages asynchrones.

Qu'est-ce que JSF (JavaServer Faces) JSF est un framework de développement d'interfaces utilisateur pour les
applications web J2EE, basé sur des composants réutilisables.

Quand utiliseriez-vous try-catch et throws ? throw est utilisé pour lever une exception explicite, tandis que throws
est utilisé pour déclarer les exceptions que la méthode peut lancer.Utilisez try-catch lorsque vous devez gérer les
exceptions localement dans une méthode spécifique, et utilisez throws lorsque vous souhaitez transmettre
l'exception à l'appelant de la méthode.

différence entre final, finally, et finalize final est utilisé pour définir une constante, une méthode qui ne peut pas
être redéfinie dans les classes filles, ou une classe qui ne peut pas être héritée. finally est utilisé pour définir un
bloc de code qui est exécuté après l'exécution d'un bloc try, quelle que soit l'issue. finalize est une méthode
appelée par le ramasse-miettes avant qu'un objet soit libéré de la mémoire.

Spring
un bean est simplement un objet géré par le conteneur Spring.

IoC est un principe de conception il inverse le contrôle de la création et de la gestion des objets, déléguant cette
responsabilité au conteneur Spring.

l'injection de dépendances dans Spring. c’est injecter un objet dans un autre. L'injection de dépendances peut
être réalisée par l'annotation @Autowired, les constructeurs, ou les méthodes setters.

Un bean est un objet géré par le conteneur Spring, généralement configuré et géré par les annotations ou les
fichiers XML. Le cycle de vie d'un bean comprend l'initialisation, l'utilisation et la destruction, gérées par les
méthodes d'initialisation et de destruction.

@SpringBootApplication: Cette annotation est utilisée pour marquer la classe principale de l'application Spring
Boot. Elle combine @Configuration, @ComponentScan, et @EnableAutoConfiguration.

@Value: Cette annotation est utilisée pour injecter des valeurs à partir des propriétés de configuration de Spring
Boot ou d'autres sources.

@Bean: Cette annotation est utilisée pour indiquer à Spring Boot qu'une méthode produit un bean à ajouter au
contexte d'application.
@Conditional: Cette annotation est utilisée pour contrôler la configuration basée sur des conditions spécifiques.

@Profile: Cette annotation est utilisée pour activer des composants spécifiques basés sur le profil d'exécution de
l'application.

@ConfigurationProperties: Cette annotation est utilisée pour lier les propriétés de configuration externes à des
objets Java dans une application Spring Boot.

@RestControllerAdvice: Cette annotation est utilisée pour définir des conseils globaux pour les contrôleurs REST
dans une application Spring Boot.

@EnableAsync: Cette annotation est utilisée pour activer la prise en charge des méthodes asynchrones dans une
application Spring Boot.

@EnableScheduling: Cette annotation est utilisée pour activer la prise en charge de l'ordonnancement des tâches
dans une application Spring Boot.

@EnableWebSecurity: Cette annotation est utilisée pour activer la sécurité web dans une application Spring.

@PreAuthorize: Cette annotation est utilisée pour spécifier des autorisations au niveau de la méthode avant
l'exécution de celle-ci.

@PostAuthorize: Cette annotation est utilisée pour spécifier des autorisations au niveau de la méthode après son
exécution.

@Secured: Cette annotation est utilisée pour spécifier des autorisations au niveau de la méthode en utilisant des
expressions d'autorisation.

@RolesAllowed: Cette annotation est utilisée pour spécifier les rôles autorisés au niveau de la méthode.

@AuthenticationPrincipal: Cette annotation est utilisée pour injecter le principal actuellement authentifié dans un
contrôleur ou un service.

@EnableGlobalMethodSecurity: Cette annotation est utilisée pour activer la sécurité au niveau des méthodes
globalement, ce qui permet l'utilisation des annotations @PreAuthorize, @PostAuthorize, @Secured, etc.

@EnableGlobalAuthentication: Cette annotation est utilisée pour activer la configuration de l'authentification


globalement.

Transactions Spring propose un support pour les transactions déclaratives via des annotations (@Transactional) ou
la configuration XML.

Spring Boot Starter est une dépendance qui fournit un ensemble d'artefacts prêts à l'emploi pour faciliter le
démarrage d'une application Spring Boot.

le mécanisme de profilage Les profils permettent de définir des configurations spécifiques pour différents
environnements, tels que développement, test ou production.

Tests unitaires Spring Boot fournit des annotations telles que @SpringBootTest pour faciliter les tests
d'intégration et @MockBean pour les tests de mock.
Spring Boot Actuator fournit des fonctionnalités de surveillance et de gestion d'application, exposant des points de
terminaison pour obtenir des informations sur l'application.

Les exceptions peuvent être gérées via des classes d'exception personnalisées, des conseils (aspects), ou en
utilisant l'annotation @ExceptionHandler.

Thymeleaf est un moteur de templates utilisé dans les applications Spring Boot pour la création de vues web.

Spring Cloud est une extension de Spring Boot qui facilite le développement d'applications distribuées en
fournissant des solutions pour la configuration

AOP : Spring utilise AOP pour fournir des fonctionnalités telles que la gestion de la transaction, la sécurité, le
caching, etc., sans mélanger avec le code métier principal.

@Aspect@Component
public class LoggingAspect { @Before("execution(* com.example.service.AccountService.*(..))")
public void logBeforeAccountOperation() { System.out.println("Journalisation");}}

Les scopes de bean déterminent la durée de vie d'un bean dans Spring.singleton signifie qu'une seule instance est
créée par conteneur, prototype signifie qu'une nouvelle instance est créée à chaque demande, request signifie
qu'une instance est créée pour chaque requête HTTP

Les annotations JUnit vous aident à écrire des tests plus clairs sans répétitions inutiles.@BeforeEach emplacement
pour installer ou organiser un prérequis pour vos tests.@AfterEach Et pour nettoyer ou satisfaire à une
postcondition.@BeforeAll exemple pour installer d’autres variables statiques pour vos tests.@AfterAll pour
nettoyer les dépendances statiques.@Timeout Si vous testez une méthode qui ne doit pas être trop lente, vous
pouvez la forcer à échouer le test.

Angular
Quelle est la différence entre mergeMap, switchMap et concatMap dans le contexte des effets NgRx?

Ces opérateurs RxJS sont utilisés dans les effets NgRx pour gérer les appels asynchrones. mergeMap fusionne tous
les observables, switchMap annule les observables précédents lorsqu'un nouvel observable est émis, et
concatMap traite les observables séquentiellement.

Un Observable émet des valeurs sur une période de temps, et il peut avoir plusieurs abonnés. Il suit le modèle de
programmation réactive.

Un Subject est un observateur et un observable en même temps. Il peut être utilisé pour transmettre des valeurs à
d'autres parties de l'application.

BehaviorSubject est une extension de Subject qui nécessite une valeur initiale et émet cette valeur initiale à tout
nouvel abonné, en plus des valeurs suivantes.

NgRx est une bibliothèque de gestion d'état pour Angular, basée sur les principes de Redux, visant à simplifier et à
gérer de manière prévisible l'état des applications Angular.

Les actions dans NgRx représentent des événements uniques qui déclenchent des changements d'état dans
l'application. Le cycle de vie d'une action inclut la création, la diffusion et la réception.

Les actions décrivent un changement d'état, tandis que les reducers décrivent comment cet état change en
réponse à une action.

Un sélecteur est une fonction qui prend l'état de l'application en entrée et renvoie une partie spécifique de cet
état. On l'utilise pour extraire des portions spécifiques de l'état global.

Les effets sont des services Angular utilisés pour gérer les effets secondaires des actions, tels que les appels HTTP
ou les opérations asynchrones. Ils sont déclenchés en réponse à une action et produisent souvent de nouvelles
actions.

Quelle est la différence entre ngrx/store et ngrx/entity? ngrx/store gère l'état général de l'application, tandis que
ngrx/entity simplifie la gestion des entités dans le store, en fournissant des fonctions telles que
createEntityAdapter.

Vous aimerez peut-être aussi