Мобильная разработка*iOS*Android*Flutter*Карьера в IT*

Мобильный разработчик: натив (iOS / Android) vs Flutter, roadmap и вопросы с собеседований

Актуальный гид по мобильной разработке: сравнение Swift, Kotlin, Flutter и React Native. Архитектура MVVM, жизненный цикл экранов, утечки памяти и частые вопросы на интервью.

Команда Capycodio
Команда Capycodio
·9 мин

Мобильные приложения генерируют свыше 60% всего мирового интернет-трафика. Смартфон стал главным окном контакта пользователя с бизнесом: от банковских переводов и маркетплейсов до фитнес-трекеров и обучающих платформ.

В этой статье мы разберем ключевую дилемму начинающего мобильного разработчика (натив или кроссплатформа), структуру компетенций и 5 ключевых вопросов с технических собеседований.


Нативная разработка vs Кроссплатформа#

Выбор стека определяет архитектуру и рынок вакансий:

ТаблицаСвайп вправо
НаправлениеСтек технологийСильные стороныКогда выбирать
Нативный iOSSwift, SwiftUI / UIKit, CombineИдеальная интеграция с экосистемой Apple, максимальный FPS, прямой доступ к новейшим фичам iOSФинтех, премиум-сегмент, игры, AR/ML
Нативный AndroidKotlin, Jetpack Compose, CoroutinesОгромная мировая база устройств, гибкость кастомизации ОСМассовые сервисы, IoT, корпоративные устройства
Flutter (Dart)Dart, Flutter FrameworkЕдиный код для iOS и Android, собственный движок рендеринга Skia/Impeller, высокая скорость версткиСтартапы, MVP, e-commerce, средний бизнес
React NativeTypeScript, React NativeЗнакомый веб-разработчикам стек, быстрое переиспользование логикиКомпании с сильной веб-командой

Дорожная карта (Roadmap) мобильного разработчика#

Пошаговый план развития мобильного разработчика

5 этапов
01
Язык платформы и модель памяти
1-1.5 месяца

Глубокое освоение языка: Kotlin (Android) или Swift (iOS). Корутины, реактивные потоки Flow / Combine, опционалы и понимание ARC vs Сборщик мусора.

KotlinSwiftCoroutinesFlowARC / GC
02
Современный декларативный UI
1 месяц

Стандарт современной индустрии: Jetpack Compose для Android или SwiftUI для iOS. Рекомпозиция, стейт-менеджмент и кастомные жесты/анимации.

Jetpack ComposeSwiftUIState ManagementAnimations
03
Архитектура приложения и DI
3-4 недели

Паттерны MVVM и MVI, чистая архитектура (Clean Architecture), многомодульность и внедрение зависимостей (Hilt, Koin, Swinject).

Clean ArchitectureMVVMMVIHiltKoin
04
Работа с сетью, кэш и локальные БД
3-4 недели

Offline-First подход: работа с REST API / WebSocket через Ktor / Retrofit / URLSession, кэширование и реляционные базы Room (SQLite) или SwiftData / CoreData.

RetrofitKtorRoomSwiftDataOffline-First
05
Тестирование, CI/CD и публикация в сторы
2-3 недели

Написание юнит- и UI-тестов, автоматизация сборки с Fastlane, подпись сертификатов и дистрибуция в Google Play, App Store и RuStore.

FastlaneCI/CDGoogle PlayApp StoreRuStore

1. Язык и модель памяти#

  • Kotlin: Null-safety (?, ?:), корутины (CoroutineScope, Dispatchers), Flow.
  • Swift: Опционалы (Optional), замыкания, структуры (struct, value type) vs классы (class, reference type), протоколы.
  • Управление памятью: ARC (Automatic Reference Counting) в iOS vs Garbage Collector в Android JVM.

2. Пользовательский интерфейс (Декларативный UI)#

  • Jetpack Compose (Android) и SwiftUI (iOS) стали стандартом индустрии, вытеснив XML и Storyboard/XIB.
  • Рекомпозиция, управление состоянием UI, кастомные анимации и жесты.

3. Архитектура и хранение данных#

  • Паттерны: MVVM (Model-View-ViewModel), MVI (Model-View-Intent), Clean Architecture.
  • Сеть и кэш: Ktor / Retrofit, сериализация JSON, Offline-First архитектура.
  • Локальные БД: Room (Android), CoreData / SwiftData (iOS), Realm.

