60 otázek pro Java a jarní rozhovory, které musíte znát


Dobrý Java a Spring vývojář je pryč. Podle Indeed je v současné době v USA 29 694 volných pracovních míst pro vývojáře v jazyce Java a 16 085 pro softwarové inženýry .Net. Sledujte nás a přečtěte si o nejnovějších hlavních otázkách Java a jarních rozhovorů.

Q1:Jaký je rozdíl mezi JDK a JRE?

Java Runtime Environment (JRE) je v podstatě Java Virtual Machine (JVM), kde jsou spouštěny vaše Java programy. Zahrnuje také pluginy prohlížeče pro spouštění appletů. Java Development Kit (JDK) je plně vybavený Software Development Kit pro Javu, včetně JRE, kompilátorů a nástrojů (jako JavaDoc a Java Debugger), aby uživatel mohl vyvíjet, kompilovat a spouštět Java aplikace.

🔗 Zdroj: github.com/snowdream

Otázka 2:Jaký je rozdíl mezi appletem a aplikací Java?

Applety se spouštějí v prohlížeči s podporou jazyka Java, ale aplikace Java je samostatný program Java, který lze spustit mimo prohlížeč. Oba však vyžadují existenci Java Virtual Machine (JVM). Kromě toho Java aplikace vyžaduje hlavní metodu se specifickým podpisem, aby mohla být spuštěna. Java applety nepotřebují takovou metodu ke spuštění jejich provádění. A konečně, Java applety obvykle používají restriktivní bezpečnostní politiku, zatímco Java aplikace obvykle používají uvolněnější bezpečnostní politiky.

🔗 Zdroj: github.com/snowdream

Otázka 3:Co je to stránka JSP?

Java Server Page (JSP) je textový dokument, který obsahuje dva typy textu:statická data a prvky JSP. Statická data mohou být vyjádřena v jakémkoli textovém formátu, jako je HTML nebo XML. JSP je technologie, která kombinuje statický obsah s dynamicky generovaným obsahem.

🔗 Zdroj: github.com/snowdream

Q4:Co je to servlet?

Servlet je třída programovacího jazyka Java používaná ke zpracování požadavků klientů a generování dynamického webového obsahu. Servlety se většinou používají ke zpracování nebo ukládání dat odeslaných formulářem HTML, poskytování dynamického obsahu a správě informací o stavu, které v bezstavovém protokolu HTTP neexistují.

🔗 Zdroj: github.com/snowdream

Otázka 5:Co je předání odkazem a předání hodnotou?

Když je objekt předán hodnotou, znamená to, že je předána kopie objektu. Tedy, i když jsou na tomto objektu provedeny změny, neovlivní to původní hodnotu. Když je objekt předán odkazem, znamená to, že není předán skutečný objekt, ale je předán odkaz na objekt. Veškeré změny provedené externí metodou se tedy také projeví na všech místech.

🔗 Zdroj: github.com/snowdream

Otázka 6:Jaká jsou základní rozhraní Java Collections Framework?

Java Collections Framework poskytuje dobře navrženou sadu rozhraní a tříd, které podporují operace s kolekcemi objektů. Nejzákladnější rozhraní, která se nacházejí v Java Collections Framework, jsou:

  • Kolekce, která představuje skupinu objektů známých jako její prvky.
  • Sada, což je kolekce, která nemůže obsahovat duplicitní prvky.
  • Seznam, což je uspořádaná kolekce a může obsahovat duplicitní prvky.
  • Mapa, což je objekt, který mapuje klíče na hodnoty a nemůže obsahovat duplicitní klíče.

🔗 Zdroj: github.com/snowdream

Otázka 7:Jaké rozdíly existují mezi HashMap a Hashtable?

Třídy HashMap i Hashtable implementují rozhraní Map, a proto mají velmi podobné vlastnosti. Liší se však v následujících vlastnostech:

  • HashMap umožňuje existenci nulových klíčů a hodnot, zatímco hashtable nepovoluje ani nulové klíče, ani hodnoty null.
  • Hashtable je synchronizována, zatímco HashMap ne. HashMap je tedy preferován v prostředí s jedním vláknem, zatímco Hashtable je vhodný pro prostředí s více vlákny.
  • HashMap poskytuje svou sadu klíčů a aplikace Java je může iterovat. HashMap je tedy rychlá. Na druhou stranu hashtable poskytuje výčet svých klíčů.
  • Třída Hashtable je považována za starší třídu.

🔗 Zdroj: github.com/snowdream

Otázka 8:Co dělají metody System.gc() a Runtime.gc()?

Tyto metody lze použít jako nápovědu pro JVM, aby se spustil úklid. Je však na Java Virtual Machine (JVM), aby shromažďování odpadků spustil okamžitě nebo později.

