Тех собес на middle-senior Android Developer в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории Android Developer

Посмотреть видео в категории

(2025-05-30)

— Сетевое взаимодействие и безопасность:

1. Расскажи, пожалуйста, как устроено клиент-серверное взаимодействие, протокол авторизации OAuth 2.0? 2. Какие есть способы защиты приложения от Man-in-the-Middle Attack? 3. Чем отличается протокол UDP от TCP? 4. Чем отличается GET-запрос от POST-запроса функционально? 5. Есть ли у тебя опыт работы с WebSocket?

— Криптография:

1. Чем отличается хеширование от шифрования? 2. Чем отличается симметричное шифрование от асимметричного?

— Архитектура и принципы:

1. Знакома ли тебе концепция Trunk-Based Development? Расскажи, в чем она заключается. Какие есть плюсы и минусы у этого подхода? 2. Какие основные архитектурные слои есть? От кого зависит domain слой? 3. Есть ли у тебя опыт работы с MVI? 4. Как звучит принцип Liskov Substitution из SOLID? Можешь привести примеры нарушения этого принципа в Android SDK? 5. Как звучит принцип Interface Segregation из SOLID? Можешь привести примеры нарушения этого принципа в Android SDK? 6. Слышал что-нибудь про архитектуру NVI?

— Задача:

1. У нас есть экран, на котором есть search поле. 2. Мы вбиваем текст в это search поле, этот текст летит в бекенд. В ответе нам приходят модельки (json), которые надо показать юзеру (считай это поиск как на каком-нибудь маркетплейсе). 3. Есть уже готовая вёрстка на композе. 4. Есть интерфейс интерактора, через который мы запрашиваем с бекенда модельки (этот интерфейс как-то инжектится в нашу вьюшку, сейчас не важно как). 5. Нужно реализовать логику запроса на сервер и метод onTextChanged.

@Composable
fun Screen() {
    val viewModel = koinInject()
    Column(modifier = Modifier.fillMaxSize().verticalScroll()) {
        TextField(onChanged: { value -> viewModel.onTextChanged(value) })
        viewModel.list.observeAsState().forEach { model ->
            Item(model = model)
        }
    }
}

interface Interactor {    suspend fun getModels(query: String): List}
class ScreenViewModel(private val interactor: Interactor) : ViewModel() {
text📋val list: MutableStateFlow<List<Model>> = MutableStateFlow()

fun onTextChanged(value: String) {
    //
}
}