Как реализовать сортировку данных
Что проверяют
Для тестировщика это двойной вопрос: умеете ли вы написать сортировку в автотесте и понимаете ли, как проверить, что продукт сортирует правильно. Следом часто просят назвать сложность алгоритма или придумать тест-кейсы на сортировку списка в интерфейсе.
Как отвечать
Сначала уточните, что сортируем: числа, строки или объекты, по какому полю, в каком направлении и куда девать пустые значения. Потом покажите, что в рабочем коде свой алгоритм не пишут:
- Java:
list.sort(Comparator.comparing(User::getName).thenComparing(User::getId)), для обратного порядка.reversed(), для пустых значенийComparator.nullsLast(...). Для объектов под капотом устойчивый TimSort, для массивов примитивов вArrays.sortDual-Pivot Quicksort; - SQL:
ORDER BY created_at DESC, idс уникальным полем в конце, чтобы порядок был детерминированным; - если просят написать руками: вставками для маленьких и почти упорядоченных данных, быстрая сортировка даёт O(n log n) в среднем и O(n²) в худшем случае, слиянием гарантирует O(n log n) и устойчивость, но требует дополнительной памяти.
Дальше перейдите к тестированию, для вашей роли это главное. Автотест собирает значения с экрана или из ответа API, строит отсортированную копию и сравнивает. Проверки: по возрастанию и убыванию, одинаковые значения, пустые поля, числа, которые хранятся строками, регистр и буква «ё», сортировка на второй странице и после смены фильтра. Для строк с учётом языка берите Collator.getInstance(Locale.forLanguageTag("ru")), иначе ожидаемый порядок сам окажется неверным.
Где спотыкаются
Советуют пузырьковую сортировку «для небольших данных». Она почти нигде не выигрывает, лучше назвать вставки или просто встроенный метод.
Проверяют сортировку тем же кодом, что в продукте. Если ожидание вычислено той же логикой, тест совпадёт с багом и ничего не поймает.
Смотрят только первую страницу. Сервер может сортировать внутри страницы, а не весь набор, и это видно лишь при переходе дальше или при сравнении с ORDER BY в базе.