Top forårssamarbejdsspørgsmål

Denne artikel er en del af en serie: • Interviewsspørgsmål om Java Collections

• Spørgsmål om Java Type System Interview

• Java-spørgsmål om samtidige samtaler (+ svar)

• Interviewspørgsmål om Java-klassestruktur og initialisering

• Java 8 interviewspørgsmål (+ svar)

• Hukommelsesstyring i Java Interview-spørgsmål (+ svar)

• Interviews med Java Generics (+ svar)

• Interviewspørgsmål til Java Flow Control (+ svar)

• Spørgsmål om Java-undtagelser (+ svar)

• Spørgsmål om Java-annotationer (+ svar)

• Spørgsmål til forårssamtaler med forår (den aktuelle artikel)

Indholdsfortegnelse

  • 1. Introduktion
  • 2. Spring Core
  • Q1. Hvad er Spring Framework?
  • Q2. Hvad er fordelene ved at bruge foråret?
  • Q3.Hvilke forårsprojekter kender du? Beskriv dem kort.
  • Q4. Hvad er afhængighedsinjektion?
  • Q5. Hvordan kan vi injicere bønner om foråret?
  • Q6. Hvilken er den bedste måde at injicere bønner på og hvorfor
  • Q7. Hvad er forskellen mellem Beanfactory og Applicationcontext?
  • Q8.Hvad er en Spring Bean?
  • Q9. Hvad er standardbønneomfanget i Spring Framework?
  • Q10. Hvordan defineres omfanget af en bønne?
  • Q11. Er Singleton Beans trådsikker?
  • Q12. Hvordan ser Spring Bean Lifecycle ud?
  • Q13. Hvad er forårets Java-baserede konfiguration?
  • Q14. Kan vi have flere fjederkonfigurationsfiler i et projekt?
  • Q15. Hvad er forårssikkerhed?
  • Q16. Hvad er Spring Boot?
  • Q17. Navngiv nogle af de designmønstre, der blev brugt i foråret?
  • Q18. Hvordan fungerer Scope-prototypen?
  • 3. Spring Web MVC
  • Q19. Hvordan får jeg Servletcontext og Servletconfig-objekter i en Spring Bean?
  • Q20. Hvad er en controller i Spring Mvc?
  • Q21. Hvordan fungerer @Requestmapping-kommentaren?
  • 4. Forårsdataadgang
  • Q22. Hvad er Spring Jdbctemplate Class og hvordan man bruger det?
  • Q23. Hvordan ville du aktivere transaktioner om foråret, og hvad er fordelene ved dem?
  • Q24. Hvad er Spring Dao?
  • 5. Spring Aspect-Oriented Programming (AOP)
  • Q25. Hvad er aspektorienteret programmering?
  • Q26. Hvad er aspekt, rådgivning, pointcut og joinpoint i Aop?
  • Q27. Hvad er vævning?
  • 6. Forår 5
  • Q28. Hvad er reaktiv programmering?
  • Q29. Hvad er Spring Webflux?
  • Q30. Hvad er mono- og fluxtyperne?
  • Q31. Hvad er brugen af ​​Webclient og Webtestclient?
  • Q32. Hvad er ulemperne ved at bruge reaktive streams?
  • Q33. Er Spring 5 kompatibel med ældre versioner af Java?
  • Q34. Hvordan integreres Ow Spring 5 med Jdk 9-modularitet?
  • Q35. Kan vi bruge både Web Mvc og Webflux i samme applikation?
  • 7. Konklusion

1. Introduktion

I denne artikel vil vi se på nogle af de mest almindelige forårsrelaterede spørgsmål, der kan dukke op under et jobinterview.

2. Spring Core

Q1. Hvad er Spring Framework?

Forår er den mest anvendte ramme til udvikling af Java Enterprise Edition-applikationer. Springets kerneegenskaber kan bruges til at udvikle enhver Java-applikation.

Vi kan bruge dets udvidelser til at opbygge forskellige webapplikationer oven på Jakarta EE-platformen, eller vi kan bare bruge dens afhængighedsindsprøjtningsbestemmelser i enkle enkeltstående applikationer.

Q2. Hvad er fordelene ved at bruge foråret?

