Top Spring Framework interviewvragen

Dit artikel maakt deel uit van een reeks: • Interviewvragen over Java Collections

• Vragen over het Java Type System-interview

• Vragen over Java Concurrency-sollicitatiegesprekken (+ antwoorden)

• Vragen over Java-klassenstructuur en initialisatie

• Java 8 sollicitatievragen (+ antwoorden)

• Geheugenbeheer in Java-interviewvragen (+ antwoorden)

• Java Generics sollicitatievragen (+ antwoorden)

• Vragen over Java Flow Control-interview (+ antwoorden)

• Interviewvragen over Java-uitzonderingen (+ antwoorden)

• Vragen over Java-annotaties tijdens sollicitatiegesprekken (+ antwoorden)

• Topvragen tijdens het Spring Framework-interview (huidig ​​artikel)

Inhoudsopgave

  • 1. Invoering
  • 2. Lente Core
  • V1. Wat is Spring Framework?
  • Q2. Wat zijn de voordelen van het gebruik van Spring?
  • Q3.Welke lente-subprojecten kent u? Beschrijf ze kort.
  • V4. Wat is afhankelijkheidsinjectie?
  • V5. Hoe kunnen we in het voorjaar bonen injecteren?
  • V6. Wat is de beste manier om bonen te injecteren en waarom
  • V7. Wat is het verschil tussen Beanfactory en Applicationcontext?
  • V8.Wat is een lenteboon?
  • V9. Wat is het standaardbonenbereik in Spring Framework?
  • V10. Hoe bepaal je de reikwijdte van een boon?
  • V11. Zijn Singleton Beans Thread-Safe?
  • V12. Hoe ziet de levenscyclus van de Spring Bean eruit?
  • V13. Wat is de op Spring Java gebaseerde configuratie?
  • V14. Kunnen we meerdere Spring-configuratiebestanden in één project hebben?
  • V15. Wat is voorjaarsbeveiliging?
  • V16. Wat is Spring Boot?
  • V17. Noem enkele van de ontwerppatronen die in het Spring Framework worden gebruikt?
  • V18. Hoe werkt het Scope-prototype?
  • 3. Spring Web MVC
  • V19. Hoe Servletcontext en Servletconfig-objecten in een Spring Bean te krijgen?
  • V20. Wat is een controller in Spring Mvc?
  • V21. Hoe werkt de @Requestmapping-annotatie?
  • 4. Spring Data Access
  • V22. Wat is Spring Jdbctemplate Class en hoe deze te gebruiken?
  • V23. Hoe zou u transacties in het voorjaar mogelijk maken en wat zijn de voordelen ervan?
  • V24. Wat is Spring Dao?
  • 5. Spring Aspect-Oriented Programming (AOP)
  • V25. Wat is aspectgericht programmeren?
  • V26. Wat zijn Aspect, Advies, Pointcut en Joinpoint in Aop?
  • V27. Wat is weven?
  • 6. Lente 5
  • V28. Wat is reactief programmeren?
  • V29. Wat is Spring Webflux?
  • V30. Wat zijn de mono- en flux-typen?
  • V31. Wat is het gebruik van Webclient en Webtestclient?
  • V32. Wat zijn de nadelen van het gebruik van reactieve streams?
  • V33. Is Spring 5 compatibel met oudere versies van Java?
  • V34. Hoe Ow Spring 5 integreert met Jdk 9 Modularity?
  • V35. Kunnen we zowel Web Mvc als Webflux in dezelfde applicatie gebruiken?
  • 7. Conclusie

1. Inleiding

In dit artikel gaan we enkele van de meest voorkomende lentegerelateerde vragen bekijken die tijdens een sollicitatiegesprek kunnen opduiken.

2. Veerkern

V1. Wat is Spring Framework?

Spring is het meest gebruikte framework voor de ontwikkeling van Java Enterprise Edition-applicaties. De kernfuncties van Spring kunnen worden gebruikt bij het ontwikkelen van elke Java-applicatie.

