— Сетевое взаимодействие и безопасность:
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) {
//
}
}