Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 987новых вакансий за сутки·91 463вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 238
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python16 417
  • Облачные технологии13 174
  • QA вакансии3 433
  • Backend вакансии2 035
  • Инженер данных1 666
  • Продакт-менеджер1 162

Разработка

  • Android1 816
  • iOS1 666
  • AI вакансии937
  • Fullstack вакансии892
  • Frontend вакансии717
  • Mobile вакансии38

По стеку

  • Go8 561
  • Java6 090
  • Node.js1 889
  • Kotlin1 554
  • .NET1 545
  • Rust1 432
  • PHP640
  • C#562
  • C++498

DevOps и инфраструктура

  • Kubernetes7 303
  • DevOps вакансии5 594
  • Linux-инфраструктура5 291
  • Terraform / IaC4 014
  • CI/CD2 557
  • Мониторинг и Observability1 735
  • SRE548
  • Кибербезопасность398

Аналитика и данные

  • Data Scientist1 033
  • Бизнес-аналитик868
  • Аналитик данных829
  • Системный аналитик134

Другие направления

  • Проджект-менеджер524
  • UI/UX дизайн129
  • Ручное тестирование14

По регионам

  • Вакансии в США44 779
  • Вакансии в Европе21 327
  • Вакансии в Канаде4 450
  • Работа в России3 877

По формату

  • Удалённые вакансии73 902
  • Релокация в США44 794
  • Гибридная работа11 412
  • Офисная работа6 956

По уровню

  • Senior вакансии41 197
  • Middle вакансии20 361
  • Junior вакансии6 638

Сейчас нанимают

Все компании
  • Wise194 вакансии
  • Rakuten189 вакансий
  • ASML164 вакансии
  • Grab136 вакансий
  • Celonis45 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме NestJSВсе вопросы
NestJSJuniorТеория

Что такое декораторы (decorators) в NestJS? Приведите примеры часто используемых декораторов.

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Декораторы в NestJS — TypeScript-аннотации на основе reflect-metadata. Используются для маршрутизации (@Get, @Post), DI (@Injectable, @Inject), параметров (@Body, @Param, @Query) и кросс-срезовых задач (@UseGuards, @UsePipes).

Декораторы классов

@Module({ imports: [], controllers: [], providers: [] })
export class AppModule {}

@Controller('users')     // базовый путь /users
export class UsersController {}

@Injectable()            // провайдер, управляемый DI
export class UsersService {}

@Global()                // модуль доступен везде без импорта
@Module({ providers: [ConfigService], exports: [ConfigService] })
export class ConfigModule {}

Декораторы в NestJS

Декораторы — синтаксический сахар TypeScript над функциями-обёртками, которые применяются к классам, методам, параметрам и свойствам. NestJS строит на них весь метаданных-ориентированный DI и маршрутизацию. Под капотом используется reflect-metadata для хранения метаданных при компиляции.

Декораторы методов контроллера (роуты)

@Get('profile')          // GET /users/profile
@Post()                  // POST /users
@Put(':id')              // PUT /users/:id
@Patch(':id')            // PATCH /users/:id
@Delete(':id')           // DELETE /users/:id
@All('*')                // любой метод

@HttpCode(201)           // явный статус ответа
@Header('Cache-Control', 'no-cache')  // заголовок ответа
@Redirect('https://nestjs.com', 301) // редирект

Декораторы параметров метода

@Get(':id')
findOne(
  @Param('id', ParseIntPipe) id: number,   // route param
  @Query('sort') sort: string,              // query string
  @Body() dto: CreateUserDto,              // request body
  @Req() req: Request,                     // весь объект запроса
  @Res({ passthrough: true }) res: Response, // объект ответа
  @Headers('authorization') auth: string,  // заголовок
  @Ip() ip: string,                        // IP клиента
  @HostParam('account') account: string,   // поддомен
) {}

Декораторы области видимости и жизненного цикла

// Scope.REQUEST — новый экземпляр на каждый запрос
@Injectable({ scope: Scope.REQUEST })
export class RequestScopedService {}

// Scope.TRANSIENT — новый экземпляр на каждый inject
@Injectable({ scope: Scope.TRANSIENT })
export class TransientService {}

Декораторы guards, interceptors, pipes, filters

