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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

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

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

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

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

По регионам

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

По формату

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

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

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

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

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

Как работает event loop в Dart?

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

Dart event loop: сначала исполняется весь synchronous код, затем microtask queue (Future.then, scheduleMicrotask) до конца, потом одно событие из event queue (таймеры, I/O). Каждый Isolate имеет собственный loop.

Microtask queue

Заполняется через scheduleMicrotask() или когда Future уже завершён в момент подписки. Callback .then() на завершённом Future попадает в microtask queue, а не в event queue.

import 'dart:async';

void main() {
  print('1: sync start');

  Future.value('done').then((v) {
    print('3: microtask — $v'); // Future уже готов → microtask
  });

  scheduleMicrotask(() => print('2: explicit microtask'));

  print('4: sync end');
}
// Вывод:
// 1: sync start
// 4: sync end
// 2: explicit microtask
// 3: microtask — done

Обратите внимание: синхронный код исполняется первым, потом — все микрозадачи в порядке добавления.

Как устроен event loop в Dart

Dart — однопоточный язык с двумя очередями: event queue (макрозадачи) и microtask queue (микрозадачи). Это похоже на браузерный event loop, но без Web API — всё асинхронное идёт через Future и Stream.

Порядок обработки на каждой итерации:

  1. Выполнить всю microtask queue до конца (включая микрозадачи, добавленные во время выполнения).
  2. Взять одно событие из event queue и выполнить его.
  3. Снова опустошить microtask queue.
  4. Повторить.

Event queue

Содержит I/O-события, таймеры, порты isolate. Future.delayed добавляет задачу в event queue после истечения таймера.

import 'dart:async';

void main() {
  Future.delayed(Duration.zero, () => print('B: event queue'));

  scheduleMicrotask(() => print('A: microtask'));

  print('sync');
}
// Вывод:
// sync
// A: microtask
// B: event queue

async/await под капотом

await — синтаксический сахар: приостанавливает выполнение функции и регистрирует продолжение как callback на Future. После await код выполняется в microtask queue (если Future уже завершён) или в event queue (когда I/O завершится).

Future<void> fetchData() async {
  print('before await');
  final result = await Future.delayed(
    const Duration(milliseconds: 100),
    () => 'data',
  );
  print('after await: $result'); // выполняется в event queue
}

void main() {
  fetchData();
  print('main continues'); // выполняется до 'after await'
}

Isolates и event loop

Каждый Isolate имеет собственный event loop и heap — изоляция памяти полная. Общение только через порты (SendPort/ReceivePort), сообщения сериализуются. Это принципиально отличается от worker threads в Node.js или Go goroutines.

import 'dart:isolate';

void heavyWork(SendPort sendPort) {
  // Выполняется в отдельном isolate, свой event loop
  final result = List.generate(1000000, (i) => i).fold(0, (a, b) => a + b);
  sendPort.send(result);
}

Future<int> runInIsolate() async {
  final receivePort = ReceivePort();
  await Isolate.spawn(heavyWork, receivePort.sendPort);
  return await receivePort.first as int;
}

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

  • Бесконечная microtask queue: если microtask порождает другой microtask — event queue никогда не обработается, UI зависнет. В Flutter это приводит к дропу фреймов.
  • Блокировка event loop: синхронный CPU-интенсивный код (парсинг JSON, криптография) блокирует весь поток — нужен Isolate.run() или compute() во Flutter.
  • Future.delayed(Duration.zero) не гарантирует немедленность: задача попадёт в event queue и выполнится после всех текущих microtasks и, возможно, других event queue задач.
  • Порядок then()-callbacks: если несколько .then() навешаны на один Future — они выполнятся в порядке добавления, все как microtasks.
  • Утечка через порты isolate: незакрытый ReceivePort удерживает isolate живым — нужно явно вызывать receivePort.close().
  • async не означает параллельность: два await подряд — последовательные операции. Для параллелизма нужен Future.wait([f1, f2]) или Future.wait с Isolate.
  • StreamController без pause: если producer быстрее consumer и нет backpressure, буфер растёт бесконечно — используйте StreamController(sync: false) и слушайте onPause.
  • scheduleMicrotask в продакшене: прямое использование scheduleMicrotask редко оправдано — обычно достаточно Future.microtask() для явности намерения.

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

  • В чём разница между var, dynamic и явными типами в Dart?
  • Как работает null safety в Dart? В чём разница между ?, ! и ???
  • Что такое isolates в Dart и чем они отличаются от потоков (threads)?
  • В чём разница между Future и Stream в Dart?

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

  • Сводить «работает event loop в Dart» к синтаксису и не объяснять sound type system.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии dart-10.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

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

  • Формулирует точную модель для «работает event loop в Dart» и подтверждает ее корректным примером.
  • Умеет связать ответ с event loop, тестированием и отладкой на устройстве.
  • Называет ограничения подхода dart-10, включая производительность, память и сопровождение.

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

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

Источники

  • https://dart.dev/libraries/async/async-await
←Предыдущий вопросДля каких задач Dart является сильным выбором, а где лучше честно выбрать другой язык?Следующий вопрос→Какие production-риски чаще всего возникают в проектах на Dart: производительность, зависимости, конкурентность, деплой или observability?

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

Dartconcurrency-debuggingMobile-Engineering