Какой стек технологий использовался в чате
Что проверяют
Работали ли вы над чатом по-настоящему: в нём сразу видны сложные места мобильной разработки, от соединения в реальном времени до офлайна, доставки и порядка сообщений. Следом почти всегда спрашивают, как приложение получает сообщения, когда оно свёрнуто, и что происходит при потере сети.
Как отвечать
Опишите клиент по слоям и называйте то, что было в вашем проекте:
- основа: Kotlin, корутины и
Flow, архитектура MVVM или MVI, внедрение зависимостей через Hilt или Koin; - UI: Jetpack Compose с
LazyColumnилиRecyclerViewсDiffUtil, Paging 3 для подгрузки истории; - сеть: REST через Retrofit и OkHttp для истории и профилей, WebSocket (через OkHttp или Ktor) для живых сообщений, переподключение с экспоненциальной задержкой;
- хранение: Room как единственный источник правды. Экран читает базу, сеть только пишет в неё, поэтому чат работает офлайн;
- отправка: исходящее сообщение сначала ложится в базу со статусом «отправляется» и локальным id, повторы делает WorkManager, сервер подтверждает и возвращает постоянный id;
- фон: держать сокет в свёрнутом приложении Android не даст, поэтому новые сообщения приходят пушами через FCM, а в России их часто дублируют через RuStore Push.
Про бэкенд достаточно знать протокол, формат событий и устройство авторизации. Если сервер писала другая команда, скажите об этом прямо.
Добавьте одну сложную задачу, которую решали сами: дубли при переподключении, порядок сообщений, отметки о прочтении, отправка медиа. Детали и цифры берите свои.
Где спотыкаются
Рассказывают про Node.js и MongoDB на сервере так, будто писали его сами, а на вопросе про устройство WebSocket на клиенте теряются.
Не могут объяснить, как избежать дублей и перепутанного порядка. Нужны id, сгенерированный на клиенте для идемпотентной отправки, и серверный порядковый номер для сортировки, а не время с устройства.
Держат соединение в фоне через foreground service без веской причины. Это расходует батарею, требует обоснования при публикации в Google Play и всё равно не заменяет пуши.