Spring Boot Intervju Spørsmål

1. Introduksjon

Siden introduksjonen har Spring Boot vært en nøkkelaktør i Spring-økosystemet. Dette prosjektet gjør livet vårt mye enklere med sin automatiske konfigurasjonsevne.

I denne opplæringen vil vi dekke noen av de vanligste spørsmålene relatert til Spring Boot som kan komme opp under et jobbintervju.

2. Spørsmål

Q1. Hva er Spring Boot og hva er hovedtrekkene?

Spring Boot er egentlig et rammeverk for rask applikasjonsutvikling bygget på toppen av Spring Framework. Med sin automatiske konfigurasjon og innebygde applikasjonsserverstøtte, kombinert med den omfattende dokumentasjonen og fellestøtten den nyter, er Spring Boot en av de mest populære teknologiene i Java-økosystemet per dags dato.

Her er noen fremtredende funksjoner:

  • Forretter - et sett med avhengighetsbeskrivere for å inkludere relevante avhengigheter underveis
  • Autokonfigurasjon - en måte å automatisk konfigurere et program basert på avhengighetene som er til stede på klassestien
  • Aktuator - for å få produksjonsklare funksjoner som overvåking
  • Sikkerhet
  • Hogst

Q2. Hva er forskjellen mellom vår og vårstøvel?

Spring Framework tilbyr flere funksjoner som gjør utviklingen av webapplikasjoner enklere. Disse funksjonene inkluderer avhengighetsinjeksjon, databinding, aspektorientert programmering, datatilgang og mange flere.

Gjennom årene har Spring vokst mer og mer kompleks, og mengden konfigurasjon som en slik applikasjon krever, kan være skremmende. Dette er hvor Spring Boot kommer til nytte - det gjør det enkelt å konfigurere en Spring-applikasjon.

I det vesentlige, mens våren er uopinert, Spring Boot tar en oppfatning av plattformen og bibliotekene, slik at vi kommer raskt i gang.

Her er to av de viktigste fordelene Spring Boot gir:

  • Konfigurer applikasjoner automatisk basert på gjenstandene den finner på klassestien
  • Gi ikke-funksjonelle funksjoner som er vanlige for applikasjoner i produksjonen, for eksempel sikkerhets- eller helsekontroller

Sjekk en av våre andre opplæringsprogrammer for en detaljert sammenligning mellom vaniljefjær og vårstøvel.

Q3. Hvordan kan vi sette opp en Spring Boot-applikasjon med Maven?

Vi kan inkludere Spring Boot i et Maven-prosjekt, akkurat som vi ville gjort med et hvilket som helst annet bibliotek. Den beste måten er imidlertid å arve fra spring-boot-starter-parent prosjekt og erklære avhengigheter til Spring Boot startere. Ved å gjøre dette kan prosjektet vårt gjenbruke standardinnstillingene til Spring Boot.

Arving av spring-boot-starter-parent prosjektet er greit - vi trenger bare å spesifisere et foreldre element i pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.3.0.RELEASE 

Vi finner den nyeste versjonen av spring-boot-starter-parent på Maven Central.

Å bruke forelderprosjektet er praktisk, men ikke alltid mulig. For eksempel, hvis vårt firma krever at alle prosjekter skal arve fra en standard POM, kan vi fortsatt ha nytte av Spring Boots avhengighetsadministrasjon ved hjelp av en tilpasset overordnet.

Q4. Hva er Spring Initializr?

Spring Initializr er en praktisk måte å lage et Spring Boot-prosjekt på.

Vi kan gå til Spring Initializr-siden, velge et avhengighetsstyringsverktøy (enten Maven eller Gradle), et språk (Java, Kotlin eller Groovy), et emballasjeskjema (Jar eller War), versjon og avhengigheter, og laste ned prosjektet.

Dette lager et skjelettprosjekt for oss og sparer oppsetttid slik at vi kan konsentrere oss om å legge til forretningslogikk.

Selv når vi bruker våre IDE-er (som STS eller Eclipse med STS-plugin) nye prosjektveiviser for å lage et Spring Boot-prosjekt, bruker det Spring Initializr under panseret.

Q5. Hvilke startstarter for vår er tilgjengelig der ute?

Hver forrett spiller en rolle som en one-stop-shop for alle vårteknologiene vi trenger. Andre nødvendige avhengigheter blir deretter trukket inn og administrert på en jevn måte.

Alle forretter er under org.springframework.boot gruppen og navnene deres starter med spring-boot-starter-. Dette navngivningsmønsteret gjør det enkelt å finne forretter, spesielt når du arbeider med IDEer som støtter søkeavhengigheter etter navn.

