FFORGE//RS
← Маршрут

rust / УРОВЕНЬ 3

Пользователь, существовавший в двух написаниях

ОЦЕНКА40 МИН
01

ТЕОРИЯ / ВОСПРОИЗВЕДЕНИЕ

Что нужно восстановить

  • Сформулировать инвариант Hash и Eq
  • Сохранять tenant identity при ASCII case-insensitive email
  • Использовать map lookup без linear scan

Равные keys обязаны иметь равный hash

HashMap сначала сужает кандидатов по hash, затем проверяет equality. Коллизии допустимы, но если два key равны, Hash обязан подать одинаковые байты в одинаковом порядке.

Identity key должна быть стабильной

Поля Hash/Eq нельзя менять, пока key находится в map. Здесь политика явная: tenant id точен, email сравнивается без учёта регистра ASCII; полная Unicode normalization не обещана.

КОНТРОЛЬНАЯ ТОЧКА

Какие два утверждения обязательны для надёжного HashMap-key?

Выберите все подходящие варианты. Ответ засчитывается только при точном совпадении набора.

ISOLATED RUST 1.96
src/lib.rsРЕДАКТИРОВАНИЕ

02 / РЕВЬЮ КОДА

Сделайте код безопасным

Исправьте `UserKey::hash` под существующее ASCII case-insensitive equality. Сохраните tenant separation, не выделяйте normalized String и не заменяйте map operations на scan.

Инициализация редактора…
ОБЛАЧНЫЙ SANDBOXсеть выключена · 256 МБ · 12 с
2 / 64 KB
ВЫВОД
Runner ждёт отправки кода.