Вычисление флагов
Условие
createFlags(config): enabled(name, user) - флаг включён, если on === true, либо пользователь в списке users, либо попадает в процент раскатки rollout. Раскатка детерминирована: один и тот же пользователь всегда получает один и тот же ответ.
Что проверяют тесты
выключенный по умолчанию
включён глобально
список пользователей
раскатка детерминирована
нулевая раскатка никого не пускает
полная раскатка пускает всех
доля примерно соответствует проценту
разные флаги раскатываются независимо
Как подойти
Ключевое требование - стабильность: пользователь не должен видеть, как кнопка появляется и исчезает между перезагрузками. Math.random это нарушает, поэтому берут хеш идентификатора по модулю ста. Второе требование - независимость флагов: если хешировать только идентификатор пользователя, одна и та же половина аудитории попадёт во все эксперименты сразу, и результаты замеров окажутся связанными. Math.imul нужен для корректного 32-битного умножения.
Подсказки: 3
- Случайное число не годится: при каждом вызове ответ будет разным.
- Нужна детерминированная хеш-функция от пары «флаг + пользователь».
- Имя флага в хеше обязательно, иначе все флаги включатся одним и тем же пользователям.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.