Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

Architektura

Baza pytań rekrutacyjnych i wiedzy. Filtruj, szukaj i sprawdzaj swoją wiedzę.

Tematy

Wyjaśnij zasady SOLID.

mediumdesign-principlessolidoop+1
Otwórz pytanie

Odpowiedź

SOLID = 5 zasad projektowania OO. S (Single Responsibility): klasa/moduł ma jedną odpowiedzialność (jedno zadanie) i powinna zmieniać się z jednego powodu. O (Open/Closed): rozszerzasz bez modyfikacji istniejącego kodu. L (Liskov Substitution): podtyp jest podmienialny (ten sam kontrakt). I (Interface Segregation): małe interfejsy, bez nieużywanych metod. D (Dependency Inversion): zależ od abstrakcji; implementacje wstrzykuj (DI).

REST vs GraphQL?

mediumapirestgraphql+1
Otwórz pytanie

Odpowiedź

REST udostępnia wiele endpointów zasobów i zwraca stały kształt odpowiedzi, co może prowadzić do over/under‑fetchingu. GraphQL udostępnia pojedynczy endpoint i język zapytań, dzięki czemu klient pobiera dokładnie potrzebne pola i dane zagnieżdżone, ale kosztem większej złożoności schematu/resolverów i innego podejścia do cache.

Co to jest Twierdzenie CAP?

harddistributed-systemstheoryconsistency+1
Otwórz pytanie

Odpowiedź

Twierdzenie CAP mówi, że w systemie rozproszonym nie da się jednocześnie w pełni zagwarantować Consistency, Availability i Partition tolerance. Gdy wystąpi podział sieci, system musi wybrać między spójnością a dostępnością.

Strategie Load Balancingu?

mediumload-balancingperformancescalability
Otwórz pytanie

Odpowiedź

Typowe strategie load balancing to round‑robin, least connections, warianty ważone, IP‑hash/sticky sessions oraz consistent hashing. Load balancer może działać na warstwie L4 (TCP/UDP) lub L7 (HTTP) i używa health checków, aby omijać niezdrowe nody.

Czym jest architektura sterowana zdarzeniami (EDA)?

mediumevent-drivenarchitecturemessaging+1
Otwórz pytanie

Odpowiedź

Architektura sterowana zdarzeniami (EDA) to styl, w którym komponenty komunikują się przez publikowanie i obsługę zdarzeń. Producenci wysyłają eventy do brokera, a konsumenci obsługują je asynchronicznie, co zmniejsza zależności i poprawia skalowalność kosztem spójności ostatecznej i trudniejszego śledzenia.

Wyjaśnij SOLID — po jednym zdaniu na każdą literę.

easysoliddesign-principlesoop
Otwórz pytanie

Odpowiedź

S: jedna odpowiedzialność na klasę (jeden powód zmiany); O: rozszerzaj zachowanie bez modyfikacji istniejącego kodu; L: podtyp ma dotrzymać kontraktu typu bazowego; I: małe, wyspecjalizowane interfejsy; D: zależ od abstrakcji, nie od konkretów (DI).

Co znaczy, że metoda HTTP jest idempotentna?

easyhttpidempotencyapi
Otwórz pytanie

Odpowiedź

Idempotentność oznacza, że powtórzenie tego samego żądania daje ten sam efekt/stanie (np. wiele PUT ustawia zasób na tę samą wartość). To ważne przy retry.

Sprzężenie (coupling) vs spójność (cohesion) — co chcesz i czemu?

easycouplingcohesiondesign
Otwórz pytanie

Odpowiedź

Chcesz niskie sprzężenie (moduły jak najmniej zależą od siebie) i wysoką spójność (kod w module „należy do siebie”). To ułatwia zmiany: mniej efektów ubocznych i jaśniejsza odpowiedzialność.

DTO vs model domenowy — czemu nie używać jednej klasy wszędzie?

