← Wszystkie tematy W 23% ogłoszeń · 11 z 47 ogłoszeń frontend React

Node.js i rozwój backendu

Kuchnia za drzwiami restauracji

Node.js i backend pojawiają się w 11 z 47 ofert frontendowych, a w fullstackowych w większości. Nawet frontendowca pytają o event loop i proste API w Express.

Opanowane 0 z 3 pytań

Co piszą w ogłoszeniach

Scena pierwsza · event loop

Jeden kucharz i trzy kolejki karteczek

W kuchni Node.js pracuje jeden kucharz. Robi to, co ma teraz w rękach (stos). Gdy skończy, najpierw bierze karteczki z pilnej przegródki (mikrozadania: Promise), a dopiero potem jedną karteczkę ze zwykłej kolejki (makrozadania: setTimeout, I/O). Zgadnij, w jakiej kolejności kucharz powie litery, i przejdź krok po kroku.

 
Stos (kucharz)
Pilne: mikrozadania
Zwykła kolejka: makrozadania
Konsola
krok 0

Zgadnij kolejność: A, B, C, D? Potem klikaj „Następny krok”.

Scena druga · blokujące vs nieblokujące

Kucharz, który gapi się na piekarnik

Trzech gości zamawia naraz. Pierwszy chce ciasto, które piecze się długo. Kucharz blokujący stoi przy piekarniku i czeka, a pozostali goście głodują. Kucharz nieblokujący wstawia ciasto, nastawia minutnik (callback) i w tym czasie robi kanapki dla pozostałych.

Wpuść gości w obu trybach.

Porównajmy

Mikro czy makro?

MikrozadaniaMakrozadania
Co tam trafia? Pilne karteczki..then, await, queueMicrotask, (w Node) process.nextTick jeszcze wcześniej. Zwykłe karteczki.setTimeout, setInterval, I/O, setImmediate, zdarzenia.
Kiedy kucharz je bierze? Wszystkie naraz, zaraz po bieżącej robocie.Kolejka mikrozadań opróżniana do końca po każdym zadaniu. Jedną, gdy pilnych już nie ma.Jedno makrozadanie na obrót pętli.
setTimeout(fn, 0) Nie znaczy „od razu”.Najwcześniej w następnym obrocie, po wszystkich Promise. Znaczy „gdy będzie chwila”.Minimalne opóźnienie, nie gwarantowane.
Pułapka Nieskończone pilne karteczki zagłodzą kuchnię.Rekurencyjne mikrozadania blokują render i I/O. Ciężka robota w jednej karteczce też blokuje.Długie obliczenia: worker_threads, kolejka zadań (BullMQ), dzielenie pracy.

Jeden kucharz

Node ma jeden wątek JavaScriptu. Nie stój przy piekarniku: zlecaj I/O i rób coś innego.

Pilne przed zwykłymi

Najpierw kod synchroniczny, potem wszystkie Promise, potem setTimeout.

Ciężka robota osobno

Długie liczenie wysyłaj do workera albo kolejki, żeby kuchnia nie stanęła.

Sprawdź się

Pytania z rozmów

Najpierw odpowiedz na głos, dopiero potem rozwiń odpowiedź.

  1. Jak działa event loop w Node.js?

    Moja odpowiedź

    Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.

    Pokaż odpowiedź

    Dla przedszkolaka: W kuchni jest jeden kucharz. Robi to, co ma w rękach, potem bierze wszystkie pilne karteczki, a dopiero potem jedną zwykłą. Na piekarnik nie patrzy, tylko nastawia minutnik.

    Na rozmowę: JavaScript w Node działa w jednym wątku. Operacje I/O (pliki, sieć, baza) są delegowane do systemu i puli wątków libuv, a po zakończeniu ich callbacki trafiają do kolejek. Pętla przechodzi przez fazy: timers (setTimeout/setInterval), pending callbacks, poll (I/O), check (setImmediate), close callbacks. Po każdym zadaniu opróżniane są mikrozadania: najpierw process.nextTick, potem Promise. Dlatego kod synchroniczny idzie pierwszy, potem .then, potem setTimeout. Długie obliczenia blokują wszystko, więc idą do worker_threads albo kolejki zadań.

    Umiem?
    Zapytaj Claude RozwińPrzepytaj mniePytania pogłębiające
  2. Jak zaprojektować prosty endpoint REST z walidacją i obsługą błędów w Express?

    Moja odpowiedź

    Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.

    Pokaż odpowiedź

    Dla przedszkolaka: Kelner przyjmuje zamówienie, sprawdza, czy jest kompletne, przekazuje do kuchni, a jak coś pójdzie nie tak, grzecznie mówi, co się stało, zamiast rzucać talerzem.

    Na rozmowę: app.post("/api/orders", validate(OrderSchema), async (req, res, next) => { try { const order = await service.create(req.body); res.status(201).json(order) } catch (e) { next(e) } }). Walidacja body schematem (Zod, Joi) w middleware, przy błędzie 422 z listą pól. Logika w warstwie serwisu, nie w handlerze. Centralny error handler (err, req, res, next) mapuje błędy domenowe na kody (404, 409) i nie wycieka stack trace na produkcji. Do tego helmet, CORS, limit rozmiaru body, rate limiting, logowanie z request id. W Express 5 odrzucone Promise trafiają do error handlera bez try/catch.

    Umiem?
    Zapytaj Claude RozwińPrzepytaj mniePytania pogłębiające
  3. Czym różnią się process.nextTick, Promise.then, setImmediate i setTimeout(fn, 0)?

    Moja odpowiedź

    Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.

    Pokaż odpowiedź

    Dla przedszkolaka: nextTick to karteczka „natychmiast po tym”, Promise to karteczka pilna, setImmediate to „zaraz po sprawdzeniu poczty”, a setTimeout to „przy następnej okazji, gdy minie czas”.

    Na rozmowę: process.nextTick wykonuje się przed wszystkimi innymi mikrozadaniami, zaraz po bieżącej operacji, więc nadużywany może zagłodzić I/O. Promise.then to mikrozadanie po nextTick. setImmediate działa w fazie check, czyli po fazie poll (I/O) bieżącego obrotu. setTimeout(fn, 0) działa w fazie timers następnego obrotu (minimum około 1 ms). Kolejność setTimeout vs setImmediate w głównym module nie jest gwarantowana, ale wewnątrz callbacku I/O setImmediate zawsze wygrywa.

    Umiem?
    Zapytaj Claude RozwińPrzepytaj mniePytania pogłębiające