We kunnen de extensies gebruiken voor het bouwen van verschillende webapplicaties bovenop het Jakarta EE-platform, of we kunnen de afhankelijkheidsinjectiebepalingen gewoon gebruiken in eenvoudige zelfstandige applicaties.

Q2. Wat zijn de voordelen van het gebruik van Spring?

Voorjaarsdoelen om de ontwikkeling van Jakarta EE gemakkelijker te maken. Hier zijn de voordelen van het gebruik ervan:

  • Lichtgewicht: er is een kleine overhead bij het gebruik van het framework in ontwikkeling
  • Inversion of Control (IoC): Spring container zorgt voor bedradingsafhankelijkheden van verschillende objecten, in plaats van afhankelijke objecten te maken of te zoeken
  • Aspect Oriented Programming (AOP): Spring ondersteunt AOP om bedrijfslogica te scheiden van systeemservices
  • IoC-container: het beheert de levenscyclus van Spring Bean en projectspecifieke configuraties
  • MVC-raamwerk: die wordt gebruikt om webtoepassingen of RESTful-webservices te maken, die XML / JSON-reacties kunnen retourneren
  • Transactiebeheer: vermindert de hoeveelheid boiler-plate-code in JDBC-bewerkingen, het uploaden van bestanden, enz., hetzij door gebruik te maken van Java-annotaties of door Spring Bean XML-configuratiebestand
  • Afhandeling van uitzonderingen: Spring biedt een handige API voor het vertalen van technologiespecifieke uitzonderingen naar ongecontroleerde uitzonderingen

Q3. Welke lente-subprojecten kent u? Beschrijf ze kort.

  • Kern - een sleutelmodule die fundamentele onderdelen van het raamwerk biedt, zoals IoC of DI
  • JDBC - deze module maakt een JDBC-abstractielaag mogelijk die de noodzaak om JDBC-codering uit te voeren voor specifieke leveranciersdatabases overbodig maakt
  • ORM-integratie - biedt integratielagen voor populaire object-relationele mapping-API's, zoals JPA, JDO en Hibernate
  • Web - een webgeoriënteerde integratiemodule, die het uploaden van bestanden uit meerdere delen, Servlet-luisteraars en webgeoriënteerde toepassingscontextfunctionaliteiten biedt
  • MVC-framework - een webmodule die het ontwerppatroon van de Model View Controller implementeert
  • AOP-module - aspectgeoriënteerde programmeerimplementatie die de definitie van schone methode-interceptors en pointcuts mogelijk maakt

V4. Wat is afhankelijkheidsinjectie?

Dependency Injection, een aspect van Inversion of Control (IoC), is een algemeen concept dat stelt dat u uw objecten niet handmatig maakt, maar in plaats daarvan beschrijft hoe ze moeten worden gemaakt. Een IoC-container zal indien nodig vereiste klassen instantiëren.

Voor meer details verwijzen wij u naar hier.

V5. Hoe kunnen we in het voorjaar bonen injecteren?

Er zijn een paar verschillende opties:

  • Setter injectie
  • Constructor-injectie
  • Veldinjectie

De configuratie kan worden gedaan met behulp van XML-bestanden of annotaties.

Raadpleeg dit artikel voor meer informatie.

V6. Wat is de beste manier om bonen te injecteren en waarom?

De aanbevolen benadering is om constructorargumenten te gebruiken voor verplichte afhankelijkheden en setters voor optionele. Constructor-injectie maakt het mogelijk om waarden in onveranderlijke velden te injecteren en maakt het testen eenvoudiger.

V7. Wat is het verschil tussen Beanfactory en Applicationcontext?

BeanFactory is een interface die een container vertegenwoordigt die bean-instances levert en beheert. De standaardimplementatie instantieert bonen lui wanneer getBean () wordt genoemd.

ApplicationContext is een interface die een container vertegenwoordigt die alle informatie, metadata en bonen in de applicatie bevat. Het breidt ook de BeanFactory interface, maar de standaardimplementatie instantieert bonen gretig wanneer de toepassing start. Dit gedrag kan voor individuele bonen worden opgeheven.

