Skip to content

Антисписывание ​

Попытка теста живёт в Redis, итог пишется в Postgres. Ответы и верные варианты на клиент не уходят. Вопросы приходят по одному, назад нельзя. Таймер считает сервер: ответ позже срока (с запасом 5 секунд) засчитывается неверным. Новую попытку поверх открытой начать нельзя, иначе можно перебирать вопросы.

Что входит в попытку ​

Одна попытка на грейд. Секции собираются из ядра специализации и из навыков анкеты, у которых в банке есть задания.

СпециализацияЯдро
Бэкендhttp-api, postgresql
Фронтендtypescript, http-api
Данныеpostgresql
Безопасностьhttp-api, docker

Навык без своего банка берёт секцию родственника: Next.js идёт как React, NestJS как TypeScript, FastAPI как Python. Итог пишется навыку банка: сданный TypeScript в анкете станет подтверждённым, NestJS останется заявленным. Нет банка и нет родственника: навык в попытку не входит.

В секции 4 задания. Сначала по одному шаблону на тему, потом добор.

Как задание появляется ​

В банке лежат шаблоны, не готовые билеты. У каждой попытки свой seed - случайное число. К нему добавляется код навыка, например postgresql, чтобы секции одной попытки не копировали друг друга. Генератор с одним и тем же seed всегда выдаёт одну и ту же последовательность: ту же попытку можно собрать заново, а другая попытка получает другой seed.

Шаблон при сборке подставляет числа, имена, куски SQL или кода. Движок потом перемешивает варианты и шаги, чтобы верный ответ не стоял первым.

Шаблон про LIMIT в Postgres рисует ограничение от 2 до 9 и число строк как произведение с множителем от 5 до 12. Формулировка та же, арифметика другая. Часть шаблонов текст не трогает и меняет только порядок вариантов.

Форматы: один ответ, чтение кода, несколько ответов, число, порядок шагов. Таймер у формата свой: 60, 90, 90, 75 и 120 секунд.

Две попытки middle на бэкенде делят 25,2 % шаблонов. Одинаковая формулировка с теми же вариантами: 1,2 %. Пересдача не выдаёт тот же билет.

Секция засчитана от 70. Попытка сдана, если средний балл от 70 и ни одна секция не ниже 50. От 90 профиль предлагает грейд выше.

Для потребности работодателя те же ядро и банк. Навык без заданий возвращается как непокрытый: по нему кандидата этим тестом не проверить.

Чистота попытки ​

Старт: 100. Каждый сигнал снимает штраф. Если чистота падает ниже 40, попытка аннулируется и профиль не меняется.

СигналОткудаШтраф
Уход на другую вкладкуvisibilitychange15
Переключение на другое окноblur дольше секунды10
Выход из полноэкранного режимаfullscreenchange15
Полноэкранный режим не включёнотказ requestFullscreen10
Копирование, вырезание, контекстное менюcopy, cut, contextmenu10
Смена IPсервер, сравнение с прошлым запросом25
Смена браузерасервер, User-Agent40
Ответ быстрее 3 секундсервер, servedAt10

Цифры из docs/dev/testing-validation.md и движка @hh/assessment-engine.

Стенд · GitHub