mediumdtodomain-modelapi-design
Otwórz pytanie

Odpowiedź

DTO jest dopasowane do transportu/API, a model domenowy do reguł biznesowych. Rozdzielenie zmniejsza coupling między API a logiką i zapobiega „wyciekaniu” wewnętrznych pól/inwariantów.

CQRS vs CRUD — na czym polega idea CQRS?

mediumcqrsarchitectureread-model
Otwórz pytanie

Odpowiedź

CQRS rozdziela odczyty (query) od zapisów (command), często z różnymi modelami zoptymalizowanymi pod każde z nich. Pomaga, gdy potrzeby read i write mocno się różnią, ale dokłada złożoność.

Cache-aside vs write-through — jaka jest różnica?

mediumcachecache-asidewrite-through+1
Otwórz pytanie

Odpowiedź

Cache-aside: aplikacja czyta z cache, a przy miss pobiera z DB i uzupełnia cache; zapisy idą do DB, a cache aktualizujesz/invalidujesz. Write-through: zapis przechodzi przez cache, które zapisuje też do DB, utrzymując spójność cache kosztem opóźnienia zapisu.

Saga vs 2PC — czemu sagi są popularne w mikroserwisach?

hardsaga2pcdistributed-transactions
Otwórz pytanie

Odpowiedź

2PC daje atomowy commit między serwisami, ale jest ciężkie i potrafi blokować przy awariach. Saga to sekwencja lokalnych transakcji z akcjami kompensacyjnymi — trade-off: mniej ścisłej spójności za większą dostępność i prostsze skalowanie.

Jak zrobić POST bezpieczny do retry (idempotency keys)?

hardidempotencyapiretries
Otwórz pytanie

Odpowiedź

Przyjmij idempotency key od klienta i zapisz wynik pod kluczem (użytkownik, key). Jeśli ten sam key przyjdzie ponownie, zwróć zapisany wynik zamiast tworzyć duplikaty.

Ewolucja schematu eventów — jak nie psuć konsumentów?

hardeventsschema-evolutionbackward-compatibility
Otwórz pytanie

Odpowiedź

Stosuj zmiany kompatybilne wstecz: dodawaj opcjonalne pola, nie usuwaj/nie zmieniaj nazw pól, a gdy musisz złamać kompatybilność — wersjonuj event. Konsumenci powinni ignorować nieznane pola i bezpiecznie obsługiwać brakujące.

Rate limiting — podaj dwie strategie i gdzie je wymusić.

hardrate-limitingtoken-bucketapi-gateway
Otwórz pytanie

Odpowiedź

Popularne strategie to token bucket i leaky bucket (albo fixed/sliding window). Limity możesz wymusić na edge/API gateway, load balancerze lub w aplikacji (per user/IP), najlepiej jak najbliżej wejścia.

Uwierzytelnianie vs autoryzacja — jaka jest różnica?

easyauthauthenticationauthorization+1
Otwórz pytanie

Odpowiedź

Uwierzytelnianie odpowiada na „kim jesteś?” (potwierdzenie tożsamości). Autoryzacja odpowiada na „co możesz zrobić?” (uprawnienia) po uwierzytelnieniu.

Architektura heksagonalna / Ports and Adapters — na czym polega idea?

mediumhexagonalports-adaptersclean-architecture+1
Otwórz pytanie

Odpowiedź

Trzymaj logikę biznesową w centrum (domena/use case) i rozmawiaj ze światem przez porty (interfejsy). Adaptery implementują porty dla DB, HTTP, kolejek itd., dzięki czemu możesz zmieniać infrastrukturę bez przepisywania logiki.

Co to jest eventual consistency i jak wytłumaczyć to użytkownikowi?

mediumconsistencydistributed-systemseventual-consistency
Otwórz pytanie

Odpowiedź

