Top Spring Framework Interview Questions

Denne artikkelen er en del av en serie: • Java Collections Interview Questions

• Java Type System Interview Questions

• Java-samtalespørsmål om samtidighet (+ svar)

• Spørsmål om Java-klassestruktur og initialisering

• Java 8 intervjuspørsmål (+ svar)

• Minnehåndtering i Java-intervjuspørsmål (+ svar)

• Java Generics intervjuspørsmål (+ svar)

• Intervju med Java Flow Control (+ svar)

• Java-unntaksspørsmål (+ svar)

• Spørsmål om Java-merknader (+ svar)

• Top Spring Framework Interview Questions (nåværende artikkel)

Innholdsfortegnelse

  • 1. Introduksjon
  • 2. Vårkjerne
  • Q1. Hva er Spring Framework?
  • Q2. Hva er fordelene med å bruke våren?
  • Q3.Hvilke vårprosjekter kjenner du til? Beskriv dem kort.
  • Q4. Hva er avhengighetsinjeksjon?
  • Q5. Hvordan kan vi injisere bønner om våren?
  • Q6. Hvilken er den beste måten å injisere bønner på og hvorfor
  • Q7. Hva er forskjellen mellom Beanfactory og Applicationcontext?
  • Q8.Hva er en vårbønne?
  • Q9. Hva er standard bønneomfang i Spring Framework?
  • Q10. Hvordan definere omfanget av en bønne?
  • Q11. Er Singleton Beans trådsikker?
  • Q12. Hvordan ser vårbønns livssyklus ut?
  • Q13. Hva er vår-Java-basert konfigurasjon?
  • Q14. Kan vi ha flere fjærkonfigurasjonsfiler i ett prosjekt?
  • Q15. Hva er vårsikkerhet?
  • Q16. Hva er Spring Boot?
  • Q17. Nevn noen av designmønstrene som brukes i vårrammen?
  • Q18. Hvordan fungerer Scope-prototypen?
  • 3. Spring Web MVC
  • Q19. Hvordan få Servletcontext og Servletconfig-objekter i en vårbønne?
  • Q20. Hva er en kontroller i Spring Mvc?
  • Q21. Hvordan fungerer @Requestmapping-merknaden?
  • 4. Vårdatatilgang
  • Q22. Hva er våren Jdbctemplate Class og hvordan du bruker den?
  • Q23. Hvordan vil du aktivere transaksjoner om våren, og hva er fordelene med?
  • Q24. Hva er Spring Dao?
  • 5. Spring Aspect-Oriented Programming (AOP)
  • Q25. Hva er aspektorientert programmering?
  • Q26. Hva er aspekt, råd, punktkutt og samlingspunkt i Aop?
  • Q27. Hva er veving?
  • 6. Vår 5
  • Q28. Hva er reaktiv programmering?
  • Q29. Hva er Spring Webflux?
  • Q30. Hva er mono- og fluxtyper?
  • Q31. Hva er bruken av Webclient og Webtestclient?
  • Q32. Hva er ulempene ved å bruke reaktive strømmer?
  • Q33. Er Spring 5 kompatibel med eldre versjoner av Java?
  • Q34. Hvordan integreres Ow Spring 5 med Jdk 9-modularitet?
  • Q35. Kan vi bruke både Web Mvc og Webflux i samme applikasjon?
  • 7. Konklusjon

1. Introduksjon

I denne artikkelen skal vi se på noen av de vanligste vårrelaterte spørsmålene som kan dukke opp under et jobbintervju.

2. Vårkjerne

Q1. Hva er Spring Framework?

Våren er det mest brukte rammeverket for utvikling av Java Enterprise Edition-applikasjoner. Kjernefunksjonene til Spring kan brukes til å utvikle alle Java-applikasjoner.

Vi kan bruke utvidelsene for å bygge forskjellige webapplikasjoner på toppen av Jakarta EE-plattformen, eller vi kan bare bruke bestemmelsene om avhengighetsinjeksjon i enkle frittstående applikasjoner.

Q2. Hva er fordelene med å bruke våren?