I skrivende stund er det mer enn 50 forretter til rådighet. De mest brukte er:

  • spring-boot-starter: kjernestarter, inkludert autokonfigurasjonsstøtte, logging og YAML
  • spring-boot-starter-aop: startpakke for aspektorientert programmering med Spring AOP og AspectJ
  • spring-boot-starter-data-jpa: startpakke for bruk av Spring Data JPA med Hibernate
  • spring-boot-starter-security: startpakke for bruk av Spring Security
  • spring-boot-starter-test: startpakke for testing av Spring Boot-applikasjoner
  • spring-boot-starter-web: startpakke for å bygge nett, inkludert RESTful, applikasjoner som bruker Spring MVC

For en komplett liste over forretter, vennligst se dette depotet.

For å finne mer informasjon om Spring Boot startere, ta en titt på Intro to Spring Boot Starters.

Q6. Hvordan deaktiverer du en spesifikk autokonfigurasjon?

Hvis vi vil deaktivere en spesifikk autokonfigurasjon, kan vi indikere det ved hjelp av utelukke attributt til @EnableAutoConfiguration kommentar. For eksempel nøytraliserer denne kodebiten DataSourceAutoConfiguration:

// andre merknader @EnableAutoConfiguration (ekskluder = DataSourceAutoConfiguration.class) offentlig klasse MyConfiguration {}

Hvis vi aktiverte autokonfigurasjon med @SpringBootApplication kommentar - som har @EnableAutoConfiguration som en metanotering - vi kunne deaktivere automatisk konfigurasjon med et attributt med samme navn:

// andre kommentarer @SpringBootApplication (ekskluder = DataSourceAutoConfiguration.class) offentlig klasse MyConfiguration {}

Vi kan også deaktivere en automatisk konfigurasjon med spring.autoconfigure.exclude miljøeiendom. Denne innstillingen i application.properties filen gjør det samme som før:

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Q7. Hvordan registrere en egendefinert autokonfigurasjon?

For å registrere en autokonfigurasjonsklasse, må vi ha det fullt kvalifiserte navnet sitt under EnableAutoConfiguration tast inn META-INF / vårfabrikker fil:

org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.baeldung.autoconfigure.CustomAutoConfiguration

Hvis vi bygger et prosjekt med Maven, bør den filen plasseres i ressurser / META-INF katalog, som vil havne på det nevnte stedet under pakke fase.

Q8. Hvordan fortelle en autokonfigurasjon å komme tilbake når en bønne eksisterer?

For å instruere en automatisk konfigurasjonsklasse om å slå av når en bønne allerede eksisterer, kan vi bruke @ConditionalOnMissingBean kommentar. De mest merkbare egenskapene til denne kommentaren er:

  • verdi: Hvilke typer bønner som skal kontrolleres
  • Navn: Navnene på bønner som skal kontrolleres

Når den plasseres på en metode utsmykket med @Bønne, er måltypen som standard metodens returtype:

@Configuration offentlig klasse CustomConfiguration {@Bean @ConditionalOnMissingBean offentlig CustomService-tjeneste () {...}}

Q9. Hvordan distribuere Spring Boot Web Applications som Jar og War Files?

Tradisjonelt pakker vi en webapplikasjon som en WAR-fil, og distribuerer den deretter til en ekstern server. Ved å gjøre dette kan vi ordne flere applikasjoner på samme server. I løpet av den tiden CPU og minne var lite, var dette en fin måte å spare ressurser på.

Ting har imidlertid endret seg. Datamaskinvare er ganske billig nå, og oppmerksomheten har vendt seg til serverkonfigurasjon. En liten feil i konfigureringen av serveren under distribusjonen kan føre til katastrofale konsekvenser.

Spring takler dette problemet ved å tilby et plugin, nemlig spring-boot-maven-plugin, for å pakke et webapplikasjon som en kjørbar JAR. For å inkludere dette pluginet, bare legg til et plugg inn element til pom.xml:

 org.springframework.boot spring-boot-maven-plugin 

Med dette pluginet på plass får vi en feit JAR etter å ha utført pakke fase. Denne JAR inneholder alle nødvendige avhengigheter, inkludert en innebygd server. Dermed trenger vi ikke lenger å bekymre oss for å konfigurere en ekstern server.

Vi kan da kjøre applikasjonen akkurat som vi ville gjort en vanlig kjørbar JAR.

Legg merke til at emballasje element i pom.xml filen må settes til krukke å bygge en JAR-fil:

krukke

Hvis vi ikke inkluderer dette elementet, er det også standard krukke.

Hvis vi vil bygge en WAR-fil, endrer du emballasje element til krig:

krig

Og la containeravhengigheten være utenfor den pakkede filen:

 org.springframework.boot spring-boot-starter-tomcat levert 

Etter å ha henrettet Maven pakke fase, har vi en distribuerbar WAR-fil.

Q10. Hvordan bruke Spring Boot for kommandolinjeapplikasjoner?

