RS Rust  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Асинхронность async/await

Проверяет ленивые Future, роль исполнителя, точки await, конкурентную композицию и эксплуатационные последствия. Вопросы распределены между чтением кода, диагностикой компиляции, выбором исправления, граничными случаями и инженерными решениями. Базовый синтаксис соответствует Rust 2024 edition; задания не требуют nightly, если это прямо не сказано.

Отвечено: 0 из 30
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
Какой способ исправления не расширяет область `unsafe`?
RustRust · Безопасность и производительность
async fn handle() -> std::io::Result<Vec<u8>> {
    let bytes = std::fs::read("large.bin")?;
    Ok(bytes)
}
Вопрос 2 из 30
Что ещё нужно проверить, прежде чем считать реализацию «Исполнитель асинхронных задач» надёжной?
Вопрос 3 из 30
Какой случай чаще всего обнаруживает скрытую ошибку в реализации «Будущие вычисления Future»?
Вопрос 4 из 30
Какое ограничение языка определяет поведение «Тестирование и инструменты Cargo»?
Вопрос 5 из 30
Как убрать скрытое предусловие вокруг `std::io::Error`, сохранив исходный замысел?
RustRust · Приостановка через await
async fn load() -> Result<String, std::io::Error> {
    let bytes = read_async().await?;
    Ok(String::from_utf8_lossy(&bytes).into_owned())
}
Вопрос 6 из 30
Как убрать скрытое предусловие вокруг `std::future::Future`, сохранив исходный замысел?
RustRust · Исполнитель асинхронных задач
use std::future::Future;
fn submit<F>(future: F)
where F: Future<Output = ()> + Send + 'static
{
    // runtime.spawn(future)
}
Вопрос 7 из 30
Какая реализация выражает механизм «Конкурентное выполнение» без лишнего копирования?
RustRust · Конкурентное выполнение
async fn sequential() {
    let a = fetch_a().await;
    let b = fetch_b().await;
    use_both(a, b);
}
Вопрос 8 из 30
Какое утверждение о «Безопасность и производительность» остаётся верным при смене входных данных?
Вопрос 9 из 30
Какой случай чаще всего обнаруживает скрытую ошибку в реализации «Приостановка через await»?
Вопрос 10 из 30
Что выбрать вместо лишнего `clone`, `unwrap` или расширения `unsafe`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn future_is_lazy() {
    let started = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false));
    let flag = started.clone();
    let future = async move { flag.store(true, std::sync::atomic::Ordering::SeqCst); };
    assert!(!started.load(std::sync::atomic::Ordering::SeqCst));
    drop(future);
    assert!(!started.load(std::sync::atomic::Ordering::SeqCst));
}
Вопрос 11 из 30
Что станет с данными после ключевой операции?
RustRust · Будущие вычисления Future
async fn compute() -> i32 {
    println!("started");
    42
}
let future = compute();
println!("created");
drop(future);
Вопрос 12 из 30
На какую часть контракта распространяется проверка `std::io::Result`?
RustRust · Безопасность и производительность
async fn handle() -> std::io::Result<Vec<u8>> {
    let bytes = std::fs::read("large.bin")?;
    Ok(bytes)
}

# Метрики: executor queue latency растёт, CPU низок, один worker застрял в read().
Вопрос 13 из 30
Что устанавливает сценарий `future_is_lazy` и где проходит граница его вывода?
RustRust · Тестирование и инструменты Cargo
#[test]
fn future_is_lazy() {
    let started = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false));
    let flag = started.clone();
    let future = async move { flag.store(true, std::sync::atomic::Ordering::SeqCst); };
    assert!(!started.load(std::sync::atomic::Ordering::SeqCst));
    drop(future);
    assert!(!started.load(std::sync::atomic::Ordering::SeqCst));
}

# cargo test future_is_lazy -- --exact
# runtime-specific: pause time, spawn task, advance clock, assert state
Вопрос 14 из 30
Что именно подтверждает проверка с `future_is_lazy`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn future_is_lazy() {
    let started = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false));
    let flag = started.clone();
    let future = async move { flag.store(true, std::sync::atomic::Ordering::SeqCst); };
    assert!(!started.load(std::sync::atomic::Ordering::SeqCst));
    drop(future);
    assert!(!started.load(std::sync::atomic::Ordering::SeqCst));
}
Вопрос 15 из 30
Как следует интерпретировать результат проверки `std::future::Future`?
RustRust · Исполнитель асинхронных задач
use std::future::Future;
fn submit<F>(future: F)
where F: Future<Output = ()> + Send + 'static
{
    // runtime.spawn(future)
}

# В трассировке executor: poll -> Pending, затем тысячи poll без wake.
Вопрос 16 из 30
Какой риск остаётся после успешной компиляции кода по теме «Безопасность и производительность»?
Вопрос 17 из 30
Какое решение сохраняет поведение и устраняет источник диагностики?
RustRust · Будущие вычисления Future
async fn compute() -> i32 {
    println!("started");
    42
}
let future = compute();
println!("created");
drop(future);
Вопрос 18 из 30
Как правильно прочитать результат диагностического сценария `.await`?
RustRust · Приостановка через await
async fn task() {
    let _guard = Cleanup;
    pending::<()>().await;
}
// drop(task_future) вызовет Drop полей, включая Cleanup.
Вопрос 19 из 30
Какое правило связывает типы и наблюдаемое поведение в механизме «Приостановка через await»?
Вопрос 20 из 30
Как лучше всего описать гарантию механизма «Конкурентное выполнение»?
Вопрос 21 из 30
Какое свойство закрепляет сценарий `.await`?
RustRust · Конкурентное выполнение
let a = fetch_a();
let b = fetch_b();
let (ra, rb) = join(a, b).await;
Вопрос 22 из 30
Что произойдёт после операции `std::future::Future`?
RustRust · Исполнитель асинхронных задач
use std::future::Future;
fn submit<F>(future: F)
where F: Future<Output = ()> + Send + 'static
{
    // runtime.spawn(future)
}
Вопрос 23 из 30
Как лучше всего описать гарантию механизма «Будущие вычисления Future»?
Вопрос 24 из 30
Что важно понимать о механизме «Исполнитель асинхронных задач», прежде чем менять код?
Вопрос 25 из 30
Какой итог даст обычный путь выполнения этого кода?
RustRust · Приостановка через await
async fn load() -> Result<String, std::io::Error> {
    let bytes = read_async().await?;
    Ok(String::from_utf8_lossy(&bytes).into_owned())
}
Вопрос 26 из 30
Какой риск остаётся после успешной компиляции кода по теме «Тестирование и инструменты Cargo»?
Вопрос 27 из 30
Какое изменение окружения может повлиять на вывод о «Конкурентное выполнение»?
Вопрос 28 из 30
Что именно подтверждает проверка с `std::mem::size_of_val`?
RustRust · Будущие вычисления Future
async fn value() -> i32 { 7 }
let f = value();
assert_eq!(std::mem::size_of_val(&f) > 0, true);
Вопрос 29 из 30
Каков конечный результат операции `std::io::Result`?
RustRust · Безопасность и производительность
async fn handle() -> std::io::Result<Vec<u8>> {
    let bytes = std::fs::read("large.bin")?;
    Ok(bytes)
}
Вопрос 30 из 30
Что можно наблюдать после успешной компиляции этого кода?
RustRust · Конкурентное выполнение
async fn sequential() {
    let a = fetch_a().await;
    let b = fetch_b().await;
    use_both(a, b);
}

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe)

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу