опыт, роль, зона ответственности
1. Расскажи про свой опыт мобильной разработки и конкретно про работу с KMP.
2. В чём состоит работа команды мобильной инфраструктуры, какие задачи она решает и где проходит граница её ответственности?
3. В каких проектах и в каком объёме использовался Compose Multiplatform и общий код?
4. Приходилось ли интегрировать общий KMP-код в iOS через Swift и какие трудности возникали?
5. Как распространялась KMP-библиотека между проектами, какие подходы пробовали и что выбрали?
архитектура и модули
6. Какие модули выделить при миграции на KMP и как разделить бизнес-логику, платформенный слой и UI?
7. Какие недостатки есть в текущей архитектуре (Activity, ViewModel, Repository) и как переработать структуру слоёв?
8. Как относишься к использованию Android-специфичных сущностей (Context, Color, Date, LiveData) в коде общего модуля?
9. Какие части проекта не вынести в KMP без адаптации и как ее организовать?
10. Как изменить работу с базой данных, чтобы она стала мультиплатформенной и работала на iOS и Android?
базы данных и хранилища
11. Какой движок хранения данных выбрать для KMP-проекта и почему?
12. Как организовать фабрику БД в KMP при разных драйверах и настройках платформ?
13. Как решать вопрос схемы, миграций и доступа к базе в KMP, чтобы код был единым на обеих платформах?
14. Как заменить SharedPreferences на KMP-совместимое хранилище?
DI и зависимости
15. Какой DI-фреймворк оптимален для KMP и почему?
16. Чем DI с кодогенерацией отличается от DI без неё и почему это важно в KMP?
17. Как внедрять зависимости в общий код и платформенные реализации без дублирования?
сетевой слой
18. Чем заменить Retrofit в KMP и почему предпочтителен Ktor?
19. Как организовать API, сериализацию и обработку ошибок, чтобы всё работало на обеих платформах?
UI и презентационный слой
20. Если UI на iOS остаётся нативным, а на Android – Compose или XML, как настроить общие ViewModel, чтобы их жизненный цикл согласовывался на обеих платформах?
21. Как связать жизненный цикл SwiftUI/UIViewController с жизненным циклом ViewModel?
22. Как организовать форматирование данных (дат, сумм, цветов, ресурсов), чтобы UI-логика не попадала в общий модуль?
23. Почему хранение UI-логики (строк и цветов) в модели данных – плохая практика и как это исправить?
expect/actual и платформенные зависимости
24. Какие зависимости стоит выносить в общий код через expect/actual, а какие – через DI?
25. Какие ограничения у expect/actual и когда этот механизм лучше не использовать?
26. Как передавать Android Context или iOS-специфичные объекты в общий модуль?
27. Какие best practices есть для организации платформенных реализаций?
Interop (Kotlin → iOS)
28. Какие основные проблемы есть в текущем Objective-C Interop?
29. Как преобразовать Kotlin enum в удобный Swift enum?
30. Как исправить ситуацию, когда generic из Kotlin становится nullable в Swift?
31. Когда нужна обёртка для Flow, чтобы корректно использовать его из Swift?
32. Какие готовые решения есть для безопасной работы с Flow и suspend-функциями в Swift?
33. Какие ограничения есть у suspend в Swift и как правильно передавать completion-callbacks?
34. Что такое Swift Export и какие задачи он решает по сравнению с interop?
35. Как подключать стороннюю iOS-библиотеку через cinterop и что он генерирует?
36. Какой формат у сгенерированных хедеров и как Kotlin-код получает доступ к Objective-C API?
37. В чём разница между статическим и динамическим iOS-фреймворком и какой вариант выбрать?
38. Зачем нужен XCFramework и какие проблемы он решает?
компиляция и память (Kotlin/Native)
39. Чем компиляция JVM отличается от Kotlin/Native на уровнях фронтенда и бэкенда?
40. Что такое FIR/IR и какую роль они играют при компиляции в Native?
41. Чем память Kotlin/Native отличается от JVM GC и iOS ARC?
42. Как решается проблема циклических ссылок между объектами Kotlin и Swift/Objective-C?
43. Какие риски возникают при смешении моделей GC и ARC в одном приложении?
44. Какие стратегии работы с памятью рекомендуются при interop и где нужно быть осторожным?
🐗 А здесь правильные ответы.
Post #308
400