Top Spring Framework Questions d’entrevue

Questions d'entretiens chez Top Spring Framework

Table des matières

 

 

 

 

 

1. introduction

Dans cet article, nous allons examiner certaines des questions les plus courantes liées au printemps qui pourraient surgir lors d'un entretien d'embauche.

2. Noyau de printemps

Q1. Qu'est-ce que Spring Framework?

Spring est le framework le plus largement utilisé pour le développement d'applications Java Enterprise Edition. Les principales fonctionnalités de Spring peuvent être utilisées dans le développement de toute application Java.

Nous pouvons utiliser ses extensions pour créer diverses applications Web au-dessus de la plate-forme Java EE, ou nous pouvons simplement utiliser ses dispositions d'injection de dépendances dans de simples applications autonomes.

Q2. Quels sont les avantages d'utiliser Spring?

Des cibles printanières pour faciliter le développement Java EE. Voici les avantages de l'utiliser:

  • Lightweight: il y a une légère surcharge liée à l'utilisation du framework en développement

  • Le conteneur Spring deInversion of Control (IoC): s'occupe du câblage des dépendances de divers objets, au lieu de créer ou de rechercher des objets dépendants

  • Aspect Oriented Programming (AOP): Spring prend en charge AOP pour séparer la logique métier des services système

  • IoC container: il gère le cycle de vie de Spring Bean et les configurations spécifiques au projet

  • MVC framework: utilisé pour créer des applications Web ou des services Web RESTful, capables de renvoyer des réponses XML / JSON

  • Transaction management: réduit la quantité de code passe-partout dans les opérations JDBC, le téléchargement de fichiers, etc., soit en utilisant des annotations Java ou par le fichier de configuration XML Spring Bean

  • Exception Handling: Spring fournit une API pratique pour traduire les exceptions spécifiques à une technologie en exceptions non contrôlées

Q3. Quels sous-projets de printemps connaissez-vous? Décrivez-les brièvement.

  • Core - un module clé qui fournit des parties fondamentales du framework, comme IoC ou DI

  • JDBC - ce module active une couche d'abstraction JDBC qui supprime le besoin de coder JDBC pour des bases de données de fournisseurs spécifiques

  • ORM integration - fournit des couches d'intégration pour les API de mappage objet-relationnel populaires, telles que JPA, JDO et Hibernate

  • Web - un module d'intégration orienté Web, fournissant le téléchargement de fichiers en plusieurs parties, des écouteurs de servlet et des fonctionnalités de contexte d'application orientées Web

  • MVC framework - un module Web implémentant le modèle de conception Model View Controller

  • AOP module - implémentation de programmation orientée aspect permettant la définition d'intercepteurs de méthode et de pointcuts propres

Q4. Qu'est-ce que l'injection de dépendance?

L'injection de dépendance, un aspect d'Inversion of Control (IoC), est un concept général stipulant que vous ne créez pas vos objets manuellement, mais décrivez comment ils doivent être créés. Un conteneur IoC instanciera les classes requises si nécessaire.

Pour plus de détails, veuillez vous référer àhere.

Q5. Comment pouvons-nous injecter des haricots au printemps?

Quelques options différentes existent:

  • Injection de poseur

  • Injection de constructeur

  • Injection de champ

La configuration peut être effectuée à l'aide de fichiers XML ou d'annotations.

Pour plus de détails, vérifiezthis article.

Q6. Quelle est la meilleure façon d'injecter des haricots et pourquoi?

L'approche recommandée consiste à utiliser des arguments de constructeur pour les dépendances obligatoires et des paramètres pour les optionnels. L'injection de constructeur permet d'injecter des valeurs dans des champs immuables et facilite les tests.

Q7. Quelle est la différence entre Beanfactory et Applicationcontext?

BeanFactory est une interface représentant un conteneur qui fournit et gère des instances de bean. L'implémentation par défaut instancie les beans paresseusement lorsquegetBean() est appelé.

ApplicationContext est une interface représentant un conteneur contenant toutes les informations, métadonnées et beans de l'application. Il étend également l'interface deBeanFactory mais l'implémentation par défaut instancie les beans avec empressement au démarrage de l'application. Ce comportement peut être remplacé pour des beans individuels.

Pour toutes les différences, veuillez vous référer àthe reference.

Q8. Qu'est-ce qu'un haricot de printemps?

Les beans Spring sont des objets Java initialisés par le conteneur Spring IoC.

Q9. Quelle est la portée par défaut du bean dans Spring Framework?

Par défaut, un Spring Bean est initialisé en tant quesingleton.

Q10. Comment définir la portée d'un bean?

Pour définir la portée de Spring Bean, nous pouvons utiliser l'annotation ou l'attribut «scope»@Scope dans les fichiers de configuration XML. Il y a cinq portées prises en charge:

  • singleton

  • prototype

  • demande

  • session

  • session globale