🔗 Zdroj: github.com/snowdream

Otázka 9:Jaký je rozdíl mezi výjimkou a chybou v jazyce Java?

Třídy Exception a Error jsou obě podtřídy třídy Throwable. Třída Exception se používá pro výjimečné stavy, které by měl uživatelský program zachytit. Třída Error definuje výjimky, které nejsou vyjmuty, aby byly zachyceny uživatelským programem.

🔗 Zdroj: github.com/snowdream

Otázka 10:Co je to Java Applet?

Java Applet je program, který lze zahrnout do stránky HTML a spustit v klientském prohlížeči s podporou jazyka Java. Applety se používají k vytváření dynamických a interaktivních webových aplikací.

🔗 Zdroj: github.com/snowdream

Otázka 11:Co je JDBC?

JDBC je abstraktní vrstva, která uživatelům umožňuje vybrat si mezi databázemi. JDBC umožňuje vývojářům psát databázové aplikace v Javě, aniž by se museli zabývat základními detaily konkrétní databáze.

🔗 Zdroj: github.com/snowdream

Otázka 12:Jak jsou zpracovávány požadavky JSP?

Při příchodu požadavku JSP si prohlížeč nejprve vyžádá stránku s příponou .jsp. Poté webový server přečte požadavek a pomocí kompilátoru JSP webový server převede stránku JSP na třídu servletu. Všimněte si, že soubor JSP je zkompilován pouze při prvním požadavku stránky, nebo pokud se soubor JSP změnil. Vygenerovaná třída servletu je vyvolána, aby bylo možné zpracovat požadavek prohlížeče. Jakmile je vykonání požadavku ukončeno, servlet odešle odpověď zpět klientovi. Podívejte se, jak získat parametry požadavku v JSP.

🔗 Zdroj: github.com/snowdream

Q13:Co jsou prohlášení?

Deklarace jsou podobné deklaracím proměnných v Javě. Deklarace se používají k deklaraci proměnných pro následné použití ve výrazech nebo skriptech. Chcete-li přidat deklaraci, musíte použít sekvence k uzavření deklarací.

🔗 Zdroj: github.com/snowdream

Q14:Jaké jsou výhody používání Spring?

Následuje seznam několika velkých výhod používání Spring Framework:

  • Nízká − Pružina je lehká, pokud jde o velikost a průhlednost. Základní verze jarního rámce má velikost kolem 2 MB.
  • Inversion of control (IOC) − Volné spojení je dosaženo na jaře pomocí techniky Inversion of Control. Objekty dávají své závislosti namísto vytváření nebo hledání závislých objektů.
  • Aspect Oriented (AOP) − Spring podporuje programování orientované na aspekty a umožňuje soudržný vývoj oddělením aplikační obchodní logiky od systémových služeb.
  • Kontejner − Spring obsahuje a spravuje životní cyklus a konfiguraci aplikačních objektů.
  • MVC Framework − Webový rámec Spring je dobře navržený webový rámec MVC, který poskytuje skvělou alternativu k webovým rámcům, jako jsou Struts nebo jiné překonstruované nebo méně oblíbené webové rámce.
  • Správa transakcí − Spring poskytuje konzistentní rozhraní pro správu transakcí, které lze škálovat na lokální transakci (například pomocí jediné databáze) a škálovat na globální transakce (například pomocí JTA).
  • Zpracování výjimek − Spring poskytuje pohodlné rozhraní API pro převod technologicky specifických výjimek (vyvolaných například JDBC, Hibernate nebo JDO) do konzistentních, nekontrolovaných výjimek.

🔗 Zdroj: tutorialspoint.com

Q15:Co jsou jarní fazole?

Objekty, které tvoří páteř vaší aplikace a které jsou spravovány kontejnerem Spring IoC, se nazývají beans . Bean je objekt, který je vytvořen, sestavován a jinak spravován kontejnerem Spring IoC. Tyto beany jsou vytvořeny pomocí konfiguračních metadat, která do kontejneru dodáte, například ve formě XML <bean/> definice.

🔗 Zdroj: tutorialspoint.com

Otázka 16:Jaké jsou podpory pružin ORM?

Spring podporuje následující ORM:

  • Hibernace
  • iBatis
  • JPA (Java Persistence API)
  • TopLink
  • JDO (Java Data Objects)
  • OJB

🔗 Zdroj: tutorialspoint.com

Otázka 17:Co je Spring Security?

Jarní zabezpečení je samostatný modul frameworku Spring, který se zaměřuje na poskytování autentizačních a autorizačních metod v Java aplikacích. Postará se také o většinu běžných bezpečnostních zranitelností, jako jsou útoky CSRF.

Chcete-li používat Spring Security ve webových aplikacích, můžete začít s jednoduchou anotací:@EnableWebSecurity .

