Где могут быть ограничения на размер полей и как их искать при ошибке 500 на ввод 50 символов в поле фамилия?
Что проверяют
Умеете ли вы локализовать дефект, а не просто завести баг «падает на 50 символах». Интервьюер ждёт, что вы пройдёте по слоям системы и найдёте, где именно лимит, а следом спросит, какой код ответа тут правильный.
Как отвечать
Сначала зафиксируйте главное: 500 на пользовательский ввод это баг сам по себе, даже если 50 символов действительно много. Корректное поведение: валидация и ответ 400 или 422 с понятным сообщением.
Лимит может жить на каждом слое:
- фронтенд:
maxlengthу поля или проверка в JS. Защищает только интерфейс, запрос через Postman или curl её обходит; - бэкенд: валидация DTO (
@Size(max = 50)в Java,max_lengthв Pydantic), ограничения в бизнес-логике; - база данных: колонка
VARCHAR(n). PostgreSQL на лишнюю длину отвечает ошибкойvalue too long for type character varying, MySQL в строгом режимеData too long for column. Если бэкенд эту ошибку не ловит, наружу уходит 500; - интеграции: фамилия может уходить в CRM, платёжный шлюз или сервис доставки со своим лимитом;
- кодировка: в Oracle длина
VARCHAR2по умолчанию считается в байтах, а кириллица в UTF-8 занимает два байта на символ. Тогда 50 русских букв это 100 байт, и падает то, что латиницей проходит.
Порядок поиска: в DevTools на вкладке Network смотрим запрос и тело ответа, берём request id или точное время, идём в логи (Kibana, Grafana, Sentry) за стектрейсом. Размер колонки проверяем запросом к information_schema.columns, поле character_maximum_length. Потом граничные значения: 49, 50, 51, латиница против кириллицы, эмодзи, пробелы и дефис в двойной фамилии.
Где спотыкаются
Проверяют только интерфейс. Если maxlength не даёт ввести 51 символ, это не значит, что API защищён.
Считают, что лимит один на всю систему. Фронтенд пропускает 100 символов, бэкенд 64, а колонка в базе 50: баг как раз в рассогласовании.
Заводят баг без стектрейса и без точного значения, на котором он воспроизводится. Разработчику придётся повторять вашу работу.