Raadpleeg de referentie voor alle verschillen.

V8. Wat is een lenteboon?

De Spring Beans zijn Java-objecten die worden geïnitialiseerd door de Spring IoC-container.

V9. Wat is het standaard bonenbereik in Spring Framework?

Standaard wordt een Spring Bean geïnitialiseerd als een singleton.

V10. Hoe bepaal je de reikwijdte van een boon?

Om het bereik van Spring Bean in te stellen, kunnen we gebruiken @Scope annotatie of "scope" -attribuut in XML-configuratiebestanden. Er zijn vijf ondersteunde bereiken:

  • singleton
  • voorlopig ontwerp
  • verzoek
  • sessie
  • global-sessie

Voor verschillen verwijzen wij u naar hier.

V11. Zijn Singleton Beans Thread-Safe?

Nee, singletonbonen zijn niet thread-safe, omdat thread-safety draait om uitvoering, terwijl singleton een ontwerppatroon is dat zich richt op creatie. De veiligheid van de draad hangt alleen af ​​van de uitvoering van de bonen zelf.

V12. Hoe ziet de levenscyclus van de Spring Bean eruit?

Ten eerste moet een Spring-bean worden geïnstantieerd, op basis van de Java- of XML-bean-definitie. Het kan ook nodig zijn om enige initialisatie uit te voeren om het in een bruikbare staat te krijgen. Daarna, wanneer de boon niet langer nodig is, wordt deze uit de IoC-container verwijderd.

De hele cyclus met alle initialisatiemethoden wordt getoond op de afbeelding (bron):

V13. Wat is de op Spring Java gebaseerde configuratie?

Het is een van de manieren om op Spring gebaseerde applicaties op een typeveilige manier te configureren. Het is een alternatief voor de op XML gebaseerde configuratie.

Raadpleeg ook dit artikel als u uw project wilt migreren van XML naar Java-configuratie.

V14. Kunnen we meerdere Spring-configuratiebestanden in één project hebben?

Ja, bij grote projecten wordt het gebruik van meerdere veerconfiguraties aanbevolen om de onderhoudbaarheid en modulariteit te vergroten.

U kunt meerdere op Java gebaseerde configuratiebestanden laden:

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

Of laad een XML-bestand dat alle andere configuraties zal bevatten:

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

En in dit XML-bestand heb je:

V15. Wat is voorjaarsbeveiliging?

Spring Security is een aparte module van het Spring-framework die zich richt op het bieden van authenticatie- en autorisatiemethoden in Java-applicaties. Het lost ook de meeste algemene beveiligingsproblemen op, zoals CSRF-aanvallen.

Om Spring Security in webapplicaties te gebruiken, kunt u aan de slag met een eenvoudige annotatie: @EnableWebSecurity.

U kunt de hele reeks artikelen over beveiliging op Baeldung vinden.

V16. Wat is Spring Boot?

Spring Boot is een project dat een vooraf geconfigureerde set frameworks biedt om de standaardconfiguratie te verminderen, zodat je een Spring-applicatie kunt gebruiken met de kleinste hoeveelheid code.

V17. Noem enkele van de ontwerppatronen die in het Spring Framework worden gebruikt?

  • Singleton-patroon: Singleton-scoped bonen
  • Fabriekspatroon: Bean Factory lessen
  • Prototype patroon: Bonen met prototypebereik
  • Adapterpatroon: Spring Web en Spring MVC
  • Proxy patroon: Ondersteuning voor Spring Aspect Oriented Programming
  • Sjabloon Methode Patroon:JdbcTemplate, Slaapstand-sjabloon, enz.
  • Voorste controller: Lente MVC DispatcherServlet
  • Gegevenstoegangsobject: Spring DAO-ondersteuning
  • Model View Controller: Lente MVC

V18. Hoe werkt het Scope-prototype?