🔗 Zdroj: developersbook.com

Otázka 18:Co je kruhová fronta a proč ji budete používat?

Kruhová fronta je lineární datová struktura ve kterém jsou operace prováděny na principu FIFO (First In First Out) a poslední pozice je spojena zpět s první pozicí, aby se vytvořil kruh. Také se nazývá Ring Buffer . Kruhová fronta zabraňuje plýtvání místem v běžné implementaci fronty pomocí polí.

🔗 Zdroj: programiz.com

Otázka 19:Co znamená „program do rozhraní, nikoli implementace“?

Kódování proti rozhraní znamená, že klientský kód vždy obsahuje objekt rozhraní, který dodává továrna .

Jakákoli instance vrácená továrnou by byla typu Interface, který musí implementovat každá třída kandidáta na továrnu. Tímto způsobem se klientský program nemusí starat o implementaci a podpis rozhraní určuje, jaké operace lze provést.

Tento přístup lze použít ke změně chování programu za běhu. Pomáhá vám také psát mnohem lepší programy z hlediska údržby.

🔗 Zdroj: tutorialspoint.com

Otázka 20:Co je vzor pozorovatele?

Vzor pozorovatele (známé také jako Vzor publikování a odběru ) se používá, když mezi objekty existuje vztah jedna k mnoha, například když je jeden objekt změněn, jeho závislé objekty mají být automaticky upozorněny. Vzor pozorovatele spadá pod behaviorální kategorie vzoru.

Objekt se vztahem jedna k mnoha s jinými objekty, které se zajímají o jeho stav, se nazývá předmět. nebo vydavatel . Pozorovatelé jsou informováni vždy, když je stav předmětu mění a může podle toho jednat. Předmět může mít libovolný počet závislých pozorovatelů které oznámí, a libovolný počet pozorovatelů se může přihlásit k odběru předmětu přijímat taková oznámení.

Vzor pozorovatel používá dvě třídy aktérů:

  • Abstraktní třída Observer (os Subscriber) poskytuje update() metoda, kterou subjekt zavolá, aby mu oznámil změnu stavu subjektu.
  • Třída Subject (nebo Publisher) je také abstraktní třída a definuje čtyři primární metody:attach() , detach() , setState() a notify()

🔗 Zdroj: sitepoint.com

Q21:Máte přístup k nestatické proměnné ve statickém kontextu?

Statická proměnná v Javě patří do její třídy a její hodnota zůstává stejná pro všechny její instance. Statická proměnná je inicializována, když je třída načtena JVM. Pokud se váš kód pokusí získat přístup k nestatické proměnné bez jakékoli instance, kompilátor si bude stěžovat, protože tyto proměnné ještě nejsou vytvořeny a nejsou přidruženy k žádné instanci.

🔗 Zdroj: github.com/snowdream

Otázka 22:Podporuje Java vícenásobnou dědičnost?

Ne, Java nepodporuje vícenásobnou dědičnost. Každá třída se může rozšířit pouze na jednu třídu, ale je schopna implementovat více než jedno rozhraní.

🔗 Zdroj: github.com/snowdream

Q23:Vysvětlete různé způsoby vytváření vlákna. Kterému byste dali přednost a proč?

Existují tři způsoby, které lze použít k vytvoření vlákna:

  • Třída může rozšířit třídu Thread.
  • Třída může implementovat rozhraní Runnable.
  • Aplikace může používat rámec Executor k vytvoření fondu vláken.

Upřednostňuje se rozhraní Runnable, protože nevyžaduje, aby objekt zdědil třídu Thread. V případě, že návrh vaší aplikace vyžaduje vícenásobnou dědičnost, mohou vám pomoci pouze rozhraní. Také fond vláken je velmi efektivní a lze jej implementovat a používat velmi snadno.

🔗 Zdroj: github.com/snowdream

Otázka 24:Co je to uváznutí?

Stav, který nastane, když dva procesy před pokračováním čekají na dokončení. Výsledkem je, že oba procesy čekají donekonečna.

🔗 Zdroj: github.com/snowdream

Otázka 25:Jaký je rozdíl mezi rychlým a bezpečným při selhání?

Vlastnost Iterator's fail-safe pracuje s klonem podkladové kolekce, a proto není ovlivněna žádnou úpravou v kolekci. Všechny třídy kolekce v balíčku java.util jsou rychlé při selhání, zatímco třídy kolekce v souboru java.util.concurrent jsou bezpečné při selhání. Iterátory rychlé při selhání generují výjimku ConcurrentModificationException, zatímco iterátor zabezpečený proti selhání takovou výjimku nikdy nevyvolá.

🔗 Zdroj: github.com/snowdream

Otázka 26:Co je prioritní fronta Java?