Forårsmål for at gøre Jakarta EE-udvikling lettere. Her er fordelene ved at bruge det:

  • Letvægt: der er en lille omkostning ved at bruge rammen i udvikling
  • Inversion af kontrol (IoC): Spring container tager sig af ledningsafhængighed af forskellige objekter i stedet for at skabe eller lede efter afhængige objekter
  • Aspect Oriented Programming (AOP): Spring understøtter AOP til at adskille forretningslogik fra systemtjenester
  • IoC-container: det styrer Spring Bean livscyklus og projektspecifikke konfigurationer
  • MVC-ramme: der bruges til at oprette webapplikationer eller RESTful webtjenester, der kan returnere XML / JSON-svar
  • Transaktionsstyring: reducerer mængden af ​​kedelpladekode i JDBC-operationer, filupload, osv., enten ved hjælp af Java-kommentarer eller ved Spring Bean XML-konfigurationsfil
  • Undtagelse Håndtering: Spring giver en praktisk API til oversættelse af teknologispecifikke undtagelser til ukontrollerede undtagelser

Q3. Hvilke forårsprojekter kender du? Beskriv dem kort.

  • Kerne - et nøglemodul, der giver grundlæggende dele af rammen, som IoC eller DI
  • JDBC - dette modul muliggør et JDBC-abstraktionslag, der fjerner behovet for at udføre JDBC-kodning til specifikke leverandørdatabaser
  • ORM integration - giver integrationslag til populære objektrelationelle kortlægnings-API'er, såsom JPA, JDO og Dvaletilstand
  • Internettet - et webbaseret integrationsmodul, der giver upload af filer i flere dele, Servlet-lyttere og web-orienterede applikationskontekstfunktioner
  • MVC-ramme - et webmodul, der implementerer Model View Controller designmønsteret
  • AOP-modul - aspektorienteret programmeringsimplementering, der muliggør definitionen af ​​rene metodeinterceptorer og pointcuts

Q4. Hvad er afhængighedsinjektion?

Afhængighedsinjektion, et aspekt af Inversion of Control (IoC), er et generelt koncept, der siger, at du ikke opretter dine objekter manuelt, men i stedet beskriver, hvordan de skal oprettes. En IoC-beholder vil om nødvendigt iværksætte de nødvendige klasser.

For flere detaljer, se her.

Q5. Hvordan kan vi injicere bønner om foråret?

Der findes et par forskellige muligheder:

  • Setter Injection
  • Konstruktørinjektion
  • Feltinjektion

Konfigurationen kan udføres ved hjælp af XML-filer eller annoteringer.

For flere detaljer, se denne artikel.

Q6. Hvilken er den bedste måde at injicere bønner på, og hvorfor?

Den anbefalede tilgang er at bruge konstruktørargumenter til obligatoriske afhængigheder og sættere til valgfri. Konstruktørinjektion tillader injektion af værdier til uforanderlige felter og gør test lettere.

Q7. Hvad er forskellen mellem Beanfactory og Applicationcontext?

BeanFactory er en grænseflade, der repræsenterer en container, der leverer og administrerer bønneinstanser. Standardimplementeringen instantierer bønner doven, når getBean () Hedder.

ApplicationContext er en grænseflade, der repræsenterer en container, der indeholder alle oplysninger, metadata og bønner i applikationen. Det udvider også BeanFactory interface, men standardimplementeringen instantierer bønner ivrigt, når applikationen starter. Denne adfærd kan tilsidesættes for individuelle bønner.

Se referencen for alle forskelle.

Q8. Hvad er en Spring Bean?

Spring Beans er Java-objekter, der initialiseres af Spring IoC-containeren.

Q9. Hvad er standardbønneomfanget i Spring Framework?

Som standard initialiseres en Spring Bean som en singleton.

Q10. Hvordan defineres omfanget af en bønne?

For at indstille Spring Beans rækkevidde kan vi bruge @Scope annotering eller "scope" -attribut i XML-konfigurationsfiler. Der er fem understøttede anvendelsesområder:

  • singleton
  • prototype
  • anmodning
  • session
  • global session

For forskelle, se her.

Q11. Er Singleton Beans trådsikker?

Nej, singletonbønner er ikke trådsikre, da trådsikkerhed handler om udførelse, mens singleton er et designmønster med fokus på skabelse. Trådsikkerhed afhænger kun af selve implementeringen af ​​bønner.

Q12. Hvordan ser Spring Bean Lifecycle ud?

For det første skal en fjederbøn instantieres, baseret på Java- eller XML-bønnedefinition. Det kan også være nødvendigt at udføre nogle initialiseringer for at få det til en brugbar tilstand. Derefter, når bønnen ikke længere er påkrævet, fjernes den fra IoC-beholderen.

