Pitanja za intervju za Spring Boot

1. Uvod

Od svog predstavljanja, Spring Boot je ključni igrač u ekosustavu Spring. Ovaj nam projekt znatno olakšava život svojom sposobnošću automatske konfiguracije.

U ovom ćemo uputstvu pokriti neka od najčešćih pitanja vezanih uz Spring Boot koja se mogu pojaviti tijekom razgovora za posao.

2. Pitanja

Q1. Što je Spring Boot i koje su njegove glavne značajke?

Spring Boot je u osnovi okvir za brzi razvoj aplikacija izgrađen na vrhu Spring Framework-a. Sa svojom automatskom konfiguracijom i podrškom za ugrađeni aplikacijski poslužitelj, u kombinaciji s opsežnom dokumentacijom i podrškom zajednice koju uživa, Spring Boot je od danas jedna od najpopularnijih tehnologija u Java ekosustavu.

Evo nekoliko istaknutih značajki:

  • Početnici - skup deskriptora ovisnosti koji uključuju relevantne ovisnosti u pokretu
  • Automatska konfiguracija - način automatskog konfiguriranja aplikacije na temelju ovisnosti prisutnih na putu predavanja
  • Pogon - za dobivanje značajki spremnih za proizvodnju, poput nadzora
  • Sigurnost
  • Sječa drva

Q2. Koje su razlike između proljetnog i proljetnog čizma?

Spring Framework nudi više značajki koje olakšavaju razvoj web aplikacija. Te značajke uključuju ubrizgavanje ovisnosti, vezivanje podataka, programiranje usmjereno na aspekte, pristup podacima i još mnogo toga.

Tijekom godina Spring je postajao sve složeniji i količina konfiguracije koja takva aplikacija zahtijeva može biti zastrašujuća. Tu dobro dolazi Spring Boot - konfiguriranje Spring aplikacije čini laganim.

U osnovi, dok je Proljeće neometano, Spring Boot ima savladani pogled na platformu i knjižnice, dopuštajući nam da brzo započnemo.

Evo dvije najvažnije prednosti koje donosi Spring Boot:

  • Automatski konfigurirajte aplikacije na temelju artefakata koje pronađe na putu predavanja
  • Pružaju nefunkcionalne značajke zajedničke proizvodnim aplikacijama, poput sigurnosnih ili zdravstvenih provjera

Molimo pogledajte jedan od naših ostalih vodiča za detaljnu usporedbu između vanilije Spring and Spring Boot.

Q3. Kako možemo postaviti proljetnu aplikaciju za pokretanje s Mavenom?

Možemo uključiti Spring Boot u projekt Maven, baš kao i bilo koju drugu knjižnicu. Međutim, najbolji način je nasljeđivanje iz proljeće-čizma-starter-roditelj projicirati i proglasiti ovisnosti za početnike Spring Boota. To omogućuje našem projektu da ponovno koristi zadane postavke Spring Boot-a.

Nasljeđivanje proljeće-čizma-starter-roditelj projekt je jednostavan - trebamo samo navesti a roditelj element u pom.xml:

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

Možemo pronaći najnoviju verziju proljeće-čizma-starter-roditelj na Maven Central.

Korištenje početnog nadređenog projekta prikladno je, ali nije uvijek izvedivo. Na primjer, ako naša tvrtka zahtijeva da svi projekti nasljeđuju od standardnog POM-a, još uvijek možemo imati koristi od upravljanja ovisnostima Spring Boota pomoću prilagođenog roditelja.

Q4. Što je Spring Initializr?

Spring Initializr prikladan je način za stvaranje projekta Spring Boot.

Možemo otići na web mjesto Spring Initializr, odabrati alat za upravljanje ovisnostima (Maven ili Gradle), jezik (Java, Kotlin ili Groovy), shemu pakiranja (Jar ili War), verziju i ovisnosti i preuzeti projekt.

Ovaj kreira nam kosturski projekt i štedi vrijeme postavljanja kako bismo se mogli koncentrirati na dodavanje poslovne logike.