PriorityQueue je neomezená fronta založená na prioritní hromadě a její prvky jsou seřazeny v přirozeném pořadí. V době jeho vytvoření můžeme poskytnout komparátor, který je zodpovědný za objednávání prvků PriorityQueue. PriorityQueue nepovoluje hodnoty null, objekty, které neposkytují přirozené řazení, ani objekty, které nemají přidružený žádný komparátor. A konečně, Java PriorityQueue není bezpečná pro vlákna a vyžaduje O(log(n)) čas pro operace enqueování a dequeování.

🔗 Zdroj: github.com/snowdream

Q27:Kdy se volá finalize()? Jaký je účel finalizace?

Metodu finalizace volá garbage collector těsně před uvolněním paměti objektu. Obvykle se doporučuje uvolnit prostředky držené objektem uvnitř metody finalizace.

🔗 Zdroj: github.com/snowdream

Otázka 28:Jaká je struktura Java Heap?

JVM má haldu, což je oblast runtime dat, ze které je alokována paměť pro všechny instance třídy a pole. Vzniká při startu JVM. Paměť haldy pro objekty je získávána pomocí automatického systému správy paměti, který je známý jako garbage collector. Paměť haldy se skládá ze živých a mrtvých předmětů. Živé objekty jsou přístupné aplikací a nebudou předmětem sběru odpadu. Mrtvé objekty jsou ty, které aplikace nikdy nezpřístupní, ale dosud nebyly shromážděny sběračem odpadu. Takové objekty zabírají místo v paměti haldy, dokud je nakonec neshromáždí garbage collector.

🔗 Zdroj: github.com/snowdream

Otázka 29:Jaká omezení platí pro aplety Java?

Většinou z bezpečnostních důvodů platí pro aplety Java následující omezení:

  • Aplet nemůže načíst knihovny ani definovat nativní metody.
  • Aplet nemůže běžně číst nebo zapisovat soubory na hostitelském počítači.
  • Aplet nemůže číst určité vlastnosti systému.
  • Aplet nemůže vytvářet síťová připojení kromě hostitele, ze kterého pochází.
  • Aplet nemůže spustit žádný program na hostiteli, který jej spouští.

🔗 Zdroj: github.com/snowdream

Otázka 30:Co jsou skriptlety?

V technologii Java Server Pages (JSP) je skriptlet část kódu Java vložená do stránky JSP. Skriptlet je vše uvnitř značek. Mezi tyto značky může uživatel přidat jakýkoli platný skript.

🔗 Zdroj: github.com/snowdream

Otázka 31:Uveďte vlastnosti rozhraní.

Rozhraní je šablona, ​​která obsahuje pouze podpis metod. Signatura metody se skládá z počtu parametrů, typu parametru (hodnota, reference nebo výstup) a pořadí parametrů. Rozhraní samo o sobě nemá žádnou implementaci, protože obsahuje pouze definici metod bez těla metody. Rozhraní je definováno pomocí rozhraní klíčové slovo. Navíc nemůžete vytvořit instanci rozhraní. Různé funkce rozhraní jsou následující:

  • Pro implementaci vícenásobné dědičnosti v kódu se používá rozhraní. Tato funkce rozhraní je zcela odlišná od vlastností abstraktních tříd, protože třída nemůže odvodit vlastnosti více než jedné třídy, ale může snadno implementovat více rozhraní.
  • Definuje konkrétní sadu metod a jejich argumentů.
  • Proměnné v rozhraní musí být deklarovány jako veřejné , statický a konečná zatímco metody musí být veřejné a abstraktní .
  • Třída implementující rozhraní musí implementovat všechny své metody.
  • Rozhraní může být odvozeno z více než jednoho rozhraní.

🔗 Zdroj: indiabix.com

Q32:Co znamená SOLID? Jaké jsou jeho principy?

S.O.L.I.D je zkratka pro prvních pět principů objektově orientovaného designu (OOD) od Roberta C. Martina.

  • S - Zásada jediné odpovědnosti . Třída by měla mít jeden jediný důvod ke změně, což znamená, že třída by měla mít pouze jednu práci.
  • O - Princip otevřená-uzavřená . Objekty nebo entity by měly být otevřené pro rozšíření, ale uzavřené pro úpravy.
  • L - Liskovský princip substituce . Nechť q(x) je vlastnost prokazatelná pro objekty x typu T. Pak by q(y) měla být prokazatelná pro objekty y typu S, kde S je podtyp T.
  • - Princip segregace rozhraní . Klient by nikdy neměl být nucen implementovat rozhraní, které nepoužívá, nebo by klienti neměli být nuceni záviset na metodách, které nepoužívají.
  • D - Princip inverze závislosti . Entity musí záviset na abstrakcích, nikoli na konkrecích. Uvádí, že modul vysoké úrovně nesmí záviset na modulu nízké úrovně, ale měly by záviset na abstrakcích.