Reikwijdte voorlopig ontwerp betekent dat elke keer dat je een instantie van de Bean aanroept, Spring een nieuwe instantie maakt en deze teruggeeft. Dit wijkt af van de standaardinstelling singleton scope, waarbij een exemplaar van één object eenmaal per Spring IoC-container wordt geïnstantieerd.

3. Spring Web MVC

V19. Hoe krijg je ServletContext en ServletConfig Objecten in een Spring Bean?

U kunt het volgende doen door:

  1. Implementeren van Spring-bewuste interfaces. De volledige lijst is hier beschikbaar.
  2. Gebruik makend van @Autowired annotatie op die bonen:
@Autowired ServletContext servletContext; @Autowired ServletConfig servletConfig;

V20. Wat is een controller in Spring Mvc?

Simpel gezegd, alle verzoeken die door de DispatcherServlet zijn gericht op klassen die zijn geannoteerd met @Controller. Elke controllerklasse wijst een of meer verzoeken toe aan methoden die de verzoeken verwerken en uitvoeren met de verstrekte invoer.

Als u een stap terug wilt doen, raden we u aan het concept van de Front Controller in de typische Spring MVC-architectuur te bekijken.

V21. Hoe werkt de @Requestmapping-annotatie?

De @RequestMapping annotatie wordt gebruikt om webverzoeken toe te wijzen aan Spring Controller-methoden. Naast eenvoudige use-cases kunnen we het gebruiken voor het in kaart brengen van HTTP-headers, waarmee delen van de URI worden verbonden @PathVariable, en werken met URI-parameters en de @RequestParam annotatie.

Meer details over @RequestMapping zijn hier beschikbaar.

Bekijk voor meer Spring MVC-vragen het artikel over Spring MVC-interviewvragen.

4. Spring Data Access

V22. Wat is Spring Jdbctemplate Class en hoe deze te gebruiken?

De Spring JDBC-sjabloon is de primaire API waarmee we toegang hebben tot de logica van databasebewerkingen waarin we geïnteresseerd zijn:

  • maken en sluiten van verbindingen
  • uitvoeren van instructies en opgeslagen procedure-aanroepen
  • itereren over de ResultSet en het retourneren van resultaten

Om het te gebruiken, moeten we de eenvoudige configuratie van Databron:

