Теоретические вопросы с собеседования представлены в прикреплённом файле.
— Задача 1. Что выведет программа?
data class A(
var field: String = ""
)
fun func(a: A) { a.field = “d”}
val a = A()a.field = “c”func(a)print(a.field)
— Задача 2. Расскажи мне всё, что ты можешь рассказать, смотря на этот фрагмент кода.
data class User(
var id: String?,
val name: String,
val surname: String?
)
— Задача 3
1. У нас есть interactor, через который мы можем получать список всех Model. 2. Нужно в onTextChanged принимать пользовательский поисковой ввод, и исходя из этого ввода фильтровать полученные модели из интерактора и наполнять ими list.
class ScreenViewModel(private val interactor : RememberInteractor) : ViewModel() {
val list: MutableStateFlow> = MutableStateFlow()
fun onTextChanged(value: String) { // TODO: implement here }}
— Общие вопросы и опыт:
1. Есть ли у тебя опыт работы с Observability в приложениях? Как строятся метрики и мониторинги?
2. Был ли у тебя опыт работы с feature toggling? Как эта система была реализована?
3. Что такое Trunk Based Development?
— Архитектура и общие принципы:
1. Расскажи о принципах SOLID в контексте повседневной разработки.
2. Если добавить новый метод в stateful-класс, это будет расширение или модификация? А если в stateless-класс?
3. Приведи пример нарушения принципа подстановки Барбары Лисков (Liskov Substitution Principle) в Android SDK.
4. Когда мы понимаем, что нужно делить интерфейс?
5. Как ты оцениваешь свой уровень как специалиста?
6. Как у тебя со стрессоустойчивостью?
7. Что такое принцип Dependency Inversion и зачем он нужен?
8. Есть ли у тебя опыт работы с MVVM?
9. Какие паттерны проектирования реализует MVVM?
10. Какие есть принципиальные отличия между MVI и MVVM?
11. Какие основные слои есть в Clean Architecture? От кого зависит Interactor?
12. Назови по два паттерна: поведенческих, порождающих и структурных.
— Сеть и протоколы:
1. Как сделать так, чтобы к каждому REST-запросу автоматически добавлялись headers, не прописывая их вручную?
2. Чем отличается hashing от caching?
3. Где используется hashing?
4. Чем принципиально отличается UDP-трафик от TCP-трафика?
5. Чем отличается GET-запрос от POST-запроса? Можно ли передать body в GET-запросе?
6. Есть ли у тебя опыт работы с WebSockets?
— Структуры данных и алгоритмы:
1. Какие структуры данных ты знаешь?
2. Как устроен HashMap под капотом?
3. Какая сложность алгоритма доступа к элементам в HashMap без коллизий?
4. Чем отличается LinkedList от ArrayList?
5. Какая сложность доступа к элементу в LinkedList?
6. Какая сложность доступа к элементу в ArrayList?
7. Зачем нужна и как устроена ConcurrentHashMap?
— Java и Kotlin:
1. Какие области памяти есть в JVM?
2. Какие из них являются потокобезопасными?
3. Почему ты считаешь, что стек должен быть потокобезопасным?
4. Что хранится в стеке, а что в куче?
5. Что такое Root в контексте Garbage Collection?
6. Назови и опиши типы ссылок в Java.
7. Зачем нужна SoftReference?
8. Есть ли возможность объявить поле как primitive type, несмотря на то что используется Wrapper class?
9. Каким правилам должно соответствовать поле, чтобы оно стало примитивным?
10. Какие фичи Kotlin-а тебе нравятся?
11. Что из Kotlin-а тебе не нравится или что ты не используешь?
12. Что ты можешь сказать о data class-е, который приходит с бэкенда? Какие могут быть проблемы?
— Корутины:
1. Сколько примерно ты работаешь с Coroutines?
2. Назови основные компоненты Coroutines.
3. Какие есть Dispatchers и для чего они нужны?
4. Как запустить две задачи параллельно?
5. Как дождаться их результата?
6. Как дождаться результата выполнения двух параллельных задач, если одна из них упала, но ты хочешь получить результат второй?
7. Что такое volatile и зачем он нужен?
8. Что такое synchronized и зачем он нужен?
9. Какие есть lock-механизмы в Coroutines?
10. Что такое Sequence и зачем он нужен?
11. Как Sequence работает с памятью?
12. Что такое inline-функция и зачем она нужна?
13. Что будет, если максимально заинлайнить все функции в приложении?
— Android и UI:
1. Что будет быстрее: два вложенных LinearLayout или один ConstraintLayout?
2. Расскажи о SideEffect-ах в Compose. В чём отличие DisposableEffect от других?
3. Для чего нужен LaunchedEffect?
4. Что такое remember и чем он отличается от rememberSaveable?
5. Как ты реализуешь логику поиска с Coroutines на экране с TextField и списком?