Hele cyklussen med alle initialiseringsmetoder vises på billedet (kilde):

Q13. Hvad er forårets Java-baserede konfiguration?

Det er en af ​​måderne at konfigurere forårsbaserede applikationer på en typesikker måde. Det er et alternativ til den XML-baserede konfiguration.

Hvis du vil migrere dit projekt fra XML til Java-konfiguration, skal du også se denne artikel.

Q14. Kan vi have flere fjederkonfigurationsfiler i et projekt?

Ja, i store projekter anbefales det at have flere fjederkonfigurationer for at øge vedligeholdelsesevnen og modulariteten.

Du kan indlæse flere Java-baserede konfigurationsfiler:

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

Eller indlæs en XML-fil, der indeholder alle andre konfigurationer:

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

Og inde i denne XML-fil har du:

Q15. Hvad er forårssikkerhed?

Spring Security er et separat modul i Spring-rammen, der fokuserer på at levere godkendelses- og godkendelsesmetoder i Java-applikationer. Det tager sig også af de fleste af de almindelige sikkerhedssårbarheder såsom CSRF-angreb.

For at bruge Spring Security i webapplikationer kan du komme i gang med en simpel kommentar: @EnableWebSecurity.

Du kan finde hele serien af ​​artikler relateret til sikkerhed på Baeldung.

Q16. Hvad er Spring Boot?

Spring Boot er et projekt, der giver et forudkonfigureret sæt rammer for at reducere kedelpladekonfigurationen, så du kan få en Spring-applikation i gang med den mindste mængde kode.

Q17. Navngiv nogle af de designmønstre, der blev brugt i foråret?

  • Singleton mønster: Singleton-scoped bønner
  • Fabriksmønster: Bean Factory klasser
  • Prototype mønster: Prototype-scoped bønner
  • Adapter mønster: Spring Web og Spring MVC
  • Proxy mønster: Spring Aspect Oriented Programming support
  • Skabelonmetodemønster:JdbcTemplate, Dvaletilstand etc.
  • Forreste controller: Forår MVC DispatcherServlet
  • Dataadgangsobjekt: Spring DAO support
  • Model View Controller: Forår MVC

Q18. Hvordan fungerer Scope-prototypen?

Anvendelsesområde prototype betyder, at hver gang du kalder på en forekomst af Bean, opretter Spring en ny forekomst og returnerer den. Dette adskiller sig fra standardindstillingen singleton scope, hvor en enkelt objektforekomst instantieres en gang pr. Spring IoC-container.

3. Spring Web MVC

Q19. Hvordan får man ServletContext og ServletConfig Objekter i en forårsbønne?

Du kan gøre enten ved at:

  1. Implementering af fjederbevidste grænseflader. Den komplette liste er tilgængelig her.
  2. Ved brug af @Autowired kommentar på disse bønner:
@Autowired ServletContext servletContext; @Autowired ServletConfig servletConfig;

Q20. Hvad er en controller i Spring Mvc?

Kort sagt, alle anmodninger behandlet af DispatcherServlet er rettet til klasser, der er kommenteret med @Kontrol. Hver controller-klasse kortlægger en eller flere anmodninger til metoder, der behandler og udfører anmodningerne med leverede input.

Hvis du har brug for at tage et skridt tilbage, anbefaler vi at se på konceptet med Front Controller i den typiske Spring MVC-arkitektur.

Q21. Hvordan fungerer @Requestmapping-kommentaren?

Det @RequestMapping annotering bruges til at kortlægge webanmodninger til Spring Controller-metoder. Ud over simple brugssager kan vi bruge det til kortlægning af HTTP-headere, der binder dele af URI med @PathVariable, og arbejde med URI-parametre og @RequestParam kommentar.

Flere detaljer om @RequestMapping findes her.

For flere Spring MVC-spørgsmål, se artiklen om Spring MVC Interview Questions.

4. Forårsdataadgang

Q22. Hvad er Spring Jdbctemplate Class og hvordan man bruger det?

Spring JDBC-skabelonen er den primære API, hvorigennem vi kan få adgang til logik af databasefunktioner, som vi er interesseret i:

  • oprettelse og lukning af forbindelser
  • udførelse af udsagn og lagrede procedureopkald
  • itererende over ResultSet og returnerer resultater

