← Wszystkie tematy

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.

Pytania według poziomu

Przykładowe pytania

Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.

NestJS · Junior

  1. 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.

  2. Jakiej platformy HTTP NestJS używa domyślnie?

    Poprawna odpowiedź: Express

    Express to domyślny adapter. Można przejść na Fastify przez @nestjs/platform-fastify dla lepszej wydajności, zostawiając większość kodu bez zmian.

  3. Jak utworzyć nowy projekt NestJS?

    Poprawna odpowiedź: npx @nestjs/cli new my-app (albo nest new my-app z zainstalowanym CLI)

    CLI tworzy main.ts, główny AppModule, przykładowy kontroler i serwis oraz konfigurację testów. nest generate (nest g) dodaje moduły, kontrolery i serwisy.

  4. 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.

Wszystkie 75 pytań z odpowiedziami →

NestJS · Middle

  1. 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.

  2. 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ów

    Middleware nie wie, który handler trasy się wykona. Guardy są przeznaczone do decyzji „czy to żądanie może iść dalej?”.

  3. 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() i context.getType().

  4. 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.

Wszystkie 75 pytań z odpowiedziami →

NestJS · Senior

  1. Skąd Nest wie, co wstrzyknąć do constructor(private users: UsersService)?

    Poprawna odpowiedź: TypeScript zapisuje metadane design:paramtypes (z emitDecoratorMetadata), a Nest czyta je przez reflect-metadata i szuka providerów po tokenie-klasie

    Dlatego 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.

  2. Dlaczego bundler lub kompilator bez obsługi metadanych dekoratorów może zepsuć aplikację Nest?

    Poprawna odpowiedź: Bez design:paramtypes Nest 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.

  3. 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.

  4. 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.

Wszystkie 75 pytań z odpowiedziami →

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 →