Čak i kada koristimo naš čarobnjak za novi IDE (poput STS ili Eclipse sa STS dodatkom) za stvaranje projekta Spring Boot, on koristi Spring Initializr ispod haube.

P5. Koji su proljetni pokretači čizama dostupni tamo?

Svaki pokretač igra ulogu sve na jednom mjestu za sve proljetne tehnologije koje su nam potrebne. Ostale potrebne ovisnosti tada se privremeno uvlače i njima se dosljedno upravlja.

Svi starteri su pod org.springframework.boot grupa i njihova imena počinju sa opruga-čizma-starter-. Ovaj obrazac imenovanja olakšava pronalazak početnika, posebno kada se radi s IDE-ima koji podržavaju pretraživanje ovisnosti po imenu.

U vrijeme pisanja ovog članka na raspolaganju nam je više od 50 početnika. Najčešće korišteni su:

  • opružni pokretač: osnovni pokretač, uključujući podršku za automatsku konfiguraciju, bilježenje i YAML
  • spring-boot-starter-aop: starter za aspektno orijentirano programiranje s Spring AOP i AspectJ
  • spring-boot-starter-data-jpa: početnik za korištenje Spring Data JPA s Hibernate
  • spring-boot-starter-security: starter za korištenje Spring Security
  • test proljetnog pokretanja-startera: starter za testiranje aplikacija Spring Boot
  • spring-boot-starter-web: početnik za izradu web, uključujući RESTful, aplikacije koje koriste Spring MVC

Potpuni popis početnika potražite u ovom spremištu.

Da biste pronašli više informacija o pokretačima Spring Boot, pogledajte uvod u Spring Boot Starters.

P6. Kako onemogućiti određenu automatsku konfiguraciju?

Ako želimo onemogućiti određenu automatsku konfiguraciju, možemo je naznačiti pomoću isključiti atribut @EnableAutoConfiguration bilješka. Na primjer, ovaj isječak koda neutralizira DataSourceAutoConfiguration:

// ostale bilješke @EnableAutoConfiguration (exclude = DataSourceAutoConfiguration.class) javna klasa MyConfiguration {}

Ako smo omogućili automatsku konfiguraciju s @SpringBootApplication bilješka - koja ima @EnableAutoConfiguration kao meta-bilješku - mogli bismo onemogućiti automatsku konfiguraciju s istoimenim atributom:

// ostale bilješke @SpringBootApplication (exclude = DataSourceAutoConfiguration.class) javna klasa MyConfiguration {}

Također možemo onemogućiti automatsku konfiguraciju pomoću proljeće.autoconfigure.exclude svojstvo okoliša. Ova postavka u primjena.svojstva datoteka radi isto što i prije:

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

P7. Kako registrirati prilagođenu automatsku konfiguraciju?

Da bismo registrirali klasu automatske konfiguracije, njezino potpuno kvalificirano ime mora biti navedeno pod EnableAutoConfiguration ključ u META-INF / proljeće.tvornice datoteka:

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

Ako gradimo projekt s Mavenom, tu datoteku treba smjestiti u resursi / META-INF direktorij, koji će završiti na spomenutom mjestu tijekom paket faza.

P8. Kako prepoznati automatsku konfiguraciju da se povuče kad postoji grah?

Da bismo naredili klasi automatske konfiguracije da se povuče kad grah već postoji, možemo koristiti @ConditionalOnMissingBean bilješka. Najuočljiviji atributi ove bilješke su:

  • vrijednost: Vrste graha koje treba provjeriti
  • Ime: Imena graha koja treba provjeriti

Kad se stavi na metodu ukrašenu @Grah, zadani tip ciljanog tipa povratne metode:

@Configuration javna klasa CustomConfiguration {@Bean @ConditionalOnMissingBean javna usluga CustomService () {...}}

P9. Kako implementirati web aplikacije Spring Boot kao Jar i War datoteke?

