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

Сборка мусора и управление памятью

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

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 70 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 25
Что из перечисленного относится именно к показанному фрагменту? Выберите основное правило раздела «Жизненный цикл».
LuaLua · Жизненный цикл · разбор 1
local cache = {}
do
  local object = {payload=string.rep("x",1000)}
  cache.ref = object
  object = nil
end
collectgarbage("collect")
print(cache.ref ~= nil)
Вопрос 2 из 25
Какое допущение здесь опасно оставлять без повторного запуска? Ищется граничное следствие правила из раздела «Жизненный цикл».
LuaLua · Жизненный цикл · разбор 2
local function reproduce_case()
  local cache = {}
  do
    local object = {payload=string.rep("x",1000)}
    cache.ref = object
    object = nil
  end
  collectgarbage("collect")
  print(cache.ref ~= nil)
end
reproduce_case()
Вопрос 3 из 25
Что нельзя считать деталью реализации в этом коде? Нужен основной контракт раздела «Жизненный цикл».
LuaLua · Жизненный цикл · разбор 3
do
  local cache = {}
  do
    local object = {payload=string.rep("x",1000)}
    cache.ref = object
    object = nil
  end
  collectgarbage("collect")
  print(cache.ref ~= nil)
end
Вопрос 4 из 25
Новый интерфейс скрывает детали раздела «Жизненный цикл». Что всё равно должно быть явно проверяемо? Выберите практическое следствие раздела «Жизненный цикл».
Вопрос 5 из 25
Что нельзя вывести из одного удачного примера, но нужно знать о разделе «Жизненный цикл»? Выберите описание, объединяющее механизм и границу раздела «Жизненный цикл».
Вопрос 6 из 25
В чём ключ к разбору строки «local values=setmetatable({}, {__mode="v"})»? Нужна именно центральная гарантия раздела «Слабые таблицы».
LuaLua · Слабые таблицы · разбор 1
local values=setmetatable({}, {__mode="v"})
do local obj={id=1}; values.one=obj end
collectgarbage("collect")
print(values.one)
Вопрос 7 из 25
Какой отказ должен быть воспроизводимым в тесте? Нужен отрицательный сценарий для раздела «Слабые таблицы».
LuaLua · Слабые таблицы · разбор 2
local function reproduce_case()
  local values=setmetatable({}, {__mode="v"})
  do local obj={id=1}; values.one=obj end
  collectgarbage("collect")
  print(values.one)
end
reproduce_case()
Вопрос 8 из 25
Какое требование стоит закрепить тестом до начала рефакторинга? Нужен основной контракт раздела «Слабые таблицы».
LuaLua · Слабые таблицы · разбор 3
do
  local values=setmetatable({}, {__mode="v"})
  do local obj={id=1}; values.one=obj end
  collectgarbage("collect")
  print(values.one)
end
Вопрос 9 из 25
Нужно сделать поведение «Слабые таблицы» предсказуемым для следующего разработчика. Что выбрать? Ответ должен выражать проверяемое следствие раздела «Слабые таблицы».
Вопрос 10 из 25
Какое описание раздела «Слабые таблицы» выдерживает и обычный, и граничный сценарий? Нужна полная формулировка раздела «Слабые таблицы».
Вопрос 11 из 25
Какое утверждение объясняет результат без скрытых допущений? Нужна именно центральная гарантия раздела «Финализаторы».
LuaLua · Финализаторы · разбор 1
local function resource(id)
  return setmetatable({id=id},{__gc=function(self) print("close",self.id) end})
end
local r=resource(3)
r=nil
collectgarbage("collect")
Вопрос 12 из 25
Что не видно по одному успешному запуску этого кода? Ищется граничное следствие правила из раздела «Финализаторы».
LuaLua · Финализаторы · разбор 2
local function reproduce_case()
  local function resource(id)
    return setmetatable({id=id},{__gc=function(self) print("close",self.id) end})
  end
  local r=resource(3)
  r=nil
  collectgarbage("collect")
end
reproduce_case()
Вопрос 13 из 25
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «Финализаторы».
LuaLua · Финализаторы · разбор 3
do
  local function resource(id)
    return setmetatable({id=id},{__gc=function(self) print("close",self.id) end})
  end
  local r=resource(3)
  r=nil
  collectgarbage("collect")
end
Вопрос 14 из 25
После редкого сбоя команда спорит о разделе «Финализаторы». Какой вывод должен попасть в код и тесты? Выберите практическое следствие раздела «Финализаторы».
Вопрос 15 из 25
Какое описание раздела «Финализаторы» выдерживает и обычный, и граничный сценарий? Нужна полная формулировка раздела «Финализаторы».
Вопрос 16 из 25
Какой механизм показан в строке «collectgarbage("incremental", 120, 200, 13)»? Выберите основное правило раздела «Настройка GC».
LuaLua · Настройка GC · разбор 1
collectgarbage("incremental", 120, 200, 13)
local t={}
for i=1,10000 do t[i]={i,i+1} end
print(collectgarbage("count"))
Вопрос 17 из 25
Какой риск останется незамеченным, если выполнить код только один раз? Ищется граничное следствие правила из раздела «Настройка GC».
LuaLua · Настройка GC · разбор 2
local function reproduce_case()
  collectgarbage("incremental", 120, 200, 13)
  local t={}
  for i=1,10000 do t[i]={i,i+1} end
  print(collectgarbage("count"))
end
reproduce_case()
Вопрос 18 из 25
Внутреннюю реализацию меняют. Что обязано остаться верным снаружи? Выберите гарантию, определяющую раздел «Настройка GC».
LuaLua · Настройка GC · разбор 3
do
  collectgarbage("incremental", 120, 200, 13)
  local t={}
  for i=1,10000 do t[i]={i,i+1} end
  print(collectgarbage("count"))
end
Вопрос 19 из 25
Новый интерфейс скрывает детали раздела «Настройка GC». Что всё равно должно быть явно проверяемо? Нужна эксплуатационная граница раздела «Настройка GC».
Вопрос 20 из 25
Что должен помнить разработчик, впервые работающий с разделом «Настройка GC»? Нужна полная формулировка раздела «Настройка GC».
Вопрос 21 из 25
Какое правило останется верным на другом входе этого же фрагмента? Выберите основное правило раздела «Читаемость решения».
LuaLua · Читаемость решения · разбор 1
local pool={}
local function acquire() return table.remove(pool) or {} end
local function release(t)
  for k in pairs(t) do t[k]=nil end
  pool[#pool+1]=t
end
local x=acquire(); x.user="a"; release(x)
Вопрос 22 из 25
Какой отказ должен быть воспроизводимым в тесте? Ищется граничное следствие правила из раздела «Читаемость решения».
LuaLua · Читаемость решения · разбор 2
local function reproduce_case()
  local pool={}
  local function acquire() return table.remove(pool) or {} end
  local function release(t)
    for k in pairs(t) do t[k]=nil end
    pool[#pool+1]=t
  end
  local x=acquire(); x.user="a"; release(x)
end
reproduce_case()
Вопрос 23 из 25
Какое правило должно остаться наблюдаемым после правки? Речь идёт о центральном правиле раздела «Читаемость решения».
Вопрос 24 из 25
В модуле меняют «Читаемость решения» и хотят сохранить диагностируемость. Какой подход надёжнее? Выберите практическое следствие раздела «Читаемость решения».
Вопрос 25 из 25
Какой вывод о разделе «Читаемость решения» останется верным после смены реализации? Выберите описание, объединяющее механизм и границу раздела «Читаемость решения».

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

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

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

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