Вернуться в видеотекуКоротко о видео
Это тестовое собеседование Java-разработчика Даниила Морозова: он рассказывает о пути от desktop-разработки к Java backend, текущем IoT-проекте и работе в международной команде в Токио. Затем кандидат решает задачу на поиск наибольшего общего префикса строк и обсуждает сложность решения. Основная часть посвящена system design платформы для сбора телеметрии со 100 млн устройств: ingestion, Kafka, обработке потоков, хранению, аналитике, расчёту нагрузки и логированию.
Затронутые темы
Что взять на заметку
- Кандидат описывает текущий IoT backend как платформу, агрегирующую сигналы устройств и сохраняющую их для последующей выдачи результатов пользователям; команда состоит из трёх senior-разработчиков.
- В качестве стека текущего проекта он называет Kafka Streams, реактивные API на Vert.x, Cassandra для основного хранения и PostgreSQL для более традиционных данных; на момент разговора система ещё не была в production.
- Для задачи longest common prefix обсуждается обход позиций первой строки с проверкой символа во всех остальных строках и обязательной проверкой границ более коротких строк; заявленная сложность — O(N×L) по времени и O(1) дополнительной памяти без учёта результата.
- В system design-сценарии 100 млн устройств отправляют данные раз в пять секунд, то есть расчётная входная скорость составляет около 20 млн событий в секунду; это требует горизонтального масштабирования и разбиения потока.
- Кандидат предлагает отделить приём сообщений от Kafka промежуточным ingress/gateway-слоем, чтобы валидировать и маршрутизировать события, собирать метрики и не связывать устройства напрямую с Kafka.
- Kafka topics он предлагает проектировать по бизнес-кейсу, приложению или типу данных, а не создавать topic на каждое устройство; retention и частота агрегаций должны зависеть от бизнес-требований.
- Для хранения обсуждаются Cassandra для высокоинтенсивной записи и долгого хранения, Redis для быстрых подготовленных выборок, а для логов — централизованный сбор через Filebeat и поиск в Elasticsearch; это предложения кандидата, а не подтверждённая архитектура.