Eventual consistency oznacza, że różne części systemu mogą przez chwilę pokazywać różne dane, ale finalnie się wyrównają. Dla użytkownika: „Zmiana jest zapisana; może pojawić się wszędzie po kilku sekundach — odśwież lub chwilę poczekaj.”

Paginacja offset vs cursor — jaki jest trade-off?

hardpaginationcursoroffset+1
Otwórz pytanie

Odpowiedź

Offset pagination jest prosta (`page=10`), ale potrafi zwalniać dla dalekich stron i może pomijać/duplikować elementy, gdy dane się zmieniają. Cursor pagination używa stabilnego klucza „ostatnio widzianego”, skaluje się lepiej i jest bardziej spójna, ale jest trudniejsza dla klienta i nie wspiera łatwo „skoku na stronę 10”.

Wersjonowanie API — kiedy wersjonować i jakie są dwie popularne strategie?

hardapi-versioningbackward-compatibilityrest
Otwórz pytanie

Odpowiedź

Wersjonuj, gdy wprowadzasz breaking change, którego nie da się zrobić kompatybilnie wstecz. Popularne strategie: wersja w URL (`/v2/...`) albo w nagłówkach/content negotiation. Jeśli się da, preferuj zmiany kompatybilne wstecz (dodawanie pól opcjonalnych).

Co to jest SLI (Service Level Indicator)?

easyslireliabilitymetrics
Otwórz pytanie

Odpowiedź

SLI to mierzalna metryka jakości usługi (np. dostępność, latencja, error rate). To liczba, którą śledzisz, żeby rozumieć niezawodność.

Co to jest SLO i czym jest error budget?

mediumsloerror-budgetreliability
Otwórz pytanie

Odpowiedź

SLO (Service Level Objective) to cel dla SLI (np. 99,9% dostępności). Error budget to „budżet błędów”, czyli dopuszczalny margines (100% - SLO). Używa się go do balansowania rozwoju funkcji vs poprawy niezawodności.

Czemu zespoły patrzą na p95/p99 latency, a nie tylko na średnią?

mediumlatencyp99performance+1
Otwórz pytanie

Odpowiedź

Średnia ukrywa tail latency: kilka bardzo wolnych requestów może nie być widocznych w średniej, ale użytkownik je odczuje. p95/p99 pokazuje zachowanie najwolniejszych 5%/1% i pomaga wykryć kolejki oraz nasycenie.

Co to jest dobry alert i jak unikać alert fatigue?

hardalertingrunbookobservability+1
Otwórz pytanie

Odpowiedź

Dobry alert jest „actionable” i skupiony na wpływie na użytkownika (symptom-based), ma jasną ważność i link do runbooka. Alert fatigue ograniczasz przez usuwanie szumu, dobre progi, grupowanie i budzenie tylko przy realnych incydentach (pomaga error budget).

Co to jest blameless postmortem i czemu jest przydatny?

hardpostmortemincidentculture+1
Otwórz pytanie

Odpowiedź

Blameless postmortem skupia się na tym, co się stało i jak ulepszyć system, a nie na szukaniu winnego. Daje konkretne action itemy (fixy, alerty, runbooki) i buduje kulturę, w której ludzie szybko zgłaszają problemy.

Serwis stateless vs stateful: jaka jest różnica i dlaczego to ważne?

easyarchitecturestatelessstateful+1
Otwórz pytanie

Odpowiedź

Serwis stateless trzyma stan requestu poza instancją (np. w DB/Redis), więc każda instancja może obsłużyć każdy request. Serwis stateful trzyma stan w pamięci konkretnej instancji, co utrudnia skalowanie i failover (potrzebujesz sticky sessions albo replikacji stanu).

Co to jest wymaganie niefunkcjonalne (NFR)? Podaj kilka przykładów.

mediumarchitecturenfrquality-attributes+1
Otwórz pytanie

Odpowiedź

