Как выбираешь структуру данных под задачу? Проведи рассуждение на примере: нужно хранить сессии пользователей с быстрым поиском по id и обходом в порядке добавления.
- Как выбрать коллекцию под задачу на собеседовании?
Метод: какие операции горячие и как часто → сложность каждой у кандидатов → память и конкурентность. Поиск по id + обход в порядке добавления → LinkedHashMap; при доступе из многих потоков — ConcurrentHashMap плюс отдельная очередь порядка или синхронизация.
- Сначала уточнить: размер, частота чтения и записи, нужен ли порядок, многопоточность
- HashMap — поиск, но без порядка; ArrayList — порядок, но поиск O(n)
- Сессии с истечением — Caffeine с expireAfterAccess
А ещё Ответ «зависит» без рассуждения не засчитают
Подробно
Алгоритм рассуждения:
- Какие операции: поиск по ключу, вставка, удаление, обход, диапазоны, минимум, порядок.
- Какие из них горячие и сколько элементов.
- Сложность операций у кандидатов.
- Память, конкурентный доступ, требования к порядку.
Пример — сессии пользователей: горячие операции — get по id и периодический обход в порядке создания (для истечения или отображения).
HashMap—getO(1), но порядок обхода не определён;ArrayList— порядок есть, но поиск O(n);TreeMapпо id — порядок по id, а не по времени;- **
LinkedHashMap** —getO(1) и обход в порядке вставки.
Многопоточность: сессии читают и пишут параллельно. Готового «ConcurrentLinkedHashMap» в JDK нет: ConcurrentHashMap для поиска плюс отдельная структура для порядка, или синхронизация, или кэш-библиотека. Для сессий с истечением на практике — Caffeine (expireAfterAccess, ограничение размера), а при нескольких экземплярах сервиса — Redis.
Хороший ответ показывает сам ход рассуждения и вопросы, а не заученную таблицу.
Что хотят услышать
- Рассуждение от операций к сложности.
- Сравнение кандидатов.
- Учёт многопоточности и практическое решение.
Частые ошибки
- Называть структуру без обоснования.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓LinkedHashMap — поиск O(1) и порядок вставки
- ✗ArrayList — порядок добавления сохраняется, а поиск по id быстрый
- ✗TreeMap — он хранит элементы отсортированными по ключу, а значит, и в порядке добавления
- ✗HashMap — поиск быстрый, а порядок совпадает с порядком вставки
Что спросят дальше
- Что изменится, если понадобится выбирать сессии в диапазоне времени?
- Когда массив лучше любой коллекции?
Разбор темы
- Collections Framework: карта и выбор структуры
Иерархия интерфейсов, сложности операций основных структур, неизменяемые коллекции и принцип выбора по паттерну доступа.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.