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

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

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

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

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

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

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

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

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

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

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

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

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

Разработка

  • Android1 861
  • iOS1 696
  • Fullstack вакансии965
  • AI вакансии945
  • Frontend вакансии734
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 537
  • Node.js2 013
  • .NET1 704
  • Kotlin1 619
  • Rust1 456
  • C#703
  • PHP680
  • C++566

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

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

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

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

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

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

По регионам

  • Вакансии в США43 023
  • Вакансии в Европе23 282
  • Вакансии в Канаде4 294
  • Работа в России3 910

По формату

  • Удалённые вакансии72 436
  • Релокация в США43 022
  • Гибридная работа12 399
  • Офисная работа7 085

По уровню

  • Senior вакансии41 615
  • Middle вакансии20 102
  • Junior вакансии6 553

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

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 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