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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 103
  • Облачные технологии14 031
  • QA вакансии3 458
  • Backend вакансии2 078
  • Инженер данных1 772
  • Продакт-менеджер1 238

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии973
  • AI вакансии948
  • Frontend вакансии736
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 542
  • Node.js2 017
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP682
  • C++570

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

  • Kubernetes7 748
  • DevOps вакансии6 051
  • Linux-инфраструктура5 485
  • Terraform / IaC4 252
  • CI/CD3 239
  • Мониторинг и Observability1 781
  • SRE560
  • Кибербезопасность446

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

  • Data Scientist1 114
  • Бизнес-аналитик915
  • Аналитик данных828
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 172
  • Вакансии в Европе23 542
  • Вакансии в Канаде4 358
  • Работа в России3 909

По формату

  • Удалённые вакансии72 938
  • Релокация в США43 172
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии41 839
  • Middle вакансии20 268
  • Junior вакансии6 588

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

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

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

Как работают lifecycle hooks (onModuleInit, onApplicationShutdown) и где они нужны?

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

Lifecycle hooks NestJS: onModuleInit выполняется после DI-инициализации модуля (подключение к БД, прогрев кэша), onApplicationShutdown — при завершении процесса (закрытие соединений, flush буферов).

onModuleInit — инициализация при старте

import { Injectable, OnModuleInit } from '@nestjs/common';
import { InjectDataSource } from '@nestjs/typeorm';
import { DataSource } from 'typeorm';

@Injectable()
export class DatabaseService implements OnModuleInit {
  constructor(@InjectDataSource() private dataSource: DataSource) {}

  async onModuleInit() {
    // Проверить соединение с БД при старте
    await this.dataSource.query('SELECT 1');
    console.log('Database connection verified');
  }
}

Lifecycle Hooks в NestJS

Полный жизненный цикл приложения

  • onModuleInit — после инициализации зависимостей модуля.
  • onApplicationBootstrap — после инициализации всех модулей.
  • onModuleDestroy — перед уничтожением модуля.
  • beforeApplicationShutdown — получает сигнал OS (SIGTERM и т.д.).
  • onApplicationShutdown — финальная очистка.

Прогрев кэша

@Injectable()
export class ConfigCacheService implements OnModuleInit {
  private settings: Map<string, string> = new Map();

  constructor(private readonly settingsRepo: SettingsRepository) {}

  async onModuleInit() {
    const all = await this.settingsRepo.findAll();
    for (const s of all) {
      this.settings.set(s.key, s.value);
    }
    console.log(`Loaded ${this.settings.size} settings into cache`);
  }

  get(key: string): string | undefined {
    return this.settings.get(key);
  }
}

onApplicationShutdown — graceful shutdown

// main.ts — обязательно включить!
const app = await NestFactory.create(AppModule);
app.enableShutdownHooks();

// Перехват сигналов OS
process.on('SIGTERM', () => app.close());
process.on('SIGINT', () => app.close());

// queue.service.ts
@Injectable()
export class QueueService implements OnApplicationShutdown {
  private consumer: Consumer;

  async onApplicationShutdown(signal?: string) {
    console.log(`Received shutdown signal: ${signal}`);
    // Дождаться обработки текущих сообщений
    await this.consumer.disconnect();
    await this.producer.disconnect();
  }
}

// http-server.service.ts
@Injectable()
export class ServerService implements BeforeApplicationShutdown {
  beforeApplicationShutdown(signal?: string) {
    console.log(`Preparing for shutdown, signal: ${signal}`);
    // Перестать принимать новые соединения
  }
}

onApplicationBootstrap — пост-инициализация

@Injectable()
export class SchedulerService implements OnApplicationBootstrap {
  constructor(private schedulerRegistry: SchedulerRegistry) {}

  onApplicationBootstrap() {
    // Безопасно запускать cron после инициализации всех модулей
    const job = new CronJob('0 */6 * * *', () => this.runSync());
    this.schedulerRegistry.addCronJob('data-sync', job);
    job.start();
  }
}

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

  • app.enableShutdownHooks() обязателен — без него OnApplicationShutdown не вызывается при SIGTERM, и процесс завершается мгновенно без очистки.
  • В Lambda / serverless окружениях onApplicationShutdown не вызывается при cold start timeouts — используйте try/finally в обработчиках.
  • onModuleInit выполняется синхронно в порядке инициализации модулей; долгая операция блокирует запуск приложения — добавьте timeout или retry.
  • Если onModuleInit бросает исключение, приложение не запустится; оберните нестабильные операции в try/catch с корректным логированием.
  • В тестах (Test.createTestingModule) lifecycle hooks вызываются только после явного вызова moduleRef.init() — без него onModuleInit не выполнится.
  • Порядок вызова shutdown hooks недетерминирован между разными сервисами; не полагайтесь на то, что один сервис завершится раньше другого.
  • onModuleDestroy vs onApplicationShutdown: первый вызывается при уничтожении конкретного модуля, второй — всего приложения; для финального освобождения ресурсов используйте shutdown.

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

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

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

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

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

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

Источники

  • https://docs.nestjs.com/techniques/events
  • https://docs.nestjs.com/microservices/basics

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

NestJSnestjs-productionrisk-analysistechnical-depth

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

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