Tradicionalno web-aplikaciju pakiramo u WAR datoteku, a zatim je postavljamo na vanjski poslužitelj. To nam omogućuje da na istom poslužitelju uredimo više aplikacija. U vrijeme dok su CPU i memorija bili oskudni, ovo je bio sjajan način uštede resursa.

Međutim, stvari su se promijenile. Računalni hardver sada je prilično jeftin, a pozornost je usmjerena na konfiguraciju poslužitelja. Mala pogreška u konfiguriranju poslužitelja tijekom implementacije može dovesti do katastrofalnih posljedica.

Spring se rješava ovog problema pružajući dodatak, naime dodatak za proljetni boot-maven, za spakiranje web aplikacije kao izvršnog JAR-a. Da biste uključili ovaj dodatak, samo dodajte uključiti element za pom.xml:

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

S ovim dodatkom na mjestu dobit ćemo debeli JAR nakon izvršavanja paket faza. Ovaj JAR sadrži sve potrebne ovisnosti, uključujući ugrađeni poslužitelj. Stoga više ne trebamo brinuti o konfiguriranju vanjskog poslužitelja.

Tada možemo pokrenuti aplikaciju baš kao i obični izvršni JAR.

Primijetite da ambalaža element u pom.xml datoteka mora biti postavljena na staklenka za izgradnju JAR datoteke:

staklenka

Ako ne uključimo ovaj element, on će također biti zadani staklenka.

U slučaju da želimo stvoriti WAR datoteku, promijenite ambalaža element za rat:

rat

I ostavite ovisnost spremnika izvan zapakirane datoteke:

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

Nakon pogubljenja Mavena paket fazu, imat ćemo raspoloživu WAR datoteku.

Q10. Kako koristiti Spring Boot za aplikacije naredbenog retka?

Kao i bilo koji drugi Java program, aplikacija naredbenog retka Spring Boot mora imati glavni metoda. Ova metoda služi kao ulazna točka koja poziva na SpringApplication # run metoda za pokretanje aplikacije:

