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

+682новые вакансии за сутки·52 808вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python5 917
  • Облачные технологии4 462
  • QA вакансии1 683
  • Android1 136
  • Инженер данных753
  • Продакт-менеджер293

Разработка

  • iOS1 085
  • Backend вакансии982
  • Fullstack вакансии435
  • AI вакансии362
  • Frontend вакансии361
  • Mobile вакансии27

По стеку

  • Go3 333
  • Java2 015
  • Kotlin904
  • Node.js734
  • Rust490
  • .NET474
  • PHP271
  • C++208
  • C#191

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

  • Kubernetes2 532
  • Linux-инфраструктура2 017
  • DevOps вакансии1 827
  • Terraform / IaC1 535
  • CI/CD848
  • Мониторинг и Observability707
  • SRE221
  • Кибербезопасность37

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

  • Аналитик данных467
  • Data Scientist417
  • Бизнес-аналитик335
  • Системный аналитик49

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

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

По регионам

  • Вакансии в США22 951
  • Вакансии в Европе9 026
  • Работа в России2 963
  • Вакансии в Канаде2 034

По формату

  • Удалённые вакансии39 691
  • Релокация в США22 951
  • Гибридная работа3 633
  • Офисная работа2 761

По уровню

  • Senior вакансии19 599
  • Middle вакансии11 130
  • Junior вакансии3 562

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify17 вакансий
  • Celonis14 вакансий
  • UiPath13 вакансий

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

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

Какие особенности runtime, type system или memory model JavaScript реально влияют на архитектуру приложения?

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

Event loop делает Node.js I/O-эффективным, но синхронный CPU-код блокирует всё; прототипная типизация требует runtime-валидации (Zod); GC паузы V8 критичны для latency-sensitive сервисов.

Event Loop и однопоточный runtime

V8 выполняет JavaScript в одном потоке. Event loop состоит из фаз: timers → pending callbacks → idle/prepare → poll → check (setImmediate) → close callbacks. Это архитектурно важно: блокирующая операция в главном потоке (синхронный fs.readFileSync, тяжёлый JSON.parse на 50 MB) замораживает весь сервер.

// Плохо: блокирует event loop
const data = fs.readFileSync('/large-file.json'); // блокирует на 200ms
JSON.parse(data.toString()); // ещё 100ms — все запросы ждут

// Хорошо: не блокирует
const data = await fs.promises.readFile('/large-file.json');
const parsed = await new Promise(resolve =>
  setTimeout(() => resolve(JSON.parse(data)), 0) // или Worker Thread
);

Архитектурное следствие: CPU-intensive задачи выносятся в Worker Threads (node:worker_threads) или отдельные процессы. BFF-серверы, WebSocket-хабы и API-шлюзы идеально ложатся на event loop модель.

Прототипная система типов и dynamic typing

JavaScript использует прототипное наследование и динамическую типизацию. Это влияет на архитектуру: без TypeScript контракты между модулями держатся только на конвенциях и тестах. V8 оптимизирует «горячий» код через JIT, но только если объект не меняет форму (shape/hidden class). Добавление свойств после создания объекта деоптимизирует путь выполнения.

// TypeScript на этапе компиляции ловит контрактные ошибки
interface User {
  id: string;
  email: string;
}

function sendEmail(user: User): void {
  // В runtime это всё равно JS — нет гарантии, что user.email существует
  // если данные пришли из внешнего API без валидации
}

// Zod добавляет runtime-валидацию:
import { z } from 'zod';
const UserSchema = z.object({ id: z.string(), email: z.string().email() });
const user = UserSchema.parse(apiResponse); // throws если схема не совпала

Garbage Collection и memory model

V8 использует generational GC: young generation (Scavenge, ~1-2ms паузы) и old generation (Mark-Sweep/Mark-Compact, до 100ms паузы). Это критично для real-time приложений. Memory leaks в Node.js чаще всего возникают через:

  • Замыкания, удерживающие большие объекты (event listeners не удалены через removeEventListener)
  • Глобальные кеши без TTL или ограничения размера
  • Циклические ссылки с native объектами (не мешают GC в V8, но могут в старых движках)
// Утечка памяти: listener не убирается
class DataProcessor extends EventEmitter {
  start() {
    // Каждый вызов start() добавляет listener без удаления предыдущего
    someGlobalEmitter.on('data', this.handleData.bind(this));
  }
}

// Правильно:
start() {
  this.boundHandler = this.handleData.bind(this);
  someGlobalEmitter.on('data', this.boundHandler);
}
stop() {
  someGlobalEmitter.off('data', this.boundHandler);
}

Асинхронная модель и Promise chain

Microtask queue (Promise callbacks, queueMicrotask) выполняется между фазами event loop и имеет приоритет над macrotasks (setTimeout, setImmediate). Бесконечная цепочка resolved promises заблокирует event loop так же, как синхронный код.

// Потенциальная проблема: рекурсивные promises без yield
async function infiniteLoop() {
  while (true) {
    await Promise.resolve(); // microtask — не даёт I/O callbacks выполниться!
  }
}

// Правильно: явный yield через setImmediate
async function safeLoop() {
  while (true) {
    await new Promise(r => setImmediate(r)); // даёт event loop пройти цикл
  }
}

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

  • Считать, что async/await делает код параллельным — await сериализует, Promise.all() параллелизует.
  • Игнорировать unhandledRejection — в Node.js 15+ это завершает процесс; всегда вешать process.on('unhandledRejection').
  • Мутировать объекты между Worker Threads вместо передачи через postMessage (structured clone) или SharedArrayBuffer.
  • Не учитывать, что TypeScript типы стираются в runtime — JSON.parse() возвращает any, runtime-валидация обязательна для внешних данных.
  • Полагаться на порядок свойств объекта — в V8 он обычно стабилен, но спецификация не гарантирует для нецелочисленных ключей.
  • Не профилировать GC паузы в production — clinic.js, --inspect флаг и Chrome DevTools Memory Profiler.
  • Игнорировать --max-old-space-size при деплое в контейнер — по умолчанию V8 берёт 25% RAM хоста, не контейнера.

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

  • Как защититься от XSS в браузерном приложении? Где помогают CSP, escaping и Trusted Types?
  • В чём разница между var, let и const? Как hoisting влияет на каждое из них?
  • Что такое Promise? Чем они отличаются от callback'ов?
  • Для каких задач JavaScript является сильным выбором, а где лучше честно выбрать другой язык?

Что портит ответ

  • Знать термины JavaScript, но не понимать связи между абстракциями
  • Объяснять поведение через отдельные примеры вместо причинной модели
  • Не связывать mental model с диагностикой ошибок

Что слушает интервьюер

  • Понимает ключевые абстракции JavaScript
  • Может предсказывать поведение системы через mental model
  • Связывает модель с debugging и production decisions

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

Проверить себя по теме JavaScript →
←Предыдущий вопросКак понять, что команда использует JavaScript идиоматично, а не переносит привычки из другого языка?Следующий вопрос→В чём разница между `==` и `===`?

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

JavaScriptsystems-thinkingtechnical-communicationtechnology-selectiontrade-off-analysis

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

JavaScript вакансии
  • Middle/Senior Full-Stack Python Engineer (Django) (#5841)
  • Senior .NET Fullstack Engineer( With Angular) (#5846)
  • Junior Frontend Developer
  • Salesforce Engineer - Backoffice Business Support Section, Business Support Development Department (BSD)
  • SAP BTP Architect/Engineer - Corporate IT Service Department (CITSD)