💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов, на работу отведено 85 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 6 тематических шкал и подробные объяснения.
Вопрос 6 из 30
Какой итог даст показанный фрагмент, если применять правила Swift буквально, а не угадывать намерение автора? Проверяется жизненный цикл задач, соединений и кеша.
Swift Память и архитектура приложения · фрагмент для разбора Копировать
import Foundation
actor ImageCache23 { private var data: [URL: Data] = [:]; func value(for url: URL) -> Data? { data[url] }; func insert(_ d: Data, for url: URL) { data[url] = d } }
Для этого примера достаточно учесть, что реальная сеть делает модульный тест надёжнее управляемого транспорта.
Операция с `ImageCache23` корректна, поскольку кеш должен удерживать ответы бессрочно, пока процесс не завершится.
Actor защищает словарь, но без лимита стоимости кеш всё равно может занять неограниченную память.
Наблюдаемый результат определяется тем, что создание `URLSessionDataTask` автоматически запускает запрос без `resume()`.
Actor защищает словарь, но без лимита стоимости кеш всё равно не может занять неограниченную память.
Вопрос 14 из 30
Какое изменение устраняет именно показанную причину и сохраняет ясный контракт «Обработка ответа»? Здесь оценивается разделение транспортного и протокольного успеха.
Swift Обработка ответа · фрагмент для разбора Копировать
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
let (data23, _) = try await URLSession.shared.data(from: URL(string: "https://example.com")!)
let model23 = try JSONDecoder().decode([String:Int].self, from: data23)
Проверить тип ответа, статус, MIME при необходимости и только затем декодировать либо построить доменную ошибку.
Достаточно изменить работу с `model23`, исходя из того, что повтор POST-запроса всегда безопасен после тайм-аута.
Сигнатуру можно не менять, если считать, что кеш должен удерживать ответы бессрочно, пока процесс не завершится.
Правка сводится к локальному обходу: реальная сеть делает модульный тест надёжнее управляемого транспорта.
Нужно адаптировать только вызов `model23`, поскольку создание `URLSessionDataTask` автоматически запускает запрос без `resume()`.
Вопрос 18 из 30
Какой вариант ремонта вы бы приняли после содержательной проверки кода? Сосредоточьтесь на следующем: жизненный цикл задач, соединений и кеша.
Swift Память и архитектура приложения · фрагмент для разбора Копировать
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
final class Client23: @unchecked Sendable {
func load(_ url: URL) {
URLSession.shared.dataTask(with: url) { data, _, _ in
self.consume(data)
}.resume()
}
func consume(_ data: Data?) {}
}
Сигнатуру можно не менять, если считать, что кеш должен удерживать ответы бессрочно, пока процесс не завершится.
Правка сводится к локальному обходу: реальная сеть делает модульный тест надёжнее управляемого транспорта.
Определить владение запросом, отменять его с владельцем, ограничивать кеш по стоимости и декодировать большие данные внутри главного исполнителя.
Определить владение запросом, отменять его с владельцем, ограничивать кеш по стоимости и декодировать большие данные вне главного исполнителя.
Достаточно изменить работу с `Client23`, исходя из того, что повтор POST-запроса всегда безопасен после тайм-аута.
Вопрос 23 из 30
Где заканчивается гарантия, продемонстрированная в обычном примере «Управляемый сетевой транспорт»? Проверяется управляемый транспорт и полезная наблюдаемость.
Контрпример появляется, когда реальная сеть делает модульный тест надёжнее управляемого транспорта.
Ограничение определяется предположением, что повтор POST-запроса всегда безопасен после тайм-аута.
Мок, который сразу возвращает модель, не проверяет URL, заголовки, статус и декодирование — то есть обходит половину сетевого слоя.
Граница применимости проходит там, где кеш должен удерживать ответы бессрочно, пока процесс не завершится.
Мок, который сразу возвращает модель, проверяет URL, заголовки, статус и декодирование — то есть обходит половину сетевого слоя.
Вопрос 29 из 30
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Сосредоточьтесь на следующем: управляемый транспорт и полезная наблюдаемость.
В API и тестах следует исходить из правила: любой ответ без транспортной ошибки считается успешным независимо от HTTP-кода.
Архитектуру стоит строить из предположения, что кеш должен удерживать ответы бессрочно, пока процесс не завершится.
Для устойчивого решения достаточно принять, что создание `URLSessionDataTask` автоматически запускает запрос без `resume()`.
Диагностика не должна связывать метод, нормализованный URL, статус, длительность и request ID, исключая токены и персональные данные.
Диагностика должна связывать метод, нормализованный URL, статус, длительность и request ID, исключая токены и персональные данные.
Вопрос 30 из 30
Что должно определять архитектуру этого участка, когда появятся новые входы и владельцы? Не упускайте из виду следующее: жизненный цикл задач, соединений и кеша.
Разделить транспорт, кодирование, политику повтора, кеш и доменное отображение ошибок — так каждую часть можно тестировать и заменять отдельно.
Разделить транспорт, кодирование, политику повтора, кеш и доменное отображение ошибок — не так каждую часть можно тестировать и заменять отдельно.
Разделить транспорт, кодирование, политику повтора, кеш и доменное отображение ошибок — так каждую часть нельзя тестировать и заменять отдельно.
В API и тестах следует исходить из правила: любой ответ без транспортной ошибки считается успешным независимо от HTTP-кода.
Для устойчивого решения достаточно принять, что создание `URLSessionDataTask` автоматически запускает запрос без `resume()`.