Код Senior Реализация с нуля обновлено

Вычисление флагов

Условие

createFlags(config): enabled(name, user) - флаг включён, если on === true, либо пользователь в списке users, либо попадает в процент раскатки rollout. Раскатка детерминирована: один и тот же пользователь всегда получает один и тот же ответ.

Что проверяют тесты

  • выключенный по умолчанию

  • включён глобально

  • список пользователей

  • раскатка детерминирована

  • нулевая раскатка никого не пускает

  • полная раскатка пускает всех

  • доля примерно соответствует проценту

  • разные флаги раскатываются независимо

Как подойти

Ключевое требование - стабильность: пользователь не должен видеть, как кнопка появляется и исчезает между перезагрузками. Math.random это нарушает, поэтому берут хеш идентификатора по модулю ста. Второе требование - независимость флагов: если хешировать только идентификатор пользователя, одна и та же половина аудитории попадёт во все эксперименты сразу, и результаты замеров окажутся связанными. Math.imul нужен для корректного 32-битного умножения.

Подсказки: 3
  1. Случайное число не годится: при каждом вызове ответ будет разным.
  2. Нужна детерминированная хеш-функция от пары «флаг + пользователь».
  3. Имя флага в хеше обязательно, иначе все флаги включатся одним и тем же пользователям.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.