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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python9 224
  • Облачные технологии6 770
  • QA вакансии2 176
  • Android1 322
  • Инженер данных940
  • Продакт-менеджер435

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C++273
  • C#210

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

  • Kubernetes4 025
  • Linux-инфраструктура3 060
  • DevOps вакансии2 713
  • Terraform / IaC2 214
  • Мониторинг и Observability1 106
  • CI/CD919
  • SRE341
  • Кибербезопасность90

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

  • Аналитик данных555
  • Data Scientist513
  • Бизнес-аналитик431
  • Системный аналитик65

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

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

По регионам

  • Вакансии в США29 375
  • Вакансии в Европе11 048
  • Работа в России3 627
  • Вакансии в Канаде2 514

По формату

  • Удалённые вакансии48 640
  • Релокация в США29 375
  • Гибридная работа5 790
  • Офисная работа4 553

По уровню

  • Senior вакансии25 029
  • Middle вакансии13 245
  • Junior вакансии4 377

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

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Какие ошибки делают разработчики, переходящие на JavaScript с другого языка или стека?

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

Переходя на JS с Java/Python/C#, разработчики чаще всего ошибаются: сериализуют параллельные запросы через await в цикле, теряют this в callback, путают CJS с ESM и игнорируют unhandled Promise rejections.

Перенос синхронного мышления в асинхронный код

Разработчики с Java/C#/PHP фоном пишут псевдосинхронный код, не понимая event loop:

// Типичная ошибка: блокирующий цикл
const results = [];
for (const id of ids) {
  const item = await fetchItem(id); // запросы идут последовательно!
  results.push(item);
}

// Правильно: параллельные запросы
const results = await Promise.all(ids.map(id => fetchItem(id)));

// Или с ограничением конкурентности (p-limit):
import pLimit from 'p-limit';
const limit = pLimit(5); // не более 5 параллельных запросов
const results = await Promise.all(
  ids.map(id => limit(() => fetchItem(id)))
);

Игнорирование прототипной типизации (приходя из Java/C++)

В Java класс — жёсткий контракт. В JavaScript объект можно изменить в любой момент, а instanceof ненадёжен при передаче объектов между realms (iframe, vm.runInNewContext):

// Ловушка: проверка типа через constructor name
function processArray(arr) {
  if (arr instanceof Array) { // ломается для Array из другого iframe!
    return arr.map(x => x * 2);
  }
}

// Правильно: Array.isArray() или Object.prototype.toString
if (Array.isArray(arr)) { /* ... */ }
if (Object.prototype.toString.call(arr) === '[object Array]') { /* ... */ }

Мутация объектов как в Python/Ruby

Python-разработчики привыкают к явному deep copy. В JS передача объектов по ссылке вызывает трудноуловимые баги:

// Баг: мутация входного аргумента
function addDefaults(config) {
  config.timeout = config.timeout || 5000; // мутирует оригинал!
  return config;
}

// Правильно: иммутабельный паттерн
function addDefaults(config) {
  return { timeout: 5000, ...config }; // spread создаёт shallow copy
}

// Для deep copy:
const deep = structuredClone(original); // Node.js 17+, доступно нативно

this binding — камень преткновения для Java/C# разработчиков

class Timer {
  constructor() {
    this.count = 0;
  }

  start() {
    // Ошибка: this теряется в callback
    setInterval(function() {
      this.count++; // this === undefined в strict mode!
    }, 1000);

    // Правильно: стрелочная функция сохраняет lexical this
    setInterval(() => {
      this.count++; // this === Timer instance
    }, 1000);
  }
}

Непонимание module system (CJS vs ESM)

Разработчики с Python/Java фона путаются в двух системах модулей Node.js:

// CommonJS (require) — синхронный, динамический
const fs = require('fs'); // работает внутри if-блоков

// ESM (import) — статический, асинхронный, tree-shakeable
import { readFile } from 'fs/promises';

// Проблема: смешивание CJS и ESM без правильного package.json
// package.json: { "type": "module" } — весь проект ESM
// package.json: { "type": "commonjs" } — весь проект CJS
// .mjs / .cjs расширения для явного указания формата

Обработка ошибок без учёта async контекста

Java-разработчики ставят один try/catch на весь блок. В async JS непойманный rejection крашит процесс:

// Проблема: promise без .catch
async function riskyOperation() {
  await someAsyncCall(); // если бросает — unhandledRejection!
}
riskyOperation(); // нет await, нет catch — тихая потеря ошибки

// Правильно:
try {
  await riskyOperation();
} catch (err) {
  logger.error({ err }, 'Operation failed');
}

// Глобальная страховка:
process.on('unhandledRejection', (reason) => {
  logger.fatal({ reason }, 'Unhandled rejection');
  process.exit(1);
});

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

  • Использование == вместо === из-за привычки к языкам без coercion — 0 == false, null == undefined, "" == 0 все возвращают true.
  • Полагаться на порядок ключей объекта (не гарантирован спецификацией для нецелочисленных ключей до ES2015).
  • Не учитывать hoisting: var поднимается в начало функции, let/const — нет. Разработчики с C#/Java фона удивляются использованию var до объявления.
  • Игнорировать разницу между null и undefined — в TypeScript это разные типы, JSON.stringify() убирает undefined из объектов, что меняет поведение API.
  • Копировать паттерн «один файл — один класс» из Java в JS без необходимости — в JS модуль может экспортировать несколько функций, и это идиоматично.
  • Не использовать деструктуризацию, optional chaining (?.) и nullish coalescing (??) — код становится многословным и хрупким.

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

  • Перечислять ошибки без объяснения причин
  • Не отличать beginner mistakes от production failure modes
  • Не предлагать процесс, который предотвращает повторение ошибок

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

  • Знает типичные ошибки при работе с JavaScript
  • Понимает причины ошибок
  • Предлагает практики prevention и early detection

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

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

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

JavaScripttechnical-communicationtechnology-selectiontrade-off-analysis

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

JavaScript вакансии
  • Middle/Senior Full-Stack Python Engineer (Django) (#5841)
  • Salesforce Engineer - Backoffice Business Support Section, Business Support Development Department (BSD)
  • SAP BTP Architect/Engineer - Corporate IT Service Department (CITSD)
  • BTP Engineer - Business Support Development Department (BSD)
  • Senior Web Application Engineer, J.League Online Store - EC Expansion Development Department (ECEXD)

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

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