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

Защита игрового или серверного скрипта

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Какое правило останется верным на другом входе этого же фрагмента? Нужна именно центральная гарантия раздела «Валидация входа».
LuaLua · Валидация входа · разбор 1
local cmd=decode(payload)
assert(type(cmd)=="table")
assert(cmd.kind=="move" or cmd.kind=="cast")
assert_integer(cmd.seq,0,2^31-1)
assert(#payload<=4096)
apply_command(player,cmd)
Вопрос 2 из 30
Какой риск останется незамеченным, если выполнить код только один раз? Ищется граничное следствие правила из раздела «Валидация входа».
LuaLua · Валидация входа · разбор 2
local function reproduce_case()
  local cmd=decode(payload)
  assert(type(cmd)=="table")
  assert(cmd.kind=="move" or cmd.kind=="cast")
  assert_integer(cmd.seq,0,2^31-1)
  assert(#payload<=4096)
  apply_command(player,cmd)
end
reproduce_case()
Вопрос 3 из 30
Какой инвариант нельзя потерять при упрощении этого фрагмента? Нужен основной контракт раздела «Валидация входа».
LuaLua · Валидация входа · разбор 3
do
  local cmd=decode(payload)
  assert(type(cmd)=="table")
  assert(cmd.kind=="move" or cmd.kind=="cast")
  assert_integer(cmd.seq,0,2^31-1)
  assert(#payload<=4096)
  apply_command(player,cmd)
end
Вопрос 4 из 30
Команда сокращает код в разделе «Валидация входа». Как не потерять важное граничное поведение? Нужна эксплуатационная граница раздела «Валидация входа».
Вопрос 5 из 30
Что отличает корректное понимание раздела «Валидация входа» от правдоподобного заблуждения? Выберите описание, объединяющее механизм и границу раздела «Валидация входа».
Вопрос 6 из 30
Какой механизм показан в строке «local damage=rules:damage(player,target,cmd.skill_id)»? Ответ должен описывать основной механизм раздела «Доверие клиенту».
LuaLua · Доверие клиенту · разбор 1
function handle_hit(player,cmd)
  local target=world:get(cmd.target_id)
  assert(can_reach(player,target))
  local damage=rules:damage(player,target,cmd.skill_id)
  target:apply_damage(damage)
end
Вопрос 7 из 30
Какой крайний случай важнее всего добавить к проверке? Нужен отрицательный сценарий для раздела «Доверие клиенту».
LuaLua · Доверие клиенту · разбор 2
local function reproduce_case()
  function handle_hit(player,cmd)
    local target=world:get(cmd.target_id)
    assert(can_reach(player,target))
    local damage=rules:damage(player,target,cmd.skill_id)
    target:apply_damage(damage)
  end
end
reproduce_case()
Вопрос 8 из 30
После рефакторинга тесты должны защищать одно правило. Какое? Нужен основной контракт раздела «Доверие клиенту».
LuaLua · Доверие клиенту · разбор 3
do
  function handle_hit(player,cmd)
    local target=world:get(cmd.target_id)
    assert(can_reach(player,target))
    local damage=rules:damage(player,target,cmd.skill_id)
    target:apply_damage(damage)
  end
end
Вопрос 9 из 30
Команда сокращает код в разделе «Доверие клиенту». Как не потерять важное граничное поведение? Выберите практическое следствие раздела «Доверие клиенту».
Вопрос 10 из 30
Какое описание раздела «Доверие клиенту» выдерживает и обычный, и граничный сценарий? Ответ должен охватывать весь раздел «Доверие клиенту».
Вопрос 11 из 30
В чём ключ к разбору строки «local bucket=limits:bucket(player.id,"expensive_action")»? Ответ должен описывать основной механизм раздела «Лимиты».
LuaLua · Лимиты · разбор 1
local bucket=limits:bucket(player.id,"expensive_action")
if not bucket:take(1,now()) then return reject("rate_limited") end
if estimate_cost(cmd)>MAX_COST then return reject("too_complex") end
Вопрос 12 из 30
Что здесь важнее проверить, чем само отсутствие ошибки? Ищется граничное следствие правила из раздела «Лимиты».
LuaLua · Лимиты · разбор 2
local function reproduce_case()
  local bucket=limits:bucket(player.id,"expensive_action")
  if not bucket:take(1,now()) then return reject("rate_limited") end
  if estimate_cost(cmd)>MAX_COST then return reject("too_complex") end
end
reproduce_case()
Вопрос 13 из 30
Какой смысл фрагмента нельзя спрятать в комментарии вместо проверки? Выберите гарантию, определяющую раздел «Лимиты».
LuaLua · Лимиты · разбор 3
do
  local bucket=limits:bucket(player.id,"expensive_action")
  if not bucket:take(1,now()) then return reject("rate_limited") end
  if estimate_cost(cmd)>MAX_COST then return reject("too_complex") end
end
Вопрос 14 из 30
Какое решение по разделу «Лимиты» упростит и проверку, и расследование сбоя? Ответ должен выражать проверяемое следствие раздела «Лимиты».
Вопрос 15 из 30
Какое правило раздела «Лимиты» стоит закрепить в тестах? Нужна полная формулировка раздела «Лимиты».
Вопрос 16 из 30
В чём ключ к разбору строки «audit:write({actor=player.id,action=cmd.kind,seq=cmd.seq,»? Выберите основное правило раздела «Аудит действий».
LuaLua · Аудит действий · разбор 1
audit:write({actor=player.id,action=cmd.kind,seq=cmd.seq,
  script=release.id,result=result.code,request=request_id})
Вопрос 17 из 30
Что следует изменить во входе, чтобы проверить скрытое ограничение? Ищется граничное следствие правила из раздела «Аудит действий».
LuaLua · Аудит действий · разбор 2
local function reproduce_case()
  audit:write({actor=player.id,action=cmd.kind,seq=cmd.seq,
    script=release.id,result=result.code,request=request_id})
end
reproduce_case()
Вопрос 18 из 30
Какая гарантия важнее сохранения точной формы кода? Нужен основной контракт раздела «Аудит действий».
LuaLua · Аудит действий · разбор 3
do
  audit:write({actor=player.id,action=cmd.kind,seq=cmd.seq,
    script=release.id,result=result.code,request=request_id})
end
Вопрос 19 из 30
Код по разделу «Аудит действий» уходит в эксплуатацию. Какое ограничение нельзя прятать внутри реализации? Нужна эксплуатационная граница раздела «Аудит действий».
Вопрос 20 из 30
Какое утверждение о разделе «Аудит действий» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Аудит действий».
Вопрос 21 из 30
Какая семантическая деталь определяет поведение фрагмента? Нужна именно центральная гарантия раздела «Контроль ресурсов».
LuaLua · Контроль ресурсов · разбор 1
local ok,result=run_with_budget(script,input,{instructions=200000,
 memory_bytes=8*1024*1024,network_calls=4,wall_ms=25})
if not ok then isolate_failure(player.id,result) end
Вопрос 22 из 30
Что следует изменить во входе, чтобы проверить скрытое ограничение? Ищется граничное следствие правила из раздела «Контроль ресурсов».
LuaLua · Контроль ресурсов · разбор 2
local function reproduce_case()
  local ok,result=run_with_budget(script,input,{instructions=200000,
   memory_bytes=8*1024*1024,network_calls=4,wall_ms=25})
  if not ok then isolate_failure(player.id,result) end
end
reproduce_case()
Вопрос 23 из 30
После рефакторинга тесты должны защищать одно правило. Какое? Речь идёт о центральном правиле раздела «Контроль ресурсов».
LuaLua · Контроль ресурсов · разбор 3
do
  local ok,result=run_with_budget(script,input,{instructions=200000,
   memory_bytes=8*1024*1024,network_calls=4,wall_ms=25})
  if not ok then isolate_failure(player.id,result) end
end
Вопрос 24 из 30
Что стоит зафиксировать до расширения функциональности раздела «Контроль ресурсов»? Ответ должен выражать проверяемое следствие раздела «Контроль ресурсов».
Вопрос 25 из 30
Какое утверждение о разделе «Контроль ресурсов» наиболее полное и точное? Выберите описание, объединяющее механизм и границу раздела «Контроль ресурсов».
Вопрос 26 из 30
Что нельзя заменить привычкой из другого языка при чтении этого кода? Выберите основное правило раздела «Масштабирование решения».
LuaLua · Масштабирование решения · разбор 1
local key=player.id..":"..cmd.seq
local previous=dedupe:get(key)
if previous then return previous end
local result=apply_transaction(cmd)
dedupe:put(key,result,300)
return result
Вопрос 27 из 30
Где этот код может повести себя иначе на границе? Нужен отрицательный сценарий для раздела «Масштабирование решения».
LuaLua · Масштабирование решения · разбор 2
local function reproduce_case()
  local key=player.id..":"..cmd.seq
  local previous=dedupe:get(key)
  if previous then return previous end
  local result=apply_transaction(cmd)
  dedupe:put(key,result,300)
  return result
end
reproduce_case()
Вопрос 28 из 30
Какой инвариант нельзя потерять при упрощении этого фрагмента? Речь идёт о центральном правиле раздела «Масштабирование решения».
LuaLua · Масштабирование решения · разбор 3
do
  local key=player.id..":"..cmd.seq
  local previous=dedupe:get(key)
  if previous then return previous end
  local result=apply_transaction(cmd)
  dedupe:put(key,result,300)
  return result
end
Вопрос 29 из 30
Команда сокращает код в разделе «Масштабирование решения». Как не потерять важное граничное поведение? Ответ должен выражать проверяемое следствие раздела «Масштабирование решения».
Вопрос 30 из 30
Что помогает не переносить в раздел «Масштабирование решения» привычки из другого языка или среды? Ответ должен охватывать весь раздел «Масштабирование решения».

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

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

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

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