🔗 Zdroj: scotch.io

Q33:Jaké jsou principy DRY a DIE?

V softwarovém inženýrství Neopakujte se (DRY) nebo Duplikace je zlo (DIE) je principem vývoje softwaru.

🔗 Zdroj: stackoverflow.com

Otázka 34:Je lepší vracet hodnoty NULL nebo prázdné hodnoty z funkcí/metod, kde návratová hodnota není přítomna?

Vrací null je obvykle nejlepší nápad, pokud chcete uvést, že nejsou k dispozici žádná data.

Prázdný objekt znamená, že data byla vrácena, zatímco vrací null jasně ukazuje, že nic nebylo vráceno.

Navíc vrací null bude mít za následek nulovou výjimku, pokud se pokusíte o přístup k členům v objektu, což může být užitečné pro zvýraznění chybového kódu - pokus o přístup k členu ničeho nedává smysl. Přístup k členům prázdného objektu nezklame, což znamená, že chyby mohou zůstat neodhaleny.

🔗 Zdroj: stackoverflow.com

Otázka 35:Vysvětlete životní cyklus Bean v rámci Spring

Následuje sekvence životního cyklu fazolí na jaře:

  • Okamžité − Jarní kontejner nejprve najde definici fazole ze souboru XML a vytvoří instanci fazole..
  • Vyplňte vlastnosti − Pomocí vkládání závislosti pružina naplní všechny vlastnosti, jak je specifikováno v definici beanu.
  • Nastavit název fazole − Pokud bean implementuje rozhraní BeanNameAware, jaro předá id beanu metodě setBeanName().
  • Nastavit továrnu Bean − Pokud Bean implementuje rozhraní BeanFactoryAware, jaro předá beanfactory metodě setBeanFactory().
  • Před inicializací − Také nazývaný postprocess of bean. Pokud jsou k beanu přidruženy nějaké BeanPostProcessors, Spring zavolá metodu postProcesserBeforeInitialization().
  • Inicializujte fazole − Pokud bean implementuje IntializingBean, zavolá se jeho metoda afterPropertySet(). Pokud má bean deklaraci metody init, zavolá se zadaná metoda inicializace.
  • Po inicializaci − Pokud jsou k beanu přidruženy nějaké BeanPostProcessors, budou volány jejich metody postProcessAfterInitialization().
  • Připraveno k použití − Nyní je fazole připravena k použití aplikací.
  • Zničit − Pokud fazole implementuje DisposableBean , zavolá metodu zničit() .

🔗 Zdroj: tutorialspoint.com

Otázka 36:Co je Controller v rámci Spring MVC?

Ovladače poskytují přístup k chování aplikace, které obvykle definujete prostřednictvím rozhraní služby. Řadiče interpretují uživatelský vstup a transformují jej do modelu, který je pro uživatele reprezentován pohledem. Spring implementuje ovladač velmi abstraktním způsobem, což vám umožňuje vytvářet širokou škálu ovladačů.

🔗 Zdroj: tutorialspoint.com

Otázka 37:Co je poměr stran?

Aspekt je modul, který má sadu rozhraní API poskytujících průřezové požadavky. Například protokolovací modul by se pro protokolování nazýval AOP aspekt. Aplikace může mít libovolný počet aspektů v závislosti na požadavku. V Spring AOP jsou aspekty implementovány pomocí běžných tříd (přístup založený na schématu) nebo běžných tříd anotovaných anotací @Aspect (@AspectJ styl).

🔗 Zdroj: tutorialspoint.com

Otázka 38:Jaký je typický životní cyklus bobů v kontejneru Spring Bean Factory?

Životní cyklus fazolí v kontejneru Spring Bean Factory je následující:

  • Jarní kontejner najde definici beanů ze souboru XML a vytvoří instanci bean.

  • Pomocí vložení závislosti pružina naplní všechny vlastnosti, jak je uvedeno v definici beanu

  • Pokud bean implementuje rozhraní BeanNameAware, továrna zavolá setBeanName() předání ID fazolí.

  • Pokud bean implementuje rozhraní BeanFactoryAware, továrna zavolá setBeanFactory() , předá instanci sebe sama.

  • Pokud jsou s beanem spojeny nějaké BeanPostProcessors, jejich post- ProcessBeforeInitialization() budou volány metody.

  • Pokud je pro bean zadána metoda init, bude zavolána.

  • Konečně, pokud jsou nějaké BeanPostProcessors spojené s beanem, jejich postProcessAfterInitialization() budou volány metody.

🔗 Zdroj: developersbook.com

Otázka 39:Jak zacházet s výjimkami v rámci Spring MVC Framework?