Akkurat som alle andre Java-programmer, må et Spring Boot-kommandolinjeprogram ha et hoved- metode. Denne metoden fungerer som et inngangspunkt som påkaller SpringApplication # run metode for å starte programmet:

@SpringBootApplication offentlig klasse MyApplication {public static void main (String [] args) {SpringApplication.run (MyApplication.class); // andre uttalelser}}

De SpringApplication klassen skyter deretter opp en fjærbeholder og konfigurerer bønner automatisk.

Legg merke til at vi må overføre en konfigurasjonsklasse til løpe metode for å fungere som den primære konfigurasjonskilden. Etter konvensjon er dette argumentet selve inngangsklassen.

Etter å ha ringt løpe metode, kan vi utføre andre uttalelser som i et vanlig program.

Q11. Hva er mulige kilder til ekstern konfigurasjon?

Spring Boot gir støtte for ekstern konfigurasjon, slik at vi kan kjøre den samme applikasjonen i forskjellige miljøer. Vi kan bruke egenskapsfiler, YAML-filer, miljøvariabler, systemegenskaper og kommandolinjealternativargumenter for å spesifisere konfigurasjonsegenskaper.

Vi kan da få tilgang til disse egenskapene ved hjelp av @Verdi kommentar, et bundet objekt via @ConfigurationProperties kommentar, eller Miljø abstraksjon.

Q12. Hva betyr det at vårstøvel støtter avslappet binding?

Avslappet binding i Spring Boot er gjeldende for typesikker binding av konfigurasjonsegenskaper.

Med avslappet binding nøkkelen til en eiendom trenger ikke å være et nøyaktig samsvar med et eiendomsnavn. En slik miljøegenskap kan skrives i camelCase, kebab-case, snake_case, eller i store bokstaver med ord atskilt med understreking.

For eksempel hvis en eiendom i en bønneklasse med @ConfigurationProperties merknader er oppkalt myProp, kan det være bundet til noen av disse miljøegenskapene: myProp, min-prop, min_prop, eller MY_PROP.

Q13. Hva er Spring Boot Devtools brukt til?

Spring Boot Developer Tools, eller DevTools, er et sett med verktøy som gjør utviklingsprosessen enklere. For å inkludere disse funksjonene i utviklingstiden, trenger vi bare å legge til en avhengighet av pom.xml fil:

 org.springframework.boot spring-boot-devtools 

De spring-boot-devtools modulen deaktiveres automatisk hvis applikasjonen kjører i produksjon. Ompakking av arkiver ekskluderer også denne modulen som standard. Derfor vil det ikke føre til noe overhead til vårt endelige produkt.

Som standard bruker DevTools egenskaper som passer til et utviklingsmiljø. Disse egenskapene deaktiverer malbuffering, aktiverer feilsøkingslogging for webgruppen og så videre. Som et resultat har vi denne fornuftige utviklingstidskonfigurasjonen uten å angi noen egenskaper.

Programmer som bruker DevTools starter på nytt når en fil på klassestien endres. Dette er en veldig nyttig funksjon i utviklingen, da den gir rask tilbakemelding for modifikasjoner.

Som standard utløser ikke statiske ressurser, inkludert visningsmaler, en omstart. I stedet utløser en ressursendring en nettleseroppdatering. Legg merke til at dette bare kan skje hvis LiveReload-utvidelsen er installert i nettleseren for å samhandle med den innebygde LiveReload-serveren som DevTools inneholder.

For mer informasjon om dette emnet, se Oversikt over Spring Boot DevTools.

Q14. Hvordan skriver jeg integrasjonstester?

Når vi kjører integrasjonstester for en vårapplikasjon, må vi ha en ApplicationContext.

For å gjøre livet vårt enklere, gir Spring Boot en spesiell kommentar for testing - @SpringBootTest. Denne kommentaren skaper en ApplicationContext fra konfigurasjonsklasser angitt med dens klasser Egenskap.

I tilfelle klasser attributtet ikke er angitt, søker Spring Boot etter den primære konfigurasjonsklassen. Søket starter fra pakken som inneholder testen til den finner en klasse som er merket med @SpringBootApplication eller @SpringBootConfiguration.

For detaljerte instruksjoner, sjekk ut veiledningen vår om testing i Spring Boot.

Q15. Hva brukes Spring Boot Actuator til?

I hovedsak gir Actuator liv til Spring Boot-applikasjoner ved å aktivere produksjonsklare funksjoner. Disse funksjonene lar oss overvåke og administrere applikasjoner når de kjører i produksjon.

Å integrere Spring Boot Actuator i et prosjekt er veldig enkelt. Alt vi trenger å gjøre er å inkludere spring-boot-starter-actuator startpakke i pom.xml fil:

 org.springframework.boot spring-boot-starter-actuator 

Spring Boot Actuator kan eksponere driftsinformasjon ved hjelp av enten HTTP- eller JMX-sluttpunkter. De fleste applikasjoner går imidlertid til HTTP, hvor identiteten til et sluttpunkt og / aktuator prefiks danner en URL-bane.

Her er noen av de vanligste innebygde endepunktene Actuator gir:

  • env: Eksponerer miljøegenskaper
  • Helse: Viser helseinformasjon for applikasjonen
  • httpspor: Viser HTTP-sporingsinformasjon
  • info: Viser vilkårlig applikasjonsinformasjon
  • beregninger: Viser beregningsinformasjon
  • loggere: Viser og endrer konfigurasjonen av loggere i applikasjonen
  • kartlegginger: Viser en liste over alle @RequestMapping stier

Se vår opplæringsveiledning for Spring Boot Actuator for en detaljert oversikt.

Q16. Hvilken er en bedre måte å konfigurere et Spring Boot-prosjekt på - ved hjelp av egenskaper eller YAML?

YAML tilbyr mange fordeler i forhold til eiendomsfiler, for eksempel:

  • Mer klarhet og bedre lesbarhet
  • Perfekt for hierarkiske konfigurasjonsdata, som også er representert i et bedre, mer lesbart format
  • Støtte for kart, lister og skalartyper
  • Kan inkludere flere profiler i samme fil

Imidlertid kan det være litt vanskelig og feilutsatt å skrive det på grunn av dets innrykkingsregler.

For detaljer og arbeidseksempler, se vår vår YAML vs Properties-veiledning.

Q17. Hva er de grunnleggende merknadene som Spring Boot tilbyr?

De primære merknadene som Spring Boot tilbyr ligger i org.springframework.boot.autoconfigure og delpakker. Her er et par grunnleggende:

  • @EnableAutoConfiguration - for å få Spring Boot til å se etter autokonfigurasjonsbønner på klassestien og bruke dem automatisk.
  • @SpringBootApplication - brukes til å betegne hovedklassen til en Boot Application. Denne kommentaren kombinerer @Konfigurasjon, @EnableAutoConfiguration, og @ComponentScan merknader med standardattributtene.

Spring Boot Annotations gir mer innsikt i emnet.

Q18. Hvordan kan du endre standardport i Spring Boot?

Vi kan endre standardporten til en server innebygd i Spring Boot ved å bruke en av disse måtene:

  • ved hjelp av en egenskapsfil - vi kan definere dette i en application.properties (eller application.yml) fil ved hjelp av eiendommen server.port
  • programmatisk - i hovedsak @SpringBootApplication klasse, kan vi stille inn server.portSpringApplication forekomst
  • ved hjelp av kommandolinjen - når vi kjører applikasjonen som en jar-fil, kan vi angi server.port som et Java-kommandoargument:
    java -jar -Dserver.port = 8081 myspringproject.jar 

Q19. Hvilke innebygde servere støtter Spring Boot, og hvordan endrer jeg standard?

Per dato, Spring MVC støtter Tomcat, Jetty og Undertow. Tomcat er standard applikasjonsserver som støttes av Spring Boot's nett forrett.

Spring WebFlux støtter Reactor Netty, Tomcat, Jetty og Undertow med Reactor Netty som standard.

I vår MVC, for å endre standard, la oss si til brygge, må vi ekskludere Tomcat og inkludere brygge i avhengighetene:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty 

På samme måte, for å endre standard i WebFlux til UnderTow, må vi ekskludere Reactor Netty og inkludere UnderTow i avhengighetene.

“Sammenligning av innebygd servlet inneholder i Spring Boot” inneholder mer informasjon om de forskjellige innebygde serverne vi kan bruke med Spring MVC.

Q20. Hvorfor trenger vi vårprofiler?

Når vi utvikler applikasjoner for bedriften, håndterer vi vanligvis flere miljøer som Dev, QA og Prod. Konfigurasjonsegenskapene for disse miljøene er forskjellige.

For eksempel bruker vi kanskje en innebygd H2-database for Dev, men Prod kan ha proprietære Oracle eller DB2. Selv om DBMS er det samme på tvers av miljøer, vil URL-ene definitivt være forskjellige.

For å gjøre dette enkelt og rent, Spring har tilgang til profiler for å skille konfigurasjonen for hvert miljø. Slik at i stedet for å opprettholde dette programmatisk, kan egenskapene holdes i separate filer som f.eks application-dev. eiendommer og application-prod. eiendommer . Standaren application.properties peker på den aktive profilen ved hjelp av vår. profiler. aktiv slik at riktig konfigurasjon blir plukket opp.

Spring Profiles gir et omfattende bilde av dette emnet.

3. Konklusjon

Denne opplæringen gikk over noen av de mest kritiske spørsmålene om Spring Boot som du kan møte under et teknisk intervju. Vi håper de vil hjelpe deg med å lande drømmejobben din.


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