Топ-5 вопросов с собеседований по мобильной разработке#

1. В чем разница между ARC в Swift и Сборщиком мусора (GC) в Kotlin?#

Фундаментальный вопрос по модели работы с оперативной памятью:

  • ARC (Automatic Reference Counting, iOS): Работает на этапе компиляции. Компилятор сам расставляет инструкции retain (увеличить счетчик ссылок) и release (уменьшить). Память освобождается мгновенно, как только счетчик ссылок стал равен 0. Нет пауз в работе приложения (Stop-the-World).
  • Garbage Collector (GC, Android): Работает в рантайме. Специальный фоновый процесс периодически сканирует память, строит граф достижимости от корней (GC Roots) и удаляет недостижимые объекты. Способен сам разрешать циклические ссылки, но периодически тратит ресурсы процессора.

2. Что такое Retain Cycle (циклическая ссылка) и как её предотвратить?#

Возникает, когда два объекта удерживают сильные ссылки (strong) друг на друга. В результате счетчик ссылок никогда не станет нулевым, и возникает утечка памяти (Memory Leak).

SWIFT
class Author {
    var book: Book?
}

class Book {
    // ОШИБКА: сильная ссылка создает Retain Cycle
    // var author: Author? 
    
    // ПРАВИЛЬНО: слабая ссылка не увеличивает счетчик
    weak var author: Author?
}
  • В Swift используют weak (всегда опционал) или unowned.
  • В Kotlin/Android утечки возникают при удержании контекста Activity в статических переменных или долгоживущих синглтонах.

3. Жизненный цикл экрана (Activity в Android / UIViewController в iOS)#

На интервью проверяют, умеет ли разработчик корректно сохранять состояние при повороте экрана или сворачивании приложения:

  • Android Activity: onCreate() $\to$ onStart() $\to$ onResume() (экран активен) $\to$ onPause() $\to$ onStop() $\to$ onDestroy().
  • iOS UIViewController: viewDidLoad() $\to$ viewWillAppear() $\to$ viewDidAppear() (экран виден) $\to$ viewWillDisappear() $\to$ viewDidDisappear().
💡
Частый вопрос

Где лучше всего отменять сетевые запросы при уходе пользователя с экрана?
В Android — в ViewModel.onCleared() или onStop(). В iOS — в viewDidDisappear() или через отмену Combine Cancellable / async Task.


4. Паттерн MVVM: за что отвечает каждый слой?#

  1. Model: Данные и бизнес-логика (сущности базы данных, сетевые DTO, репозитории).
  2. View: Отображение интерфейса (Activity, Composable-функции, SwiftUI View). Не содержит бизнес-логики, только реагирует на изменение стейта.
  3. ViewModel: Связующее звено. Запрашивает данные из репозитория, преобразует их в удобное для отображения состояние (UI State) и отдает наружу через реактивный поток (StateFlow в Android, @Published / @Observable в iOS). Переживает пересоздание экрана при повороте.

5. Что такое Offline-First подход?#

Offline-First — концепция архитектуры, при которой приложение всегда в первую очередь читает данные из локальной базы данных на устройстве (Single Source of Truth) и мгновенно показывает их пользователю.

Сетевой запрос выполняется параллельно в фоне:

  1. Пользователь открыл приложение $\to$ мгновенно отобразился кэш из Room/CoreData.
  2. Фоновый запрос забрал свежие данные с сервера $\to$ обновил локальную БД.
  3. UI реактивно обновился через подписку на изменения БД.

Резюме#

Мобильная разработка дает быстрый и наглядный результат своего труда: ваш код оказывается в руках миллионов людей в их смартфонах. Начните с базы одного языка (Kotlin или Swift) и проектирования надежной архитектуры без утечек памяти.

Capycodio

Прокачивай IT-скиллы с Capycodio

Не зубри теорию часами перед компьютером. Короткие 3-минутные интерактивные сессии прямо с телефона: по дороге, за кофе или перед сном.

Теги публикации:
#mobile#ios#android#swift#kotlin#flutter#собеседование
Капибара
Команда Capycodio

Мы создаем интерактивный мобильный тренажер для разработчиков. Короткие сессии по 3-5 минут, чтобы держать базу и закрывать пробелы перед собеседованиями.