Vårmål for å gjøre utviklingen av Jakarta EE lettere. Her er fordelene ved å bruke den:

  • Lettvekt: det er en liten overhead for å bruke rammeverket i utvikling
  • Inversjon av kontroll (IoC): Fjærbeholder tar seg av ledningsavhengighet til forskjellige gjenstander, i stedet for å opprette eller lete etter avhengige gjenstander
  • Aspect Oriented Programming (AOP): Spring støtter AOP for å skille forretningslogikk fra systemtjenester
  • IoC-beholder: den styrer Spring Bean livssyklus og prosjektspesifikke konfigurasjoner
  • MVC-rammeverk: som brukes til å lage webapplikasjoner eller RESTful webtjenester som kan returnere XML / JSON-svar
  • Transaksjonsstyring: reduserer mengden kokerplatekode i JDBC-operasjoner, filopplasting osv., enten ved hjelp av Java-merknader eller ved Spring Bean XML-konfigurasjonsfil
  • Avvikshåndtering: Spring gir et praktisk API for å oversette teknologispesifikke unntak til ukontrollerte unntak

Q3. Hvilke delprosjekter om våren kjenner du? Beskriv dem kort.

  • Kjerne - en nøkkelmodul som gir grunnleggende deler av rammeverket, som IoC eller DI
  • JDBC - denne modulen muliggjør et JDBC-abstraksjonslag som fjerner behovet for å gjøre JDBC-koding for spesifikke leverandørdatabaser
  • ORM integrasjon - gir integreringslag for populære API-objekter for relasjonskartlegging, som JPA, JDO og Hibernate
  • Internett - en nettorientert integrasjonsmodul som gir flerdelt filopplasting, Servlet-lyttere og nettorienterte applikasjonskontekstfunksjoner
  • MVC-rammeverk - en nettmodul som implementerer Model View Controller designmønsteret
  • AOP-modul - aspektorientert programmeringsimplementering som muliggjør definisjon av rene metodeavskjærere og punktkutt

Q4. Hva er avhengighetsinjeksjon?

Avhengighetsinjeksjon, et aspekt av Inversion of Control (IoC), er et generelt konsept som sier at du ikke lager objektene dine manuelt, men beskriver i stedet hvordan de skal opprettes. En IoC-container vil sette i gang nødvendige klasser om nødvendig.

For mer informasjon, se her.

Q5. Hvordan kan vi injisere bønner om våren?

Noen få alternativer finnes:

  • Setter Injection
  • Constructor Injection
  • Feltinjeksjon

Konfigurasjonen kan gjøres ved hjelp av XML-filer eller merknader.

For mer informasjon, sjekk denne artikkelen.

Q6. Hvilken er den beste måten å injisere bønner på, og hvorfor?

Den anbefalte tilnærmingen er å bruke konstruktørargumenter for obligatoriske avhengigheter og setter for valgfrie. Konstruktørinjeksjon gjør det mulig å injisere verdier til uforanderlige felt og gjør testing enklere.

Q7. Hva er forskjellen mellom Beanfactory og Applicationcontext?

BeanFactory er et grensesnitt som representerer en container som gir og administrerer bønneinstanser. Standardimplementeringen instantierer bønner lat når getBean () er kalt.

ApplicationContext er et grensesnitt som representerer en container som inneholder all informasjon, metadata og bønner i applikasjonen. Det utvider også BeanFactory grensesnitt, men standardimplementeringen øker ivrig bønner når applikasjonen starter. Denne oppførselen kan overstyres for individuelle bønner.

For referanser, for alle forskjeller.

Q8. Hva er en vårbønne?

Spring Beans er Java-objekter som initialiseres av Spring IoC-containeren.

Q9. Hva er standard bønneomfang i Spring Framework?

Som standard initialiseres en Spring Bean som en singleton.

Q10. Hvordan definere omfanget av en bønne?

For å sette Spring Beans omfang kan vi bruke @Omfang merknad eller "scope" -attributt i XML-konfigurasjonsfiler. Det er fem støttede omfang:

  • singleton
  • prototype
  • be om
  • økt
  • global sesjon

For forskjeller, se her.

Q11. Er Singleton Beans trådsikker?

Nei, singletonbønner er ikke trådsikre, da trådsikkerhet handler om utførelse, mens singleton er et designmønster som fokuserer på skapelse. Trådsikkerhet avhenger bare av selve implementeringen av bønnene.

Q12. Hvordan ser vårbønns livssyklus ut?

For det første må en vårbønne instantieres, basert på Java- eller XML-bønnedefinisjon. Det kan også være nødvendig å utføre initialisering for å få det til en brukbar tilstand. Etter det, når bønnen ikke lenger er nødvendig, vil den fjernes fra IoC-beholderen.

Hele syklusen med alle initialiseringsmetodene vises på bildet (kilde):

Q13. Hva er vår-Java-basert konfigurasjon?

