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.
- Event loop
- Streams
- Express
- Security
- Worker threads
Pytania według poziomu
Junior
Podstawowe pojęcia i składnia · 50 pytań
Middle
Praktyka, niuanse i optymalizacja · 50 pytań
Senior
Architektura, mechanizmy wewnętrzne, przypadki brzegowe · 50 pytań
Przykładowe pytania
Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.
Node.js · Junior
- 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.
- 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.
- 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ń.
- Co z poniższych NIE jest domyślnie dostępne w Node.js?
Poprawna odpowiedź:
documenti DOMW Node.js nie ma strony, więc nie ma
documentaniwindow. Zamiast tego są modułyfs,httpiprocess. Timery iconsoleistnieją w obu środowiskach.
Node.js · Middle
- 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 uruchamiasetImmediate, close obsługuje zdarzeniaclose. Kroku render nie ma: to pojęcie przeglądarki. - Dlaczego rekurencyjne wywołania
process.nextTickmogą 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ń.
setImmediatepozwala event loop obsłużyć I/O między iteracjami. - 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ęzlibGniazda 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. - 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 zsetImmediatepomiędzy nimi.
Node.js · Senior
- 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.
- 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-sizepod 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.
- Który wzorzec to klasyczna przyczyna wycieku pamięci w serwerze Node.js?
Poprawna odpowiedź:
Mapna poziomie modułu używana jako cache, uzupełniana przy każdym żądaniu i nigdy nieczyszczonaWszystko, co jest osiągalne z obiektu na poziomie modułu, żyje wiecznie. Używaj ograniczonego cache LRU z TTL,
WeakMapz kluczami-obiektami albo zewnętrznego cache, np. Redis. - 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śnieWidok porównania pokazuje obiekty zaalokowane między snapshotami, a ścieżki retainerów pokazują, co trzyma je przy życiu.
--heapsnapshot-near-heap-limitmoże zrobić snapshot tuż przed awarią.
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 →