Какие технологии и инструменты используются для клиент-серверного взаимодействия
Что проверяют
Знаете ли вы сетевой стек Android не на уровне «беру Retrofit», а понимаете, что происходит между вызовом метода и ответом сервера. Уточняют обычно про обработку ошибок, обновление токена и работу без сети.
Как отвечать
Разложите ответ по уровням, от протокола до архитектуры:
- HTTP-клиент: OkHttp как основа почти всего. Даёт пул соединений, HTTP/2, кэш, интерсепторы для заголовков и логирования (
HttpLoggingInterceptorтолько в debug-сборке); - REST-обёртка: Retrofit поверх OkHttp,
suspend-функции в интерфейсе API. В проектах на Kotlin Multiplatform вместо него берут Ktor Client; - сериализация: kotlinx.serialization или Moshi. Gson не знает о nullability Kotlin и может записать
nullв non-null поле; - авторизация: OAuth 2.0 с access и refresh токенами, обновление через
Authenticatorв OkHttp при ответе 401, токены хранятся зашифрованными с ключом в Android Keystore; - реальное время: WebSocket через OkHttp, SSE, для пушей Firebase Cloud Messaging. Иногда gRPC, если бэкенд на нём;
- безопасность: только HTTPS, для приложений с
targetSdkVersion28 и выше открытый HTTP запрещён по умолчанию. Для строгих случаев certificate pinning черезCertificatePinnerилиnetwork_security_config; - архитектура: репозиторий как единая точка доступа, Room как источник правды при offline-first, WorkManager для отправки данных, накопленных без сети.
Для тестов назовите MockWebServer: он поднимает локальный сервер и позволяет проверить разбор ответа и ошибки без реального бэкенда. Для ручной проверки API подойдут Postman или Charles.
Где спотыкаются
Называют Volley актуальной альтернативой. В новых проектах его давно не встречают, это сигнал устаревших знаний.
Не могут объяснить, как по-разному обработать разрыв сети, таймаут и ответ 500. Всё сводится к одному try/catch с тостом «ошибка».
Хранят токен в обычных SharedPreferences и обновляют его в каждом месте вызова отдельно, из-за чего при параллельных запросах получают гонку и лишние повторные логины.