Poziom wyżej

Wersja dla seniora

Tak wyglądają pytania na seniora i leada: nie ma jednej dobrej odpowiedzi, liczy się to, jak ważysz kompromisy i czy mówisz o skali, ryzyku i ludziach.

Przypadek 1

BFF w Node dla frontendu

Strona produktu wykonuje z przeglądarki 9 żądań do różnych mikroserwisów: produkt, ceny, dostępność, opinie, rekomendacje. Na telefonach strona ładuje się wolno, a awaria serwisu rekomendacji powoduje biały ekran. Proponujesz Backend for Frontend.

Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.

Moje rozwiązanie

Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.

Pokaż, czego szuka rekruter, i modelową odpowiedź

Co sprawdza rekruter

  • Czy wiesz, co BFF powinien robić, a czego nie
  • Czy myślisz o odporności: timeouty, fallbacki, circuit breaker
  • Czy pamiętasz o cache, obserwowalności i własności zespołu

Odpowiedź seniora

BFF to cienka warstwa w Node (Fastify albo NestJS) należąca do zespołu frontendu, która dla każdego ekranu zwraca dokładnie potrzebne dane jednym żądaniem. Agreguje wywołania równolegle (Promise.allSettled), przycina pola i ukrywa wewnętrzne adresy serwisów i tokeny. Logika biznesowa zostaje w serwisach domenowych.

Odporność: każde wywołanie ma timeout i budżet czasu całego żądania, dane krytyczne (produkt, cena) zwracają błąd, a niekrytyczne (rekomendacje, opinie) fallback albo pustą sekcję z flagą, którą front pokazuje jako „nie udało się załadować”. Przy powtarzających się błędach circuit breaker (np. opossum) przestaje odpytywać chory serwis. Pula połączeń HTTP z keep-alive.

Cache: odpowiedzi rzadko zmienne w pamięci lub Redis z krótkim TTL i stale-while-revalidate, nagłówki cache dla CDN tam, gdzie dane nie są osobiste. Obserwowalność przez OpenTelemetry: trace od przeglądarki przez BFF do serwisów, metryki czasu każdego wywołania. Typy odpowiedzi BFF współdzielone z frontem.

Typowe wpadki

  • Przeniesienie logiki biznesowej do BFF
  • Sekwencyjne wywołania zamiast równoległych
  • Brak timeoutów, przez co jeden wolny serwis zatrzymuje stronę
  • BFF bez właściciela i monitoringu

Dopytają o

  • Kiedy wybrałbyś GraphQL zamiast BFF z REST?
  • Jak wersjonujesz BFF przy aplikacji mobilnej ze starymi wersjami?
  • Jak przekazujesz tożsamość użytkownika do serwisów?
Zapytaj Claude Rozwiń caseZagraj interviewera
Przypadek 2

SSR na Node zwalnia pod obciążeniem

Serwis z SSR w Node działa dobrze rano, ale wieczorem przy ruchu czas odpowiedzi rośnie z 200 ms do 3 s, pamięć procesu rośnie aż do restartu przez orkiestrator co kilka godzin, a CPU jest na 100% tylko na jednym rdzeniu.

Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.

Moje rozwiązanie

Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.

Pokaż, czego szuka rekruter, i modelową odpowiedź

Co sprawdza rekruter

  • Czy wiesz, jak zdiagnozować zablokowany event loop
  • Czy umiesz szukać wycieków pamięci
  • Czy znasz skalowanie Node na wiele rdzeni i cache SSR

Odpowiedź seniora

