← Wszystkie tematy

Pytania rekrutacyjne ze wzorców projektowych z odpowiedziami

Wzorce GoF w JS i React, SOLID, DRY/KISS/YAGNI, podejścia architektoniczne: MVC, Flux, FSD, Clean Architecture.

225 pytań na rozmowę rekrutacyjną z tematu Wzorce projektowe z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.

Pytania według poziomu

Przykładowe pytania

Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.

Wzorce projektowe · Junior

  1. Czym jest wzorzec projektowy?

    Poprawna odpowiedź: Typowym rozwiązaniem często występującego problemu projektowego

    Wzorzec to nie kod, lecz opis idei: jaki problem rozwiązuje, z jakich części składa się rozwiązanie, jakie ma zalety i wady. Implementacja zależy od języka i kontekstu. Znajomość wzorców daje zespołowi wspólny słownik: „tu potrzebna jest strategia” jest zrozumiałe bez długich wyjaśnień.

  2. Na jakie trzy grupy dzielą się klasyczne wzorce GoF?

    Poprawna odpowiedź: Kreacyjne, strukturalne, behawioralne

    Wzorce kreacyjne dotyczą tworzenia obiektów (Factory, Builder, Singleton), strukturalne - składania obiektów (Adapter, Decorator, Facade), behawioralne - interakcji i podziału odpowiedzialności (Observer, Strategy, Command). Książka „Bandy Czworga” (1994) opisała 23 wzorce.

  3. Co gwarantuje wzorzec Singleton?

    Poprawna odpowiedź: Klasa ma tylko jedną instancję i globalny punkt dostępu do niej

    Przykłady: jeden klient API, jeden logger, jedno połączenie z bazą. W JS najprostszy singleton to moduł: export const api = new ApiClient() - moduł wykonuje się raz, a wszyscy importujący dostają ten sam obiekt.

  4. Dlaczego Singleton często nazywa się antywzorcem?

    Poprawna odpowiedź: Wprowadza ukryty stan globalny i utrudnia testowanie

    Kod, który bezpośrednio odwołuje się do singletona, niejawnie od niego zależy: testy wpływają na siebie nawzajem, a podmiana implementacji jest trudna. Kompromis: utworzyć jedną instancję, ale przekazywać ją jawnie (dependency injection), by w testach podstawić mock.

Wszystkie 75 pytań z odpowiedziami →

Wzorce projektowe · Middle

  1. Czym Decorator różni się od Proxy, skoro ich struktura jest podobna?

    Poprawna odpowiedź: Celem: Decorator dodaje zachowanie, Proxy kontroluje dostęp do obiektu

    Oba opakowują obiekt tym samym interfejsem. Dekoratory zwykle się łączy, rozbudowując funkcjonalność (logowanie + cache + ponowienia). Proxy zarządza cyklem życia i dostępem: leniwe ładowanie, sprawdzanie uprawnień, zdalny obiekt. Wiele wzorców różni się właśnie celem.

  2. Czym Adapter różni się od Fasady?

    Poprawna odpowiedź: Adapter dopasowuje interfejs do oczekiwanego, Fasada upraszcza pracę z podsystemem

    Adapter zwykle opakowuje jeden obiekt i czyni go zgodnym z istniejącym kodem. Fasada definiuje nowy, prostszy interfejs nad wieloma obiektami. W praktyce warstwa API często łączy oba: fasadę nad HTTP i adaptery danych.

  3. Kiedy zamiast prostej fabryki odpowiednia jest Abstract Factory?

    Poprawna odpowiedź: Gdy potrzebne są rodziny powiązanych, zgodnych ze sobą obiektów

    Przykład: UI kit dla dwóch platform - fabryka tworzy przycisk, pole i modal w jednym stylu i nie da się ich wymieszać. Prosta fabryka wybiera jeden produkt według parametru. Nie wprowadzaj abstrakcyjnej fabryki, jeśli rodzina jest tylko jedna.

  4. Co jest niebezpiecznego w singletonie na poziomie modułu (export const cache = new Map()) w aplikacji SSR?

    Poprawna odpowiedź: Na serwerze moduł jest wspólny dla wszystkich żądań, więc dane użytkowników się mieszają

    W przeglądarce zmienna modułu żyje w obrębie jednej karty. Proces serwera obsługuje tysiące użytkowników, a wspólny cache lub store na poziomie modułu może podać dane jednego użytkownika innemu. Stan żądania tworzy się per żądanie (np. cache() z React, QueryClient na żądanie).

Wszystkie 75 pytań z odpowiedziami →

Wzorce projektowe · Senior

  1. Czym model „sygnałów” (Solid, Preact Signals, Angular Signals) różni się od modelu React?

    Poprawna odpowiedź: Aktualizują się tylko zależne miejsca, bez ponownego renderu komponentu

    Sygnał to reaktywna wartość (Observer): odczyt rejestruje zależność, a zapis aktualizuje dokładnie jej subskrybentów (tekst, atrybut, obliczenie). React natomiast przerenderowuje komponent i porównuje wirtualne drzewo; React Compiler zmniejsza ten koszt, ale model jest inny.

  2. Jaki jest główny kompromis mikrofrontendów?

    Poprawna odpowiedź: Niezależne zespoły i wdrożenia kosztem złożoności, duplikacji i spójności UX

    Mikrofrontendy są uzasadnione przy wielu autonomicznych zespołach i dużym produkcie: każdą część wdraża się osobno. Kosztem są zduplikowane zależności, złożona integracja, wspólny design, routing i komunikacja między częściami. Mniejszym zespołom zwykle wystarcza modularny monolit.

  3. Dlaczego w Module Federation React deklaruje się jako singleton shared?

    Poprawna odpowiedź: Dwie kopie React w jednej aplikacji psują hooki i kontekst

    Hooki i kontekst są powiązane z konkretną instancją React: komponent ze zdalnego modułu z własną kopią powoduje „Invalid hook call”, a konteksty nie są widoczne. Współdzielone zależności-singletony wymagają uzgadniania wersji między zespołami.

  4. Jak działa wzorzec Strangler Fig przy migracji przestarzałego frontendu?

    Poprawna odpowiedź: Nowy system stopniowo przejmuje trasy i funkcje starego, aż ten zniknie

    Na przykład proxy kieruje /checkout do nowej aplikacji Next.js, a resztę do starej. Ryzyko jest mniejsze niż przy „wielkim przepisaniu”: wartość dostarcza się stopniowo, a na każdym kroku można się wycofać.

Wszystkie 75 pytań z odpowiedziami →

Testy łączone z tym tematem

Pytania z kilku tematów naraz - jak na rozmowie rekrutacyjnej na konkretne stanowisko.

Zadania z kodu

Napisz rozwiązanie prosto w przeglądarce, a testy od razu je sprawdzą. Klasyka rozmów rekrutacyjnych: debounce, throttle, deepClone, Promise.all, EventEmitter, cache LRU i inne.

Otwórz zadania →