Najlepšie otázky týkajúce sa jarného rámcového rozhovoru

Tento článok je súčasťou série: • Otázky týkajúce sa rozhovorov o zbierkach Java

• Dotazy týkajúce sa systému typu Java

• Otázky týkajúce sa rozhovorov o súbehu Java (+ odpovede)

• Otázky týkajúce sa štruktúry triedy Java a inicializácie

• Otázky týkajúce sa rozhovoru s Java 8 (+ odpovede)

• Správa pamäte v otázkach týkajúcich sa rozhovorov Java (+ odpovede)

• Java Generics Interview otázky (+ odpovede)

• Otázky týkajúce sa riadenia toku Java (+ odpovede)

• Otázky týkajúce sa rozhovorov o výnimkách jazyka Java (+ odpovede)

• Dotazy k anotáciám Java (+ odpovede)

• Najlepšie otázky týkajúce sa jarného rámcového rozhovoru (aktuálny článok)

Obsah

  • 1. Úvod
  • 2. Jarné jadro
  • Q1. Čo je jarný rámec?
  • Q2. Aké sú výhody využívania jari?
  • Q3.Aké jarné podprojekty poznáte? Stručne ich opíšte.
  • Q4. Čo je injekcia závislostí?
  • Q5. Ako si môžeme injekčne podať fazuľu na jar?
  • Q6. Čo je najlepší spôsob vpichovania fazule a prečo
  • Q7. Aký je rozdiel medzi Beanfactory a Applicationcontext?
  • Q8.Čo je jarná fazuľa?
  • Q9. Aký je predvolený rozsah fazule v jarnom rámci?
  • Q10. Ako definovať rozsah pôsobnosti fazule?
  • Q11. Sú fazule Singleton bezpečné pre vlákna?
  • Q12. Ako vyzerá životný cyklus jarných bôbov?
  • Q13. Čo je jarná konfigurácia založená na prostredí Java?
  • Q14. Môžeme mať v jednom projekte viac súborov s konfiguráciou pružiny?
  • Q15. Čo je jarná bezpečnosť?
  • Q16. Čo je jarná topánka?
  • Q17. Pomenujte niektoré z návrhových vzorov použitých v jarnom rámci?
  • Q18. Ako funguje prototyp rozsahu?
  • 3. Jarný web MVC
  • Q19. Ako získať Servletcontext a Servletconfig objekty v jarnej fazuli?
  • Q20. Čo je kontrolór na jar MVC?
  • Q21. Ako funguje anotácia @Requestmapping?
  • 4. Jarný prístup k údajom
  • Q22. Čo je jarná trieda Jdbctemplate a ako ju používať?
  • Q23. Ako by ste povolili transakcie na jar a aké sú ich výhody?
  • Q24. Čo je jarné Tao?
  • 5. Programovanie orientované na jar (AOP)
  • Q25. Čo je programovanie zamerané na určitý aspekt?
  • Q26. Čo sú aspekty, rady, pointcut a joinpoint v Aop?
  • Q27. Čo je tkanie?
  • 6. Jar 5
  • Q28. Čo je reaktívne programovanie?
  • Q29. Čo je jarný Webflux?
  • Q30. Čo sú typy Mono a Flux?
  • Q31. Aké je použitie serverov Webclient a Webtestclient?
  • Q32. Aké sú nevýhody použitia reaktívnych prúdov?
  • Q33. Je jar 5 kompatibilná so staršími verziami Java?
  • Q34. Ako sa Ow Spring 5 integruje s modularitou Jdk 9?
  • Q35. Môžeme použiť Web Mvc aj Webflux v tej istej aplikácii?
  • 7. Záver

1. Úvod

V tomto článku sa pozrieme na niektoré z najbežnejších otázok týkajúcich sa jari, ktoré sa môžu vyskytnúť počas pracovného pohovoru.

2. Pružinové jadro

Q1. Čo je jarný rámec?

Jar je najbežnejšie používaný rámec pre vývoj aplikácií Java Enterprise Edition. Základné vlastnosti Spring možno použiť pri vývoji akejkoľvek aplikácie Java.

