Получить доступ

Как выбираешь структуру данных под задачу? Проведи рассуждение на примере: нужно хранить сессии пользователей с быстрым поиском по id и обходом в порядке добавления.

MiddleКоллекции
Ещё спрашивают так:
  • Как выбрать коллекцию под задачу на собеседовании?
Коротко

Метод: какие операции горячие и как часто → сложность каждой у кандидатов → память и конкурентность. Поиск по id + обход в порядке добавления → LinkedHashMap; при доступе из многих потоков — ConcurrentHashMap плюс отдельная очередь порядка или синхронизация.

  • Сначала уточнить: размер, частота чтения и записи, нужен ли порядок, многопоточность
  • HashMap — поиск, но без порядка; ArrayList — порядок, но поиск O(n)
  • Сессии с истечением — Caffeine с expireAfterAccess

А ещё Ответ «зависит» без рассуждения не засчитают

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Алгоритм рассуждения:

  1. Какие операции: поиск по ключу, вставка, удаление, обход, диапазоны, минимум, порядок.
  2. Какие из них горячие и сколько элементов.
  3. Сложность операций у кандидатов.
  4. Память, конкурентный доступ, требования к порядку.

Пример — сессии пользователей: горячие операции — get по id и периодический обход в порядке создания (для истечения или отображения).

  • HashMap — get O(1), но порядок обхода не определён;
  • ArrayList — порядок есть, но поиск O(n);
  • TreeMap по id — порядок по id, а не по времени;
  • **LinkedHashMap** — get O(1) и обход в порядке вставки.

Многопоточность: сессии читают и пишут параллельно. Готового «ConcurrentLinkedHashMap» в JDK нет: ConcurrentHashMap для поиска плюс отдельная структура для порядка, или синхронизация, или кэш-библиотека. Для сессий с истечением на практике — Caffeine (expireAfterAccess, ограничение размера), а при нескольких экземплярах сервиса — Redis.

Хороший ответ показывает сам ход рассуждения и вопросы, а не заученную таблицу.

Что хотят услышать

  • Рассуждение от операций к сложности.
  • Сравнение кандидатов.
  • Учёт многопоточности и практическое решение.

Частые ошибки

  • Называть структуру без обоснования.

Что спросят дальше

  • Что изменится, если понадобится выбирать сессии в диапазоне времени?
  • Когда массив лучше любой коллекции?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем