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

LuaJIT и FFI

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

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 85 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 30
Какая семантическая деталь определяет поведение фрагмента? Ответ должен описывать основной механизм раздела «JIT-компиляция».
LuaLua · JIT-компиляция · разбор 1
local jit=require("jit")
local util=require("jit.util")
for i=1,100000 do hot_path(i%3) end
print(jit.status(),util.traceinfo(1))
Вопрос 2 из 30
Какое допущение здесь опасно оставлять без повторного запуска? Ищется граничное следствие правила из раздела «JIT-компиляция».
LuaLua · JIT-компиляция · разбор 2
local function reproduce_case()
  local jit=require("jit")
  local util=require("jit.util")
  for i=1,100000 do hot_path(i%3) end
  print(jit.status(),util.traceinfo(1))
end
reproduce_case()
Вопрос 3 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Выберите гарантию, определяющую раздел «JIT-компиляция».
LuaLua · JIT-компиляция · разбор 3
do
  local jit=require("jit")
  local util=require("jit.util")
  for i=1,100000 do hot_path(i%3) end
  print(jit.status(),util.traceinfo(1))
end
Вопрос 4 из 30
Какой принцип сделает реализацию «JIT-компиляция» устойчивой, а не просто удачной на одном примере? Ответ должен выражать проверяемое следствие раздела «JIT-компиляция».
Вопрос 5 из 30
Что помогает не переносить в раздел «JIT-компиляция» привычки из другого языка или среды? Нужна полная формулировка раздела «JIT-компиляция».
Вопрос 6 из 30
Почему этот фрагмент ведёт себя именно так? Нужна именно центральная гарантия раздела «FFI-типы».
LuaLua · FFI-типы · разбор 1
local ffi=require("ffi")
ffi.cdef[[typedef struct { int x; int y; } Point;
          int distance2(const Point *p);]]
local lib=ffi.load("geometry")
local p=ffi.new("Point",{3,4})
print(lib.distance2(p))
Вопрос 7 из 30
Какой отказ должен быть воспроизводимым в тесте? Выберите именно проверяемую границу раздела «FFI-типы».
LuaLua · FFI-типы · разбор 2
local function reproduce_case()
  local ffi=require("ffi")
  ffi.cdef[[typedef struct { int x; int y; } Point;
            int distance2(const Point *p);]]
  local lib=ffi.load("geometry")
  local p=ffi.new("Point",{3,4})
  print(lib.distance2(p))
end
reproduce_case()
Вопрос 8 из 30
Какой результат обязан подтверждать регрессионный тест после правки? Речь идёт о центральном правиле раздела «FFI-типы».
LuaLua · FFI-типы · разбор 3
do
  local ffi=require("ffi")
  ffi.cdef[[typedef struct { int x; int y; } Point;
            int distance2(const Point *p);]]
  local lib=ffi.load("geometry")
  local p=ffi.new("Point",{3,4})
  print(lib.distance2(p))
end
Вопрос 9 из 30
В проекте пересматривают «FFI-типы». Какое правило лучше выразить в интерфейсе, а не оставлять устной договорённостью? Выберите практическое следствие раздела «FFI-типы».
Вопрос 10 из 30
Какой вывод о разделе «FFI-типы» останется верным после смены реализации? Нужна полная формулировка раздела «FFI-типы».
Вопрос 11 из 30
В чём ключ к разбору строки «local p=ffi.gc(lib.buffer_new(4096),lib.buffer_free)»? Нужна именно центральная гарантия раздела «Граница C».
LuaLua · Граница C · разбор 1
local ffi=require("ffi")
ffi.cdef[[void *buffer_new(size_t n); void buffer_free(void *p);]]
local p=ffi.gc(lib.buffer_new(4096),lib.buffer_free)
assert(p~=nil)
use_buffer(p,4096)
p=nil; collectgarbage()
Вопрос 12 из 30
Что должен поймать отрицательный тест для этого фрагмента? Ищется граничное следствие правила из раздела «Граница C».
LuaLua · Граница C · разбор 2
local function reproduce_case()
  local ffi=require("ffi")
  ffi.cdef[[void *buffer_new(size_t n); void buffer_free(void *p);]]
  local p=ffi.gc(lib.buffer_new(4096),lib.buffer_free)
  assert(p~=nil)
  use_buffer(p,4096)
  p=nil; collectgarbage()
end
reproduce_case()
Вопрос 13 из 30
Что нужно проверить после замены реализации? Речь идёт о центральном правиле раздела «Граница C».
LuaLua · Граница C · разбор 3
do
  local ffi=require("ffi")
  ffi.cdef[[void *buffer_new(size_t n); void buffer_free(void *p);]]
  local p=ffi.gc(lib.buffer_new(4096),lib.buffer_free)
  assert(p~=nil)
  use_buffer(p,4096)
  p=nil; collectgarbage()
end
Вопрос 14 из 30
В модуле меняют «Граница C» и хотят сохранить диагностируемость. Какой подход надёжнее? Выберите практическое следствие раздела «Граница C».
Вопрос 15 из 30
Какое правило раздела «Граница C» стоит закрепить в тестах? Ответ должен охватывать весь раздел «Граница C».
Вопрос 16 из 30
Какая семантическая деталь определяет поведение фрагмента? Выберите основное правило раздела «Переносимость».
LuaLua · Переносимость · разбор 1
local ffi=require("ffi")
if ffi.os=="Windows" then
  lib=ffi.load("service.dll")
else
  lib=ffi.load("libservice.so")
end
Вопрос 17 из 30
Что здесь важнее проверить, чем само отсутствие ошибки? Нужен отрицательный сценарий для раздела «Переносимость».
LuaLua · Переносимость · разбор 2
local function reproduce_case()
  local ffi=require("ffi")
  if ffi.os=="Windows" then
    lib=ffi.load("service.dll")
  else
    lib=ffi.load("libservice.so")
  end
end
reproduce_case()
Вопрос 18 из 30
Что нельзя считать деталью реализации в этом коде? Нужен основной контракт раздела «Переносимость».
LuaLua · Переносимость · разбор 3
do
  local ffi=require("ffi")
  if ffi.os=="Windows" then
    lib=ffi.load("service.dll")
  else
    lib=ffi.load("libservice.so")
  end
end
Вопрос 19 из 30
Какое решение по разделу «Переносимость» упростит и проверку, и расследование сбоя? Ответ должен выражать проверяемое следствие раздела «Переносимость».
Вопрос 20 из 30
Какое утверждение о разделе «Переносимость» точно и не обещает лишнего? Ответ должен охватывать весь раздел «Переносимость».
Вопрос 21 из 30
На каком правиле держится поведение этого кода? Выберите основное правило раздела «Проверка корректности».
LuaLua · Проверка корректности · разбор 1
assert(ffi.sizeof("Point")==8)
local p=ffi.new("Point",{x=-1,y=2147483647})
assert(lib.validate(p)==reference_validate(-1,2147483647))
Вопрос 22 из 30
Где этот код может повести себя иначе на границе? Ищется граничное следствие правила из раздела «Проверка корректности».
LuaLua · Проверка корректности · разбор 2
local function reproduce_case()
  assert(ffi.sizeof("Point")==8)
  local p=ffi.new("Point",{x=-1,y=2147483647})
  assert(lib.validate(p)==reference_validate(-1,2147483647))
end
reproduce_case()
Вопрос 23 из 30
Какое правило должно остаться наблюдаемым после правки? Речь идёт о центральном правиле раздела «Проверка корректности».
LuaLua · Проверка корректности · разбор 3
do
  assert(ffi.sizeof("Point")==8)
  local p=ffi.new("Point",{x=-1,y=2147483647})
  assert(lib.validate(p)==reference_validate(-1,2147483647))
end
Вопрос 24 из 30
Новый интерфейс скрывает детали раздела «Проверка корректности». Что всё равно должно быть явно проверяемо? Нужна эксплуатационная граница раздела «Проверка корректности».
Вопрос 25 из 30
Какое утверждение о разделе «Проверка корректности» полезно и при чтении кода, и при ревью? Ответ должен охватывать весь раздел «Проверка корректности».
Вопрос 26 из 30
Какая семантическая деталь определяет поведение фрагмента? Выберите основное правило раздела «Устойчивость к сбоям».
LuaLua · Устойчивость к сбоям · разбор 1
local result=run_native_in_worker({library=path,symbol="decode",data=input})
if result.signal then
  mark_unhealthy(path,result.signal)
  return nil,"native decoder crashed"
end
Вопрос 27 из 30
Что должен поймать отрицательный тест для этого фрагмента? Нужен отрицательный сценарий для раздела «Устойчивость к сбоям».
LuaLua · Устойчивость к сбоям · разбор 2
local function reproduce_case()
  local result=run_native_in_worker({library=path,symbol="decode",data=input})
  if result.signal then
    mark_unhealthy(path,result.signal)
    return nil,"native decoder crashed"
  end
end
reproduce_case()
Вопрос 28 из 30
После рефакторинга тесты должны защищать одно правило. Какое? Речь идёт о центральном правиле раздела «Устойчивость к сбоям».
LuaLua · Устойчивость к сбоям · разбор 3
do
  local result=run_native_in_worker({library=path,symbol="decode",data=input})
  if result.signal then
    mark_unhealthy(path,result.signal)
    return nil,"native decoder crashed"
  end
end
Вопрос 29 из 30
Для раздела «Устойчивость к сбоям» выбирают между коротким трюком и ясным контрактом. Что предпочтительнее? Выберите практическое следствие раздела «Устойчивость к сбоям».
Вопрос 30 из 30
На какое утверждение можно опереться при проектировании раздела «Устойчивость к сбоям»? Нужна полная формулировка раздела «Устойчивость к сбоям».

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

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

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

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