Pour les différences, veuillez vous référer àhere.

Q11. Les haricots singleton sont-ils sûrs pour les threads?

Non, les singleton beans ne sont pas thread-safe, car la sécurité des threads concerne l'exécution, alors que le singleton est un motif de conception axé sur la création. La sécurité des threads ne dépend que de l'implémentation du bean lui-même.

Q12. À quoi ressemble le cycle de vie de Spring Bean?

Tout d'abord, un bean Spring doit être instancié, en fonction de la définition de bean Java ou XML. Il peut également être nécessaire de procéder à une initialisation pour obtenir un état utilisable. Après cela, lorsque le haricot n'est plus nécessaire, il sera supprimé du conteneur IoC.

L'ensemble du cycle avec toutes les méthodes d'initialisation est affiché sur l'image (source):

image

Q13. Qu'est-ce que la configuration Spring Java?

C’est l’une des façons de configurer des applications Spring de manière sécurisée. C'est une alternative à la configuration basée sur XML.

De plus, si vous souhaitez migrer votre projet de la configuration XML vers Java, veuillez vous référer àto this article.

Q14. Pouvons-nous avoir plusieurs fichiers de configuration Spring dans un projet?

Oui, dans les grands projets, il est recommandé d’avoir plusieurs configurations Spring pour augmenter la maintenabilité et la modularité.

Vous pouvez charger plusieurs fichiers de configuration basés sur Java:

@Configuration
@Import({MainConfig.class, SchedulerConfig.class})
public class AppConfig {

Ou chargez un fichier XML qui contiendra toutes les autres configurations:

ApplicationContext context = new ClassPathXmlApplicationContext("spring-all.xml");

Et dans ce fichier XML, vous aurez:


Q15. Qu'est-ce que Spring Security?

Spring Security est un module distinct du framework Spring qui se concentre sur la fourniture de méthodes d'authentification et d'autorisation dans les applications Java. Il s’occupe également de la plupart des vulnérabilités de sécurité courantes telles que les attaques CSRF.

Pour utiliser Spring Security dans les applications Web, vous pouvez commencer avec une simple annotation:@EnableWebSecurity.

Vous pouvez retrouver toute la série d'articles liés àsecurity on example.

Q16. Qu'est-ce que Spring Boot?

Spring Boot est un projet qui fournit un ensemble d’infrastructures préconfigurées afin de réduire la configuration standard afin que vous puissiez avoir une application Spring opérationnelle et fonctionnant avec la plus petite quantité de code.

Q17. Nommez certains des modèles de conception utilisés dans Spring Framework?

  • Singleton Pattern: haricots à portée singleton

  • Factory Pattern: Classes Bean Factory

  • Prototype Pattern: Haricots à portée prototype

  • Adapter Pattern: Spring Web et Spring MVC

  • Prise en charge de la programmation orientée aspect ressort deProxy Pattern:

  • Template Method Pattern:JdbcTemplate,HibernateTemplate, etc.

  • Front Controller: Ressort MVCDispatcherServlet

  • Prise en charge de Spring DAO deData Access Object:

  • Model View Controller: Spring MVC

Q18. Comment fonctionne le prototype d'oscilloscope?

Scopeprototype signifie que chaque fois que vous appelez une instance du Bean, Spring créera une nouvelle instance et la retournera. Cela diffère de la portée par défaut desingleton, où une seule instance d'objet est instanciée une fois par conteneur Spring IoC.

3. Spring Web MVC

Q19. Comment obtenir les objetsServletContext etServletConfig dans un Spring Bean?

Vous pouvez faire soit par:

  1. Implémentation d'interfaces compatibles Spring. La liste complète est disponiblehere.

  2. Utilisation de l'annotation@Autowired sur ces beans:

@Autowired
ServletContext servletContext;

@Autowired
ServletConfig servletConfig;

Q20. Qu'est-ce qu'un contrôleur dans Spring Mvc?

En termes simples, toutes les requêtes traitées par lesDispatcherServlet sont dirigées vers des classes annotées avec@Controller. Chaque classe de contrôleur mappe une ou plusieurs requêtes aux méthodes qui traitent et exécutent les requêtes avec les entrées fournies.

Si vous avez besoin de prendre du recul, nous vous recommandons de jeter un œil au concept desFront Controller in the typical Spring MVC architecture.

Q21. Comment fonctionne l'annotation @Requestmapping?

L'annotation@RequestMapping est utilisée pour mapper les requêtes Web aux méthodes Spring Controller. En plus des cas d'utilisation simples, nous pouvons l'utiliser pour mapper les en-têtes HTTP, lier des parties de l'URI avec@PathVariable, et travailler avec les paramètres URI et l'annotation@RequestParam.

Plus de détails sur@RequestMapping sont disponibleshere.

For more Spring MVC questions, please check out Spring MVC Interview Questions article.

4. Accès aux données Spring

Q22. Qu'est-ce que la classe Spring Jdbctemplate et comment l'utiliser?

Le modèle Spring JDBC est la principale API via laquelle nous pouvons accéder à la logique des opérations de base de données qui nous intéresse:

  • création et fermeture de connexions

  • exécution d'instructions et d'appels de procédures stockées

  • itération sur lesResultSet et retour des résultats

Pour l'utiliser, nous devrons définir la configuration simple deDataSource:

@Configuration
@ComponentScan("org.example.jdbc")
public class SpringJdbcConfig {
    @Bean
    public DataSource mysqlDataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
        dataSource.setUsername("guest_user");
        dataSource.setPassword("guest_password");

        return dataSource;
    }
}

Pour plus d'explications, vous pouvez passer parthis quick article.

Q23. Comment activeriez-vous les transactions au printemps et quels sont leurs avantages?

Il existe deux façons distinctes de configurerTransactions - avec des annotations ou en utilisant la programmation orientée aspect (AOP) - chacune avec ses avantages.

Les avantages de l'utilisation de Spring Transactions, selon lesofficial docs, sont:

  • Fournir un modèle de programmation cohérent pour différentes API de transaction telles que JTA, JDBC, Hibernate, JPA et JDO

  • Soutenir la gestion déclarative des transactions

  • Fournit une API plus simple pour la gestion de transactions par programme que certaines API de transactions complexes telles que JTA

  • S'intègre très bien aux différentes abstractions d'accès aux données de Spring

Q24. Qu'est-ce que Spring Dao?

Spring Data Access Object est le support fourni par Spring pour fonctionner avec des technologies d'accès aux données telles que JDBC, Hibernate et JPA de manière cohérente et simple.

Vous pouvez, bien sûr, aller plus en profondeur sur la persistance, avec lesentire series discutant de la persistance au printemps.

5. Programmation orientée aspect ressort (AOP)

Q25. Qu'est-ce que la programmation orientée aspect?

Aspects permet la modularisation de problèmes transversaux tels que la gestion des transactions qui couvrent plusieurs types et objets en ajoutant un comportement supplémentaire au code déjà existant sans modifier les classes affectées.

Q26. Que sont l'aspect, le conseil, le pointcut et le point de jonction dans Aop?

  • Aspect: une classe qui met en œuvre des préoccupations transversales, telles que la gestion des transactions

  • Advice: les méthodes qui sont exécutées quand unJoinPoint spécifique avecPointcut correspondant est atteint dans l'application

  • Pointcut: un ensemble d'expressions régulières qui correspondent àJoinPoint pour déterminer siAdvice doit être exécuté ou non

  • JoinPoint: un point lors de l'exécution d'un programme, tel que l'exécution d'une méthode ou le traitement d'une exception

Q27. Qu'est-ce que le tissage?

Selon lesofficial docs,weaving est un processus qui relie des aspects à d'autres types d'applications ou objets pour créer un objet conseillé. Cela peut être fait à la compilation, au chargement ou à l'exécution. Spring AOP, comme les autres frameworks Java AOP purs, exécuteweaving au moment de l'exécution.

6. Printemps 5

Q28. Qu'est-ce que la programmation réactive?

La programmation réactive concerne des applications non bloquantes, pilotées par des événements qui évoluent avec un petit nombre de threads, la contre-pression étant un ingrédient clé qui vise à garantir que les producteurs ne submergent pas les consommateurs.

Les principaux avantages de la programmation réactive sont les suivants:

  • utilisation accrue des ressources informatiques sur du matériel à plusieurs cœurs et à plusieurs processeurs

  • et augmentation des performances en réduisant la sérialisation

La programmation réactive est généralement pilotée par les événements, contrairement aux systèmes réactifs, qui sont pilotés par des messages. Ainsi, utiliser la programmation réactive ne signifie pas que nous construisons un système réactif, qui est un style architectural.

Cependant, la programmation réactive peut être utilisée comme un moyen de mettre en œuvre des systèmes réactifs si l'on suit lesReactive Manifesto, ce qui est assez vital à comprendre.

Sur cette base, les systèmes réactifs présentent quatre caractéristiques importantes:

  • Responsive: le système doit répondre en temps opportun

  • Resilient: au cas où le système serait confronté à une panne, il devrait rester réactif

  • Elastic: les systèmes réactifs peuvent réagir aux changements et rester réactifs sous une charge de travail variable

  • Message-driven: les systèmes réactifs doivent établir une frontière entre les composants en s'appuyant sur le passage de messages asynchrones

Q29. Qu'est-ce que Spring Webflux?

Spring WebFlux est le framework Web à pile réactive de Spring, et c'est une alternative à Spring MVC.