Spring MVC Framework poskytuje následující způsoby, které nám pomohou dosáhnout robustního zpracování výjimek.

  1. Na základě řadiče – V našich třídách kontrolérů můžeme definovat metody obsluhy výjimek. Vše, co potřebujeme, je anotovat tyto metody anotací @ExceptionHandler.
  2. Global Exception Handler – Zpracování výjimek je průřezový problém a Spring poskytuje anotaci @ControllerAdvice, kterou můžeme použít s libovolnou třídou k definování naší globální obsluhy výjimek.
  3. Implementace HandlerExceptionResolver – Až na obecné výjimky většinou poskytujeme statické stránky. Spring Framework poskytuje HandlerExceptionResolver rozhraní, které můžeme implementovat pro vytvoření globální obsluhy výjimek. Důvodem tohoto dodatečného způsobu, jak definovat globální obslužný program výjimek, je to, že rámec Spring také poskytuje výchozí implementační třídy, které můžeme definovat v našem konfiguračním souboru spring bean, abychom získali výhody zpracování výjimek jarního rámce.

🔗 Zdroj: journaldev.com

Q40:Co je Spring IoC Container?

Inverze kontroly (IoC) je mechanismus k dosažení volné vazby mezi závislostmi objektů. Aby se dosáhlo volné vazby a dynamické vazby objektů za běhu, objekty definují své závislosti, které jsou vkládány jinými objekty assembleru. Spring IoC kontejner je program, který vkládá závislosti do objektu a připravuje jej pro naše použití.

Třídy kontejnerů Spring Framework IoC jsou součástí org.springframework.beans a org.springframework.context balíčky a poskytuje nám různé způsoby, jak oddělit závislosti objektů.

Některé z užitečných implementací ApplicationContext, které používáme, jsou;

  • AnnotationConfigApplicationContext :Pro samostatné aplikace Java používající konfiguraci založenou na anotacích.
  • ClassPathXmlApplicationContext :Pro samostatné aplikace Java používající konfiguraci založenou na XML.
  • FileSystemXmlApplicationContext :Podobné jako ClassPathXmlApplicationContext s tím rozdílem, že konfigurační soubor xml lze načíst odkudkoli v systému souborů.
  • AnnotationConfigWebApplicationContext a XmlWebApplicationContext pro webové aplikace.

🔗 Zdroj: journaldev.com

Otázka 41:Vytváří se instance DispatcherServlet prostřednictvím kontextu aplikace?

Ne, DispatcherServlet je vytvořena pomocí kontejnerů Servlet jako Tomcat nebo Jetty. Musíte definovat DispatcherServlet do souboru web.xml, jak je uvedeno níže.

Můžete vidět, že značka load-on-startup je 1, což znamená DispatcherServlet se vytvoří instance, když nasadíte aplikaci Spring MVC do Tomcatu nebo jiného kontejneru Servlet. Během vytváření instance hledá soubor servlet-name-context.xml a poté inicializuje beany definované v tomto souboru.

🔗 Zdroj: dzone.com

Otázka 42:Jaký je účel rozsahu relace?

Účel rozsahu relace je vytvořit instanci beanu pro relaci HTTP. To znamená, že stejný objekt bean může obsluhovat více požadavků, pokud je v relaci omezen. Rozsah Spring bean můžete definovat pomocí atributu scope nebo @Scope anotace v aplikaci Spring MVC.

🔗 Zdroj: dzone.com

Q43:Jaký je rozdíl mezi synchronizovanou metodou a synchronizovaným blokem?

V programování Java má každý objekt zámek. Vlákno může získat zámek pro objekt pomocí klíčového slova synchronized. Synchronizované klíčové slovo lze použít na úrovni metody (hrubý zrnitý zámek) nebo blokové úrovni kódu (jemnozrnný zámek).

🔗 Zdroj: github.com/snowdream

Otázka 44:Jak zajistíte, aby N vláken mělo přístup k N prostředkům bez uváznutí?

Velmi jednoduchým způsobem, jak se vyhnout uváznutí při používání N vláken, je uložit pořadí zámků a přinutit každé vlákno, aby toto pořadí dodržovalo. Pokud tedy všechna vlákna zamykají a odemykají mutexy ve stejném pořadí, nemůže dojít k uváznutí.

🔗 Zdroj: github.com/snowdream

Otázka 45:Co je prostor Perm Gen v Heap?

Perm Gen znamená permanentní generaci. Je to prostor na Java Heap, který obsahuje metadata popisující uživatelské třídy (třídy, které nejsou součástí jazyka Java). Příklady takových metadat jsou objekty popisující třídy a metody a jsou uloženy v Permanent Generation. Aplikace s velkou kódovou základnou mohou tento segment hromady rychle zaplnit, což způsobí java.lang.OutOfMemoryError: PermGen bez ohledu na to, jak vysoká je vaše -Xmx (maximální velikost fondu alokace paměti) a kolik paměti máte na počítači.

