Раздел 01

Банк вопросов с собеседований

Свод актуальных вопросов и тем для опытных iOS-инженеров и техлидов (2025–2026). Источники: RU-сегмент (Habr, Яндекс Практикум, ios-interview.ru) и западный сегмент (System Design Newsletter, Jacob's Tech Tavern, Medium).

🇷🇺 RU-источник 🌍 EN-источник ★ junior/mid ★★ senior ★★★ staff/lead

1. Структура собеседования в РФ-бигтех

Типичная воронка для senior/lead iOS (Яндекс / Avito / Ozon / VK):

  1. Скрининг — HR + краткий технический.
  2. Алгоритмическая секция — лайвкодинг на code.yandex / code.avito (онлайн-редактор без автодополнения и подсветки ошибок) (Habr: подготовка к алго-собесу).
  3. Технический iOS-блок — Swift, рантайм, многопоточность, память, архитектура.
  4. System Design / Mobile Architecture — проектирование клиента и end-to-end флоу.
  5. Управленческая / лид-секция — для техлида: команда, делегирование, продукт (Яндекс Практикум).
Где исторически гоняют алгоритмы в РФ: Тинькофф Контест, Яндекс Контест, Ozon Route 256 и отборы в крупные IT-компании (Habr).

2. Алгоритмическая секция

2.1. Протокол ответа на алго-задачу ★★ 🇷🇺

Из разбора реального собеса в Яндексе (Habr):

  1. Внимательно прочитать условие.
  2. Задать уточняющие вопросы: отсортирован ли массив; только ASCII; возможны ли дубликаты; можно ли менять массив in-place.
  3. Подробно описать алгоритм словами — думать вслух.
  4. Проверить на тест-кейсах, оценить по времени и памяти (Big-O).
  5. Сообщить о готовности → писать код.
  6. Повторно пройтись: исправить синтаксис/логику, мысленный дебаг.
  7. Не молчать ни на одном этапе.

2.2. Ключевые паттерны

Готовиться по темам, а не по числу задач. Прямо упомянутые типы: плавающее окно, бинарное дерево.

Sliding WindowTwo Pointers Binary SearchДеревья / BST Hashing / коллизииBFS / DFS · графы Динамика (DP)Heap / Top-K Стек / очередьIntervals · prefix sum
Полный разбор паттернов с задачами на Swift — в Курсе A.

3. Технический iOS-блок (Senior)

Из разбора senior-вопросов (ios-interview.ru, ч.1):

#ВопросТемаУр.
1Сколько потоков может выполняться одновременно без программного ограничения?Многопоточность, CPU, параллелизм★★
2Перечислите состояния OperationЖизненный цикл, state machine★★
3Чему будет равен count после выполнения?Data Race, атомарность инкремента★★
4Что выведет MemoryLayout?Размер структуры, выравнивание памяти★★
5Зачем нужен @inline?Оптимизация компилятора★★
6Что выведет программа?Диспетчеризация методов, extension протокола, SR-103★★
7Что такое CALayer, отличие от UIView?Слои, обработка событий, рисование
8Что такое RunLoop?Цикл событий, источники ввода★★
9Что такое коллизия хеш-функции?Хеширование, коллизии
10Оцените сложность алгоритма поискаБинарный поиск, O(log n)

Дополнительные частые темы для senior+

  • ARC, retain cycles, weak/unowned, утечки памяти и их детект.
  • GCD vs Operation vs Swift Concurrency (async/await, actor, Task, TaskGroup, @MainActor, structured concurrency).
  • value vs reference типы, copy-on-write.
  • Method dispatch: static / dynamic / witness table / message dispatch.
  • SwiftUI vs UIKit, жизненный цикл, @State/@Binding/@Observable, Observation framework.
  • Архитектуры: MVC, MVVM, MVVM+C, VIPER, RIBs, TCA — плюсы/минусы.
  • Сетевой слой, кэширование, URLSession, фоновые задачи.

4. System Design / Mobile Architecture

4.1. Фреймворк ответа (универсальный) ★★ 🌍

Из System Design Newsletter и Jacob's Tech Tavern (2026):

  1. Requirements & scope (5–10 мин): что проектируем и ограничения.
  2. API & data needs (5–10 мин): что приложению нужно от сервера; data model.
  3. Architecture (10–15 мин): клиентские компоненты и поток данных.
  4. Deep dive (15–20 мин): один критичный флоу или адаптация под новое требование.
  5. Wrap-up (1–5 мин): резюме решений и трейд-оффов.
Главный принцип: «измерь дважды, отрежь один раз». Интервью больше про data flow и структуру, чем про UI/фреймворки — не бросаться сразу в SwiftUI vs UIKit / MVVM vs VIPER.

4.2. Уточняющие вопросы в начале

  • Что такое успех для фичи? (скорость / надёжность / простота)
  • Это всё приложение или одна часть? Платформы (iOS only / cross-platform)?
  • Сетевые условия: всегда онлайн / нестабильно / полный офлайн?
  • Кто пользователи и на каких устройствах (флагманы / low-end)?
  • Технические ограничения: интеграция с легаси, существующая авторизация?

4.3. Частые задачи на проектирование

  • Design Instagram feed / media-heavy лента с офлайн-поддержкой.
  • Design chat / messaging (офлайн + E2E) — уточнять: WhatsApp-like / Slack-like / Twitter DMs.
  • Design ride-sharing app.
  • Share photos with friends (фоновая загрузка, чанкинг для 50MB видео).
  • Design analytics SDK для крупной компании.
  • Design news feed на соцприложении.

4.4. Что ожидают от уровней

УровеньОжидания
Junior/MidУточняющие вопросы, базовая диаграмма, объяснить кэширование/фон/lifecycle, простые трейд-оффы.
SeniorПроактивно вскрывать скрытые требования, обосновывать выбор (repository pattern для offline-first), глубокое знание mobile-specific (lifecycle, memory pressure, battery, offline sync), адаптация при смене требований, вести разговор.
Staff/LeadФреймить проблему («а нужен ли вообще офлайн?»), думать о структуре команды и владении модулями, дизайн под будущее, системные трейд-оффы: модуляризация, build time, деплой, обратная совместимость; мыслить как архитект.

Полный разбор фреймворка и 7 кейсов — в Курсе B.

5. Лид / управленческая секция ★★★ 🇷🇺

Из Яндекс Практикум:

БлокЧто проверяютПримеры вопросов
ТехническийУстройство системы, архитектурные решения, баланс архитектуры/бизнеса/команды«Как выбрать стек, если команда на нём не работала?»; «Как спроектировать систему, выдерживающую рост нагрузки ×10 за год?»
УправленческийМотивация, разрешение конфликтов, планирование, распределение«Команда выгорела, сроки поджимают — действия?»; «Два сеньора спорят про ORM — как решите?»
ПродуктовыйЛогика бизнеса, компромисс «идеальный код vs рабочая фича»«Как убедить заказчика отказаться от ненужной фичи?»; «Три задачи, ресурс на одну — как выбираете?»

Ожидаемые компетенции лида: техническая экспертиза (быть авторитетом, а не самым быстрым кодером), проектное мышление, делегирование, работа с людьми, решения в неопределённости, сильные soft skills.

6. Расширенный банк iOS-вопросов с опорными ответами senior → staff

Ключевые вопросы технической секции с каркасами сильных ответов. Цель — структура и глубина, а не заученный текст: проговаривайте trade-offs вслух. Источники: ios-interview.ru, Habr.

6.1. Память и ARC ★★

  • Retain cycle и как разорвать. ARC считает сильные ссылки; цикл — когда два объекта (или замыкание и владелец) держат друг друга сильно → счётчик не доходит до нуля. Разрыв: [weak self] / unowned.
  • weak vs unowned. weak — опциональная, зануляется (безопасный выбор по умолчанию); unowned — не опциональна, не зануляется, только когда цель гарантированно жива (иначе краш).
  • Детект утечек. Instruments (Leaks/Allocations), Memory Graph Debugger, логи deinit. Системно: рост памяти → Jetsam/OOM-kill.
  • Copy-on-write. Array/Dictionary/String копируют буфер только при мутации с >1 владельцем; в своих типах — isKnownUniquelyReferenced.

6.2. Concurrency ★★ ★★★

  • GCD vs Operation vs Swift Concurrency. GCD — низкоуровневые очереди; Operation — зависимости/отмена/приоритеты; async/await+акторы — структурированная конкурентность с проверкой на компиляции.
  • Data race и защита. serial-очередь, .barrier, os_unfair_lock/NSLock или актор; ищется Thread Sanitizer.
  • Актор и @MainActor. Актор сериализует доступ к состоянию (гонок нет by design); @MainActor — гарантия UI с главного потока.
  • async let / TaskGroup vs GCD. Структурированность + автопроброска отмены/ошибок.
  • Sendable (Swift 6). Маркер безопасного типа; strict concurrency превращает гонки в ошибки компиляции. Staff: стратегия поэтапной миграции.

6.3. Swift и рантайм ★★

  • Диспетчеризация. static (final/struct) / vtable (наследование) / witness table (протокол) / dynamic (@objc).
  • Value vs reference. struct — семантика значения, потокобезопаснее; class — идентичность/общее состояние.
  • SR-103. Метод только в extension протокола → static dispatch по типу переменной, переопределение «не срабатывает».
  • some vs any. some — opaque, static dispatch, без боксинга; any — existential, динамика, дороже.

6.4. UI и жизненный цикл ★★

  • CALayer vs UIView. View — события/иерархия/Auto Layout; рисует backing-слой (GPU).
  • RunLoop. Цикл событий потока; режимы .common vs .default (таймер при скролле).
  • @State/@Binding/@Observable. Observation (iOS 17+) — точечная инвалидация → меньше перерисовок.
  • SwiftUI vs UIKit. На практике гибрид; выбор по требованиям и минимальной версии iOS.

6.5. Архитектура и масштаб staff ★★★

  • MVVM vs VIPER vs TCA. Выбор по размеру команды/проекта, не по моде; риск «massive ViewModel» у MVVM.
  • Модуляризация (SPM). Параллельная сборка/изоляция vs рост build time при плохом графе; резать по доменам.
  • DI. Явные зависимости + composition root вместо синглтонов.
  • Feature flags / dynamic delivery. Rollout/A-B/kill-switch vs техдолг «мёртвых» флагов.
  • Версионирование API. Клиент обновляется не сразу → аддитивные изменения, graceful degradation, форс-апдейт как крайняя мера.

7. Специфика компаний РФ-бигтеха

Форматы отличаются — узнавайте у рекрутёра заранее.

КомпанияАлгоритмыSystem DesignОсобенности
ЯндексЛайвкодинг в своём редакторе (code.yandex), уровень Контеста: sliding window, деревья, графыMobile/общий SD на старших грейдахОтдельная лид-секция; ценят рассуждение вслух и чистоту кода
AvitoMedium с упором на паттерны и структуры данныхАрхитектура приложения, модуляризацияСильный продуктовый разрез — метрики, влияние на бизнес
OzonКонтесты (Route 256), классические алго-задачиПроектирование под высокую нагрузкуАкцент на нагрузку и отказоустойчивость
VKАлгоритмы + структуры данныхМасштаб, real-time, ленты/мессенджерыАкцент на масштаб и real-time
В алго-секции всегда проговаривайте Big-O. В System Design начинайте со сбора требований и поднимайте mobile-специфику: офлайн, синхронизация, батарея/трафик, версионирование API.

8. Поведенческая секция и метод STAR

Сильный ответ — по STAR: Situation → Task → Action → Result. Подготовьте 5–6 историй, переиспользуемых под разные вопросы.

ВопросЧто проверяютКаркас сильного ответа
Конфликт в командеРазрешение конфликтов, лидерство без давленияСвёл к данным/прототипу, дал решающий критерий, отношения сохранил
Команда выгорела, сроки горятЗабота о людях + управление ожиданиямиПересмотрел скоуп со стейкхолдерами, защитил команду, сдал ядро
Решение в неопределённостиРешения при нехватке данныхЗафиксировал допущения, обратимое решение, метрика для проверки
Ваша неудача / факапРефлексия, ответственность, ростПризнал, починил, ввёл процесс/тест, изменил навсегда
Менторинг и рост командыРазвитие людей, делегированиеПлан роста, ревью, делегирование с возрастающей сложностью → рост грейда
Убедить отказаться от фичиПродуктовое мышление, влияниеДанные, альтернатива, разговор на языке бизнеса → выиграл ресурс

Что демонстрировать лиду: технический авторитет (а не «самый быстрый кодер»), делегирование, заботу о людях и продукте, решения в неопределённости. Источник: Яндекс Практикум.

9. Дополнительные подборки вопросов