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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 108
  • Облачные технологии14 073
  • QA вакансии3 460
  • Backend вакансии2 114
  • Инженер данных1 805
  • Продакт-менеджер1 266

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии986
  • AI вакансии955
  • Frontend вакансии745
  • Mobile вакансии44

По стеку

  • Go8 652
  • Java6 545
  • Node.js2 019
  • .NET1 721
  • Kotlin1 623
  • Rust1 453
  • C#710
  • PHP683
  • C++571

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

  • Kubernetes7 763
  • DevOps вакансии6 060
  • Linux-инфраструктура5 492
  • Terraform / IaC4 261
  • CI/CD3 241
  • Мониторинг и Observability1 783
  • SRE566
  • Кибербезопасность453

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

  • Data Scientist1 140
  • Бизнес-аналитик930
  • Аналитик данных853
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США44 321
  • Вакансии в Европе23 862
  • Вакансии в Канаде4 479
  • Работа в России3 913

По формату

  • Удалённые вакансии75 064
  • Релокация в США44 314
  • Гибридная работа12 393
  • Офисная работа7 089

По уровню

  • Senior вакансии42 691
  • Middle вакансии20 905
  • Junior вакансии6 727

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

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

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

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

Какие ошибки делают команды, когда строят приложение на Flutter как web/backend-проект без учёта mobile constraints?

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

Команды с web/backend фоном чаще всего игнорируют мобильный lifecycle (AppLifecycleState), блокируют UI тяжёлыми операциями на main isolate вместо compute(), не кешируют изображения и не обрабатывают offline-сценарии.

Ошибка 1: Игнорирование mobile lifecycle

Web/backend разработчики привыкли, что приложение всегда активно. На мобильном ОС убивает процессы, ставит на паузу, ограничивает background-работу.

// Ошибка: запуск long-running операции без учёта lifecycle
class DataSyncService {
  Timer? _timer;

  void startSync() {
    // ПРОБЛЕМА: timer продолжает работать в background,
    // но UI обновится только когда приложение вернётся на экран
    _timer = Timer.periodic(
      const Duration(minutes: 5),
      (_) => syncData(),
    );
  }
  // dispose() не вызывается — утечка ресурсов
}

// Правильно: учитывать AppLifecycleState
class DataSyncService with WidgetsBindingObserver {
  Timer? _timer;

  void init() {
    WidgetsBinding.instance.addObserver(this);
    _startTimer();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
      _timer?.cancel(); // Остановить в background
    } else if (state == AppLifecycleState.resumed) {
      _startTimer(); // Возобновить
    }
  }

  void _startTimer() {
    _timer = Timer.periodic(const Duration(minutes: 5), (_) => syncData());
  }

  void dispose() {
    _timer?.cancel();
    WidgetsBinding.instance.removeObserver(this);
  }
}

Ошибка 2: Тяжёлые операции на main isolate

Web-разработчики используют async/await и считают, что это «параллельно». В Flutter async не создаёт отдельный поток — всё выполняется на main isolate, блокируя UI.

// Ошибка: парсинг большого JSON на main isolate
Future<List<Product>> loadProducts() async {
  final response = await http.get(Uri.parse('/api/products'));
  // ПРОБЛЕМА: jsonDecode на 10MB — заморозит UI на 200-500ms
  return (jsonDecode(response.body) as List)
      .map((e) => Product.fromJson(e))
      .toList();
}

// Правильно: использовать compute() для CPU-heavy работы
Future<List<Product>> loadProducts() async {
  final response = await http.get(Uri.parse('/api/products'));
  return compute(_parseProducts, response.body);
}

List<Product> _parseProducts(String body) {
  return (jsonDecode(body) as List)
      .map((e) => Product.fromJson(e))
      .toList();
}

Ошибка 3: Игнорирование памяти и размера ресурсов

В web браузер управляет памятью и сеть быстрее. На мобильном RAM ограничен (особенно low-end Android), а мобильная сеть — нестабильна.

  • Загрузка оригинальных изображений (5–10 MB) вместо thumbnails — OOM-крэш на устройствах с 2 GB RAM.
  • Кеширование всех данных в памяти без LRU-лимита.
  • Использование Image.network() без cached_network_image — повторная загрузка при каждой перестройке виджета.
// Правильно: кешировать изображения
CachedNetworkImage(
  imageUrl: product.imageUrl,
  // Автоматически кеширует на диск и в память
  placeholder: (ctx, url) => const CircularProgressIndicator(),
  errorWidget: (ctx, url, err) => const Icon(Icons.error),
  memCacheWidth: 400, // Ограничить размер в памяти
)

Ошибка 4: setState() повсюду вместо правильного State management

Перенос backend-паттернов (глобальные переменные, singleton service) без учёта реактивности виджетов:

// Ошибка: глобальный setState в корневом виджете перестраивает всё дерево
class AppState extends StatefulWidget {
  static late _AppStateState instance;

  @override
  State<AppState> createState() {
    instance = _AppStateState();
    return instance;
  }
}

// Правильно: Riverpod с точечными обновлениями
final cartProvider = StateNotifierProvider<CartNotifier, CartState>(
  (ref) => CartNotifier(),
);

// Только виджеты, подписанные на cartProvider, перестраиваются
class CartBadge extends ConsumerWidget {
  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final count = ref.watch(cartProvider.select((s) => s.itemCount));
    return Badge(count: count);
  }
}

Ошибка 5: Отсутствие offline-режима

Mobile-сеть нестабильна. Web-разработчики редко думают об offline. Приложение должно корректно обрабатывать SocketException, TimeoutException, кешировать данные локально (Hive, Drift, SharedPreferences) и показывать stale data с индикацией.

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

  • Не отписываться от StreamSubscription в dispose() — утечка памяти, которая проявляется только при длительном использовании приложения.
  • Использование BuildContext после await без проверки if (mounted) — крэш при быстрой навигации назад.
  • Анимации на 60 Hz устройстве без TickerProvider — AnimationController без vsync потребляет CPU даже когда невидим.
  • Глубокая вложенность виджетов (Nested hell) замедляет diff-алгоритм — разбивать на именованные виджеты.
  • Игнорирование back button на Android — Navigator.maybePop() вместо жёсткого exit.
  • Хранение чувствительных данных в SharedPreferences (не зашифровано) — использовать flutter_secure_storage.
  • Не учитывать safe area (notch, dynamic island) — Scaffold.body без SafeArea или MediaQuery.padding.
  • Тестирование только на эмуляторе с быстрым Wi-Fi — обязательно тестировать на реальном low-end устройстве с ограниченной сетью (Android Go, старый iPhone).

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

  • Как работает управление состоянием (state management) во Flutter? Назовите распространённые решения.
  • Как работает дерево виджетов (widget tree) во Flutter (widget tree, element tree, render tree)?
  • Каковы лучшие практики оптимизации производительности Flutter?
  • В чём разница между StatelessWidget и StatefulWidget?

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

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

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

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

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

Проверить себя по теме Flutter →
←Предыдущий вопросКак понять, что проблема в приложении связана с Flutter, а не с backend, сетью, дизайном состояния или платформой?Следующий вопрос→Какие архитектурные решения Flutter задаёт вокруг UI state, lifecycle, navigation, threading и platform integration?

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

Fluttertechnical-communicationtechnology-selectiontrade-off-analysis