🔗 Zdroj: github.com/snowdream

Otázka 46:Co je RMI?

Java Remote Method Invocation (Java RMI) je rozhraní Java API, které provádí objektově orientovaný ekvivalent volání vzdálených procedur (RPC) s podporou přímého přenosu serializovaných tříd Java a distribuovaného sběru odpadků. Vzdálené vyvolání metody (RMI) lze také považovat za proces aktivace metody na vzdáleně spuštěném objektu. RMI nabízí transparentnost umístění, protože uživatel má pocit, že metoda je spuštěna na lokálně spuštěném objektu.

🔗 Zdroj: github.com/snowdream

Q47:Vysvětlete různé typy dědičnosti.

Dědičnost v OOP je čtyř typů:

  • Jednotná dědičnost - Obsahuje jednu základní třídu a jednu odvozenou třídu
  • Hierarchická dědičnost - Obsahuje jednu základní třídu a více odvozených tříd stejné základní třídy
  • Víceúrovňová dědičnost - Obsahuje třídu odvozenou od odvozené třídy
  • Vícenásobná dědičnost - Obsahuje několik základních tříd a odvozenou třídu

Všechny jazyky .NET podporují jednoduchou, hierarchickou a víceúrovňovou dědičnost. Nepodporují vícenásobnou dědičnost, protože v těchto jazycích nemůže mít odvozená třída více než jednu základní třídu. Můžete však implementovat vícenásobnou dědičnost v.NET prostřednictvím rozhraní.

🔗 Zdroj: indiabix.com

Q48:Co je třída GOD a proč bychom se jí měli vyhýbat?

Nejúčinnější způsob, jak rozbít aplikace, vytvořit BOHA třídy. To jsou třídy, které sledují spoustu informací a mají několik povinností. Jedna změna kódu s největší pravděpodobností ovlivní ostatní části třídy a tedy nepřímo všechny ostatní třídy, které ji používají. To zase vede k ještě většímu nepořádku při údržbě, protože se nikdo neodváží dělat jiné změny, než přidat nové funkce.

🔗 Zdroj: stackoverflow.com

Q49:Jaké rozsahy fazolí Spring podporuje? Vysvětlete je.

Spring Framework podporuje následujících pět rozsahů, z nichž tři jsou dostupné pouze v případě, že používáte webový ApplicationContext.

  • singleton − Tím se definice beanu vztahuje na jednu instanci na kontejner Spring IoC.
  • prototyp − This scopes a single bean definition to have any number of object instances.
  • request − This scopes a bean definition to an HTTP request. Only valid in the context of a web-aware Spring ApplicationContext.
  • session − This scopes a bean definition to an HTTP session. Only valid in the context of a web-aware Spring ApplicationContext.
  • global-session − This scopes a bean definition to a global HTTP session. Only valid in the context of a web-aware Spring ApplicationContext.

🔗 Source: tutorialspoint.com

Q50:What is Weaving?

Weaving is the process of linking aspects with other application types or objects to create an advised object.

🔗 Source: tutorialspoint.com

Q51:What is the difference between concern and cross-cutting concern in Spring AOP?

  • Concern − Concern is behavior which we want to have in a module of an application. Concern may be defined as a functionality we want to implement. Issues in which we are interested define our concerns.
  • Cross-cutting concern − It's a concern which is applicable throughout the application and it affects the entire application. např. logging , security and data transfer are the concerns which are needed in almost every module of an application, hence are cross-cutting concerns.

🔗 Source: tutorialspoint.com

Q52:What are some benefits of using Spring Transactions?

  • Provide a consistent programming model across different transaction APIs such as JTA, JDBC, Hibernate, JPA, and JDO
  • Support declarative transaction management
  • Provide a simpler API for programmatic transaction management than some complex transaction APIs such as JTA
  • Integrate very well with Spring’s various data access abstractions

🔗 Source: baeldung.com

Q53:What is Aspect-Oriented Programming?

Aspects enable the modularization of cross-cutting concerns such as transaction management that span multiple types and objects by adding extra behavior to already existing code without modifying affected classes.

🔗 Source: baeldung.com

Q54:What is Spring WebFlux?

Spring WebFlux is Spring’s reactive-stack web framework, and it’s an alternative to Spring MVC. In order to achieve this reactive model and be highly scalable, the entire stack is non-blocking.

🔗 Source: baeldung.com

Q55:Compare @Component (v2.5) versus @Bean (v 3.0)

Would it have been possible to re-use the @Component annotation instead of introducing @Bean annotation?