Môžeme použiť jeho rozšírenia na vytváranie rôznych webových aplikácií na platforme Jakarta EE, alebo môžeme jednoducho použiť jeho ustanovenia o vkladaní závislostí v jednoduchých samostatných aplikáciách.

Q2. Aké sú výhody využívania jari?

Jarné ciele, ktoré uľahčia vývoj Jakarta EE. Tu sú výhody jeho použitia:

  • Ľahká váha: pri vývoji je mierna réžia
  • Inverzia kontroly (IoC): Jarný kontajner sa stará o zapojenie závislostí rôznych objektov, namiesto toho, aby vytvoril alebo hľadal závislé objekty
  • Aspektovo orientované programovanie (AOP): Jar podporuje AOP pri oddelení obchodnej logiky od systémových služieb
  • Kontajner IoC: spravuje životný cyklus Spring Bean a projektuje špecifické konfigurácie
  • Rámec MVC: ktorá sa používa na vytváranie webových aplikácií alebo webových služieb RESTful schopných vracať odpovede XML / JSON
  • Správa transakcií: znižuje množstvo kódov štítkov v operáciách JDBC, nahrávaní súborov atď., a to buď pomocou anotácií Java, alebo pomocou konfiguračného súboru XML Spring Bean XML
  • Spracovanie výnimiek: Jar poskytuje pohodlné API na preklad technologických výnimiek do nekontrolovaných výnimiek

Q3. Aké jarné podprojekty poznáte? Stručne ich opíšte.

  • Jadro - kľúčový modul, ktorý poskytuje základné časti rámca, ako napríklad IoC alebo DI
  • JDBC - tento modul umožňuje vrstvu abstrakcie JDBC, ktorá odstraňuje potrebu kódovania JDBC pre konkrétne databázy dodávateľov
  • Integrácia ORM - poskytuje integračné vrstvy pre populárne rozhrania API pre objektovo-relačné mapovanie, ako sú JPA, JDO a Hibernate
  • Web - webovo orientovaný integračný modul poskytujúci viacdielne nahrávanie súborov, poslucháčov servletov a webové kontextové funkcie aplikácií
  • Rámec MVC - webový modul implementujúci návrhový vzor radiča Model View
  • Modul AOP - aspektovo orientovaná implementácia programovania umožňujúca definíciu čistých zachytávačov metód a bodových rezov

Q4. Čo je injekcia závislostí?

Dependency Injection, aspekt Inversion of Control (IoC), je všeobecný koncept, ktorý hovorí, že svoje objekty nevytvárate ručne, ale popisujete, ako by sa mali vytvárať. Kontajner IoC v prípade potreby vytvorí inštanciu požadovaných tried.

Ďalšie informácie nájdete tu.

Q5. Ako si môžeme injekčne podať fazuľu na jar?

Existuje niekoľko rôznych možností:

  • Nastavovač vstrekovania
  • Constructor Injection
  • Vstrekovanie do terénu

Konfiguráciu je možné vykonať pomocou súborov XML alebo anotácií.

Viac podrobností nájdete v tomto článku.

Q6. Aký je najlepší spôsob vpichovania fazule a prečo?

Odporúčaným prístupom je použitie argumentov konštruktora pre povinné závislosti a nastavovačov pre voliteľné. Vkladanie konštruktora umožňuje vkladanie hodnôt do nemenných polí a uľahčuje testovanie.

Q7. Aký je rozdiel medzi Beanfactory a Applicationcontext?

BeanFactory je rozhranie predstavujúce kontajner, ktorý poskytuje a spravuje inštancie fazule. Predvolená implementácia inštancuje fazuľu lenivo, keď getBean () sa volá.

ApplicationContext je rozhranie predstavujúce kontajner obsahujúci všetky informácie, metadáta a fazuľa v aplikácii. Rozširuje tiež BeanFactory rozhranie, ale predvolená implementácia okamžite vytvorí fazuľu pri spustení aplikácie. Toto správanie môže byť prepísané pre jednotlivé fazule.

Všetky rozdiely nájdete v referenčnej dokumentácii.

