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

Сетевое программирование Lua

Тест по теме «Сетевое программирование Lua» проверяет чтение кода, поиск скрытых допущений и выбор решения для обычных и граничных сценариев. В нём 25 вопросов, из них 14 содержат фрагменты Lua. Условия отдельно отмечают случаи, зависящие от версии языка или внешней библиотеки.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 25
Какое утверждение объясняет результат без скрытых допущений? Выберите основное правило раздела «Сокеты».
LuaLua · Сокеты · разбор 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
Вопрос 2 из 25
Что должен поймать отрицательный тест для этого фрагмента? Ищется граничное следствие правила из раздела «Сокеты».
LuaLua · Сокеты · разбор 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()
Вопрос 3 из 25
Что нужно проверить после замены реализации? Выберите гарантию, определяющую раздел «Сокеты».
LuaLua · Сокеты · разбор 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
Вопрос 4 из 25
В модуле меняют «Сокеты» и хотят сохранить диагностируемость. Какой подход надёжнее? Выберите практическое следствие раздела «Сокеты».
Вопрос 5 из 25
Какое описание раздела «Сокеты» выдерживает и обычный, и граничный сценарий? Ответ должен охватывать весь раздел «Сокеты».
Вопрос 6 из 25
Какой контракт языка проявляется в этом примере? Ответ должен описывать основной механизм раздела «Неблокирующий ввод-вывод».
LuaLua · Неблокирующий ввод-вывод · разбор 1
client:settimeout(0)
while true do
  local data,err,partial=client:receive(4096)
  if data or #partial>0 then consume(data or partial) end
  if err=="timeout" then wait_readable(client) elseif err then break end
end
Вопрос 7 из 25
Первый пример подтверждает основной путь. Что проверить отдельно? Ищется граничное следствие правила из раздела «Неблокирующий ввод-вывод».
LuaLua · Неблокирующий ввод-вывод · разбор 2
local function reproduce_case()
  client:settimeout(0)
  while true do
    local data,err,partial=client:receive(4096)
    if data or #partial>0 then consume(data or partial) end
    if err=="timeout" then wait_readable(client) elseif err then break end
  end
end
reproduce_case()
Вопрос 8 из 25
Какое поведение должно совпасть до и после рефакторинга? Речь идёт о центральном правиле раздела «Неблокирующий ввод-вывод».
LuaLua · Неблокирующий ввод-вывод · разбор 3
do
  client:settimeout(0)
  while true do
    local data,err,partial=client:receive(4096)
    if data or #partial>0 then consume(data or partial) end
    if err=="timeout" then wait_readable(client) elseif err then break end
  end
end
Вопрос 9 из 25
Новый интерфейс скрывает детали раздела «Неблокирующий ввод-вывод». Что всё равно должно быть явно проверяемо? Ответ должен выражать проверяемое следствие раздела «Неблокирующий ввод-вывод».
Вопрос 10 из 25
Какое утверждение о разделе «Неблокирующий ввод-вывод» полезно и при чтении кода, и при ревью? Выберите описание, объединяющее механизм и границу раздела «Неблокирующий ввод-вывод».
Вопрос 11 из 25
В чём ключ к разбору строки «if not ok then return nil,{stage="connect",cause=err} end»? Нужна именно центральная гарантия раздела «Тайм-ауты».
LuaLua · Тайм-ауты · разбор 1
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)
Вопрос 12 из 25
Какую границу стоит сделать явной в регрессионной проверке? Выберите именно проверяемую границу раздела «Тайм-ауты».
LuaLua · Тайм-ауты · разбор 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()
Вопрос 13 из 25
Что должно пережить замену вспомогательных функций и имён переменных? Речь идёт о центральном правиле раздела «Тайм-ауты».
LuaLua · Тайм-ауты · разбор 3
do
  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
Вопрос 14 из 25
Код по разделу «Тайм-ауты» уходит в эксплуатацию. Какое ограничение нельзя прятать внутри реализации? Ответ должен выражать проверяемое следствие раздела «Тайм-ауты».
Вопрос 15 из 25
Что нельзя вывести из одного удачного примера, но нужно знать о разделе «Тайм-ауты»? Ответ должен охватывать весь раздел «Тайм-ауты».
Вопрос 16 из 25
Какой контракт языка проявляется в этом примере? Выберите основное правило раздела «Протокол сообщений».
LuaLua · Протокол сообщений · разбор 1
local function frame(body)
  return string.pack(">I4",#body)..body
end
local len=assert(read_exact(sock,4)):unpack(">I4")
assert(len<=1024*1024)
local body=assert(read_exact(sock,len))
Вопрос 17 из 25
Какое наблюдение нужно зафиксировать при повторном вызове? Ищется граничное следствие правила из раздела «Протокол сообщений».
LuaLua · Протокол сообщений · разбор 2
local function reproduce_case()
  local function frame(body)
    return string.pack(">I4",#body)..body
  end
  local len=assert(read_exact(sock,4)):unpack(">I4")
  assert(len<=1024*1024)
  local body=assert(read_exact(sock,len))
end
reproduce_case()
Вопрос 18 из 25
Какой контракт отличит эквивалентный рефакторинг от тихой поломки? Нужен основной контракт раздела «Протокол сообщений».
LuaLua · Протокол сообщений · разбор 3
do
  local function frame(body)
    return string.pack(">I4",#body)..body
  end
  local len=assert(read_exact(sock,4)):unpack(">I4")
  assert(len<=1024*1024)
  local body=assert(read_exact(sock,len))
end
Вопрос 19 из 25
Решение по разделу «Протокол сообщений» должно пережить обновление зависимости. Что фиксировать в контракте? Выберите практическое следствие раздела «Протокол сообщений».
Вопрос 20 из 25
Что в разделе «Протокол сообщений» является гарантией, а не привычкой конкретного проекта? Ответ должен охватывать весь раздел «Протокол сообщений».
Вопрос 21 из 25
Какое утверждение объясняет результат без скрытых допущений? Выберите основное правило раздела «Тестовый сценарий».
LuaLua · Тестовый сценарий · разбор 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"))
Вопрос 22 из 25
Какое допущение здесь опасно оставлять без повторного запуска? Выберите именно проверяемую границу раздела «Тестовый сценарий».
LuaLua · Тестовый сценарий · разбор 2
local function reproduce_case()
  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"))
end
reproduce_case()
Вопрос 23 из 25
Какое требование стоит закрепить тестом до начала рефакторинга? Нужен основной контракт раздела «Тестовый сценарий».
Вопрос 24 из 25
Решение по разделу «Тестовый сценарий» должно пережить обновление зависимости. Что фиксировать в контракте? Нужна эксплуатационная граница раздела «Тестовый сценарий».
Вопрос 25 из 25
Какой вывод о разделе «Тестовый сценарий» останется верным после смены реализации? Нужна полная формулировка раздела «Тестовый сценарий».

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

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

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

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