← Wszystkie tematy

Pytania rekrutacyjne Node.js z odpowiedziami

Event loop i asynchroniczność, moduły, streamy i Buffer, system plików i HTTP, Express i Fastify, bezpieczeństwo, worker threads i skalowanie serwisów Node.js.

225 pytań na rozmowę rekrutacyjną z tematu Node.js 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.

Node.js · Junior

  1. Czym jest Node.js?

    Poprawna odpowiedź: Środowiskiem uruchomieniowym JavaScript opartym na silniku V8, które uruchamia JavaScript poza przeglądarką

    Node.js bierze silnik V8 z Chrome i dodaje API do systemu plików, sieci, procesów i nie tylko. Pisze się w nim serwery, CLI, narzędzia do budowania i skrypty.

  2. Jakiego silnika JavaScript używa Node.js?

    Poprawna odpowiedź: V8

    V8 to silnik Google, ten sam co w Chrome. SpiderMonkey działa w Firefoksie, a JavaScriptCore w Safari. Niektóre inne środowiska, na przykład Bun, używają JavaScriptCore.

  3. Jakiego modelu używa Node.js, żeby obsługiwać wiele połączeń jednocześnie?

    Poprawna odpowiedź: Jednowątkowej pętli zdarzeń (event loop) z nieblokującym I/O

    JavaScript działa w jednym głównym wątku. Operacje I/O, takie jak odczyt plików czy żądania sieciowe, trafiają do systemu i libuv, a callback uruchamia się później, więc jeden proces obsługuje tysiące połączeń.

  4. Co z poniższych NIE jest domyślnie dostępne w Node.js?

    Poprawna odpowiedź: document i DOM

    W Node.js nie ma strony, więc nie ma document ani window. Zamiast tego są moduły fs, http i process. Timery i console istnieją w obu środowiskach.

Wszystkie 75 pytań z odpowiedziami →

Node.js · Middle

  1. Która lista pokazuje główne fazy event loop w Node.js we właściwej kolejności?

    Poprawna odpowiedź: timers → pending callbacks → poll → check → close callbacks

    Timers uruchamia callbacki setTimeout/setInterval, poll czeka na I/O i uruchamia jego callbacki, check uruchamia setImmediate, close obsługuje zdarzenia close. Kroku render nie ma: to pojęcie przeglądarki.

  2. Dlaczego rekurencyjne wywołania process.nextTick mogą być niebezpieczne?

    Poprawna odpowiedź: Kolejka nextTick jest opróżniana w całości, zanim pętla pójdzie dalej, więc niekończące się nextTicki głodzą I/O

    To samo dotyczy niekończącego się łańcucha mikrozadań. setImmediate pozwala event loop obsłużyć I/O między iteracjami.

  3. Co domyślnie obsługuje pula wątków libuv?

    Poprawna odpowiedź: Operacje systemu plików, dns.lookup, część crypto (np. pbkdf2, scrypt) i pracę zlib

    Gniazda sieciowe używają asynchronicznych mechanizmów systemu (epoll, kqueue, IOCP) i nie potrzebują puli. Pula ma domyślnie 4 wątki, liczbę ustawia się przez UV_THREADPOOL_SIZE.

  4. Handler żądania przez 2 sekundy wykonuje pętlę mocno obciążającą CPU. Co dzieje się z innymi żądaniami?

    Poprawna odpowiedź: Czekają: gdy JavaScript działa w głównym wątku, event loop nie może obsłużyć niczego innego

    Przenieś ciężką pracę do worker_threads, osobnego serwisu albo kolejki zadań, albo podziel ją na małe kawałki z setImmediate pomiędzy nimi.

Wszystkie 75 pytań z odpowiedziami →

Node.js · Senior

  1. Jak zorganizowana jest sterta V8 na potrzeby odśmiecania?

    Poprawna odpowiedź: Na młodą generację (nowe obiekty, często sprzątane szybkim scavengerem) i starą generację (długo żyjące obiekty, sprzątane przez mark-sweep-compact)

    Większość obiektów umiera młodo, więc częste, tanie scavenge szybko je odzyskują. Obiekty, które przetrwają, trafiają do starej generacji, sprzątanej rzadziej i drożej, choć w dużej mierze współbieżnie i przyrostowo.

  2. Kontener ma 2 GB pamięci, ale proces Node.js pada z „JavaScript heap out of memory” przy około 1,4 GB. Co sprawdzić?

    Poprawna odpowiedź: Limit old space w V8: ustawić --max-old-space-size pod kontener, zostawiając miejsce na Buffery i pamięć natywną

    Nowsze wersje Node.js dobierają rozmiar sterty do limitu pamięci kontenera, ale sterta to nie cała pamięć: Buffery, kod natywny i stosy wątków są poza nią. Zostaw zapas.

  3. Który wzorzec to klasyczna przyczyna wycieku pamięci w serwerze Node.js?

    Poprawna odpowiedź: Map na poziomie modułu używana jako cache, uzupełniana przy każdym żądaniu i nigdy nieczyszczona

    Wszystko, co jest osiągalne z obiektu na poziomie modułu, żyje wiecznie. Używaj ograniczonego cache LRU z TTL, WeakMap z kluczami-obiektami albo zewnętrznego cache, np. Redis.

  4. Jak znaleźć, co wycieka w procesie Node.js?

    Poprawna odpowiedź: Zrobić kilka snapshotów sterty w odstępach czasu (v8.writeHeapSnapshot() lub DevTools) i porównać, liczba których obiektów stale rośnie

    Widok porównania pokazuje obiekty zaalokowane między snapshotami, a ścieżki retainerów pokazują, co trzyma je przy życiu. --heapsnapshot-near-heap-limit może zrobić snapshot tuż przed awarią.

Wszystkie 75 pytań z odpowiedziami →

Zadania z kodu

Napisz rozwiązanie prosto w przeglądarce, a testy od razu je sprawdzą. Klasyka rozmów rekrutacyjnych z JavaScriptu (debounce, deepClone, Promise.all, cache LRU) i z Reacta: komponenty i hooki, takie jak lista zadań, zakładki, useDebounce i useInterval.

Otwórz zadania →