For at bruge det skal vi definere den enkle konfiguration af 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 ("gæst_bruger"); dataSource.setPassword ("gæst_passord"); returnere datakilde; }}

For yderligere forklaring kan du gå igennem denne hurtige artikel.

Q23. Hvordan ville du aktivere transaktioner om foråret, og hvad er fordelene ved dem?

Der er to forskellige måder at konfigurere på Transaktioner - med annoteringer eller ved hjælp af Aspect Oriented Programming (AOP) - hver med deres fordele.

Fordelene ved at bruge Spring Transactions er ifølge de officielle dokumenter:

  • Giv en ensartet programmeringsmodel på tværs af forskellige transaktions-API'er som JTA, JDBC, Hibernate, JPA og JDO
  • Support deklarativ transaktionsstyring
  • Giv en enklere API til programmatisk transaktionsstyring end nogle komplekse transaktions-API'er som JTA
  • Integrer meget godt med Spring's forskellige dataadgangsabstraktioner

Q24. Hvad er Spring Dao?

Spring Data Access Object er Spring's support, der leveres til at arbejde med dataadgangsteknologier som JDBC, Hibernate og JPA på en konsekvent og nem måde.

Du kan selvfølgelig gå mere i dybden med vedholdenhed, hvor hele serien diskuterer vedholdenhed i foråret.

5. Spring Aspect-Oriented Programming (AOP)

Q25. Hvad er aspektorienteret programmering?

Aspekter muliggøre modularisering af tværgående bekymringer såsom transaktionsstyring, der spænder over flere typer og objekter ved at tilføje ekstra adfærd til allerede eksisterende kode uden at ændre berørte klasser.

Her er eksemplet på logning af aspektbaseret udførelsestid.

Q26. Hvad er aspekt, rådgivning, pointcut og joinpoint i Aop?

  • Aspekt: en klasse, der implementerer tværgående bekymringer, såsom transaktionsstyring
  • Råd: de metoder, der bliver udført, når en bestemt Deltag iPoint med matchning Pointcut nås i ansøgningen
  • Pointcut: et sæt regulære udtryk, der matches med Deltag iPoint at afgøre, om Råd skal udføres eller ej
  • Deltag iPoint: et punkt under udførelsen af ​​et program, såsom udførelsen af ​​en metode eller håndteringen af ​​en undtagelse

Q27. Hvad er vævning?

Ifølge de officielle dokumenter, vævning er en proces, der forbinder aspekter med andre applikationstyper eller objekter for at oprette et anbefalet objekt. Dette kan gøres ved kompileringstidspunkt, indlæsningstid eller ved kørselstid. Spring AOP udfører, som andre rene Java AOP-rammer vævning ved kørselstid.

6. Forår 5

Q28. Hvad er reaktiv programmering?

Reaktiv programmering handler om ikke-blokerende, begivenhedsdrevne applikationer, der skaleres med et lille antal tråde, hvor modtryk er en nøgleingrediens, der har til formål at sikre, at producenter ikke overvælder forbrugerne.

De primære fordele ved reaktiv programmering er:

  • øget udnyttelse af computerressourcer på multicore og multi-CPU hardware
  • og øget ydeevne ved at reducere serialisering

Reaktiv programmering er generelt hændelsesdrevet i modsætning til reaktive systemer, som er meddelelsesdrevet. Brug af reaktiv programmering betyder således ikke, at vi bygger et reaktivt system, som er en arkitektonisk stil.

Imidlertid kan reaktiv programmering bruges som et middel til at implementere reaktive systemer, hvis vi følger det reaktive manifest, hvilket er meget vigtigt at forstå.

Baseret på dette har reaktive systemer fire vigtige egenskaber:

  • Lydhør: systemet skal reagere rettidigt
  • Robust: hvis systemet oplever en fejl, skal det forblive lydhørt
  • Elastisk: reaktive systemer kan reagere på ændringer og forblive lydhøre under varierende arbejdsbyrde
  • Meddelelsesdrevet: reaktive systemer skal etablere en grænse mellem komponenter ved at stole på, at asynkron meddelelse videregives

Q29. Hvad er Spring Webflux?

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

For at opnå denne reaktive model og være meget skalerbar er hele stakken ikke-blokerende. Se vores vejledning om Spring 5 WebFlux for yderligere detaljer.

Q30. Hvad er mono- og fluxtyperne?

WebFlux-rammen i Spring Framework 5 bruger Reactor som sit asynkroniserede fundament.