Q8. Čo je jarná fazuľa?

Spring Beans sú objekty Java, ktoré sú inicializované kontajnerom Spring IoC.

Q9. Aký je predvolený rozsah fazule v jarnom rámci?

V predvolenom nastavení je jarná fazuľa inicializovaná ako singleton.

Q10. Ako definovať rozsah pôsobnosti fazule?

Na nastavenie rozsahu Spring Bean môžeme použiť @Rozsah anotácia alebo atribút „scope“ v konfiguračných súboroch XML. Existuje päť podporovaných rozsahov:

  • singleton
  • prototyp
  • žiadosť
  • zasadanie
  • globálna relácia

Rozdiely nájdete tu.

Q11. Sú fazule Singleton bezpečné pre vlákna?

Nie, singletonové fazule nie sú bezpečné pre vlákna, pretože bezpečnosť vlákna je o prevedení, zatiaľ čo singleton je návrhový vzor zameraný na tvorbu. Bezpečnosť vlákna závisí iba od samotnej implementácie fazule.

Q12. Ako vyzerá životný cyklus jarných bôbov?

Najprv je potrebné vytvoriť inštanciu jarnej fazule na základe definície fazule Java alebo XML. Môže byť tiež potrebné vykonať určitú inicializáciu, aby ste ju dostali do použiteľného stavu. Potom, keď už fazuľa nebude potrebná, bude vybratá z kontajnera IoC.

Celý cyklus so všetkými metódami inicializácie je zobrazený na obrázku (zdroj):

Q13. Čo je jarná konfigurácia založená na prostredí Java?

Je to jeden zo spôsobov, ako konfigurovať jarné aplikácie typovo bezpečným spôsobom. Je to alternatíva ku konfigurácii založenej na XML.

Ak chcete tiež migrovať svoj projekt z konfigurácie XML do Java, prečítajte si tento článok.

Q14. Môžeme mať v jednom projekte viac súborov s konfiguráciou pružiny?

Áno, vo veľkých projektoch sa odporúča mať viac konfigurácií pružiny, aby sa zvýšila udržiavateľnosť a modularita.

Môžete načítať viac konfiguračných súborov založených na prostredí Java:

