Pytania rekrutacyjne NestJS z odpowiedziami
Moduły, kontrolery i providery, wstrzykiwanie zależności, pipes, guards, interceptory i filtry, walidacja, TypeORM i Prisma, testowanie, mikroserwisy i GraphQL.
225 pytań na rozmowę rekrutacyjną z tematu NestJS z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.
- Modules
- DI
- Guards
- Interceptors
- Testing
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.
NestJS · Junior
- Czym jest NestJS?
Poprawna odpowiedź: Frameworkiem Node.js do budowania aplikacji serwerowych w TypeScript, z modułami, wstrzykiwaniem zależności i dekoratorami
Nest daje uporządkowaną architekturę inspirowaną Angularem. Pod spodem działa framework HTTP, domyślnie Express albo Fastify, a Nest dodaje moduły, DI, pipes, guards i więcej.
- Jakiej platformy HTTP NestJS używa domyślnie?
Poprawna odpowiedź: Express
Express to domyślny adapter. Można przejść na Fastify przez
@nestjs/platform-fastifydla lepszej wydajności, zostawiając większość kodu bez zmian. - Jak utworzyć nowy projekt NestJS?
Poprawna odpowiedź:
npx @nestjs/cli new my-app(albonest new my-appz zainstalowanym CLI)CLI tworzy
main.ts, głównyAppModule, przykładowy kontroler i serwis oraz konfigurację testów.nest generate(nest g) dodaje moduły, kontrolery i serwisy. - Jakiego języka głównie używa NestJS?
Poprawna odpowiedź: TypeScriptu (zwykły JavaScript też jest obsługiwany)
Nest opiera się na dekoratorach TypeScriptu i metadanych typów przy wstrzykiwaniu zależności, więc TypeScript jest naturalnym wyborem.
NestJS · Middle
- W jakiej kolejności działają warstwy przetwarzania żądania w Nest?
Poprawna odpowiedź: Middleware → guards → interceptory (przed) → pipes → handler → interceptory (po) → filtry wyjątków (przy błędzie)
W każdej warstwie najpierw działają globalne, potem na poziomie kontrolera, potem na poziomie trasy. Filtry wyjątków obsługują błędy rzucone w dowolnym miejscu tej drogi.
- Dlaczego uwierzytelnianie powinno być guardem, a nie middleware?
Poprawna odpowiedź: Guard ma
ExecutionContext, więc wie, jaki handler i metadane (role,@Public()) obowiązują, i działa dla HTTP, GraphQL i mikroserwisówMiddleware nie wie, który handler trasy się wykona. Guardy są przeznaczone do decyzji „czy to żądanie może iść dalej?”.
- Do czego służy
ExecutionContext?Poprawna odpowiedź: Daje guardom i interceptorom bieżący handler, klasę i żądanie oraz pozwala jednej implementacji działać dla HTTP, RPC i WebSockets
Typowe wywołania to
context.switchToHttp().getRequest(),context.getHandler(),context.getClass()icontext.getType(). - Jak interceptor może opakować każdą odpowiedź w
{ data: ... }?Poprawna odpowiedź:
return next.handle().pipe(map((data) => ({ data })))Interceptory to miejsce na przekrojowe zmiany odpowiedzi. Bądź konsekwentny: błędy kształtują filtry wyjątków, a nie interceptory.
NestJS · Senior
- Skąd Nest wie, co wstrzyknąć do
constructor(private users: UsersService)?Poprawna odpowiedź: TypeScript zapisuje metadane
design:paramtypes(zemitDecoratorMetadata), a Nest czyta je przezreflect-metadatai szuka providerów po tokenie-klasieDlatego importy samych typów (
import type) lub interfejsy psują wstrzykiwanie: nie ma wartości w czasie działania, której można użyć jako tokenu. - Dlaczego bundler lub kompilator bez obsługi metadanych dekoratorów może zepsuć aplikację Nest?
Poprawna odpowiedź: Bez
design:paramtypesNest nie rozwiąże zależności konstruktora po typie, więc wstrzykiwanie zawodzi, chyba że każdy parametr ma@Inject(token)esbuild na przykład nie zapisuje metadanych dekoratorów. SWC je obsługuje przy właściwej konfiguracji, dlatego Nest dokumentuje ustawienia SWC.
- Jak zorganizowany jest kontener DI między modułami?
Poprawna odpowiedź: Każdy moduł ma własny zakres injectora; providery są widoczne w module, a w modułach importujących tylko wtedy, gdy są eksportowane
Przez tę enkapsulację ta sama klasa w providerach dwóch modułów daje dwie instancje.
- Provider o zakresie REQUEST jest wstrzyknięty do serwisu-singletonu. Co się stanie?
Poprawna odpowiedź: Serwis i jego konsumenci też staną się request-scoped, więc cały łańcuch będzie tworzony dla każdego żądania
Zakres propaguje się w górę. W obciążonej aplikacji może to pomnożyć alokacje na żądanie; dla wielodostępności są durable providery lub ALS.
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 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 →