Det er en av måtene å konfigurere vårbaserte applikasjoner på en typesikker måte. Det er et alternativ til den XML-baserte konfigurasjonen.

Hvis du vil overføre prosjektet fra XML til Java-konfigurasjon, kan du også se denne artikkelen.

Q14. Kan vi ha flere fjærkonfigurasjonsfiler i ett prosjekt?

Ja, i store prosjekter anbefales det å ha flere fjærkonfigurasjoner for å øke vedlikeholdsevnen og modulariteten.

Du kan laste inn flere Java-baserte konfigurasjonsfiler:

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

Eller last inn en XML-fil som inneholder alle andre konfigurasjoner:

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

Og inne i denne XML-filen har du:

Q15. Hva er vårsikkerhet?

Spring Security er en egen modul i Spring-rammeverket som fokuserer på å tilby autentiserings- og autorisasjonsmetoder i Java-applikasjoner. Det tar også vare på de fleste vanlige sikkerhetsproblemer som CSRF-angrep.

For å bruke Spring Security i webapplikasjoner, kan du komme i gang med en enkel kommentar: @EnableWebSecurity.

Du finner hele artikelserien relatert til sikkerhet på Baeldung.

Q16. Hva er Spring Boot?

Spring Boot er et prosjekt som gir et forhåndskonfigurert sett med rammeverk for å redusere kjeleplatekonfigurasjonen slik at du kan ha en Spring-applikasjon i gang med den minste mengden kode.

Q17. Nevn noen av designmønstrene som brukes i vårrammen?

  • Singleton mønster: Singleton-scoped bønner
  • Fabrikkmønster: Bean Factory klasser
  • Prototype mønster: Prototype-scoped bønner
  • Adaptermønster: Spring Web og Spring MVC
  • Proxy-mønster: Spring Aspect Oriented Programming support
  • Malmetodemønster:JdbcTemplate, Dvalemodus, etc.
  • Frontkontroller: Vår MVC DispatcherServlet
  • Data Access Object: Vår DAO-støtte
  • Model View-kontroller: Vår MVC

Q18. Hvordan fungerer Scope-prototypen?

omfang prototype betyr at hver gang du ber om en forekomst av Bean, vil Spring opprette en ny forekomst og returnere den. Dette skiller seg fra standardverdien singleton omfang, der en enkelt objektforekomst instantieres en gang per Spring IoC-container.

3. Spring Web MVC

Q19. Hvordan få ServletContext og ServletConfig Objekter i en vårbønne?

Du kan gjøre enten ved å:

  1. Implementering av grensesnitt for våren. Den komplette listen er tilgjengelig her.
  2. Ved hjelp av @Autowired kommentar på disse bønnene:
@Autowired ServletContext servletContext; @Autowired ServletConfig servletConfig;

Q20. Hva er en kontroller i Spring Mvc?

Enkelt sagt, alle forespørsler behandlet av DispatcherServlet er rettet til klasser merket med @Kontrollør. Hver kontrollerklasse kartlegger en eller flere forespørsler til metoder som behandler og utfører forespørslene med gitt innganger.

Hvis du trenger å ta et skritt tilbake, anbefaler vi å ta en titt på konseptet med Front Controller i den typiske Spring MVC-arkitekturen.

Q21. Hvordan fungerer @Requestmapping-merknaden?

De @RequestMapping merknader brukes til å kartlegge nettforespørsler til Spring Controller-metoder. I tillegg til enkle brukstilfeller, kan vi bruke den til å kartlegge HTTP-overskrifter, binde deler av URI med @PathVariable, og arbeide med URI-parametere og @RequestParam kommentar.

Flere detaljer om @RequestMapping er tilgjengelig her.

For flere Spring MVC-spørsmål, vennligst sjekk artikkelen om Spring MVC Interview Questions.

4. Vårdatatilgang

Q22. Hva er våren Jdbctemplate Class og hvordan du bruker den?

Spring JDBC-malen er den primære API-en der vi får tilgang til logikk for databasedrift som vi er interessert i:

  • oppretting og lukking av forbindelser
  • utføre uttalelser og lagrede prosedyreanrop
  • gjentar over ResultatSett og returnerer resultater

For å bruke den, må vi definere den enkle konfigurasjonen av Datakilde:

@Configuration @ComponentScan ("org.baeldung.jdbc") offentlig klasse SpringJdbcConfig {@Bean public DataSource mysqlDataSource () {DriverManagerDataSource dataSource = new DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / springjdbc"); dataSource.setUsername ("gjest_bruker"); dataSource.setPassword ("gjest_passord"); returner datakilde; }}

For ytterligere forklaring kan du gå gjennom denne raske artikkelen.

Q23. Hvordan vil du muliggjøre transaksjoner om våren, og hva er fordelene deres?

Det er to forskjellige måter å konfigurere på Transaksjoner - med merknader eller ved å bruke Aspect Oriented Programming (AOP) - hver med sine fordeler.

Fordelene med å bruke vårtransaksjoner, ifølge de offisielle dokumentene, er:

  • Gi en konsistent programmeringsmodell på tvers av forskjellige transaksjons-APIer som JTA, JDBC, Hibernate, JPA og JDO
  • Støtt deklarativ transaksjonshåndtering
  • Gi en enklere API for programmatisk transaksjonsadministrasjon enn noen komplekse transaksjons-APIer som JTA
  • Integrer veldig godt med Springs ulike abstraksjoner for datatilgang

Q24. Hva er Spring Dao?

Spring Data Access Object er Springs støtte for å jobbe med datatilgangsteknologier som JDBC, Hibernate og JPA på en konsekvent og enkel måte.

Du kan selvfølgelig gå nærmere på utholdenhet, med hele serien som diskuterer utholdenhet om våren.

5. Spring Aspect-Oriented Programming (AOP)

Q25. Hva er aspektorientert programmering?

Aspekter muliggjøre modulering av tverrgående bekymringer som transaksjonsadministrasjon som spenner over flere typer og objekter ved å legge til ekstra oppførsel til allerede eksisterende kode uten å endre berørte klasser.

Her er eksemplet på aspektbasert logging av utførelsestid.

Q26. Hva er aspekt, råd, punktkutt og samlingspunkt i Aop?

  • Aspekt: en klasse som implementerer tverrgående bekymringer, for eksempel transaksjonsstyring
  • Råd: metodene som blir utført når en spesifikk Bli med iPoint med matching Pointcut nås i søknaden
  • Pointcut: et sett med regulære uttrykk som matches Bli med iPoint for å avgjøre om Råd må utføres eller ikke
  • Bli med iPoint: et punkt under gjennomføringen av et program, for eksempel gjennomføring av en metode eller håndtering av et unntak

Q27. Hva er veving?

I følge de offisielle dokumentene, veving er en prosess som knytter aspekter til andre applikasjonstyper eller objekter for å lage et anbefalt objekt. Dette kan gjøres ved kompileringstid, lastetid eller kjøretid. Spring AOP, som andre rene Java AOP-rammer, utfører veving ved kjøretid.

6. Vår 5

Q28. Hva er reaktiv programmering?

Reaktiv programmering handler om ikke-blokkerende, hendelsesdrevne applikasjoner som skaleres med et lite antall tråder, med mottrykk som en nøkkelingrediens som tar sikte på å sikre at produsentene ikke overvelder forbrukerne.

De viktigste fordelene med reaktiv programmering er:

  • økt utnyttelse av databehandlingsressurser på maskinvare med flere kjerner og flere CPUer
  • og økt ytelse ved å redusere serialisering

Reaktiv programmering er generelt hendelsesdrevet, i motsetning til reaktive systemer, som er meldingsdrevet. Dermed betyr ikke bruk av reaktiv programmering at vi bygger et reaktivt system, som er en arkitektonisk stil.

Imidlertid kan reaktiv programmering brukes som et middel til å implementere reaktive systemer hvis vi følger det reaktive manifestet, noe som er veldig viktig å forstå.

Basert på dette har reaktive systemer fire viktige egenskaper:

  • Mottakelig: systemet skal svare i tide
  • Fleksibel: hvis systemet støter på feil, bør det være responsivt
  • Elastisk: reaktive systemer kan reagere på endringer og være responsive under varierende arbeidsmengde
  • Meldingsdrevet: reaktive systemer må etablere en grense mellom komponenter ved å stole på asynkron overføring av meldinger

Q29. Hva er Spring Webflux?

Spring WebFlux er Spring's reaktive stack web-rammeverk, og det er et alternativ til Spring MVC.

For å oppnå denne reaktive modellen og være svært skalerbar, er ikke hele stakken blokkerende. Sjekk ut veiledningen vår på Spring 5 WebFlux for mer informasjon.

Q30. Hva er mono- og fluxtyper?

WebFlux-rammeverket i Spring Framework 5 bruker Reactor som sitt async-fundament.

Dette prosjektet gir to kjernetyper: Mono å representere en enkelt asynkronisk verdi, og Flux å representere en strøm av asynkroniseringsverdier. De implementerer begge Forlegger grensesnitt definert i Reactive Streams-spesifikasjonen.

Mono redskaper Forlegger og returnerer 0 eller 1 elementer:

offentlig abstrakt klasse Mono implementerer Publisher {...}

Også, Flux redskaper Forlegger og kommer tilbake N elementer:

offentlig abstrakt klasse Flux implementerer Publisher {...}

Per definisjon representerer de to typene strømmer, derfor er de begge late, noe som betyr at ingenting blir utført før vi konsumerer strømmen ved hjelp av abonnere() metode. Begge typene er uforanderlige, og derfor vil det å ringe til en hvilken som helst metode returnere en ny forekomst av Flux eller Mono.

Q31. Hva er bruken av Webclient og Webtestclient?

WebClient er en komponent i det nye Web Reactive-rammeverket som kan fungere som en reaktiv klient for å utføre ikke-blokkerende HTTP-forespørsler. Å være en reaktiv klient, kan den håndtere reaktive strømmer med mottrykk, og det kan dra full nytte av Java 8 lambdas. Den kan også håndtere både synkroniserings- og asynkroniseringsscenarier.

På den annen side, den WebTestClient er en lignende klasse som vi kan bruke i tester. I utgangspunktet er det et tynt skall rundt WebClient. Den kan koble til hvilken som helst server via en HTTP-tilkobling. Den kan også binde seg direkte til WebFlux-applikasjoner ved hjelp av mock-forespørsel og responsobjekter, uten behov for en HTTP-server.

Q32. Hva er ulempene ved å bruke reaktive strømmer?

De største ulempene ved å bruke reaktive strømmer er:

  • Feilsøking av et reaktivt program er litt vanskelig; Husk å sjekke ut veiledningen vår om feilsøking av reaktive strømmer for noen nyttige feilsøkingstips
  • Det er begrenset støtte for reaktive datalagre, ettersom tradisjonelle relasjonelle datalagre ennå ikke har tatt imot det reaktive paradigmet
  • Det er en ekstra læringskurve når du implementerer

Q33. Er vår 5 kompatibel med eldre versjoner av Java?

For å dra nytte av Java 8-funksjoner har vårkodebasen blitt oppdatert. Dette betyr at eldre versjoner av Java ikke kan brukes. Derfor krever rammeverket et minimum av Java 8.

Q34. Hvordan integreres våren 5 med Jdk 9-modularitet?

Våren 5 har alt blitt modulert, og vi blir derfor ikke tvunget til å importere krukker som kanskje ikke har de funksjonene vi leter etter.

Ta en titt på vår guide til Java 9-modularitet for en grundig forståelse av hvordan denne teknologien fungerer.

La oss se et eksempel for å forstå den nye modulfunksjonaliteten i Java 9 og hvordan du organiserer et Spring 5-prosjekt basert på dette konseptet.

For å starte, la oss lage en ny klasse som inneholder en enkelt metode for å returnere en String "Hei Verden". Vi plasserer dette i et nytt Java-prosjekt - HelloWorldModule:

pakke com. hallo; offentlig klasse HelloWorld {offentlig streng siHello () {return "HelloWorld"; }}

Så la oss lage en ny modul:

modul com.hello {eksport com.hello; }

La oss lage et nytt Java-prosjekt, HelloWorldClient, for å konsumere ovennevnte modul ved å definere en modul:

modul com.hello.client {krever com.hello; }

Ovennevnte modul vil være tilgjengelig for testing nå:

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

Q35. Kan vi bruke både Web Mvc og Webflux i samme applikasjon?

Fra nå av vil Spring Boot bare tillate enten Spring MVC eller Spring WebFlux, da Spring Boot prøver å automatisk konfigurere konteksten avhengig av avhengighetene som finnes i klassestien.

Spring MVC kan heller ikke kjøre på Netty. Videre er MVC et blokkerende paradigme, og WebFlux er en ikke-blokkerende stil, derfor bør vi ikke blande begge sammen, ettersom de tjener forskjellige formål.

7. Konklusjon

I denne omfattende artikkelen har vi utforsket noen av de viktigste spørsmålene for et teknisk intervju om våren.

Vi håper at denne artikkelen vil hjelpe deg i ditt kommende vårintervju. Lykke til!

« Tidligere Java-merknader Intervju spørsmål (+ svar)

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