October 8, 2023

Стандартные ошибки при выполнении тестового на позицию React-разработчика

Мы получили все ответы на тестовое задание по позиции Frontend-разработчика и целую неделю(или больше...) проводили ревью, чтобы оценить все 240 решений!
Выявили несколько часто встречающихся ошибок, которые вы можете подметить в своих решениях:

Ошибки первого задания:

— При изменении параметров фильтрации не сбрасывался offset, что приводит к экрану с текстом, что пользователь не найден, хотя он имеется и результат фильтрации находится на первой странице.

— Блокировка кнопок пагинации, селекта или инпутов фильтрации при загрузке — в этом случае приложение становится медленным. Например, нужно открыть 3 страницу:  для этого сперва нужно дождаться открытия второй страницы, после дождаться открытия третьей.

— На каждое изменение в инпутах отправлялся запрос, это приводит к высокой нагрузке на бекенд и лишним дерганьям в интерфейсе. Данная проблема решается при помощи подхода называемого debounce.

— Изменение offset и limit производится посредством клика и на них не должен применяться debounce. В таком случае, при нескольких кликах подряд на кнопку следующей страницы, происходит несколько запросов, которые приводят к отрисовке промежуточных страниц. Например, было 2 клика на кнопку следующей страницы, должно быть 2 отрисовки —  загрузка и результат 3 страницы, но вместо этого — загрузка и результат 2 и 3 страницы.

Ошибки второго задания:

— Вызов функции по получению книг, пользователей и отзывов производится последовательно. Запросы не зависят друг от друга и должны вызываться параллельно при помощи Promise.all.

— Маппинг данных при помощи map, find, filter. При получении автора, отзыва и автора отзыва для книги при помощи .find(...) сложность алгоритма вырастает до N * M * K * M, где N — кол-во книг, M — кол-во пользователей, K - количество отзывов. То есть, для каждой книги нужно дважды обойти список пользователей и один раз список отзывов. Наиболее оптимальный вариант — составление словаря (хэш таблицы) с ключом в виде id и значением в виде самой сущности. В таком случае сложность алгоритма уменьшается до N + M + K.

— Хранение промежуточных вычислений. Массив с книгами, с пользователями и отзывами не нужен. Достаточно хранить конечный результат — BookInformation[].

— Функции по маппингу toBookInformation, toReviewInformation не выделены либо задекларированы внутри реакт компонента. Данные функцию являются чистыми функциями и должны быть задекларированы вне реакт компонента, в том числе вне файла.

— В списке книг имеется последняя книга без автора, согласно текущему интерфейсу автор должен быть. Замена несуществующего автора на некий стандартный объект является ошибочным. Нужно явно указывать что автор отсутствует, так как это может влиять на бизнес логику, а подмена автора на стандартную заглушку может вводить в заблуждение или приводить к дополнительным проверкам. Поэтому интерфейс книги необходимо исправить и сделать автора необязательным.

Максимальное количество баллов, которое можно было набрать - 50.