Pytania rekrutacyjne Spring
63 pytań — 20 odpowiedzi dostępnych od razu
Podstawy Spring Framework
Czym jest Spring Framework i jakie były główne motywacje do jego powstania?
Spring Framework to platforma ułatwiająca tworzenie aplikacji w języku Java. Został stworzony w celu ujednolicenia rozwiązań związanych z konfiguracją, zarządzaniem zależnościami i tworzeniem modułowych komponentów oprogramowania. Wcześniej programiści korzystali z ciężkich kontenerów Java EE (np. EJB), co było wysoce skomplikowane i wymuszało pisanie dużej ilości kodu konfiguracyjnego. Głównymi motywacjami do powstania Springa były:
- Upraszczanie struktury aplikacji,
- Zapewnianie lekkiego kontenera IoC,
- Zwiększanie elastyczności poprzez modularną architekturę,
- Rezygnacja z nadmiernej konfiguracji (ang. “boilerplate” code).
Proponowane materiały:
Jakie są kluczowe komponenty Spring Core i do czego służą?
Kluczowe komponenty Spring Core obejmują:
- BeanFactory – podstawowy kontener IoC zarządzający cyklem życia obiektów (beanów).
- ApplicationContext – rozszerzona wersja BeanFactory, która zapewnia dodatkowe funkcjonalności, takie jak obsługa zdarzeń, internacjonalizacja (I18N) czy wstrzykiwanie zasobów.
- Core Container (moduł “core”) – zawiera podstawowe klasy i interfejsy do pracy z Spring IoC.
- Spring Expression Language (SpEL) – język wyrażeń pozwalający na dynamiczną konfigurację i manipulację obiektami w trakcie działania aplikacji.
Dzięki tym komponentom można tworzyć modułowe, elastyczne i łatwe w utrzymaniu aplikacje.
Proponowane materiały:
Wyjaśnij pojęcie Inversion of Control (IoC).
Inversion of Control (tzw. odwrócenie sterowania) polega na przeniesieniu odpowiedzialności za tworzenie i zarządzanie obiektami z kodu aplikacji do zewnętrznego kontenera (np. Spring IoC Container). Zamiast wywoływać konstruktory lub metody tworzące obiekty bezpośrednio, pozwalamy kontenerowi dostarczyć nam gotowe instancje (tzw. beany). IoC wspiera luźne powiązania między komponentami, co ułatwia testowanie oraz utrzymanie kodu.
Proponowane materiały:
Jaka jest różnica między Dependency Injection (DI) a IoC?
- IoC (Inversion of Control) to ogólna koncepcja zmiany odpowiedzialności za tworzenie i konfigurację obiektów na kontener (lub inny mechanizm).
- DI (Dependency Injection) jest natomiast konkretną implementacją IoC, w której kontener wstrzykuje zależności do obiektu poprzez konstruktor, metody setterów lub pola (w zależności od stylu konfiguracji).
Innymi słowy, IoC to idea, a DI to jedno z jej najpopularniejszych praktycznych zastosowań.
Proponowane materiały:
Jakie są różne sposoby definiowania beanów w Springu (np. XML, adnotacje, JavaConfig)?
- XML – tradycyjny sposób konfiguracji poprzez pliki XML, w których definiuje się beany oraz zależności.
- Adnotacje (np.
@Component,@Autowired,@Bean) – dzięki nim możemy automatycznie wykrywać klasy, które mają być zarządzane przez Spring (component scanning), a także deklarować metody tworzące beany w klasach konfiguracyjnych. - JavaConfig – pozwala na definiowanie konfiguracji w kodzie Java za pomocą adnotacji
@Configurationi@Bean. Ułatwia to utrzymanie konfiguracji oraz wykorzystanie mechanizmów statycznej analizy kodu.
Proponowane materiały:
Porównaj działanie adnotacji @Component, @Repository, @Service oraz @Controller.
Wszystkie te adnotacje służą do oznaczania klas, które powinny być zarządzane przez Spring IoC Container. Różnią się one głównie semantyką i przeznaczeniem:
@Component– najbardziej ogólna adnotacja, służy do oznaczania dowolnego komponentu zarządzanego przez Spring (np. narzędzia pomocnicze).@Repository– specjalizacja@Componentprzeznaczona dla klas dostępowych do bazy danych (DAO). Ułatwia obsługę wyjątków związanych z bazą danych.@Service– specjalizacja@Componentoznaczająca warstwę usług. Używana głównie w celu podkreślenia, że klasa udostępnia logikę biznesową.@Controller– specjalizacja@Componentprzeznaczona do warstwy prezentacji w aplikacjach webowych. Dzięki niej Spring rozpoznaje klasy obsługujące żądania HTTP.
Proponowane materiały:
Spring Beans i Konfiguracja
Czym jest bean w Springu i jak jest zarządzany przez kontener?
Bean w Springu to obiekt zarządzany przez kontener Inversion of Control (IoC). Kontener odpowiada za tworzenie, konfigurację oraz usuwanie beanów w trakcie działania aplikacji, zgodnie z określonymi regułami (np. przez adnotacje czy pliki konfiguracyjne). Dzięki temu deweloper nie musi samodzielnie tworzyć instancji obiektów – kontener zapewnia gotowe obiekty w odpowiednich miejscach i momentach.
Przydatne materiały:
Jak zarządzać cyklem życia beana (metody inicjalizacji i niszczenia)?
W Springu cykl życia beana obejmuje moment tworzenia instancji, inicjalizacji oraz zakończenia pracy (zniszczenia). Standardowo te fazy zarządzane są przez kontener. Aby dostosować logikę uruchamianą podczas inicjalizacji i niszczenia obiektu, można:
- Użyć adnotacji
@PostConstructi@PreDestroy(z pakietujavax.annotationlubjakarta.annotation). - Zaimplementować interfejsy
InitializingBean(metodaafterPropertiesSet()) iDisposableBean(metodadestroy()). - W plikach XML lub w adnotacjach Java skonfigurować atrybuty inicjalizacji (
init-method) i niszczenia (destroy-method).
Przydatne materiały:
Jak działają zakresy beanów (scope), np. singleton, prototype, session, request?
W Springu scope określa okres życia beana oraz sposób dostarczania go do innych komponentów. Najpopularniejsze zakresy to:
- singleton – jedna instancja beana na cały kontener Spring.
- prototype – nowa instancja beana jest tworzona za każdym razem podczas wstrzykiwania.
- request – jedna instancja beana na pojedyncze żądanie HTTP (głównie w aplikacjach webowych).
- session – jedna instancja beana na sesję użytkownika (również w aplikacjach webowych).
Zakres ustawia się np. przez adnotacje (@Scope("singleton")), a w przypadku aplikacji webowych – przy użyciu specjalnych konfiguracji lub adnotacji na klasach/beanach.
Przydatne materiały:
Jak działa mechanizm autowire’owania beanów?
Autowire’owanie (wstrzykiwanie zależności) polega na automatycznym wiązaniu obiektów w oparciu o typ lub nazwę. Najczęściej wykorzystuje się adnotacje:
@Autowired– na polu, konstruktorze lub setterze, aby wskazać bean do wstrzyknięcia na podstawie typu.@Qualifier– gdy jest wiele kandydatów do wstrzyknięcia tego samego typu, można wskazać konkretną nazwę beana.@Injecti@Named– alternatywne adnotacje z JSR-330 (z pakietujavax.inject).
Spring skanuje pakiety w poszukiwaniu klas oznaczonych adnotacjami takimi jak @Component, @Service czy @Repository (lub innymi konfiguracjami) i na ich podstawie tworzy bean, który następnie może zostać wstrzyknięty do innych komponentów.
Przydatne materiały:
Jak konfigurować profil w Springu i kiedy warto z niego korzystać?
Profil w Springu (ang. profile) to mechanizm pozwalający uruchamiać różne konfiguracje zależnie od środowiska (np. dev, test, prod). Można włączyć profil za pomocą parametru spring.profiles.active w pliku konfiguracyjnym (np. application.properties) lub w argumentach uruchomieniowych. Korzystanie z profili jest doskonałe w sytuacjach, gdy aplikacja wymaga odmiennych ustawień bazy danych, usług zewnętrznych czy logowania w zależności od środowiska.
- Adnotacja
@Profile("nazwa_profilu")umieszczona na klasie lub metodzie definiującej bean powoduje jej ładowanie tylko w przypadku aktywnego profilu. - Można również wykorzystać adnotację
@Profilew połączeniu z innymi adnotacjami typu@Configuration.
Przydatne materiały:
Spring Boot
Czym jest Spring Boot i w czym pomaga w porównaniu do tradycyjnego Springa?
Spring Boot to rozszerzenie ekosystemu Spring, które upraszcza tworzenie aplikacji opartych na Springu. Zamiast konfigurować wszystko ręcznie (pliki XML, rozbudowane definicje beanów), Spring Boot wykorzystuje konwencję ponad konfiguracją (ang. convention over configuration) i automatyczną konfigurację (auto-configuration). Dzięki temu programista nie musi wchodzić w tak dużą liczbę szczegółów związanych z ustawieniami frameworka.
- Główne zalety Spring Boot:
- Szybsze uruchamianie projektu (wystarczy kilka zależności w pliku konfiguracyjnym Maven/Gradle).
- Wbudowane serwery aplikacyjne (Tomcat, Jetty, Undertow).
- Zintegrowane narzędzia do monitorowania i zarządzania aplikacją (Spring Boot Actuator).
Materiały:
Wymień i wyjaśnij rolę plików konfiguracyjnych application.properties oraz application.yml.
W Spring Boot konfiguracja aplikacji może być definiowana w plikach:
- application.properties
- application.yml
Oba pliki służą do zarządzania ustawieniami aplikacji (np. parametry połączenia z bazą danych, port serwera, profile środowiskowe). Różni je głównie format i składnia:
- application.properties – plik tekstowy, w którym każda właściwość jest zapisywana w formacie
klucz=wartość. - application.yml – plik w formacie YAML, który pozwala zagnieżdżać ustawienia w sekcjach i grupować je hierarchicznie.
Spring Boot automatycznie wykrywa i ładuje oba rodzaje plików; wybór należy do programisty. Można też łączyć ich wykorzystanie (np. plik .properties do wartości podstawowych, a .yml do bardziej złożonych konfiguracji).
Materiały:
Co to są i jak działają “startery” w Spring Boot?
“Startery” w Spring Boot to paczki (zależności Maven/Gradle), które dostarczają wstępnie przygotowany zestaw bibliotek i ustawień konfiguracyjnych dla specyficznej funkcjonalności (np. spring-boot-starter-web zawiera Spring MVC, Tomcata jako domyślny serwer, itd.). Ideą “starterów” jest skrócenie czasu pracy dewelopera, który nie musi już wyszukiwać każdej biblioteki osobno oraz ustawiać jej ręcznie – wystarczy wskazać odpowiedni “starter”.
- Jak działają?
Spring Boot sprawdza, które “startery” są obecne w zależnościach, i na tej podstawie konfiguruje pakiety w aplikacji (np. aktywuje zarządzanie transakcjami przy obecności
spring-boot-starter-data-jpa).
Materiały:
Jak w Spring Boot wykorzystać wbudowane serwery aplikacyjne (Tomcat, Jetty, Undertow)?
Domyślnie Spring Boot używa Tomcat jako wbudowanego kontenera serwletów. Aby użyć innego serwera (np. Jetty lub Undertow), wystarczy:
- Usunąć (lub wykluczyć) zależność
spring-boot-starter-tomcat. - Dodać starter dla wybranego serwera, np.:
spring-boot-starter-jettyspring-boot-starter-undertow
Dzięki temu Spring Boot automatycznie uruchomi aplikację na wskazanym kontenerze podczas startu. Jest to wygodne w kontekście microserwisów – każda aplikacja może mieć swój własny serwer.
Materiały:
Jakie są popularne adnotacje Spring Boot, np. @SpringBootApplication, @EnableAutoConfiguration?
@SpringBootApplicationAdnotacja, która łączy w sobie trzy inne:@Configuration– wskazuje, że klasa zawiera definicje beanów.@EnableAutoConfiguration– włącza mechanizm automatycznej konfiguracji.@ComponentScan– umożliwia skanowanie pakietów w poszukiwaniu klas oznaczonych m.in. adnotacjami@Component,@Service,@Repository.
@EnableAutoConfigurationMożna ją też stosować osobno, by wyłączyć lub włączyć określone konfiguracje (np. wykluczyć określone klasy ze skanowania). Zazwyczaj nie musimy jej używać wprost, ponieważ@SpringBootApplicationją już zawiera.Inne przydatne adnotacje to np.:
@RestController– łączy w sobie@Controlleroraz@ResponseBody.@ConfigurationProperties– pozwala mapować właściwości z plików konfiguracyjnych na pola w klasach.
Materiały:
Jak monitorować aplikację Spring Boot (Actuator, Health Checks)?
Spring Boot Actuator to wbudowany moduł w Spring Boot, który zapewnia zestaw endpointów do zarządzania i monitorowania aplikacji w trakcie działania. Pozwala on m.in. na:
- Sprawdzanie stanu aplikacji (ang. health checks).
- Wyświetlanie informacji o środowisku, zależnościach czy konfiguracji.
- Przegląd statystyk związanych z użyciem pamięci, liczbą aktywnych wątków itp.
W pliku konfiguracyjnym (application.properties lub application.yml) można ustawić, które endpointy mają być dostępne oraz określić poziom ich zabezpieczenia.
Przykład w application.yml:
management:
endpoints:
web:
exposure:
include: health,info
Po uruchomieniu aplikacji można uzyskać dostęp m.in. do:
http://localhost:8080/actuator/health– stan aplikacji.http://localhost:8080/actuator/info– informacje o wersji i innych właściwościach.
Materiały:
Spring MVC i Spring Web
Jak działa warstwa MVC w Springu?
Warstwa MVC (Model-View-Controller) w Springu opiera się na trzech głównych komponentach:
- Model – reprezentuje dane biznesowe oraz logikę aplikacji.
- View – odpowiedzialny za prezentację danych w postaci interfejsu użytkownika (UI), np. stron HTML.
- Controller – kontroler zarządza przepływem danych między warstwą modelu a widokiem; przyjmuje żądania i zwraca odpowiedź w postaci odpowiedniego widoku lub danych.
Dzięki temu podejściu kod aplikacji jest uporządkowany: komponenty są odpowiedzialne za osobne obszary działania, co ułatwia utrzymanie i rozwój projektu.
Materiały:
Wyjaśnij przepływ żądania HTTP w Spring MVC (DispatcherServlet).
Podstawą obsługi żądań w Springu jest klasa DispatcherServlet, która pełni rolę głównego dyspozytora w architekturze MVC. Gdy aplikacja otrzymuje żądanie HTTP:
- Żądanie trafia do
DispatcherServlet. DispatcherServletsprawdza konfigurację i wyszukuje odpowiedni kontroler (metodę w klasie oznaczonej np. adnotacją@Controller).- Wywoływana jest metoda kontrolera, która może korzystać z usług biznesowych (serwisów) i repozytoriów (warstwa dostępu do danych), a następnie zwraca nazwę widoku lub dane.
DispatcherServletwybiera odpowiedni widok (np. templatem z silnikiem szablonów) lub serializuje dane do formatu JSON/HTML i zwraca je do klienta.
Materiały:
Do czego służy adnotacja @Controller i jak się ma do @RestController?
@Controller– oznacza klasę, która pełni rolę kontrolera w architekturze MVC. Metody w takiej klasie zwracają zwykle nazwę widoku (np. nazwę pliku HTML), a dane są przekazywane do warstwy widoku.@RestController– łączy w sobie@Controlleroraz@ResponseBody. Oznacza klasę kontrolera, w której metody zwracają dane (np. JSON lub XML) bezpośrednio do klienta, co przydaje się w tworzeniu usług REST.
Różnica polega na domyślnym sposobie przetwarzania danych zwracanych przez metody: @Controller domyślnie szuka widoków, natomiast @RestController zwraca obiekty, które Spring automatycznie serializuje do formatu JSON lub XML.
Materiały:
@RequestMapping (oraz wariantów @GetMapping, @PostMapping itp.)?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziSpring Data
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziCrudRepository i JpaRepository?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedzi@Entity, @Table, @Id, @OneToMany) w Springu?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziTransakcje i Spring AOP
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedzi@Transactional i jak działa pod spodem?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedzi@Secured, @PreAuthorize)?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziSpring Security
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziUsernamePasswordAuthenticationFilter)?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedzi@PreAuthorize, @PostAuthorize) i wyrazić logikę w SpEL?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziSpring Cloud
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziTestowanie w Spring
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedzi@SpringBootTest, @MockBean)?
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziZaawansowane zagadnienia
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziNowoczesne Spring Boot 3.x i Spring Framework 6
Odpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedziOdpowiedź dostępna w pełnej wersji. Odblokuj 43 pozostałych odpowiedzi i ucz się z pełnego zestawu.
Odblokuj odpowiedzi