Afin de réaliser ce modèle réactif et d'être hautement évolutif, l'ensemble de la pile est non bloquant. Consultez nostutorial on Spring 5 WebFlux pour plus de détails.

Q30. Quels sont les types mono et flux?

Le framework WebFlux dans Spring Framework 5 utiliseReactor comme base asynchrone.

Ce projet fournit deux types principaux:Mono pour représenter une seule valeur asynchrone etFlux pour représenter un flux de valeurs asynchrones. Ils implémentent tous les deux l'interfacePublisher définie dans la spécificationReactive Streams.

Mono implémentePublisher et renvoie 0 ou 1 élément:

public abstract class Mono implements Publisher {...}

De plus,, Flux implémentePublisher et renvoie les élémentsN:

public abstract class Flux implements Publisher {...}

Par définition, les deux types représentent des flux, donc ils sont tous les deux paresseux, ce qui signifie que rien n'est exécuté tant que nous ne consommons pas le flux à l'aide de la méthodesubscribe(). Les deux types sont immuables, par conséquent, l'appel de toute méthode retournera une nouvelle instance deFlux or Mono.

Q31. Quelle est l'utilisation de Webclient et Webtestclient?

WebClient est un composant du nouveau framework Web Reactive qui peut agir comme un client réactif pour exécuter des requêtes HTTP non bloquantes. En tant que client réactif, il peut gérer les flux réactifs avec une contre-pression et tirer pleinement parti de Java 8 lambdas. Il peut également gérer des scénarios de synchronisation et asynchrones.

D'autre part, leWebTestClient est une classe similaire que nous pouvons utiliser dans les tests. En gros, c’est une fine coque autour duWebClient.. Il peut se connecter à n’importe quel serveur via une connexion HTTP. Il peut également se lier directement aux applications WebFlux à l'aide d'objets de requête et de réponse fictifs, sans avoir besoin d'un serveur HTTP.

Q32. Quels sont les inconvénients de l'utilisation des flux réactifs?

Les principaux inconvénients de l’utilisation de flux réactifs sont les suivants:

  • Dépanner une application réactive est un peu difficile; assurez-vous de consulter nostutorial on debugging reactive streams pour quelques conseils de débogage pratiques

  • La prise en charge des magasins de données réactifs est limitée, car les magasins de données relationnels traditionnels doivent encore adopter le paradigme réactif.

  • Il y a une courbe d'apprentissage supplémentaire lors de la mise en œuvre

Q33. Spring 5 est-il compatible avec les anciennes versions de Java?

Afin de tirer parti des fonctionnalités de Java 8, la base de code Spring a été réorganisée. Cela signifie que les anciennes versions de Java ne peuvent pas être utilisées. Par conséquent, le framework nécessite un minimum de Java 8.

Q34. Comment Spring 5 s'intègre-t-il à la modularité de Jdk 9?

Au printemps 5, tout a été modulaire, nous ne serons donc pas obligés d’importer des fichiers JAR qui n’ont peut-être pas les fonctionnalités que nous recherchons.

Veuillez consulter nosguide to Java 9 modularity pour une compréhension approfondie du fonctionnement de cette technologie.

Voyons un exemple pour comprendre les nouvelles fonctionnalités du module dans Java 9 et comment organiser un projet Spring 5 basé sur ce concept.

Pour commencer, créons une nouvelle classe qui contient une seule méthode pour renvoyer unString «HelloWorld». Nous placerons ceci dans un nouveau projet Java -HelloWorldModule:

package com.hello;
public class HelloWorld {
    public String sayHello(){
        return "HelloWorld";
    }
}

Ensuite, créons un nouveau module:

module com.hello {
    export com.hello;
}

Maintenant, créons un nouveau projet Java,HelloWorldClient, pour consommer le module ci-dessus en définissant un module:

module com.hello.client {
    requires com.hello;
}

Le module ci-dessus sera disponible pour les tests maintenant:

public class HelloWorldClient {
    public static void main(String[] args){
        HelloWorld helloWorld = new HelloWorld();
        log.info(helloWorld.sayHello());
    }
}

Q35. Peut-on utiliser à la fois Web Mvc et Webflux dans la même application?

A partir de maintenant, Spring Boot n'autorisera que Spring MVC ou Spring WebFlux, étant donné que Spring Boot tente de configurer automatiquement le contexte en fonction des dépendances existant dans son chemin de classe.

En outre, Spring MVC ne peut pas s'exécuter sur Netty. De plus, MVC est un paradigme bloquant et WebFlux est un style non bloquant, nous ne devrions donc pas mélanger les deux ensemble, car ils servent des objectifs différents.

7. Conclusion

Dans cet article complet, nous avons exploré certaines des questions les plus importantes pour une interview technique portant uniquement sur Spring.

Nous espérons que cet article vous aidera dans votre prochaine interview pour le printemps. Bonne chance!