RS Rust  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Умные указатели

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 5 тематическим шкалам и подробные объяснения.
Вопрос 1 из 25
Какое свойство «Указатель Box» сохранится после небольшого рефакторинга?
Вопрос 2 из 25
Какой граничный случай важнее всего учесть для механизма «Счётчик ссылок Rc»?
Вопрос 3 из 25
Какие значения останутся доступными после `std::sync::Arc`?
RustRust · Потокобезопасный счётчик Arc
use std::sync::Arc;
use std::thread;
let value = Arc::new(String::from("data"));
let other = Arc::clone(&value);
let h = thread::spawn(move || other.len());
println!("{} {}", value.len(), h.join().unwrap());
Вопрос 4 из 25
Что нужно изменить вокруг `List::Cons`, чтобы устранить первопричину?
RustRust · Указатель Box
enum List { Cons(i32, Box<List>), Nil }
let list = List::Cons(1, Box::new(List::Nil));
Вопрос 5 из 25
Какое изменение входа способно поменять вывод о механизме «Слабые ссылки Weak»?
Вопрос 6 из 25
Где заканчивается гарантия обычного сценария для «Тестирование и инструменты Cargo»?
Вопрос 7 из 25
Как следует интерпретировать результат проверки `weak_does_not_keep_value_alive`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn weak_does_not_keep_value_alive() {
    use std::rc::Rc;
    let weak = {
        let value = Rc::new(String::from("x"));
        Rc::downgrade(&value)
    };
    assert!(weak.upgrade().is_none());
}
Вопрос 8 из 25
Какое утверждение о механизме «Потокобезопасный счётчик Arc» можно переносить на другие примеры?
Вопрос 9 из 25
Как изменить фрагмент с `std::sync::Arc`, чтобы дефект не повторился?
RustRust · Потокобезопасный счётчик Arc
use std::sync::Arc;
use std::thread;
let value = Arc::new(String::from("data"));
let other = Arc::clone(&value);
let h = thread::spawn(move || other.len());
println!("{} {}", value.len(), h.join().unwrap());
Вопрос 10 из 25
На какую часть контракта распространяется проверка `Rc::downgrade`?
RustRust · Слабые ссылки Weak
let weak = Rc::downgrade(&root);
drop(root);
assert!(weak.upgrade().is_none());
Вопрос 11 из 25
Как проявится механизм «Счётчик ссылок Rc» при выполнении кода?
RustRust · Счётчик ссылок Rc
use std::rc::Rc;
let a = Rc::new(String::from("shared"));
let b = Rc::clone(&a);
println!("{}", Rc::strong_count(&a));
drop(b);
println!("{}", Rc::strong_count(&a));
Вопрос 12 из 25
Как следует интерпретировать результат проверки `std::rc::`?
RustRust · Счётчик ссылок Rc
use std::rc::{Rc, Weak};
let strong = Rc::new(5);
let weak: Weak<i32> = Rc::downgrade(&strong);
drop(strong);
assert!(weak.upgrade().is_none());
Вопрос 13 из 25
Как завершится обычная ветвь выполнения после `List::Cons`?
RustRust · Указатель Box
enum List { Cons(i32, Box<List>), Nil }
let list = List::Cons(1, Box::new(List::Nil));
Вопрос 14 из 25
Какое свойство «Слабые ссылки Weak» сохранится после небольшого рефакторинга?
Вопрос 15 из 25
Какой рефакторинг исправляет причину сбоя возле `weak_does_not_keep_value_alive`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn weak_does_not_keep_value_alive() {
    use std::rc::Rc;
    let weak = {
        let value = Rc::new(String::from("x"));
        Rc::downgrade(&value)
    };
    assert!(weak.upgrade().is_none());
}
Вопрос 16 из 25
Как устранить причину диагностики в строке с `std::rc::`?
RustRust · Слабые ссылки Weak
use std::rc::{Rc, Weak};
struct Node { parent: Weak<Node> }
let root = Rc::new_cyclic(|me| Node { parent: me.clone() });
println!("{}", root.parent.upgrade().is_some());
Вопрос 17 из 25
Какой узкий вывод следует из проверки `weak_does_not_keep_value_alive`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn weak_does_not_keep_value_alive() {
    use std::rc::Rc;
    let weak = {
        let value = Rc::new(String::from("x"));
        Rc::downgrade(&value)
    };
    assert!(weak.upgrade().is_none());
}

# cargo test weak_does_not_keep_value_alive -- --nocapture
Вопрос 18 из 25
К какому результату приводит последовательность вокруг `std::rc::`?
RustRust · Слабые ссылки Weak
use std::rc::{Rc, Weak};
struct Node { parent: Weak<Node> }
let root = Rc::new_cyclic(|me| Node { parent: me.clone() });
println!("{}", root.parent.upgrade().is_some());
Вопрос 19 из 25
Какое правило связывает типы и наблюдаемое поведение в механизме «Тестирование и инструменты Cargo»?
Вопрос 20 из 25
Какое свойство «Счётчик ссылок Rc» сохранится после небольшого рефакторинга?
Вопрос 21 из 25
Как изменить фрагмент с `std::rc::Rc`, чтобы дефект не повторился?
RustRust · Счётчик ссылок Rc
use std::rc::Rc;
let a = Rc::new(String::from("shared"));
let b = Rc::clone(&a);
println!("{}", Rc::strong_count(&a));
drop(b);
println!("{}", Rc::strong_count(&a));
Вопрос 22 из 25
Что устанавливает сценарий `Box::new` и где проходит граница его вывода?
RustRust · Указатель Box
let boxed = Box::new(String::from("x"));
let value: String = *boxed;
assert_eq!(value, "x");
Вопрос 23 из 25
Какой граничный случай важнее всего учесть для механизма «Потокобезопасный счётчик Arc»?
Вопрос 24 из 25
Где заканчивается гарантия обычного сценария для «Указатель Box»?
Вопрос 25 из 25
Что устанавливает сценарий `std::sync::` и где проходит граница его вывода?
RustRust · Потокобезопасный счётчик Arc
use std::sync::{Arc, Mutex};
let value = Arc::new(Mutex::new(1));
let v = Arc::clone(&value);
std::thread::spawn(move || *v.lock().unwrap() += 1).join().unwrap();
assert_eq!(*value.lock().unwrap(), 2);

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

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

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

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