NFR opisują jak system ma się zachowywać, a nie jakie ma funkcje. Przykłady: wydajność (np. p95), dostępność, bezpieczeństwo, skalowalność, obserwowalność i zgodność (compliance). NFR mocno wpływają na decyzje architektoniczne.

Bounded context w DDD: co to jest i po co jest przydatny?

mediumarchitecturedddbounded-context+1
Otwórz pytanie

Odpowiedź

Bounded context to granica, w której model domenowy i pojęcia mają jedno spójne znaczenie. Pomaga zmniejszyć sprzężenie, bo nie próbujesz mieć jednego “mega modelu” na wszystko, i ułatwia wyznaczanie granic zespołów, serwisów lub modułów.

Cache stampede (thundering herd): co to jest i jak temu zapobiegać?

hardarchitecturecachingcache-stampede+1
Otwórz pytanie

Odpowiedź

Cache stampede to sytuacja, gdy wiele requestów naraz trafia na cache miss (często po wygaśnięciu wpisu), więc wszystkie uderzają w bazę. Mitigacje: jitter TTL, “single flight”/lock per key, stale-while-revalidate oraz podgrzewanie (warming) krytycznych kluczy.

Graceful degradation: co to znaczy i jak to projektować?

hardarchitectureresiliencefallbacks+1
Otwórz pytanie

Odpowiedź

Graceful degradation oznacza, że system dalej działa w trybie “okrojonym”, gdy część elementów padnie (np. pokaż cached dane, gdy rekomendacje są niedostępne). Projektuj to przez timeouty, fallbacki, circuit breakery, feature flagi oraz jasne komunikaty dla użytkownika o ograniczeniach.

CORS: co to jest i przed czym CIĘ nie chroni?

easyarchitecturewebcors+1
Otwórz pytanie

Odpowiedź

CORS to reguła przeglądarki, która mówi, z jakich originów JavaScript może odczytać odpowiedź z Twojego API. To nie jest uwierzytelnianie i nie blokuje wywołań z serwera ani narzędzi typu curl. Nadal potrzebujesz poprawnego auth/authz i walidacji po stronie serwera.

Co to jest reverse proxy i do czego zwykle się go używa?

mediumarchitecturereverse-proxyhttp+1
Otwórz pytanie

Odpowiedź

Reverse proxy stoi „przed” Twoimi serwerami aplikacji i przekazuje do nich requesty klientów. Zwykle używa się go do terminacji TLS, routingu, load balancingu, cache/compress oraz czasem rate limitów lub reguł WAF.

Co to jest ADR (Architecture Decision Record) i czemu jest przydatne?

mediumarchitecturedocumentationdecisions+1
Otwórz pytanie

Odpowiedź

ADR to krótki dokument opisujący decyzję architektoniczną: kontekst, rozważone opcje, wybór i konsekwencje. Jest przydatny, bo zapisuje „dlaczego” coś wybrano, ułatwia onboarding i zmniejsza powracające dyskusje po kilku miesiącach.

Event sourcing: co to jest i jakie są główne trade-offy?

hardarchitectureevent-sourcingevents+1
Otwórz pytanie

Odpowiedź

Event sourcing zapisuje stan jako sekwencję zdarzeń (faktów), a aktualny stan odtwarzasz przez ich replay do projekcji. Plusy: audyt, pełna historia i „time travel” do debugowania. Minusy: większa złożoność, ewolucja schematów eventów, dodatkowe projekcje oraz trudniejsze zapytania ad-hoc.

Anti-corruption layer (ACL): co to jest i kiedy to stosujesz?

hardarchitecturedddintegration+1
Otwórz pytanie

Odpowiedź

Anti-corruption layer to warstwa tłumacząca na granicy, która chroni Twój model domenowy przed „przeciekaniem” pojęć z systemu legacy lub zewnętrznego. Stosujesz ją, gdy integrujesz się z czymś o innym modelu albo brzydkim API, żeby rdzeń pozostał czysty, a mapowanie było w jednym miejscu.