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

URLSession и сетевой слой

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 30 вопросов, на работу отведено 85 минут. В каждом задании верен только один вариант. Часть фрагментов намеренно содержит ошибку: определяйте её по коду, а не по внешнему виду ответа. После завершения откроются общий результат, 6 тематических шкал и подробные объяснения.
Вопрос 1 из 30
Определите не предполагаемое, а фактическое поведение примера «Формирование запроса». Здесь оценивается построение запроса без ручного экранирования.
SwiftФормирование запроса · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var request23 = URLRequest(url: URL(string: "https://example.com/items")!)
request23.httpMethod = "POST"
request23.setValue("application/json", forHTTPHeaderField: "Content-Type")
Вопрос 2 из 30
Какой итог даст показанный фрагмент, если применять правила Swift буквально, а не угадывать намерение автора? Важно учесть: разделение транспортного и протокольного успеха.
SwiftОбработка ответа · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
func validate23(_ response: URLResponse) throws {
    guard let http = response as? HTTPURLResponse,
          (200..<300).contains(http.statusCode) else { throw URLError(.badServerResponse) }
}
Вопрос 3 из 30
Как поведёт себя программа в этом коротком сценарии, связанном с «Асинхронная загрузка»? Важно учесть: неблокирующая загрузка и мост со старым API.
SwiftАсинхронная загрузка · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
enum HTTPError23: Error { case badStatus }
func validate23(_ response: URLResponse) throws {
    guard let http = response as? HTTPURLResponse,
          (200..<300).contains(http.statusCode) else {
        throw HTTPError23.badStatus
    }
}
func load23(_ request: URLRequest, session: URLSession) async throws -> Data {
    let (data, response) = try await session.data(for: request)
    try validate23(response)
    return data
}
Вопрос 4 из 30
Как поведёт себя программа в этом коротком сценарии, связанном с «Повтор и кеш»? Важно учесть: идемпотентность, backoff и валидность кеша.
SwiftПовтор и кеш · фрагмент для разбора
import Foundation
func shouldRetry23(status: Int, attempt: Int) -> Bool {
    [429, 502, 503, 504].contains(status) && attempt < 3
}
Вопрос 5 из 30
Определите не предполагаемое, а фактическое поведение примера «Управляемый сетевой транспорт». Проверяется управляемый транспорт и полезная наблюдаемость.
SwiftТестирование и диагностика · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
final class StubProtocol23: URLProtocol {
    nonisolated(unsafe) static var handler: ((URLRequest) throws -> (HTTPURLResponse, Data))?
    override class func canInit(with request: URLRequest) -> Bool { true }
    override class func canonicalRequest(for request: URLRequest) -> URLRequest { request }
    override func startLoading() {}
    override func stopLoading() {}
}
Вопрос 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 } }
Вопрос 7 из 30
Разработчик видит симптом, но ищет первопричину. Какое объяснение выдерживает проверку кодом? Важно учесть: построение запроса без ручного экранирования.
SwiftФормирование запроса · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var requestBad23 = URLRequest(url: URL(string: "https://example.com/search?q=a b")!)
Вопрос 8 из 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)
Вопрос 9 из 30
Что именно делает этот фрагмент неверным или неочевидным с точки зрения «Асинхронная загрузка»? Проверяется неблокирующая загрузка и мост со старым API.
SwiftАсинхронная загрузка · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
final class DataBox23: @unchecked Sendable { var value: Data? }
func blocking23(_ url: URL) -> Data? {
    let semaphore = DispatchSemaphore(value: 0)
    let box = DataBox23()
    URLSession.shared.dataTask(with: url) { data, _, _ in
        box.value = data
        semaphore.signal()
    }.resume()
    semaphore.wait()
    return box.value
}
Вопрос 10 из 30
Ожидаемое поведение не совпало с фактическим. В чём первая нарушенная гарантия? Здесь оценивается идемпотентность, backoff и валидность кеша.
SwiftПовтор и кеш · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
func load23(_ request: URLRequest, session: URLSession) async throws -> Data {
    let (data, _) = try await session.data(for: request)
    return data
}
func retryPost23(_ request: URLRequest) async throws -> Data {
    for _ in 0..<5 {
        if let data = try? await load23(request, session: .shared) { return data }
    }
    throw URLError(.cannotLoadFromNetwork)
}
Вопрос 11 из 30
Что в этом фрагменте нужно объяснить первым, чтобы дальнейшая правка не оказалась случайной? Важно учесть: управляемый транспорт и полезная наблюдаемость.
SwiftТестирование и диагностика · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
func networkTest23() async throws {
    let data = try await URLSession.shared.data(from: URL(string: "https://example.com")!).0
    assert(!data.isEmpty)
}
Вопрос 12 из 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?) {}
}
Вопрос 13 из 30
Какое изменение устраняет именно показанную причину и сохраняет ясный контракт «Формирование запроса»? Сосредоточьтесь на следующем: построение запроса без ручного экранирования.
SwiftФормирование запроса · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
var requestBad23 = URLRequest(url: URL(string: "https://example.com/search?q=a b")!)
Вопрос 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)
Вопрос 15 из 30
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Сосредоточьтесь на следующем: неблокирующая загрузка и мост со старым API.
SwiftАсинхронная загрузка · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
final class DataBox23: @unchecked Sendable { var value: Data? }
func blocking23(_ url: URL) -> Data? {
    let semaphore = DispatchSemaphore(value: 0)
    let box = DataBox23()
    URLSession.shared.dataTask(with: url) { data, _, _ in
        box.value = data
        semaphore.signal()
    }.resume()
    semaphore.wait()
    return box.value
}
Вопрос 16 из 30
Какое решение одновременно исправляет код и оставляет понятную границу для дальнейших изменений? Важно учесть: идемпотентность, backoff и валидность кеша.
SwiftПовтор и кеш · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
func load23(_ request: URLRequest, session: URLSession) async throws -> Data {
    let (data, _) = try await session.data(for: request)
    return data
}
func retryPost23(_ request: URLRequest) async throws -> Data {
    for _ in 0..<5 {
        if let data = try? await load23(request, session: .shared) { return data }
    }
    throw URLError(.cannotLoadFromNetwork)
}
Вопрос 17 из 30
Как восстановить заявленный контракт с наименьшим числом новых скрытых предположений? Не упускайте из виду следующее: управляемый транспорт и полезная наблюдаемость.
SwiftТестирование и диагностика · фрагмент для разбора
import Foundation
#if canImport(FoundationNetworking)
import FoundationNetworking
#endif
func networkTest23() async throws {
    let data = try await URLSession.shared.data(from: URL(string: "https://example.com")!).0
    assert(!data.isEmpty)
}
Вопрос 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?) {}
}
Вопрос 19 из 30
Какое ограничение темы «Формирование запроса» обязательно проверить отдельным граничным тестом? Важно учесть: построение запроса без ручного экранирования.
Вопрос 20 из 30
Какое уточнение защищает решение от слишком широкого толкования? Здесь оценивается разделение транспортного и протокольного успеха.
Вопрос 21 из 30
Что нужно учесть, прежде чем объявлять найденное правило универсальным? Не упускайте из виду следующее: неблокирующая загрузка и мост со старым API.
Вопрос 22 из 30
Какой отрицательный сценарий лучше всего проверяет предел применимости этого механизма? Проверяется идемпотентность, backoff и валидность кеша.
Вопрос 23 из 30
Где заканчивается гарантия, продемонстрированная в обычном примере «Управляемый сетевой транспорт»? Проверяется управляемый транспорт и полезная наблюдаемость.
Вопрос 24 из 30
Какое уточнение защищает решение от слишком широкого толкования? Сосредоточьтесь на следующем: жизненный цикл задач, соединений и кеша.
Вопрос 25 из 30
Какое замечание на проверке кода поможет предотвратить повторение такого дефекта? Не упускайте из виду следующее: построение запроса без ручного экранирования.
Вопрос 26 из 30
Что стоит закрепить в типах или API, а не оставлять устной договорённостью? Сосредоточьтесь на следующем: разделение транспортного и протокольного успеха.
Вопрос 27 из 30
Какое замечание на проверке кода поможет предотвратить повторение такого дефекта? Важно учесть: неблокирующая загрузка и мост со старым API.
Вопрос 28 из 30
Какой принцип важнее локальной красоты синтаксиса в рабочем приложении? Не упускайте из виду следующее: идемпотентность, backoff и валидность кеша.
Вопрос 29 из 30
Какое решение уменьшит число скрытых состояний и упростит расследование следующего сбоя? Сосредоточьтесь на следующем: управляемый транспорт и полезная наблюдаемость.
Вопрос 30 из 30
Что должно определять архитектуру этого участка, когда появятся новые входы и владельцы? Не упускайте из виду следующее: жизненный цикл задач, соединений и кеша.

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

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

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

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