Сетевое взаимодействие и безопасность
1. Как устроено клиент-серверное взаимодействие, протокол авторизации OAuth 2.0?
2. Какие есть способы защиты приложения от атак типа Man-in-the-Middle?
3. Чем отличается протокол UDP от TCP?
4. Чем отличается GET-запрос от POST-запроса функционально?
5. Есть ли опыт работы с WebSocket?
Криптография
6. Чем отличается хеширование от шифрования?
7. Чем отличается симметричное шифрование от асимметричного?
Архитектура и принципы
8. В чем заключается концепция Trunk-Based Development, какие есть плюсы и минусы у этого подхода?
9. Какие основные архитектурные слои есть и от кого зависит domain слой?
10. Есть ли опыт работы с MVI?
11. В чем суть принципа подстановки Барбары Лисков из SOLID, и какие есть примеры его нарушения в Android SDK?
12. В чем суть принципа разделения интерфейсов из SOLID, и какие есть примеры его нарушения в Android SDK?
13. Что такое архитектура NVI?
Задача
Практика14. Задача: Реализовать логику запроса на сервер и метод 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<Model>
}
class ScreenViewModel(private val interactor: Interactor) : ViewModel() {
val list: MutableStateFlow<List<Model>> = MutableStateFlow()
fun onTextChanged(value: String) {
//
}
}