@SpringBootApplication javna klasa MyApplication {javna statička void glavna (String [] args) {SpringApplication.run (MyApplication.class); // ostale izjave}}

The SpringApplication klasa zatim aktivira Spring spremnik i automatski konfigurira grah.

Primijetite da klasu konfiguracije moramo proslijediti trčanje metoda koja će raditi kao primarni izvor konfiguracije. Prema dogovoru, ovaj je argument sama klasa unosa.

Nakon poziva na trčanje metodom, možemo izvršavati druge izraze kao u redovnom programu.

Q11. Koji su mogući izvori vanjske konfiguracije?

Spring Boot pruža podršku za vanjsku konfiguraciju, omogućujući nam pokretanje iste aplikacije u raznim okruženjima. Za određivanje svojstava konfiguracije možemo koristiti datoteke svojstava, YAML datoteke, varijable okruženja, svojstva sustava i argumente opcije naredbenog retka.

Tada možemo pristupiti tim svojstvima pomoću @Vrijednost napomena, vezani objekt putem @ConfigurationProperties napomena ili Okoliš apstrakcija.

Q12. Što znači da Spring Boot podržava opušteno vezivanje?

Opušteno vezivanje u Spring Boot-u primjenjivo je na tipično vezivanje konfiguracijskih svojstava.

Uz opušteno vezivanje, ključ svojstva ne mora točno odgovarati nazivu svojstva. Takvo svojstvo okoline može biti zapisano u camelCase, kebab-slučaju, snake_case ili velikim slovima s riječima odvojenim podvlakama.

Na primjer, ako svojstvo u klasi graha s @ConfigurationProperties imenovana je napomena myProp, može se vezati za bilo koje od ovih svojstava okoline: myProp, moj-rekvizit, moj_prop, ili MOJ_PROP.

Q13. Što je Koriste li se provizori za proljetne čizme?

Spring Boot Developer Tools ili DevTools skup je alata koji olakšavaju razvojni proces. Da bismo uključili ove značajke razvojnog vremena, samo trebamo dodati ovisnost o pom.xml datoteka:

 org.springframework.boot spring-boot-devtools 

The spring-boot-devtools modul se automatski onemogućava ako aplikacija radi u proizvodnji. Prepakiranje arhiva prema zadanim postavkama također isključuje ovaj modul. Dakle, to neće donijeti nikakve režijske troškove za naš konačni proizvod.

Prema zadanim postavkama, DevTools primjenjuje svojstva prikladna za razvojno okruženje. Ova svojstva onemogućuju predmemoriranje predloška, ​​omogućavaju evidentiranje otklanjanja pogrešaka za web grupu i tako dalje. Kao rezultat, imamo ovu razumnu konfiguraciju vremena razvoja bez postavljanja bilo kakvih svojstava.

Aplikacije koje koriste DevTools ponovno se pokreću kad god se datoteka na putu predavanja promijeni. Ovo je vrlo korisna značajka u razvoju, jer daje brzu povratnu informaciju o izmjenama.

Prema zadanim postavkama statički resursi, uključujući predloške pregleda, ne pokreću ponovno pokretanje. Umjesto toga, promjena resursa pokreće osvježavanje preglednika. Primijetite da se to može dogoditi samo ako je proširenje LiveReload instalirano u preglednik radi interakcije s ugrađenim LiveReload poslužiteljem koji sadrži DevTools.

Za dodatne informacije o ovoj temi, pogledajte Pregled Spring Boot DevTools.

P14. Kako napisati integracijske testove?

Kada pokrećemo integracijske testove za Spring aplikaciju, moramo imati ApplicationContext.

Kako bi nam olakšao život, Spring Boot pruža posebnu napomenu za testiranje - @SpringBootTest. Ova napomena stvara ApplicationContext iz konfiguracijskih klasa naznačenih svojim razreda atribut.

U slučaju da razreda atribut nije postavljen, Spring Boot traži primarnu konfiguracijsku klasu. Pretraživanje započinje od paketa koji sadrži test pa sve dok ne pronađe klasu označenu s @SpringBootApplication ili @SpringBootConfiguration.

Za detaljne upute pogledajte naš vodič za testiranje u Spring Boot-u.

P15. Čemu služi proljetni pokretač čizme?

U osnovi, Actuator oživljava programe Spring Boot omogućujući značajke spremne za proizvodnju. Te nam značajke omogućuju nadgledanje i upravljanje aplikacijama kada su pokrenute u proizvodnji.

Integriranje proljetnog pokretačkog pokretača u projekt vrlo je jednostavno. Sve što trebamo učiniti je uključiti pokretač pokretača opruge-čizme starter u pom.xml datoteka:

 org.springframework.boot opruga-pokretač-pokretač-pokretač 

Spring Boot Actuator može izložiti operativne informacije pomoću HTTP ili JMX krajnjih točaka. Većina aplikacija ide za HTTP, gdje je identitet krajnje točke i / aktuator prefiks čine URL stazu.

Evo nekoliko najčešćih ugrađenih krajnjih točaka koje Actuator pruža:

  • env: Izlaže svojstva okoliša
  • zdravlje: Prikazuje zdravstvene informacije o aplikaciji
  • httptrace: Prikazuje HTTP informacije o praćenju
  • info: Prikazuje proizvoljne informacije o prijavi
  • metrika: Prikazuje podatke o mjernim podacima
  • drvosječe: Prikazuje i mijenja konfiguraciju zapisnika u aplikaciji
  • preslikavanja: Prikazuje popis svih @RequestMapping staze

Detaljan pregled potražite u našem vodiču za proljetni pokretač pokretača.

Q16. Koji je bolji način za konfiguriranje projekta proljetnog pokretanja - pomoću svojstava ili YAML-a?

YAML nudi mnoge prednosti nad datotekama svojstava, kao što su:

  • Više jasnoće i bolja čitljivost
  • Savršeno za hijerarhijske podatke o konfiguraciji, koji su također predstavljeni u boljem, čitljivijem formatu
  • Podrška za karte, popise i skalarne vrste
  • Može sadržavati nekoliko profila u istoj datoteci

Međutim, njegovo pisanje može biti malo teško i sklono pogreškama zbog njegovih pravila uvlačenja.

Pojedinosti i radne uzorke potražite u našem vodiču za YAML vs Properties.

Q17. Koje su osnovne napomene koje nudi Spring Boot?

Primarne napomene koje nudi Spring Boot nalaze se u njemu org.springframework.boot.autoconfigure i njegovi podpaketi. Evo nekoliko osnovnih:

  • @EnableAutoConfiguration - kako bi Spring Boot tražio grah za automatsko konfiguriranje na svojoj stazi i automatski ih primijenio.
  • @SpringBootApplication - koristi se za označavanje glavne klase aplikacije za pokretanje. Ova napomena kombinira @Konfiguracija, @EnableAutoConfiguration, i @ComponentScan napomene sa svojim zadanim atributima.

Bilješke proljetnog pokretanja nude više uvida u temu.

Q18. Kako možete promijeniti zadani port u Spring Boot?

Zadani port poslužitelja ugrađenog u Spring Boot možemo promijeniti na jedan od ovih načina:

  • pomoću datoteke svojstava - to možemo definirati u datoteci primjena.svojstva (ili primjena.iml) datoteku koja koristi svojstvo poslužitelj.port
  • programski - u našem glavnom @SpringBootApplication klase, možemo postaviti poslužitelj.port na SpringApplication primjer
  • pomoću naredbenog retka - pri pokretanju aplikacije kao jar datoteku, server.port možemo postaviti kao argument Java naredbe:
    java -jar -Dserver.port = 8081 myspringproject.jar 

Q19. Koje ugrađene poslužitelje podržava Spring Boot i kako promijeniti zadani?

Od datuma, Spring MVC podržava Tomcat, Jetty i Undertow. Tomcat je zadani aplikacijski poslužitelj koji podržava Spring Boot's mreža starter.

Spring WebFlux podržava Reactor Netty, Tomcat, Jetty i Undertow s Reactor Netty-om kao zadanim.

U proljetnom MVC-u, da bismo promijenili zadani, recimo Jetty, moramo izuzeti Tomcat i uključiti Jetty u ovisnosti:

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

Slično tome, da bismo zadani u WebFluxu promijenili u UnderTow, moramo izuzeti Reactor Netty i uključiti UnderTow u ovisnosti.

"Usporedba ugrađenog servleta koji sadrži Spring Boot" sadrži više detalja o različitim ugrađenim poslužiteljima koje možemo koristiti s Spring MVC.

Q20. Zašto su nam potrebni proljetni profili?

Kada razvijamo aplikacije za poduzeće, obično imamo posla s više okruženja kao što su Dev, QA i Prod. Svojstva konfiguracije za ova okruženja su različita.

Na primjer, možda koristimo ugrađenu H2 bazu podataka za Dev, ali Prod bi mogao imati vlasnički Oracle ili DB2. Čak i ako je DBMS isti u svim okruženjima, URL-ovi bi definitivno bili različiti.

Da bi ovo bilo lako i čisto, Proljeće ima profile, koji pomažu u odvajanju konfiguracije za svako okruženje. Tako da se svojstva mogu umjesto programskog održavanja čuvati u zasebnim datotekama kao što su aplikacija-razv. Svojstva i prijava-prod. Svojstva . Zadana vrijednost primjena.vlasništvos pokazuje na trenutno aktivni profil pomoću Proljeće. profili. aktivan tako da se pokupi ispravna konfiguracija.

Proljetni profili daju sveobuhvatan prikaz ove teme.

3. Zaključak

U ovom su vodiču prošla neka od najkritičnijih pitanja o Spring Boot-u s kojima ćete se možda suočiti tijekom tehničkog razgovora. Nadamo se da će vam pomoći da zaposlite posao iz snova.