💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На работу отведено 55 минут. После завершения можно посмотреть правильные ответы, объяснения и результат по каждой теме.
Вопрос 1 из 20
Какая семантическая деталь определяет поведение фрагмента? Ответ должен описывать основной механизм раздела «Строковая библиотека».
Lua Lua · Строковая библиотека · разбор 1 Копировать
local s = "lua"
local upper = string.upper(s)
print(s, upper, s == upper)
Для фрагмента из раздела «Строковая библиотека» верно: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Для фрагмента из раздела «Строковая библиотека» верно: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Для фрагмента из раздела «Строковая библиотека» верно: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
Для фрагмента из раздела «Строковая библиотека» верно: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
Для фрагмента из раздела «Строковая библиотека» верно: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML.
Вопрос 2 из 20
Какую границу стоит сделать явной в регрессионной проверке? Нужен отрицательный сценарий для раздела «Строковая библиотека».
Lua Lua · Строковая библиотека · разбор 2 Копировать
local function reproduce_case()
local s = "lua"
local upper = string.upper(s)
print(s, upper, s == upper)
end
reproduce_case()
Другой вход в разделе «Строковая библиотека» должен сделать видимым: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML.
Другой вход в разделе «Строковая библиотека» должен сделать видимым: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Другой вход в разделе «Строковая библиотека» должен сделать видимым: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Другой вход в разделе «Строковая библиотека» должен сделать видимым: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
Другой вход в разделе «Строковая библиотека» должен сделать видимым: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
Вопрос 3 из 20
После рефакторинга тесты должны защищать одно правило. Какое? Нужен основной контракт раздела «Строковая библиотека».
Lua Lua · Строковая библиотека · разбор 3 Копировать
do
local s = "lua"
local upper = string.upper(s)
print(s, upper, s == upper)
end
После упрощения кода раздела «Строковая библиотека» по-прежнему верно: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
После упрощения кода раздела «Строковая библиотека» по-прежнему верно: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
После упрощения кода раздела «Строковая библиотека» по-прежнему верно: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
После упрощения кода раздела «Строковая библиотека» по-прежнему верно: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
После упрощения кода раздела «Строковая библиотека» по-прежнему верно: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML.
Вопрос 11 из 20
Какое правило Lua нужно применить, чтобы верно прочитать этот фрагмент? Нужна именно центральная гарантия раздела «Захваты».
Lua Lua · Захваты · разбор 1 Копировать
local name, pos = ("user:oleg"):match("^(%a+):()")
print(name, pos)
При разборе раздела «Захваты» здесь действует условие: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
При разборе раздела «Захваты» здесь действует условие: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
При разборе раздела «Захваты» здесь действует условие: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
При разборе раздела «Захваты» здесь действует условие: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
При разборе раздела «Захваты» здесь действует условие: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Вопрос 12 из 20
Что следует изменить во входе, чтобы проверить скрытое ограничение? Нужен отрицательный сценарий для раздела «Захваты».
Lua Lua · Захваты · разбор 2 Копировать
local function reproduce_case()
local name, pos = ("user:oleg"):match("^(%a+):()")
print(name, pos)
end
reproduce_case()
Второй запуск раздела «Захваты» нужен, чтобы увидеть: Gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Второй запуск раздела «Захваты» нужен, чтобы увидеть: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Второй запуск раздела «Захваты» нужен, чтобы увидеть: Форматирование представления не заменяет контекстную защиту.
Второй запуск раздела «Захваты» нужен, чтобы увидеть: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML.
Второй запуск раздела «Захваты» нужен, чтобы увидеть: Строки Lua неизменяемы.
Вопрос 13 из 20
После рефакторинга тесты должны защищать одно правило. Какое? Выберите гарантию, определяющую раздел «Захваты».
Контракт рефакторинга раздела «Захваты»: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
Контракт рефакторинга раздела «Захваты»: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Контракт рефакторинга раздела «Захваты»: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
Контракт рефакторинга раздела «Захваты»: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Контракт рефакторинга раздела «Захваты»: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Вопрос 16 из 20
Почему этот фрагмент ведёт себя именно так? Выберите основное правило раздела «Форматирование».
Lua Lua · Форматирование · разбор 1 Копировать
local user = "a'b"
local sql = string.format("SELECT * FROM t WHERE name='%s'", user)
print(sql)
Центральный механизм раздела «Форматирование»: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Центральный механизм раздела «Форматирование»: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
Центральный механизм раздела «Форматирование»: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Центральный механизм раздела «Форматирование»: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
Центральный механизм раздела «Форматирование»: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Вопрос 17 из 20
Обычный запуск проходит. Какое граничное поведение обязан проверить второй тест? Нужен отрицательный сценарий для раздела «Форматирование».
Lua Lua · Форматирование · разбор 2 Копировать
local function reproduce_case()
local user = "a'b"
local sql = string.format("SELECT * FROM t WHERE name='%s'", user)
print(sql)
end
reproduce_case()
Скрытая граница раздела «Форматирование» проявляется так: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Скрытая граница раздела «Форматирование» проявляется так: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
Скрытая граница раздела «Форматирование» проявляется так: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.
Скрытая граница раздела «Форматирование» проявляется так: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Скрытая граница раздела «Форматирование» проявляется так: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Вопрос 20 из 20
Что должен помнить разработчик, впервые работающий с разделом «Форматирование»? Выберите описание, объединяющее механизм и границу раздела «Форматирование».
Точное описание раздела «Форматирование»: Скобки в pattern создают захваты, а пустой захват () возвращает позицию; gmatch и gsub возвращают захваты вместо полного совпадения, если они присутствуют.
Точное описание раздела «Форматирование»: Операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Точное описание раздела «Форматирование»: string.format следует правилам формата Lua/C и не экранирует данные для SQL, shell или HTML; форматирование представления не заменяет контекстную защиту.
Точное описание раздела «Форматирование»: Строки Lua неизменяемы; операции string.sub, gsub и конкатенация создают новые строки, а частые наращивания крупных строк лучше заменять накоплением частей и table.concat.
Точное описание раздела «Форматирование»: Lua patterns — не полноценные регулярные выражения: у них иной синтаксис классов, повторов и экранирования, поэтому шаблон из PCRE нельзя переносить буквально.