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

Actors и Sendable

Разбирает тему «Actors и Sendable» на практических сценариях: поиск дефектов, сравнение решений и оценка последствий. Вопросы требуют не только узнать конструкцию, но и проследить выполнение, найти причину дефекта, выбрать исправление и оценить пограничный сценарий. Языковые примеры рассчитаны на Swift 6; задания с Apple SDK рассматриваются в контексте современных платформенных контрактов.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 25 вопросов, на работу отведено 70 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 5 тематических шкал и подробные объяснения.
Вопрос 1 из 25
В этом примере важна одна точная деталь механизма «Изоляция акторов». Что действительно произойдёт? Здесь оценивается пересечение границы изоляции актора и атомарность операции.
SwiftИзоляция акторов · фрагмент для разбора
actor Counter18 {
    var value = 0
    func increment() { value += 1 }
}
func use18(_ c: Counter18) async -> Int {
    await c.increment()
    return await c.value
}
Вопрос 2 из 25
Какой итог даст показанный фрагмент, если применять правила Swift буквально, а не угадывать намерение автора? Не упускайте из виду следующее: глобальная actor-изоляция и правильная граница UI.
SwiftГлавный актор MainActor · фрагмент для разбора
@MainActor final class Model18 { var text = ""; func update(_ x: String) { text = x } }
func update18(_ model: Model18) async { await model.update("ready") }
Вопрос 3 из 25
Не запуская код, восстановите состояние значений после последней строки. Какой вывод верен для «Безопасная передача Sendable»? Важно учесть: доказательство безопасной передачи значения.
SwiftБезопасная передача Sendable · фрагмент для разбора
struct Message18: Sendable { let id: Int; let text: String }
func transfer18(_ message: sending Message18) async { _ = message }
Вопрос 4 из 25
Не запуская код, восстановите состояние значений после последней строки. Какой вывод верен для «Гонки данных»? Сосредоточьтесь на следующем: разница между подавлением диагностики и фактической синхронизацией.
SwiftГонки данных · фрагмент для разбора
actor Safe18 { private var total = 0; func add() { total += 1 }; func read() -> Int { total } }
Вопрос 5 из 25
Какой итог даст показанный фрагмент, если применять правила Swift буквально, а не угадывать намерение автора? Сосредоточьтесь на следующем: инструментарий и постановка конкурентного теста.
SwiftТестирование и диагностика · фрагмент для разбора
actor Gate18 { private var open = false; func release() { open = true }; func wait() async { while !open { await Task.yield() } } }
Вопрос 6 из 25
Какой диагноз согласуется и с исходным кодом, и с правилами Swift? Здесь оценивается пересечение границы изоляции актора и атомарность операции.
SwiftИзоляция акторов · фрагмент для разбора
actor Store18 { var items: [Int] = [] }
func bad18(_ store: Store18) {
    store.items.append(1)
}
Вопрос 7 из 25
Что в этом фрагменте нужно объяснить первым, чтобы дальнейшая правка не оказалась случайной? Проверяется глобальная actor-изоляция и правильная граница UI.
SwiftГлавный актор MainActor · фрагмент для разбора
@MainActor enum UIState18 { static var status = "idle" }
func sync18() { UIState18.status = "ready" }
Вопрос 8 из 25
Что в этом фрагменте нужно объяснить первым, чтобы дальнейшая правка не оказалась случайной? Проверяется доказательство безопасной передачи значения.
SwiftБезопасная передача Sendable · фрагмент для разбора
final class Box18: Sendable { var value = 0 }
Вопрос 9 из 25
Какую причину стоит указать в отчёте об ошибке, прежде чем предлагать исправление? Важно учесть: разница между подавлением диагностики и фактической синхронизацией.
SwiftГонки данных · фрагмент для разбора
final class Unsafe18: @unchecked Sendable { var total = 0 }
func add18(_ box: Unsafe18) async {
    await withTaskGroup(of: Void.self) { group in
        for _ in 0..<100 { group.addTask { box.total += 1 } }
    }
}
Вопрос 10 из 25
Какой разбор отличает реальную причину от сопутствующего риска? Здесь оценивается инструментарий и постановка конкурентного теста.
SwiftТестирование и диагностика · фрагмент для разбора
final class Unsafe18: @unchecked Sendable {
    var total = 0
}