@Component and @Bean do two quite different things, and shouldn't be confused.

  • @Component (and @Service and @Repository ) are used to auto-detect and auto-configure beans using classpath scanning. There's an implicit one-to-one mapping between the annotated class and the bean (i.e. one bean per class). Control of wiring is quite limited with this approach, since it's purely declarative.

  • @Bean is used to explicitly declare a single bean, rather than letting Spring do it

To answer your question :
Sure, probably; but they chose not to, since the two are quite different. Spring's already confusing enough without muddying the waters further.

🔗 Source: stackoverflow.com

Q56:What's the difference between the Dependency Injection and Service Locator patterns?

  • With the ServiceLocator , the class is still responsible for creating its dependencies. It just uses the service locator to do it.
  • Service locators hide dependencies - you can't tell by looking at an object whether it hits a database or not (for example) when it obtains connections from a locator.
  • With DI , the class is given it's dependencies. It neither knows, nor cares where they come from.

One important result of this is that the DI example is much easier to unit test -- because you can pass it mock implementations of its dependent objects. You could combine the two -- and inject the service locator (or a factory), if you wanted.

🔗 Source: stackoverflow.com

Q57:What are the layers of RMI Architecture?

The RMI architecture consists of the following layers:

  • Stub and Skeleton layer:This layer lies just beneath the view of the developer. This layer is responsible for intercepting method calls made by the client to the interface and redirect these calls to a remote RMI Service.
  • Remote Reference Layer:The second layer of the RMI architecture deals with the interpretation of references made from the client to the server’s remote objects. This layer interprets and manages references made from clients to the remote service objects. The connection is a one-to-one (unicast) link.
  • Transport layer:This layer is responsible for connecting the two JVM participating in the service. This layer is based on TCP/IP connections between machines in a network. It provides basic connectivity, as well as some firewall penetration strategies.

🔗 Source: github.com/snowdream

Q58:What is the difference between association, aggregation and composition?

  • Association is a relationship where all objects have their own lifecycle and there is no owner.

Let's take an example of Teacher and Student. Multiple students can associate with single teacher and single student can associate with multiple teachers, but there is no ownership between the objects and both have their own lifecycle. Both can be created and deleted independently.

  • Aggregation is a specialised form of Association where all objects have their own lifecycle, but there is ownership and child objects can not belong to another parent object.

Let's take an example of Department and teacher. A single teacher can not belong to multiple departments, but if we delete the department, the teacher object will not be destroyed. We can think about it as a “has-a” relationship.

  • Composition is again specialised form of Aggregation and we can call this as a “death” relationship. It is a strong type of Aggregation. Child object does not have its lifecycle and if parent object is deleted, all child objects will also be deleted.

Let's take again an example of relationship between House and Rooms. House can contain multiple rooms - there is no independent life of room and any room can not belong to two different houses. If we delete the house - room will automatically be deleted.

Let's take another example relationship between Questions and Options. Single questions can have multiple options and option can not belong to multiple questions. If we delete the questions, options will automatically be deleted.

🔗 Source: stackoverflow.com

Q59:What are some of the best practices for Spring Framework?

  1. Avoid version numbers in schema reference, to make sure we have the latest configs.
  2. Divide spring bean configurations based on their concerns such as spring-jdbc.xml, spring-security.xml.
  3. For spring beans that are used in multiple contexts in Spring MVC, create them in the root context and initialize with listener.
  4. Configure bean dependencies as much as possible, try to avoid autowiring as much as possible.
  5. For application-level properties, the best approach is to create a property file and read it in the spring bean configuration file.
  6. For smaller applications, annotations are useful but for larger applications, annotations can become a pain. If we have all the configuration in XML files, maintaining it will be easier.
  7. Use correct annotations for components for understanding the purpose easily. For services use @Service and for DAO beans use @Repository.
  8. Spring framework has a lot of modules, use what you need. Remove all the extra dependencies that get usually added when you create projects through Spring Tool Suite templates.
  9. If you are using Aspects, make sure to keep the join pint as narrow as possible to avoid advice on unwanted methods. Consider custom annotations that are easier to use and avoid any issues.
  10. Use dependency injection when there is an actual benefit, just for the sake of loose-coupling don’t use it because it’s harder to maintain.

🔗 Source: journaldev.com

Q60:How does autowiring work in Spring?

First, and most important - all Spring beans are managed - they "live" inside a container, called "application context".

Second, each application has an entry point to that context. Web applications have a Servlet, JSF uses a el-resolver, etc. Also, there is a place where the application context is bootstrapped and all beans - autowired. In web applications this can be a startup listener.

Autowiring happens by placing an instance of one bean into the desired field in an instance of another bean. Both classes should be beans, i.e. they should be defined to live in the application context.

What is "living" in the application context? This means that the context instantiates the objects, not you. Tj. - you never make new UserServiceImpl() - the container finds each injection point and sets an instance there.

🔗 Source: stackoverflow.com