Мобильная разработка

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. Никогда не прыгать сразу в детали.

  1. Уточнить требования: MAU, DAU, ожидаемый RPS, offline support нужен?
  2. Назвать архитектурный паттерн и объяснить почему (MVVM vs MVI vs TCA)
  3. Описать data flow: user action -> ViewModel -> UseCase -> Repository -> Network/Cache
  4. Обсудить offline: SQLite/CoreData/Room для persistence, sync strategy
  5. 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 в архитектуре?

Связанные уроки

  • sd-01-intro
Mobile на собеседовании (FAANG)

0

1

Войти