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

Serde и форматы данных

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

Отвечено: 0 из 30
--:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 30 вопросов отведено 85 минут. В каждом вопросе верен только один вариант. После завершения вы увидите общий результат, результаты по 6 тематическим шкалам и подробные объяснения.
Вопрос 1 из 30
Как следует интерпретировать результат проверки `std::borrow::Cow`?
RustRust · Десериализация Deserialize
#[derive(Deserialize)]
struct Flexible<'a> { #[serde(borrow)] name: std::borrow::Cow<'a, str> }
Вопрос 2 из 30
Какой способ правки делает использование `serde::Deserialize` корректным и явным?
RustRust · Десериализация Deserialize
use serde::Deserialize;
#[derive(Deserialize)]
struct Borrowed<'a> { name: &'a str }
let input = r#"{"name":"Ada"}"#;
let value: Borrowed<'_> = serde_json::from_str(input).unwrap();
Вопрос 3 из 30
Какой риск остаётся после успешной компиляции кода по теме «Десериализация Deserialize»?
Вопрос 4 из 30
Какой вывод о выполнении `serde::Serialize` подтверждает код?
RustRust · Атрибуты
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
struct Config {
    retry_count: u32,
    #[serde(default)]
    verbose: bool,
}
Вопрос 5 из 30
Какой путь выполнения выберет Rust после `serde::Serialize`?
RustRust · Сериализация Serialize
use serde::Serialize;
#[derive(Serialize)]
struct User<'a> { id: u64, name: &'a str }
let json = serde_json::to_string(&User { id: 7, name: "Ada" }).unwrap();
Вопрос 6 из 30
Какой принцип Rust объясняет обычный сценарий для «Атрибуты»?
Вопрос 7 из 30
Какой дефект способен воспроизвести тест `serde::Deserialize`?
RustRust · Совместимость схем
#[derive(serde::Deserialize)]
struct Event { #[serde(alias = "eventId")] id: u64 }
let old: Event = serde_json::from_str(r#"{"eventId":5}"#).unwrap();
assert_eq!(old.id, 5);
Вопрос 8 из 30
Что можно считать доказанным после успешного выполнения `#[derive(Serialize)]`?
RustRust · Сериализация Serialize
#[derive(Serialize)]
struct PublicUser<'a> {
    id: u64,
    #[serde(skip_serializing)]
    token: &'a str,
}
Вопрос 9 из 30
Как Rust выполнит этот фрагмент о механизме «Безопасность и производительность»?
RustRust · Безопасность и производительность
#[derive(serde::Deserialize)]
struct Request { values: Vec<String> }
let request: Request = serde_json::from_reader(untrusted_reader)?;
Вопрос 10 из 30
Что важно понимать о механизме «Безопасность и производительность», прежде чем менять код?
Вопрос 11 из 30
Что нужно проверить отдельно при переносе механизма «Сериализация Serialize» в библиотечный код?
Вопрос 12 из 30
Что Rust гарантирует при корректном использовании «Десериализация Deserialize»?
Вопрос 13 из 30
Что ещё нужно проверить, прежде чем считать реализацию «Тестирование и инструменты Cargo» надёжной?
Вопрос 14 из 30
Какое свойство закрепляет сценарий `old_payload_still_loads`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn old_payload_still_loads() {
    let old = r#"{"id":1}"#;
    let event: EventV2 = serde_json::from_str(old).unwrap();
    assert_eq!(event.source, None);
}

# cargo test old_payload_still_loads -- --exact
# cargo fuzz run deserialize_event  # при настроенном fuzz-target
Вопрос 15 из 30
Что исправить вокруг `old_payload_still_loads`, чтобы граничный вход обрабатывался безопасно?
RustRust · Тестирование и инструменты Cargo
#[test]
fn old_payload_still_loads() {
    let old = r#"{"id":1}"#;
    let event: EventV2 = serde_json::from_str(old).unwrap();
    assert_eq!(event.source, None);
}
Вопрос 16 из 30
Какой вариант правки возвращает фрагмент с `serde::Deserialize` к корректному контракту?
RustRust · Совместимость схем
#[derive(serde::Deserialize)]
struct EventV2 {
    id: u64,
    #[serde(default)]
    source: Option<String>,
}
Вопрос 17 из 30
Как проявится механизм «Десериализация Deserialize» при выполнении кода?
RustRust · Десериализация Deserialize
use serde::Deserialize;
#[derive(Deserialize)]
struct Borrowed<'a> { name: &'a str }
let input = r#"{"name":"Ada"}"#;
let value: Borrowed<'_> = serde_json::from_str(input).unwrap();
Вопрос 18 из 30
Какое условие способно превратить рабочий пример «Совместимость схем» в ошибочный?
Вопрос 19 из 30
Какой граничный случай важнее всего учесть для механизма «Атрибуты»?
Вопрос 20 из 30
На какое правило следует опираться при ревью кода по теме «Сериализация Serialize»?
Вопрос 21 из 30
Что отделяет корректное применение «Совместимость схем» от случайно работающего решения?
Вопрос 22 из 30
Что может сломаться при другом размере входа или порядке действий в «Безопасность и производительность»?
Вопрос 23 из 30
Как обновить фрагмент с `serde::Deserialize`, чтобы ошибка исчезла по существу?
RustRust · Безопасность и производительность
#[derive(serde::Deserialize)]
struct Request { values: Vec<String> }
let request: Request = serde_json::from_reader(untrusted_reader)?;
Вопрос 24 из 30
Что именно подтверждает проверка с `serde_json::from_str`?
RustRust · Атрибуты
let cfg: Config = serde_json::from_str(r#"{"retryCount":3}"#).unwrap();
assert_eq!(cfg.retry_count, 3);
assert!(!cfg.verbose);
Вопрос 25 из 30
Как правильно прочитать результат диагностического сценария `serde::Deserialize`?
RustRust · Безопасность и производительность
#[derive(serde::Deserialize)]
struct Request { values: Vec<String> }
let request: Request = serde_json::from_reader(untrusted_reader)?;

# Метрика: маленький объект удерживает Arc<[u8]> на 100 MiB из-за одного &str/Cow-среза.
Вопрос 26 из 30
Что важно понимать о механизме «Тестирование и инструменты Cargo», прежде чем менять код?
Вопрос 27 из 30
Как убрать источник проблемы в коде с `serde::Serialize`?
RustRust · Сериализация Serialize
use serde::Serialize;
#[derive(Serialize)]
struct User<'a> { id: u64, name: &'a str }
let json = serde_json::to_string(&User { id: 7, name: "Ada" }).unwrap();
Вопрос 28 из 30
Какие значения останутся доступными после `serde::Deserialize`?
RustRust · Совместимость схем
#[derive(serde::Deserialize)]
struct EventV2 {
    id: u64,
    #[serde(default)]
    source: Option<String>,
}
Вопрос 29 из 30
Как следует интерпретировать результат проверки `old_payload_still_loads`?
RustRust · Тестирование и инструменты Cargo
#[test]
fn old_payload_still_loads() {
    let old = r#"{"id":1}"#;
    let event: EventV2 = serde_json::from_str(old).unwrap();
    assert_eq!(event.source, None);
}
Вопрос 30 из 30
Как убрать скрытое предусловие вокруг `serde::Serialize`, сохранив исходный замысел?
RustRust · Атрибуты
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
struct Config {
    retry_count: u32,
    #[serde(default)]
    verbose: bool,
}

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

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

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

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