Новое: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Все вопросы
NestJSMiddleКодинг

Что такое модуль @nestjs/schedule и как планировать задачи?

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

Модуль @nestjs/schedule оборачивает библиотеку node-cron и позволяет декларативно запускать задачи по расписанию через декораторы @Cron, @Interval и @Timeout прямо внутри провайдеров NestJS.

Установка и подключение

npm install @nestjs/schedule

Подключаем ScheduleModule в корневой модуль:

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { TasksService } from './tasks.service';

@Module({
  imports: [ScheduleModule.forRoot()],
  providers: [TasksService],
})
export class AppModule {}

Модуль @nestjs/schedule: планирование задач

Пакет @nestjs/schedule интегрирует планировщик node-cron в экосистему NestJS. Он регистрирует задачи как провайдеры и управляет их жизненным циклом вместе с приложением.

Три вида декораторов

  • @Cron(expression) — запускает метод по cron-выражению.
  • @Interval(milliseconds) — запускает метод каждые N миллисекунд (аналог setInterval).
  • @Timeout(milliseconds) — запускает метод один раз через N миллисекунд после старта приложения.

Пример сервиса с задачами

import { Injectable, Logger } from '@nestjs/common';
import { Cron, CronExpression, Interval, Timeout } from '@nestjs/schedule';

@Injectable()
export class TasksService {
  private readonly logger = new Logger(TasksService.name);

  // Встроенная константа: каждый день в 00:00
  @Cron(CronExpression.EVERY_DAY_AT_MIDNIGHT)
  handleDailyCleanup(): void {
    this.logger.log('Запуск ежедневной очистки...');
  }

  // Произвольное cron-выражение: каждые 15 минут
  @Cron('0 */15 * * * *', { name: 'fetchRates', timeZone: 'Europe/Moscow' })
  async fetchExchangeRates(): Promise<void> {
    this.logger.log('Обновление курсов валют');
    // await this.ratesService.update();
  }

  // Каждые 5 секунд
  @Interval(5000)
  handleHeartbeat(): void {
    this.logger.debug('Heartbeat tick');
  }

  // Один раз через 10 секунд после старта
  @Timeout(10000)
  handleStartupWarmup(): void {
    this.logger.log('Прогрев кэша после старта');
  }
}

Динамическое управление задачами

Для программного управления задачами инжектируем SchedulerRegistry:

import { Injectable } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';
import { CronJob } from 'cron';

@Injectable()
export class DynamicTasksService {
  constructor(private readonly schedulerRegistry: SchedulerRegistry) {}

  pauseJob(name: string): void {
    const job = this.schedulerRegistry.getCronJob(name);
    job.stop(); // ставим на паузу
  }

  resumeJob(name: string): void {
    const job = this.schedulerRegistry.getCronJob(name);
    job.start();
  }

  addDynamicJob(name: string, cronTime: string, callback: () => void): void {
    const job = new CronJob(cronTime, callback);
    this.schedulerRegistry.addCronJob(name, job);
    job.start();
  }

  deleteJob(name: string): void {
    this.schedulerRegistry.deleteCronJob(name);
  }
}

Опции декоратора @Cron

@Cron('0 0 * * * *', {
  name: 'hourlySyncJob',      // имя для SchedulerRegistry
  timeZone: 'UTC',           // часовой пояс (важно для серверов без TZ-настройки)
  disabled: false,           // можно отключить задачу при инициализации
})
async hourlySync(): Promise<void> { /* ... */ }

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

  • Несколько реплик — при горизонтальном масштабировании задача запустится на каждом инстансе одновременно. Необходима распределённая блокировка (Redis-lock через redlock или аналог).
  • Время выполнения превышает интервал — @Interval не ждёт завершения предыдущего вызова. Если задача занимает больше времени, чем интервал, вызовы начнут накапливаться.
  • Необработанные исключения — ошибка внутри задачи не проксируется в глобальный фильтр исключений NestJS, поэтому нужно явно оборачивать тело метода в try/catch.
  • Часовой пояс сервера — если timeZone не указан явно, задача использует часовой пояс операционной системы контейнера, что может приводить к неожиданному поведению в разных окружениях.
  • ScheduleModule.forRoot() вызывается один раз — повторный импорт в feature-модулях вызовет ошибку регистрации дублирующихся задач.
  • Метод должен быть публичным — декораторы @Cron, @Interval и @Timeout не работают на private и protected методах из-за ограничений рефлексии TypeScript.
  • Тестирование — в unit-тестах ScheduleModule нужно мокировать через { provide: SchedulerRegistry, useValue: mockRegistry }, иначе тесты запускают реальные таймеры.

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

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

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

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

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

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

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

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

Источники

  • https://docs.nestjs.com/techniques/task-scheduling
←Предыдущий вопросКак реализовать WebSockets в NestJS с помощью Gateways?

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

NestJSobservabilityreliability

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

  • Fullstack JavaScript разработчик
  • Senior Backend Developer
  • Automation QA Engineer (Payments)