Запись мок-собеседования Android-разработчика с вопросами по фундаментальным темам, практическим задачам и системному проектированию. После каждого блока интервьюер разбирает ответы и уточняет ожидаемые решения.
Направление
Mobile
Формат
Видео
Длительность
1 ч 40 мин
Источник: Android Broadcast. Все об Андроид разработке
Это мок-собеседование Android-разработчика: интервьюер Миша задаёт Артёму теоретические и практические вопросы, после чего разбирает ответы. Обсуждаются Kotlin и Java/Android runtime, строки UTF-16, GC, лямбды, ViewModel, Git, тестирование, возобновляемая загрузка файлов, синхронизация времени, real-time обновления и SQL. В финале участники совместно проектируют офлайн-отображение планеты со спутниками и календарём произвольной планеты. Интервьюер отдельно подчёркивает, что это не реальный найм и не выносит вердикт «прошёл/не прошёл».
Подготовьте объяснение различий между CharSequence, UTF-16 code units, code points и графемами: Char может содержать половину суррогатной пары, а length не равен числу видимых символов.
Повторите data class в Kotlin, JVM/Android runtime, GC roots и типы ссылок, а также различия лямбд Kotlin и Java при передаче в SAM-интерфейсы.
Для сохранения состояния ViewModel различайте переживание конфигурационных изменений и восстановление после пересоздания процесса; в разговоре разбирается SavedStateHandle.
Для одного коммита из другой ветки подходит git cherry-pick, а для схлопывания серии изменений в один коммит обсуждаются squash/rebase или соответствующая опция pull request.
Тесты функции сложения стоит строить вокруг граничных значений и переполнений; интервьюер предлагает параметризованные тесты с вручную подобранными corner cases.
Для возобновляемой загрузки крупного файла из ContentResolver нужны потоковое чтение, сохранённый прогресс и ограничения фоновой работы; отдельно обсуждаются доступ к URI, WorkManager и FileDescriptor/FileChannel для позиционирования.
При синхронизации времени с сервером нужно учитывать задержку запроса-ответа; для real-time данных разумнее использовать готовый двусторонний протокол вроде WebSocket, gRPC или RSocket, а не собственное сырое соединение.