💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 25
Какое утверждение объясняет результат без скрытых допущений? Выберите основное правило раздела «Сокеты».
Lua Lua · Сокеты · разбор 1 Копировать
local socket=require("socket")
local client=assert(socket.tcp())
assert(client:connect("127.0.0.1",9000))
local sent,err,last=client:send(payload)
if not sent then sent=assert(last); assert(client:send(payload,sent+1)) end
Для фрагмента из раздела «Сокеты» верно: Тайм-ауты нужны отдельно для соединения, чтения и общей операции; после частичного протокольного обмена повтор может быть небезопасен без идемпотентности.
Для фрагмента из раздела «Сокеты» верно: Протокол сообщений должен задавать границы — длину, разделитель с экранированием или структурированный кадр; чтение «пока данные есть» не определяет конец сообщения.
Для фрагмента из раздела «Сокеты» верно: Сокет — поток байтов, поэтому один send не гарантирует отправку всего буфера, а один receive не обязан вернуть целое прикладное сообщение.
Для фрагмента из раздела «Сокеты» верно: Сетевой код проверяют управляемым сервером, который дробит пакеты, задерживает ответ, закрывает соединение и присылает повреждённый кадр.
Для фрагмента из раздела «Сокеты» верно: Неблокирующий ввод-вывод требует цикла событий или готовности дескрипторов; повторять операцию в плотном цикле после timeout/wantread означает занять процессор.
Вопрос 2 из 25
Что должен поймать отрицательный тест для этого фрагмента? Ищется граничное следствие правила из раздела «Сокеты».
Lua Lua · Сокеты · разбор 2 Копировать
local function reproduce_case()
local socket=require("socket")
local client=assert(socket.tcp())
assert(client:connect("127.0.0.1",9000))
local sent,err,last=client:send(payload)
if not sent then sent=assert(last); assert(client:send(payload,sent+1)) end
end
reproduce_case()
Другой вход в разделе «Сокеты» должен сделать видимым: Неблокирующий ввод-вывод требует цикла событий или готовности дескрипторов; повторять операцию в плотном цикле после timeout/wantread означает занять процессор.
Другой вход в разделе «Сокеты» должен сделать видимым: Сокет — поток байтов, поэтому один send не гарантирует отправку всего буфера, а один receive не обязан вернуть целое прикладное сообщение; код должен обрабатывать частичные операции.
Другой вход в разделе «Сокеты» должен сделать видимым: Протокол сообщений должен задавать границы — длину, разделитель с экранированием или структурированный кадр; чтение «пока данные есть» не определяет конец сообщения.
Другой вход в разделе «Сокеты» должен сделать видимым: Сетевой код проверяют управляемым сервером, который дробит пакеты, задерживает ответ, закрывает соединение и присылает повреждённый кадр; localhost без сбоев скрывает главные дефекты.
Другой вход в разделе «Сокеты» должен сделать видимым: Тайм-ауты нужны отдельно для соединения, чтения и общей операции; после частичного протокольного обмена повтор может быть небезопасен без идемпотентности.
Вопрос 3 из 25
Что нужно проверить после замены реализации? Выберите гарантию, определяющую раздел «Сокеты».
Lua Lua · Сокеты · разбор 3 Копировать
do
local socket=require("socket")
local client=assert(socket.tcp())
assert(client:connect("127.0.0.1",9000))
local sent,err,last=client:send(payload)
if not sent then sent=assert(last); assert(client:send(payload,sent+1)) end
end
При замене внутренних шагов раздела «Сокеты» остаётся гарантия: Неблокирующий ввод-вывод требует цикла событий или готовности дескрипторов; повторять операцию в плотном цикле после timeout/wantread означает занять процессор.
При замене внутренних шагов раздела «Сокеты» остаётся гарантия: Сокет — поток байтов, поэтому один send не гарантирует отправку всего буфера, а один receive не обязан вернуть целое прикладное сообщение.
При замене внутренних шагов раздела «Сокеты» остаётся гарантия: Тайм-ауты нужны отдельно для соединения, чтения и общей операции; после частичного протокольного обмена повтор может быть небезопасен без идемпотентности.
При замене внутренних шагов раздела «Сокеты» остаётся гарантия: Сетевой код проверяют управляемым сервером, который дробит пакеты, задерживает ответ, закрывает соединение и присылает повреждённый кадр.
При замене внутренних шагов раздела «Сокеты» остаётся гарантия: Протокол сообщений должен задавать границы — длину, разделитель с экранированием или структурированный кадр; чтение «пока данные есть» не определяет конец сообщения.
Вопрос 12 из 25
Какую границу стоит сделать явной в регрессионной проверке? Выберите именно проверяемую границу раздела «Тайм-ауты».
Lua Lua · Тайм-ауты · разбор 2 Копировать
local function reproduce_case()
client:settimeout(2)
local ok,err=client:connect(host,port)
if not ok then return nil,{stage="connect",cause=err} end
client:settimeout(5)
return read_response(client,deadline)
end
reproduce_case()
Другой вход в разделе «Тайм-ауты» должен сделать видимым: Сокет — поток байтов, поэтому один send не гарантирует отправку всего буфера, а один receive не обязан вернуть целое прикладное сообщение.
Другой вход в разделе «Тайм-ауты» должен сделать видимым: Тайм-ауты нужны отдельно для соединения, чтения и общей операции; после частичного протокольного обмена повтор может быть небезопасен без идемпотентности.
Другой вход в разделе «Тайм-ауты» должен сделать видимым: Сетевой код проверяют управляемым сервером, который дробит пакеты, задерживает ответ, закрывает соединение и присылает повреждённый кадр.
Другой вход в разделе «Тайм-ауты» должен сделать видимым: Протокол сообщений должен задавать границы — длину, разделитель с экранированием или структурированный кадр; чтение «пока данные есть» не определяет конец сообщения.
Другой вход в разделе «Тайм-ауты» должен сделать видимым: Неблокирующий ввод-вывод требует цикла событий или готовности дескрипторов; повторять операцию в плотном цикле после timeout/wantread означает занять процессор.
Вопрос 21 из 25
Какое утверждение объясняет результат без скрытых допущений? Выберите основное правило раздела «Тестовый сценарий».
Lua Lua · Тестовый сценарий · разбор 1 Копировать
server:on_request(function(req)
server:send(req.id, response:sub(1,2))
sleep(0.05)
server:send(req.id, response:sub(3))
end)
local got=assert(client:request("ping"))
При разборе раздела «Тестовый сценарий» здесь действует условие: Сетевой код проверяют управляемым сервером, который дробит пакеты, задерживает ответ, закрывает соединение и присылает повреждённый кадр.
При разборе раздела «Тестовый сценарий» здесь действует условие: Протокол сообщений должен задавать границы — длину, разделитель с экранированием или структурированный кадр; чтение «пока данные есть» не определяет конец сообщения.
При разборе раздела «Тестовый сценарий» здесь действует условие: Неблокирующий ввод-вывод требует цикла событий или готовности дескрипторов; повторять операцию в плотном цикле после timeout/wantread означает занять процессор.
При разборе раздела «Тестовый сценарий» здесь действует условие: Тайм-ауты нужны отдельно для соединения, чтения и общей операции; после частичного протокольного обмена повтор может быть небезопасен без идемпотентности.
При разборе раздела «Тестовый сценарий» здесь действует условие: Сокет — поток байтов, поэтому один send не гарантирует отправку всего буфера, а один receive не обязан вернуть целое прикладное сообщение.