@Configuration @Import ({MainConfig.class, SchedulerConfig.class}) verejná trieda AppConfig {

Alebo načítajte jeden súbor XML, ktorý bude obsahovať všetky ostatné konfigurácie:

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

A v tomto súbore XML budete mať:

Q15. Čo je jarná bezpečnosť?

Spring Security je samostatný modul jarného rámca, ktorý sa zameriava na poskytovanie metód autentifikácie a autorizácie v Java aplikáciách. Taktiež sa stará o väčšinu bežných bezpečnostných zraniteľností, ako sú útoky CSRF.

Ak chcete používať Spring Security vo webových aplikáciách, môžete začať jednoduchou anotáciou: @EnableWebSecurity.

Celú sériu článkov týkajúcich sa bezpečnosti nájdete na Baeldungu.

Q16. Čo je jarná topánka?

Spring Boot je projekt, ktorý poskytuje predkonfigurovanú sadu rámcov na zníženie konfigurácie štandardných platní, aby ste mohli mať jarnú aplikáciu spustenú s najmenším množstvom kódu.

Q17. Pomenujte niektoré z návrhových vzorov použitých v jarnom rámci?

  • Singleton vzor: Fazuľa s jedným olomom
  • Továrenský vzor: Triedy Bean Factory
  • Prototypový vzor: Fazuľa s rozsahom prototypov
  • Vzor adaptéra: Jarný web a jarné MVC
  • Proxy vzor: Podpora programovania orientovaného na jar
  • Vzor metódy šablóny:JdbcTemplate, HibernateTemplate, atď.
  • Predný ovládač: Jarné MVC DispatcherServlet
  • Objekt prístupu k údajom: Jarná podpora DAO
  • Ovládač zobrazenia modelu: Jarné MVC

Q18. Ako funguje prototyp rozsahu?

Rozsah prototyp Znamená to, že zakaždým, keď zavoláte na inštanciu Bean, Spring vytvorí novú inštanciu a vráti ju. To sa líši od predvoleného nastavenia singleton rozsah, kde je inštancia jedného objektu inštancovaná jedenkrát na kontajner Spring IoC.

3. Jarný web MVC

Q19. Ako získať ServletContext a ServletConfig Objekty v jarnej fazuli?

Môžete to urobiť buď:

  1. Implementácia rozhraní podporujúcich jar. Celý zoznam je k dispozícii tu.
  2. Použitím @Autowired anotácia k týmto fazuľkám:
@Autowired ServletContext servletContext; @Autowired ServletConfig servletConfig;

Q20. Čo je kontrolór na jar MVC?

Jednoducho povedané, všetky žiadosti spracované DispatcherServlet sú smerované do tried s poznámkami @ Kontrolór. Každá trieda radiča mapuje jednu alebo viac požiadaviek na metódy, ktoré ich spracujú a vykonajú s poskytnutými vstupmi.

Ak potrebujete urobiť krok späť, odporúčame vám pozrieť sa na koncept Front Controller v typickej architektúre Spring MVC.

Q21. Ako funguje anotácia @Requestmapping?

The @RequestMapping anotácia sa používa na mapovanie webových požiadaviek na metódy Spring Controller. Okrem jednoduchých prípadov použitia ho môžeme použiť aj na mapovanie HTTP hlavičiek, väzieb častí URI pomocou @PathVariable, a práca s parametrami URI a @RequestParam anotácia.

Viac podrobností na @RequestMapping sú k dispozícii tu.

Ak sa chcete dozvedieť viac otázok o jarných MVC, prečítajte si článok Otázky týkajúce sa rozhovorov o jarných MVC.

4. Jarný prístup k údajom

Q22. Čo je jarná trieda Jdbctemplate a ako ju používať?

Šablóna Spring JDBC je primárne API, prostredníctvom ktorého môžeme pristupovať k logike databázových operácií, ktorá nás zaujíma:

  • vytváranie a uzatváranie spojení
  • vykonávanie príkazov a volaní uložených procedúr
  • iterácia nad Sada výsledkov a návratnosť výsledkov

Aby sme ho mohli používať, budeme musieť definovať jednoduchú konfiguráciu Dátový zdroj:

@Configuration @ComponentScan ("org.baeldung.jdbc") verejná trieda SpringJdbcConfig {@Bean public DataSource mysqlDataSource () {DriverManagerDataSource dataSource = nový DriverManagerDataSource (); dataSource.setDriverClassName ("com.mysql.jdbc.Driver"); dataSource.setUrl ("jdbc: mysql: // localhost: 3306 / springjdbc"); dataSource.setUsername ("guest_user"); dataSource.setPassword ("heslo_ hosťa"); vrátiť dátový zdroj; }}

Pre ďalšie vysvetlenie si môžete prečítať tento rýchly článok.

Q23. Ako by ste povolili transakcie na jar a aké sú ich výhody?

Existujú dva odlišné spôsoby konfigurácie Transakcie - s anotáciami alebo pomocou Aspect Oriented Programming (AOP) - z ktorých každý má svoje výhody.

Výhody používania jarných transakcií podľa oficiálnych dokumentov sú:

  • Poskytnite konzistentný programovací model naprieč rôznymi transakčnými API, ako sú JTA, JDBC, Hibernate, JPA a JDO
  • Podpora deklaratívnej správy transakcií
  • Poskytujú jednoduchšie programové rozhranie na správu transakcií ako niektoré zložité transakčné rozhrania API, napríklad JTA
  • Veľmi dobre sa integrujte s rôznymi abstrakciami prístupu k dátam spoločnosti Spring

Q24. Čo je Spring Dao?

Spring Data Access Object je podpora spoločnosti Spring poskytovaná konzistentným a jednoduchým spôsobom na prácu s technológiami prístupu k dátam, ako sú JDBC, Hibernate a JPA.

Môžete sa samozrejme podrobnejšie venovať vytrvalosti, pričom celá séria bude o vytrvalosti diskutovať na jar.

5. Programovanie orientované na jar (AOP)

Q25. Čo je programovanie zamerané na určitý aspekt?

Aspekty umožňujú modularizáciu prierezových problémov, ako je správa transakcií, ktoré zahŕňajú viac typov a objektov, pridaním ďalšieho správania k už existujúcemu kódu bez úpravy dotknutých tried.

Tu je príklad protokolovania času vykonávania podľa aspektov.

Q26. Čo sú aspekty, rady, pointcut a joinpoint v Aop?

  • Aspekt: trieda, ktorá implementuje prierezové problémy, napríklad správu transakcií
  • Rada: metódy, ktoré sa vykonajú, keď je konkrétny JoinPoint s párovaním Pointcut je dosiahnuté v aplikácii
  • Pointcut: množina regulárnych výrazov, ktoré sú zhodné s JoinPoint určiť, či Rada je potrebné vykonať alebo nie
  • JoinPoint: bod počas vykonávania programu, napríklad vykonanie metódy alebo spracovanie výnimky

Q27. Čo je tkanie?

Podľa oficiálnych dokumentov tkanie je proces, ktorý prepája aspekty s inými typmi aplikácií alebo objektmi a vytvára tak odporúčaný objekt. To je možné vykonať v čase kompilácie, načítania alebo za behu programu. Jarný AOP, podobne ako iné čisté rámce Java AOP, funguje tkanie za behu.

6. Jar 5

Q28. Čo je reaktívne programovanie?

Reaktívne programovanie je o neblokujúcich aplikáciách riadených udalosťami, ktoré sa zväčšujú s malým počtom vlákien, pričom protitlak je kľúčovou ingredienciou, ktorej cieľom je zabezpečiť, aby producenti nezahltili spotrebiteľov.

Hlavné výhody reaktívneho programovania sú:

  • zvýšené využitie výpočtových prostriedkov na viacjadrovom a viacprocesorovom hardvéri
  • a zvýšený výkon znížením serializácie

Reaktívne programovanie je všeobecne riadené udalosťami, na rozdiel od reaktívnych systémov, ktoré sú riadené správami. Používanie reaktívneho programovania teda neznamená, že budujeme reaktívny systém, čo je architektonický štýl.

Reaktívne programovanie sa však môže použiť ako prostriedok na implementáciu reaktívnych systémov, ak sa budeme riadiť Reaktívnym manifestom, ktorému je veľmi dôležité porozumieť.

Na základe toho majú reaktívne systémy štyri dôležité vlastnosti:

  • Reagovať: systém by mal reagovať včas
  • Odolný: v prípade, že systém čelí akejkoľvek poruche, mal by zostať citlivý
  • Elastické: reaktívne systémy môžu reagovať na zmeny a zostať reagovať pri rôznom pracovnom zaťažení
  • Riadené správami: reaktívne systémy musia stanoviť hranicu medzi komponentmi spoliehaním sa na asynchrónne odovzdávanie správ

Q29. Čo je jarný Webflux?

Spring WebFlux je jarný webový rámec reaktívneho zásobníka a je alternatívou k Spring MVC.

Celý stack je neblokujúci, aby sa dosiahol tento reaktívny model a aby bol vysoko škálovateľný. Ak sa chcete dozvedieť viac, pozrite si náš návod na jar 5 pre WebFlux.

Q30. Čo sú typy Mono a Flux?

Rámec WebFlux v Spring Framework 5 používa Reactor ako svoj asynchrónny základ.

Tento projekt poskytuje dva základné typy: Mono predstavuje jednu asynchronnú hodnotu a Flux reprezentovať prúd asynchronných hodnôt. Obaja implementujú Vydavateľ rozhranie definované v špecifikácii reaktívnych prúdov.

Mono náradie Vydavateľ a vráti 0 alebo 1 prvkov:

verejná abstraktná trieda Mono implementuje Publisher {...}

Tiež, Flux náradie Vydavateľ a vráti sa N prvky:

verejná abstraktná trieda Flux implementuje Publisher {...}

Podľa definície tieto dva typy predstavujú prúdy, a preto sú obe lenivé, čo znamená, že sa nič nevykoná, kým prúd nespotrebujeme pomocou prihlásiť sa na odber () metóda. Oba typy sú nemenné, preto volanie ľubovoľnej metódy vráti novú inštanciu Flux alebo Mono.

Q31. Aké je použitie serverov Webclient a Webtestclient?

Webový klient je komponent v novom rámci Web Reactive, ktorý môže pôsobiť ako reaktívny klient na vykonávanie neblokujúcich požiadaviek HTTP. Ako reaktívny klient dokáže spracovať reaktívne prúdy s protitlakom a dokáže naplno využiť výhody Java 8 lambdas. Môže tiež spracovávať scenáre synchronizácie aj asynchrónnosti.

Na druhej strane WebTestClient je podobná trieda, ktorú môžeme použiť v testoch. V podstate je to tenká škrupina okolo Webový klient. Môže sa pripojiť k ľubovoľnému serveru cez pripojenie HTTP. Môže sa tiež viazať priamo na aplikácie WebFlux pomocou falošných objektov požiadaviek a odpovedí bez potreby servera HTTP.

Q32. Aké sú nevýhody použitia reaktívnych prúdov?

Hlavné nevýhody použitia reaktívnych prúdov sú:

  • Riešenie problémov s reaktívnou aplikáciou je trochu ťažké; nezabudnite si prečítať náš návod na ladenie reaktívnych streamov, ktorý obsahuje niekoľko užitočných tipov na ladenie
  • Pre reaktívne úložiská dát je obmedzená podpora, pretože tradičné úložiská relačných údajov ešte musia prijať reaktívnu paradigmu
  • Pri implementácii existuje ďalšia krivka učenia

Q33. Je jar 5 kompatibilná so staršími verziami Java?

Aby bolo možné využiť výhody funkcií Java 8, bola vylepšená jarná kódová základňa. To znamená, že nemožno používať staršie verzie Javy. Rámec preto vyžaduje minimálne Java 8.

Q34. Ako sa integruje jar 5 s modularitou Jdk 9?

Na jar 5 bolo všetko modulované, takže nebudeme nútení dovážať nádoby, ktoré nemusia mať funkcie, ktoré hľadáme.

Prečítajte si nášho sprievodcu modularitou Java 9, kde získate dôkladné pochopenie toho, ako táto technológia funguje.

Pozrime sa na príklad, aby sme pochopili nové funkcionality modulu v prostredí Java 9 a ako zorganizovať projekt Spring 5 založený na tomto koncepte.

Na začiatok vytvorme novú triedu, ktorá obsahuje jednu metódu na vrátenie a String „HelloWorld“. Umiestnime to do nového projektu Java - HelloWorldModule:

balíček com.hello; verejná trieda HelloWorld {public String sayHello () {návrat "HelloWorld"; }}

Potom vytvorme nový modul:

modul com.hello {export com.hello; }

Poďme teraz vytvoriť nový projekt Java, HelloWorldClient, spotrebovať vyššie uvedený modul definovaním modulu:

modul com.hello.client {vyžaduje com.hello; }

Vyššie uvedený modul bude teraz k dispozícii na testovanie:

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

Q35. Môžeme použiť Web Mvc aj Webflux v tej istej aplikácii?

Spring Boot odteraz umožní iba Spring MVC alebo Spring WebFlux, pretože Spring Boot sa pokúša automaticky nakonfigurovať kontext v závislosti od závislostí, ktoré existujú v jeho triednej ceste.

Spring MVC tiež nemôže bežať na Netty. MVC je navyše paradigmou blokovania a WebFlux neblokujúcim štýlom, preto by sme nemali miešať obidve dohromady, pretože slúžia na rôzne účely.

7. Záver

V tomto rozsiahlom článku sme sa venovali niektorým z najdôležitejších otázok pre technický pohovor o Spring.

Dúfame, že vám tento článok pomôže v nadchádzajúcom jarnom rozhovore. Veľa štastia!

« Predchádzajúce anotácie Java Dotazy k rozhovoru (+ odpovede)

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