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

Представление данных и память

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

Отвечено: 0 из 30
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
Какая часть механизма «Размещение данных Layout» зафиксирована тестом `size_of`?
RustRust · Размещение данных Layout
let v = Vec::<u64>::with_capacity(100);
assert_eq!(std::mem::size_of_val(&v), std::mem::size_of::<Vec<u64>>());
assert!(v.capacity() >= 100);
Вопрос 2 из 30
На какую часть контракта распространяется проверка `std::ptr::addr_of`?
RustRust · Безопасность и производительность
let p = std::ptr::addr_of!(packet.value);
let value = unsafe { p.read_unaligned() };
assert_eq!(value, 7);
Вопрос 3 из 30
Какое изменение окружения может повлиять на вывод о «Размещение данных Layout»?
Вопрос 4 из 30
Чем завершится выполнение фрагмента с `filter`?
RustRust · Абстракции без накладных расходов
let sum: u64 = (0..1000).filter(|n| n % 2 == 0).map(|n| n * 2).sum();
Вопрос 5 из 30
Какое изменение окружения может повлиять на вывод о «Абстракции без накладных расходов»?
Вопрос 6 из 30
Что нужно проверить отдельно при переносе механизма «Безопасность и производительность» в библиотечный код?
Вопрос 7 из 30
Как изменить этот фрагмент, не создавая лишнего владельца данных?
RustRust · Выравнивание
#[repr(C)]
struct A { flag: u8, value: u64 }
println!("{} {}", std::mem::size_of::<A>(), std::mem::align_of::<A>());
Вопрос 8 из 30
Какое свойство закрепляет сценарий `#[repr(transparent)]`?
RustRust · Представление данных repr
#[repr(transparent)]
struct UserId(u64);
assert_eq!(std::mem::size_of::<UserId>(), std::mem::size_of::<u64>());
Вопрос 9 из 30
Что проверяет `size_of`, если не расширять вывод за пределы выполненного пути?
RustRust · Выравнивание
let layout = std::alloc::Layout::new::<A>();
assert_eq!(layout.size(), std::mem::size_of::<A>());
assert_eq!(layout.align(), std::mem::align_of::<A>());
Вопрос 10 из 30
Что система типов не проверит самостоятельно для механизма «Представление данных repr»?
Вопрос 11 из 30
Что может сломаться при другом размере входа или порядке действий в «Выравнивание»?
Вопрос 12 из 30
Что именно стало проверяемым благодаря сценарию `size_of`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn wire_header_layout() {
    assert_eq!(std::mem::size_of::<Header>(), 16);
    assert_eq!(std::mem::align_of::<Header>(), 8);
}
Вопрос 13 из 30
Какое утверждение о механизме «Безопасность и производительность» можно переносить на другие примеры?
Вопрос 14 из 30
Какой случай чаще всего обнаруживает скрытую ошибку в реализации «Тестирование и инструменты Cargo»?
Вопрос 15 из 30
Что именно подтверждает проверка с `size_of`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn wire_header_layout() {
    assert_eq!(std::mem::size_of::<Header>(), 16);
    assert_eq!(std::mem::align_of::<Header>(), 8);
}

# cargo test --target x86_64-unknown-linux-gnu
# cargo test --target i686-unknown-linux-gnu
Вопрос 16 из 30
Как обновить фрагмент с `#[repr(packed)]`, чтобы ошибка исчезла по существу?
RustRust · Безопасность и производительность
#[repr(packed)]
struct Packet { tag: u8, value: u32 }
let packet = Packet { tag: 1, value: 7 };
// let r = &packet.value;
Вопрос 17 из 30
Как проявится механизм «Размещение данных Layout» при выполнении кода?
RustRust · Размещение данных Layout
use std::mem::{size_of, size_of_val};
let text: &str = "rust";
println!("{} {}", size_of::<&str>(), size_of_val(text));
Вопрос 18 из 30
Какая правка выдержит ревью контракта «Представление данных repr»?
RustRust · Представление данных repr
#[repr(u8)]
enum Code { Ok = 0, Busy = 1, Failed = 2 }
Вопрос 19 из 30
Какое свойство «Тестирование и инструменты Cargo» сохранится после небольшого рефакторинга?
Вопрос 20 из 30
На какое правило следует опираться при ревью кода по теме «Представление данных repr»?
Вопрос 21 из 30
Как Rust выполнит этот фрагмент о механизме «Выравнивание»?
RustRust · Выравнивание
#[repr(C)]
struct A { flag: u8, value: u64 }
println!("{} {}", std::mem::size_of::<A>(), std::mem::align_of::<A>());
Вопрос 22 из 30
Какой рефакторинг исправляет причину сбоя возле `filter`?
RustRust · Абстракции без накладных расходов
let sum: u64 = (0..1000).filter(|n| n % 2 == 0).map(|n| n * 2).sum();
Вопрос 23 из 30
Какое правило Rust точнее всего описывает механизм «Выравнивание»?
Вопрос 24 из 30
Какие значения останутся доступными после `#[repr(u8)]`?
RustRust · Представление данных repr
#[repr(u8)]
enum Code { Ok = 0, Busy = 1, Failed = 2 }
Вопрос 25 из 30
Что вернёт программа при указанных входных данных?
RustRust · Безопасность и производительность
#[repr(packed)]
struct Packet { tag: u8, value: u32 }
let packet = Packet { tag: 1, value: 7 };
// let r = &packet.value;
Вопрос 26 из 30
Какой дефект способен воспроизвести тест `filter`?
RustRust · Абстракции без накладных расходов
let sum: u64 = (0..1000).filter(|n| n % 2 == 0).map(|n| n * 2).sum();

# cargo bench / criterion-подобный benchmark
# cargo asm <path-to-function>
Вопрос 27 из 30
Какая правка оставляет опасное условие проверяемым системой типов?
RustRust · Тестирование и инструменты Cargo
#[test]
fn wire_header_layout() {
    assert_eq!(std::mem::size_of::<Header>(), 16);
    assert_eq!(std::mem::align_of::<Header>(), 8);
}
Вопрос 28 из 30
Что важно понимать о механизме «Размещение данных Layout», прежде чем менять код?
Вопрос 29 из 30
Что нужно пересмотреть в использовании `size_of`, чтобы код стал корректным?
RustRust · Размещение данных Layout
use std::mem::{size_of, size_of_val};
let text: &str = "rust";
println!("{} {}", size_of::<&str>(), size_of_val(text));
Вопрос 30 из 30
Как лучше всего описать гарантию механизма «Абстракции без накладных расходов»?

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

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

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

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