func raceTest18() async {
    let box = Unsafe18()
    async let first: Void = { box.total += 1 }()
    async let second: Void = { box.total += 1 }()
    _ = await (first, second)
    assert(box.total == 2)
}
Вопрос 11 из 25
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Не упускайте из виду следующее: пересечение границы изоляции актора и атомарность операции.
SwiftИзоляция акторов · фрагмент для разбора
actor Store18 { var items: [Int] = [] }
func bad18(_ store: Store18) {
    store.items.append(1)
}
Вопрос 12 из 25
Какой вариант ремонта вы бы приняли после содержательной проверки кода? Важно учесть: глобальная actor-изоляция и правильная граница UI.
SwiftГлавный актор MainActor · фрагмент для разбора
@MainActor enum UIState18 { static var status = "idle" }
func sync18() { UIState18.status = "ready" }
Вопрос 13 из 25
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Не упускайте из виду следующее: доказательство безопасной передачи значения.
SwiftБезопасная передача Sendable · фрагмент для разбора
final class Box18: Sendable { var value = 0 }
Вопрос 14 из 25
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Сосредоточьтесь на следующем: разница между подавлением диагностики и фактической синхронизацией.
SwiftГонки данных · фрагмент для разбора
final class Unsafe18: @unchecked Sendable { var total = 0 }
func add18(_ box: Unsafe18) async {
    await withTaskGroup(of: Void.self) { group in
        for _ in 0..<100 { group.addTask { box.total += 1 } }
    }
}
Вопрос 15 из 25
Какое изменение устраняет именно показанную причину и сохраняет ясный контракт «Тестирование и диагностика»? Не упускайте из виду следующее: инструментарий и постановка конкурентного теста.
SwiftТестирование и диагностика · фрагмент для разбора
final class Unsafe18: @unchecked Sendable {
    var total = 0
}

func raceTest18() async {
    let box = Unsafe18()
    async let first: Void = { box.total += 1 }()
    async let second: Void = { box.total += 1 }()
    _ = await (first, second)
    assert(box.total == 2)
}
Вопрос 16 из 25
Какой отрицательный сценарий лучше всего проверяет предел применимости этого механизма? Не упускайте из виду следующее: пересечение границы изоляции актора и атомарность операции.
Вопрос 17 из 25
Какое ограничение `MainActor` обязательно проверить отдельным граничным тестом? Не упускайте из виду следующее: глобальную actor-изоляцию и границу обновления интерфейса.
Вопрос 18 из 25
Какое уточнение защищает решение от слишком широкого толкования? Не упускайте из виду следующее: доказательство безопасной передачи значения.
Вопрос 19 из 25
Какой отрицательный сценарий лучше всего проверяет предел применимости этого механизма? Проверяется разница между подавлением диагностики и фактической синхронизацией.
Вопрос 20 из 25
На какой границе входов, владения или времени жизни результат может стать другим? Здесь оценивается инструментарий и постановка конкурентного теста.
Вопрос 21 из 25
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Важно учесть: пересечение границы изоляции актора и атомарность операции.
Вопрос 22 из 25
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Не упускайте из виду следующее: глобальная actor-изоляция и правильная граница UI.
Вопрос 23 из 25
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Здесь оценивается доказательство безопасной передачи значения.
Вопрос 24 из 25
Какое замечание на проверке кода поможет предотвратить повторение такого дефекта? Не упускайте из виду следующее: разница между подавлением диагностики и фактической синхронизацией.
Вопрос 25 из 25
Что стоит закрепить в типах или API, а не оставлять устной договорённостью? Здесь оценивается инструментарий и постановка конкурентного теста.

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

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

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

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