Мобильная разработка
Mobile на собеседовании (FAANG)
Senior Mobile Engineer в Meta. Пять лет опыта. Технический раунд прошёл хорошо. System Design: 'Спроектируйте Messenger для 2 миллиардов пользователей'. Час разговора о WebSocket vs long polling, offline first, conflict resolution, encryption. Это не вопрос с правильным ответом - это демонстрация мышления.
- Apple Interviews: фокус на Swift concurrency, UIKit vs SwiftUI tradeoffs, memory management - три обязательные темы для iOS senior
- Meta Mobile: system design вопросы включают offline-first архитектуру - 40% пользователей Instagram в зонах нестабильного интернета
- Google Android: Architecture Components (Room, ViewModel, LiveData/Flow) и их tradeoffs - знание официальных паттернов обязательно
Architecture Design: структурированный ответ на собеседовании
Типичный вопрос: 'Спроектируйте мобильную архитектуру для Instagram/Twitter/Uber'. Структура ответа: (1) требования - что MVP, что out of scope; (2) data model; (3) API design; (4) UI архитектура (MVI/MVVM); (5) offline support; (6) performance. Никогда не прыгать сразу в детали.
- Уточнить требования: MAU, DAU, ожидаемый RPS, offline support нужен?
- Назвать архитектурный паттерн и объяснить почему (MVVM vs MVI vs TCA)
- Описать data flow: user action -> ViewModel -> UseCase -> Repository -> Network/Cache
- Обсудить offline: SQLite/CoreData/Room для persistence, sync strategy
- Performance: pagination, image caching, background fetch
Какой первый вопрос стоит задать при 'Спроектируйте мобильную архитектуру для Uber'?
Performance: диагностика и оптимизация
Производительность мобильного приложения: startup time (cold/warm/hot), scrolling (60/120 fps), memory (leaks, excessive allocation), battery (background processes, network polling). Инструменты: Instruments (iOS), Android Profiler (Android).
Benchmark для iOS: cold start < 400ms (иначе watchdog убивает процесс), 60fps scroll = 16ms per frame. Android Vitals: core vital benchmarks, которые Google отслеживает для Play Store ranking. App startup time > 5s = 'slow startup' в Android Vitals. Frozen frames > 700ms = ANR risk.
Почему [weak self] в closure важен для предотвращения memory leak?
System Design для мобильного: offline, sync, cache
Мобильный system design отличается от backend: network ненадёжна, батарея конечна, пользователь ожидает мгновенного отклика. Ключевые паттерны: optimistic UI update, cache-first strategy, conflict resolution при sync, pagination с cursor.
Почему cursor-based pagination лучше offset-based для live feed?
Tradeoffs: аргументированный выбор архитектуры
Финальный раунд в FAANG: интервьюер не ищет единственно правильный ответ. Ищет инженера, который понимает tradeoffs и может их артикулировать. 'Почему MVI, а не MVVM?' - нет универсального ответа, есть аргументированный выбор под конкретные требования.
- MVVM vs MVI: MVI - unidirectional data flow, лучше для тестируемости и сложных состояний; MVVM - проще, меньше boilerplate
- SQLite/CoreData vs CloudKit/Firestore: local-first для offline, cloud-first для real-time sync
- REST vs GraphQL на мобильном: GraphQL экономит bandwidth (только нужные поля), но сложнее кэшировать
- Push notifications vs polling: push эффективнее по батарее, polling гарантирует актуальность
- Native vs Cross-platform: native - максимальный доступ к API и производительность, cross-platform - shared codebase
MVI имеет преимущество перед MVVM в сложных экранах потому что:
Ключевые идеи
- Architecture Design: сначала требования и scope, потом data flow, потом детали - интервьюер ждёт структуры, не спонтанных решений.
- Performance: cold start, 60fps scroll, memory leaks - три обязательные темы со своими инструментами (Instruments, Android Profiler).
- Tradeoffs: нет единственно правильного ответа - есть аргументированный выбор под требования. MVI vs MVVM, REST vs GraphQL, native vs cross-platform.
Связанные темы
Собеседование объединяет все темы курса мобильной разработки:
- Mobile Architecture at Scale — Модуляризация, feature flags, crash reporting - практический опыт, который демонстрируется на system design раунде
- Unit и UI Testing — Тестируемость как критерий выбора архитектуры - MVI тестируется проще MVVM, это аргумент на собеседовании
Вопросы для размышления
- Как объяснить выбор между SwiftUI и UIKit для нового проекта: когда каждый из них предпочтительнее?
- Как спроектировать offline-first архитектуру для приложения, где конфликты данных (два устройства редактируют одно) возможны?
- Почему 'используйте всегда последнюю технологию' - плохой ответ на вопрос о tradeoffs в архитектуре?