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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python8 752
  • Облачные технологии6 631
  • QA вакансии2 183
  • Android1 322
  • Инженер данных860
  • Продакт-менеджер316

Разработка

  • iOS1 238
  • Backend вакансии1 196
  • AI вакансии549
  • Fullstack вакансии500
  • Frontend вакансии426
  • Mobile вакансии28

По стеку

  • Go5 209
  • Java3 131
  • Kotlin1 113
  • Node.js1 008
  • Rust833
  • .NET656
  • PHP322
  • C++270
  • C#207

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

  • Kubernetes3 882
  • Linux-инфраструктура2 817
  • DevOps вакансии2 655
  • Terraform / IaC2 191
  • Мониторинг и Observability1 071
  • CI/CD919
  • SRE308
  • Кибербезопасность38

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

  • Аналитик данных522
  • Data Scientist435
  • Бизнес-аналитик397
  • Системный аналитик67

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

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

По регионам

  • Вакансии в США22 951
  • Вакансии в Европе10 259
  • Работа в России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 вакансии
  • Celonis42 вакансии
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Какова возможность Tokio приостанавливать и продвигать время в тестах (tokio::time::pause())?

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

tokio::time::pause() замораживает внутренние часы Tokio; tokio::time::advance(d).await сдвигает время без реального ожидания, делая тесты с таймерами мгновенными и детерминированными.

Пример: тестирование таймаута

use tokio::time::{self, Duration, Instant};

#[tokio::test]
async fn test_timeout_fires() {
    time::pause();

    let start = Instant::now();
    let result = tokio::time::timeout(
        Duration::from_secs(30),
        async {
            time::sleep(Duration::from_secs(60)).await;
            42_u32
        },
    );

    // Продвигаем время на 31 секунду — таймаут должен сработать
    time::advance(Duration::from_secs(31)).await;

    assert!(result.await.is_err(), "timeout should have fired");
    // Реально прошли миллисекунды, а не 31 секунда
    assert!(start.elapsed() < Duration::from_secs(1));
}

Управление временем в тестах Tokio

Tokio предоставляет возможность «заморозить» внутренние часы и вручную продвигать время вперёд без реального ожидания. Это делает тесты с таймаутами, rate-limiter'ами и периодическими задачами мгновенными и детерминированными.

Ключевые функции

  • tokio::time::pause() — останавливает автоматическое продвижение времени.
  • tokio::time::advance(Duration) — сдвигает внутренние часы вперёд на указанный интервал и будит все таймеры, которые должны были сработать.
  • tokio::time::resume() — возобновляет нормальное течение времени.

Функции работают только в рантайме, собранном с feature test-util. Атрибут #[tokio::test] автоматически подключает этот feature.

Пример: периодический tick

use tokio::time::{self, Duration, interval};

#[tokio::test]
async fn test_interval_ticks_three_times() {
    time::pause();

    let mut ticker = interval(Duration::from_secs(10));
    let mut count = 0_u32;

    // Первый тик — немедленный
    ticker.tick().await;
    count += 1;

    for _ in 0..2 {
        time::advance(Duration::from_secs(10)).await;
        ticker.tick().await;
        count += 1;
    }

    assert_eq!(count, 3);
}

Пример: rate-limiter тест

use std::sync::atomic::{AtomicU32, Ordering};
use std::sync::Arc;
use tokio::time::{self, Duration};

async fn rate_limited_action(counter: Arc<AtomicU32>) {
    counter.fetch_add(1, Ordering::SeqCst);
    time::sleep(Duration::from_millis(100)).await;
}

#[tokio::test]
async fn test_only_one_per_100ms() {
    time::pause();
    let counter = Arc::new(AtomicU32::new(0));
    let c = counter.clone();

    tokio::spawn(async move {
        for _ in 0..5 {
            rate_limited_action(c.clone()).await;
        }
    });

    // Даём выполниться первому вызову
    time::advance(Duration::from_millis(50)).await;
    assert_eq!(counter.load(Ordering::SeqCst), 1);

    // Ждём ещё — запускается второй
    time::advance(Duration::from_millis(100)).await;
    assert_eq!(counter.load(Ordering::SeqCst), 2);
}

Cargo.toml — нужен feature

[dev-dependencies]
tokio = { version = "1", features = ["full", "test-util"] }

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

  • Требуется flavor current_thread: pause() работает только в однопоточном рантайме (current_thread, который и является дефолтом для #[tokio::test]). В multi_thread вызов паникует.
  • advance() — async: нужно .await, иначе задачи не получат шанс выполниться и таймеры не сработают.
  • Сторонние таймеры не управляются: std::thread::sleep и std::time::Instant используют системные часы, не подвластные pause().
  • Забытый resume(): если тест завершился аварийно без resume(), последующие тесты в том же потоке могут получить замороженное время — изолируйте тесты или используйте tokio::time::resume() в деструкторе.
  • auto-advance при отсутствии задач: когда все задачи заблокированы на таймерах, рантайм автоматически прыгает к ближайшему дедлайну — это может удивить, если вы ожидаете явного контроля.
  • Не работает без test-util: в production-бинарниках pause()/advance() не скомпилируются без feature-флага.

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

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

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

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

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

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

Источники

  • https://docs.rs/tokio/1.49.0/tokio/
←Предыдущий вопросКак тестировать асинхронный код в Tokio с помощью `#[tokio::test]`?Следующий вопрос→Что такое waker в асинхронной модели Rust и как Tokio использует wakers для планирования задач?

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

Tokiorisk-analysistechnical-depthtokio-productionTokio (Rust)

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

  • В каких проектах Tokio (Rust) оправдан, а где он становится источником лишней сложности?
  • Какие production или build/runtime-риски есть у Tokio (Rust): воспроизводимость, совместимость, debugging, ресурсы или supply chain?
  • Как понять, что проблема связана именно с Tokio (Rust), а не с приложением, окружением, сетью или зависимостями?
  • Какие ошибки делают команды, когда используют Tokio (Rust) без понимания его модели выполнения или сборки?