@UseGuards(JwtAuthGuard)           // Guard — авторизация
@UseInterceptors(LoggingInterceptor) // Interceptor — до/после
@UsePipes(ValidationPipe)          // Pipe — трансформация/валидация
@UseFilters(HttpExceptionFilter)   // Filter — обработка ошибок

Пользовательский декоратор параметра

// decorators/current-user.decorator.ts
import { createParamDecorator, ExecutionContext } from '@nestjs/common';

export const CurrentUser = createParamDecorator(
  (data: string | undefined, ctx: ExecutionContext) => {
    const request = ctx.switchToHttp().getRequest();
    const user = request.user;
    return data ? user?.[data] : user;
  },
);

// использование
@Get('me')
getProfile(@CurrentUser() user: User) {
  return user;
}

@Get('me/email')
getEmail(@CurrentUser('email') email: string) {
  return { email };
}

Декоратор SetMetadata и Reflector

// decorators/roles.decorator.ts
import { SetMetadata } from '@nestjs/common';
export const Roles = (...roles: string[]) =>
  SetMetadata('roles', roles);

// controllers/admin.controller.ts
@Roles('admin')
@UseGuards(RolesGuard)
@Get('settings')
getSettings() {}

// guards/roles.guard.ts
@Injectable()
export class RolesGuard implements CanActivate {
  constructor(private reflector: Reflector) {}

  canActivate(ctx: ExecutionContext): boolean {
    const roles = this.reflector.getAllAndOverride<string[]>('roles', [
      ctx.getHandler(),
      ctx.getClass(),
    ]);
    if (!roles) return true;
    const { user } = ctx.switchToHttp().getRequest();
    return roles.some(role => user.roles.includes(role));
  }
}

Подводные камни

  • emitDecoratorMetadata в tsconfig — без "emitDecoratorMetadata": true и "experimentalDecorators": true DI вообще не работает; тип параметра не сохраняется в метаданных.
  • @Res() без passthrough — если инжектируете @Res() без { passthrough: true }, NestJS перестаёт управлять ответом: интерцепторы не сработают, JSON не сериализуется автоматически.
  • Порядок декораторов — декораторы применяются снизу вверх; @UseGuards над @UseInterceptors означает, что guard сработает первым — это может удивить.
  • @Global() злоупотребление — глобальные модули упрощают доступ, но скрывают зависимости и усложняют тестирование отдельных модулей.
  • createParamDecorator и DI — внутри createParamDecorator нельзя инжектировать сервисы напрямую; для этого нужен Pipe или guard, а не декоратор параметра.
  • SetMetadata и наследование — метаданные контроллера не наследуются автоматически в дочерних классах; нужно явно применять декоратор в каждом классе.

Частые вопросы на собеседовании

  • Что такое NestJS и каковы его основные принципы проектирования?
  • Какова роль модулей в NestJS? Как работает система модулей?
  • В каких backend-проектах NestJS является сильным выбором, а где лучше выбрать более простой или другой стек?
  • Что такое dependency injection (DI) в NestJS и как он реализован?

Типичные ошибки

  • Дает общий ответ про Node.js и не называет конкретные API NestJS.
  • Не объясняет, где в lifecycle находится декораторы NestJS.
  • Не разделяет validation, authorization, business logic и persistence.
  • Игнорирует ошибки, лимиты входных данных, observability и тестирование.

Что проверяет интервьюер

  • Может объяснить декораторы NestJS на примере кода.
  • Называет ключевые API: @Get(), @Body(), @UseGuards().
  • Использует точные API NestJS, а не вымышленные hooks/decorators/methods.
  • Видит production-риски: безопасность, отказоустойчивость, логирование и тесты.

Как вы знаете этот вопрос?

Проверить себя по теме NestJS →

Источники

  • https://docs.nestjs.com/custom-decorators
  • https://docs.nestjs.com/controllers
←Предыдущий вопросКакие архитектурные решения NestJS задаёт вокруг request lifecycle, middleware, dependency model, validation и error handling?Следующий вопрос→Расскажите о случае, когда вы проектировали или улучшали сервис на NestJS с учётом транзакций, безопасности, фоновых задач или мониторинга.

Связанные темы

NestJSapi-designtyping

Вакансии с этим навыком

  • Fullstack JavaScript разработчик
  • Senior Backend Developer