Dette projekt indeholder to kernetyper: Mono at repræsentere en enkelt asynkronværdi, og Strøm at repræsentere en strøm af asynkroniseringsværdier. De implementerer begge Forlægger interface defineret i specifikationen for Reactive Streams.

Mono redskaber Forlægger og returnerer 0 eller 1 elementer:

offentlig abstrakt klasse Mono implementerer Publisher {...}

Også, Strøm redskaber Forlægger og vender tilbage N elementer:

offentlig abstrakt klasse Flux implementerer Publisher {...}

Per definition repræsenterer de to typer strømme, derfor er de begge dovne, hvilket betyder, at der ikke udføres noget, før vi forbruger strømmen ved hjælp af abonner () metode. Begge typer er uforanderlige, og derfor kaldes en hvilken som helst metode, der returnerer en ny forekomst af Strøm eller Mono.

Q31. Hvad er brugen af ​​Webclient og Webtestclient?

Webklient er en komponent i den nye webreaktive ramme, der kan fungere som en reaktiv klient til udførelse af ikke-blokerende HTTP-anmodninger. At være en reaktiv klient kan den håndtere reaktive strømme med modtryk, og det kan drage fuld fordel af Java 8 lambdas. Det kan også håndtere både synkroniserings- og asynkroniseringsscenarier.

På den anden side er WebTestClient er en lignende klasse, som vi kan bruge i test. Dybest set er det en tynd skal omkring Webklient. Det kan oprette forbindelse til enhver server via en HTTP-forbindelse. Det kan også binde direkte til WebFlux-applikationer ved hjælp af mock-anmodnings- og responsobjekter uden behov for en HTTP-server.

Q32. Hvad er ulemperne ved at bruge reaktive streams?

De største ulemper ved at bruge reaktive strømme er:

  • Fejlfinding af en reaktiv applikation er lidt vanskelig; Sørg for at tjekke vores tutorial om debugging af reaktive streams for nogle praktiske fejlfindingstip
  • Der er begrænset støtte til reaktive datalagre, da traditionelle relationelle datalagre endnu ikke har taget det reaktive paradigme
  • Der er en ekstra indlæringskurve ved implementering

Q33. Er Spring 5 kompatibel med ældre versioner af Java?

For at drage fordel af Java 8-funktioner er Spring codebase blevet moderniseret. Dette betyder, at ældre versioner af Java ikke kan bruges. Derfor kræver rammen et minimum af Java 8.

Q34. Hvordan integreres forår 5 med Jdk 9-modularitet?

I foråret 5 er alt blevet moduleret, så vi bliver ikke tvunget til at importere krukker, der muligvis ikke har de funktioner, vi leder efter.

Se vores guide til Java 9-modularitet for en grundig forståelse af, hvordan denne teknologi fungerer.

Lad os se et eksempel for at forstå den nye modulfunktionalitet i Java 9 og hvordan man organiserer et Spring 5-projekt baseret på dette koncept.

For at starte, lad os oprette en ny klasse, der indeholder en enkelt metode til at returnere en Snor "Hej Verden". Vi placerer dette i et nyt Java-projekt - HelloWorldModule:

pakke com.hello; offentlig klasse HelloWorld {offentlig String sayHello () {returner "HelloWorld"; }}

Lad os derefter oprette et nyt modul:

modul com.hello {eksport com.hello; }

Lad os nu oprette et nyt Java-projekt, HelloWorldClient, at forbruge ovenstående modul ved at definere et modul:

modul com.hello.client {kræver com.hello; }

Ovenstående modul vil være tilgængelig til test nu:

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

Q35. Kan vi bruge både Web Mvc og Webflux i samme applikation?

Fra nu af tillader Spring Boot kun Spring MVC eller Spring WebFlux, da Spring Boot forsøger automatisk at konfigurere konteksten afhængigt af de afhængigheder, der findes i dens klassesti.

Spring MVC kan heller ikke køre på Netty. Desuden er MVC et blokerende paradigme, og WebFlux er en ikke-blokerende stil, derfor bør vi ikke blande begge sammen, da de tjener forskellige formål.

7. Konklusion

I denne omfattende artikel har vi undersøgt nogle af de vigtigste spørgsmål til et teknisk interview alt om foråret.

Vi håber, at denne artikel vil hjælpe dig i dit kommende forårssamtale. Held og lykke!

« Tidligere Java-annoteringer Interviewspørgsmål (+ svar)

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