Jeden rdzeń na 100% i rosnące opóźnienia to zablokowany event loop. Mierzę event loop lag (perf_hooks.monitorEventLoopDelay) jako metrykę i robię profil CPU pod obciążeniem (clinic flame, --cpu-prof). Typowi winowajcy to synchroniczne operacje w renderze: duże JSON.stringify stanu do HTML, wyrażenia regularne, synchroniczne czytanie plików, ciężkie biblioteki formatowania wywoływane tysiące razy.

Pamięć: porównuję heap snapshoty w odstępach (Chrome DevTools przez --inspect albo heapdump). Częste przyczyny to cache w module bez limitu (Map rosnąca z każdym URL), store tworzony globalnie zamiast per żądanie, przez co dane użytkowników mieszają się i rosną, oraz listenery dodawane przy każdym żądaniu. Naprawiam: LRU z limitem, wszystko związane z żądaniem tworzone w jego zasięgu.

Skalowanie: kilka procesów na maszynę (cluster lub więcej replik z limitem CPU), cache wyrenderowanego HTML dla stron niepersonalizowanych na CDN z stale-while-revalidate, streaming SSR, żeby szybciej wysłać pierwszy bajt. Test obciążeniowy (k6, autocannon) w CI przed wydaniem.

Typowe wpadki

  • Zwiększenie pamięci kontenera jako rozwiązanie wycieku
  • Szukanie problemu bez metryki event loop lag
  • Globalny store współdzielony między żądaniami

Dopytają o

  • Jak rozpoznasz wyciek w produkcji bez restartu procesu?
  • Kiedy przeniósłbyś ciężką pracę do worker_threads?
  • Jakie ryzyko bezpieczeństwa niesie globalny store w SSR?
Zapytaj Claude Rozwiń caseZagraj interviewera
Przypadek 3

Node na serwerze, serverless czy edge?

Startup buduje nowy produkt: aplikacja Next.js, API dla aplikacji mobilnej, generowanie PDF, wysyłka maili i webhooki od płatności. CTO pyta, czy wszystko wrzucić w funkcje serverless, na edge, czy postawić zwykłe kontenery z Node.

Zanim rozwiniesz: powiedz na głos, jak byś to rozwiązał, i nazwij co najmniej jeden kompromis.

Moje rozwiązanie

Zapisuje się samo w tej przeglądarce. Kopię zrobisz na stronie Notatki.

Pokaż, czego szuka rekruter, i modelową odpowiedź

Co sprawdza rekruter

  • Czy znasz ograniczenia każdego modelu: czas wykonania, cold start, API
  • Czy dobierasz platformę do rodzaju zadania, a nie jedną do wszystkiego
  • Czy myślisz o kosztach i połączeniach do bazy

Odpowiedź seniora

Dobieram według charakteru zadania. Edge (Vercel Edge, Cloudflare Workers) ma minimalny cold start i jest blisko użytkownika, ale ograniczone API Node i krótki czas wykonania. Nadaje się do middleware, przekierowań, testów A/B, geolokalizacji i prostych odpowiedzi z cache, nie do ciężkiej logiki ani bezpośrednich połączeń z bazą.

Serverless (Lambda, funkcje Vercel) dobrze pasuje do API o zmiennym ruchu i webhooków: płacimy za użycie i skalujemy do zera. Trzeba pamiętać o cold startach, limitach czasu i połączeniach do bazy (pooler typu PgBouncer, RDS Proxy albo baza serverless z HTTP). Generowanie PDF przez headless Chrome jest ciężkie i długie, więc lepiej w kolejce (SQS) z workerem w kontenerze.

Kontenery z Node (ECS, Cloud Run, Kubernetes) wybieram dla stałego ruchu, długich połączeń (WebSocket), zadań w tle i gdy koszt serverless przy dużym stałym ruchu przewyższa koszt maszyn. Na start rekomenduję platformę zarządzaną z serverless dla aplikacji i API, kolejkę z workerem dla PDF i maili oraz przegląd kosztów co miesiąc.

Typowe wpadki

  • Jedna platforma dla wszystkiego bez analizy
  • Połączenia z Postgresem z każdej funkcji serverless bez poolera
  • Długie zadania w funkcji z limitem czasu

Dopytają o

  • Jak zapewnisz, że webhook płatności nie zostanie przetworzony dwa razy?
  • Przy jakim ruchu przeniósłbyś API z serverless do kontenerów?
  • Jak lokalnie odtworzysz środowisko edge do testów?
Zapytaj Claude Rozwiń caseZagraj interviewera

Skróty klawiszowe

/
szukaj tematu
Enter
w wyszukiwarce: otwórz pierwszy wynik
N
notatki do tematu
[ ]
poprzedni / następny temat
G potem T
lista tematów
G potem P
powtórka
G potem N
wszystkie notatki
D
jasny / ciemny motyw
?
ta ściąga
Spacja, 1, 2, 3
w powtórce: pokaż, oceń

Pod każdym pytaniem są też skróty do Claude: rozwinięcie tematu, próbna rozmowa i ocena Twojej odpowiedzi z notatki.