@Configuration @ComponentScan ("org.baeldung.jdbc") openbare klasse SpringJdbcConfig {@Bean openbare DataSource mysqlDataSource () {DriverManagerDataSource dataSource = nieuwe DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / springjdbc"); dataSource.setUsername ("gastgebruiker"); dataSource.setPassword ("guest_password"); retourneer dataSource; }}

Voor verdere uitleg kunt u dit korte artikel doornemen.

V23. Hoe zou u transacties in het voorjaar mogelijk maken en wat zijn de voordelen ervan?

Er zijn twee verschillende manieren om te configureren Transacties - met annotaties of door gebruik te maken van Aspect Oriented Programming (AOP) - elk met hun voordelen.

De voordelen van het gebruik van Spring Transactions zijn volgens de officiële documenten:

  • Bied een consistent programmeermodel voor verschillende transactie-API's zoals JTA, JDBC, Hibernate, JPA en JDO
  • Ondersteuning van declaratief transactiebeheer
  • Biedt een eenvoudigere API voor programmatisch transactiebeheer dan sommige complexe transactie-API's zoals JTA
  • Zeer goed te integreren met de verschillende abstracties van gegevenstoegang van Spring

V24. Wat is Spring Dao?

Spring Data Access Object is de ondersteuning van Spring die wordt geboden om op een consistente en gemakkelijke manier te werken met gegevenstoegangstechnologieën zoals JDBC, Hibernate en JPA.

Je kunt natuurlijk dieper ingaan op volharding, waarbij de hele serie volharding in het voorjaar bespreekt.

5. Spring Aspect-Oriented Programming (AOP)

V25. Wat is aspectgericht programmeren?

Aspecten maak de modularisatie mogelijk van transversale problemen zoals transactiebeheer die meerdere typen en objecten omvatten door extra gedrag toe te voegen aan reeds bestaande code zonder de betrokken klassen te wijzigen.

Hier is het voorbeeld van op aspect gebaseerde uitvoeringstijdregistratie.

V26. Wat zijn Aspect, Advies, Pointcut en Joinpoint in Aop?

  • Aspect: een klasse die transversale zorgen implementeert, zoals transactiebeheer
  • Advies: de methoden die worden uitgevoerd wanneer een specifiek JoinPoint met bijpassende Pointcut wordt bereikt in de applicatie
  • Pointcut: een set reguliere expressies waarmee wordt gematcht JoinPoint om te bepalen of Advies moet worden uitgevoerd of niet
  • JoinPoint: een punt tijdens het uitvoeren van een programma, zoals het uitvoeren van een methode of het afhandelen van een exception

V27. Wat is weven?

Volgens de officiële documenten, weven is een proces dat aspecten koppelt aan andere applicatietypen of objecten om een ​​geadviseerd object te creëren. Dit kan worden gedaan tijdens het compileren, laden of tijdens runtime. Spring AOP presteert, net als andere pure Java AOP-frameworks weven tijdens runtime.

6. Lente 5

V28. Wat is reactief programmeren?

Reactief programmeren gaat over niet-blokkerende, gebeurtenisgestuurde applicaties die schaalbaar zijn met een klein aantal threads, waarbij tegendruk een belangrijk ingrediënt is dat ervoor moet zorgen dat producenten de consumenten niet overweldigen.

De belangrijkste voordelen van reactief programmeren zijn:

  • meer gebruik van computerbronnen op hardware met meerdere kernen en meerdere CPU's
  • en verbeterde prestaties door het verminderen van serialisatie

Reactief programmeren is over het algemeen gebeurtenisgestuurd, in tegenstelling tot reactieve systemen, die berichtgestuurd zijn. Het gebruik van reactief programmeren betekent dus niet dat we een reactief systeem bouwen, wat een architecturale stijl is.

Reactief programmeren kan echter worden gebruikt als middel om reactieve systemen te implementeren als we het Reactieve Manifest volgen, dat vrij essentieel is om te begrijpen.

Op basis hiervan hebben reactieve systemen vier belangrijke kenmerken:

  • Snel reagerend: het systeem moet tijdig reageren
  • Veerkrachtig: in het geval dat het systeem te maken krijgt met een storing, moet het responsief blijven
  • Elastisch: reactieve systemen kunnen reageren op veranderingen en blijven reageren onder wisselende werkdruk
  • Berichtgestuurd: reactieve systemen moeten een grens tussen componenten vaststellen door te vertrouwen op asynchrone berichtdoorgifte

V29. Wat is Spring Webflux?

Spring WebFlux is het reactive-stack webraamwerk van Spring en het is een alternatief voor Spring MVC.

Om dit reactieve model te bereiken en zeer schaalbaar te zijn, blokkeert de hele stapel niet. Bekijk onze tutorial over Spring 5 WebFlux voor meer details.

V30. Wat zijn de mono- en flux-typen?

Het WebFlux-framework in Spring Framework 5 gebruikt Reactor als asynchrone basis.

Dit project biedt twee kerntypen: Mono om een ​​enkele asynchrone waarde weer te geven, en Flux om een ​​stroom asynchrone waarden weer te geven. Ze implementeren allebei het Uitgever interface gedefinieerd in de Reactive Streams-specificatie.

Mono werktuigen Uitgever en retourneert 0 of 1 elementen:

openbare abstracte klasse Mono implementeert Publisher {...}

Ook, Flux werktuigen Uitgever en keert terug N elementen:

openbare abstracte klasse Flux implementeert Publisher {...}

Per definitie vertegenwoordigen de twee typen streams, daarom zijn ze beide lui, wat betekent dat er niets wordt uitgevoerd totdat we de stream consumeren met de abonneren () methode. Beide typen zijn onveranderlijk, daarom zal het aanroepen van een methode een nieuw exemplaar van Flux of Mono.

V31. Wat is het gebruik van Webclient en Webtestclient?

Web cliënt is een component in het nieuwe Web Reactive-framework dat kan fungeren als een reactieve client voor het uitvoeren van niet-blokkerende HTTP-verzoeken. Omdat het een reactieve klant is, kan het reactieve streams met tegendruk aan en kan het volledig profiteren van Java 8-lambda's. Het kan ook zowel synchronisatie- als asynchrone scenario's aan.

Aan de andere kant is het WebTestClient is een vergelijkbare klasse die we in tests kunnen gebruiken. Kortom, het is een dunne schaal rond de Web cliënt. Het kan verbinding maken met elke server via een HTTP-verbinding. Het kan ook rechtstreeks aan WebFlux-applicaties binden met behulp van mock request- en response-objecten, zonder dat een HTTP-server nodig is.

V32. Wat zijn de nadelen van het gebruik van reactieve streams?

De belangrijkste nadelen van het gebruik van reactieve stromen zijn:

  • Problemen oplossen met een reactieve applicatie is een beetje moeilijk; Bekijk onze tutorial over het debuggen van reactieve streams voor enkele handige foutopsporingstips
  • Er is beperkte ondersteuning voor reactieve gegevensopslag, aangezien traditionele relationele gegevensopslag het reactieve paradigma nog moet omarmen
  • Er is een extra leercurve bij het implementeren

V33. Is Spring 5 compatibel met oudere versies van Java?

Om te profiteren van Java 8-functies, is de Spring-codebase vernieuwd. Dit betekent dat oudere versies van Java niet kunnen worden gebruikt. Daarom vereist het framework minimaal Java 8.

V34. Hoe integreert Spring 5 met Jdk 9 Modularity?

In Spring 5 is alles modulair opgebouwd, dus we zullen niet gedwongen worden om potten te importeren die mogelijk niet de functionaliteiten hebben waarnaar we op zoek zijn.

Bekijk onze gids voor Java 9-modulariteit voor een diepgaand begrip van hoe deze technologie werkt.

Laten we een voorbeeld bekijken om de nieuwe modulefunctionaliteit in Java 9 te begrijpen en hoe we een Spring 5-project kunnen organiseren op basis van dit concept.

Laten we om te beginnen een nieuwe klasse maken die een enkele methode bevat om een Draad "Hallo Wereld". We plaatsen dit in een nieuw Java-project - HelloWorldModule:

pakket com.hello; openbare klasse HelloWorld {openbare String sayHello () {retourneer "HelloWorld"; }}

Laten we dan een nieuwe module maken:

module com.hello {export com.hello; }

Laten we nu een nieuw Java-project maken, HelloWorldClient, om de bovenstaande module te gebruiken door een module te definiëren:

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

De bovenstaande module is nu beschikbaar om te testen:

openbare klasse HelloWorldClient {openbare statische leegte hoofd (String [] args) {HelloWorld helloWorld = nieuwe HelloWorld (); log.info (helloWorld.sayHello ()); }}

V35. Kunnen we zowel Web Mvc als Webflux in dezelfde applicatie gebruiken?

Vanaf nu staat Spring Boot alleen Spring MVC of Spring WebFlux toe, omdat Spring Boot probeert de context automatisch te configureren, afhankelijk van de afhankelijkheden die in het klassenpad bestaan.

Spring MVC kan ook niet op Netty worden uitgevoerd. Bovendien is MVC een blokkerend paradigma en WebFlux is een niet-blokkerende stijl, daarom zouden we niet beide door elkaar moeten mixen, aangezien ze verschillende doelen dienen.

7. Conclusie

In dit uitgebreide artikel hebben we enkele van de belangrijkste vragen voor een technisch interview over Spring onderzocht.

We hopen dat dit artikel je zal helpen bij je aanstaande voorjaarsinterview. Succes!

« Vorige interviewvragen over Java-annotaties (+ antwoorden)

$config[zx-auto] not found$config[zx-overlay] not found