Подготовка по специальности
Собеседование iOS-разработчика:
вопросы и ответы.
На собеседовании iOS-разработчика обычно проверяют владение Swift, памятью и конкурентностью, а также умение собрать предсказуемый интерфейс на UIKit или SwiftUI. Важнее не перечислить API, а показать, как приложение ведёт себя при отмене задачи, повторном появлении экрана или замедлении сети.
Потренировать ответы вслухНе пытайтесь выучить все ответы: интервьюеры проверяют понимание, а не память. Разберите темы ниже, прорешайте типичные вопросы вслух и свяжите каждый ответ с примером из собственного опыта.
01 · Процесс
Как обычно проходит интервью
Типичный процесс включает разговор о приложениях кандидата, блок по Swift и памяти, архитектурный или UI-кейс и иногда live-coding. Вопросы часто углубляются: от retain cycle переходят к замыканиям, от async/await — к actor isolation и обновлению UI на MainActor.
02 · Темы
Что нужно знать перед интервью
Swift и управление памятью
- value и reference types
- ARC, strong, weak и unowned
- замыкания и retain cycle
- protocols, generics и error handling
Конкурентность и lifecycle
- async/await, Task и cancellation
- actors и Sendable
- MainActor и UI
- жизненный цикл UIKit и SwiftUI
Интерфейс и качество
- SwiftUI state и identity
- UIKit, Auto Layout и navigation
- архитектура и dependency injection
- unit и UI-тестирование
03 · Вопросы
Реальные вопросы с разбором ответов
Пометка у вопроса — как часто он встречается на реальных интервью: почти всегда часто иногда
ARC освобождает объект, когда сильных ссылок не остаётся. Цикл появляется, когда объекты удерживают друг друга, часто через closure; разберите владельца замыкания и осознанный выбор weak или unowned.
Читать полный разбор Потренировать этот ответasync/await делает асинхронный код последовательным на вид, а actor изолирует своё изменяемое состояние. Объясните cooperative cancellation, MainActor для UI и почему actor не отменяет необходимость продумать границы данных.
Читать полный разбор Потренировать этот ответView — value type и может создаваться заново; устойчивость определяется identity и property wrappers. Отличите @State, @StateObject, @ObservedObject и передаваемые binding, не привязывая бизнес-логику к onAppear.
Читать полный разбор Потренировать этот ответ04. Чем value type отличается от reference type в Swift?
почти всегдаstruct копируется по значениям с copy-on-write для многих коллекций, class имеет ссылочную идентичность и ARC. Выбор зависит от семантики данных, совместного изменяемого состояния и наследования, а не от универсального правила.
Потренировать этот ответ05. Когда использовать weak, а когда unowned?
частоweak всегда optional и обнуляется при освобождении объекта; unowned предполагает, что объект точно жив, и обращение после освобождения упадёт. Для асинхронных closure чаще безопаснее weak с явной обработкой nil.
Потренировать этот ответ06. Как корректно отменять Task при уходе с экрана?
почти всегдаСвяжите задачу с владельцем и проверяйте cancellation в долгих операциях. Не обновляйте UI результатом устаревшего запроса; в SwiftUI используйте .task(id:) или храните задачу с понятным жизненным циклом.
Потренировать этот ответ07. В чём различие UIKit и SwiftUI в архитектуре приложения?
частоUIKit императивен и хорошо подходит существующим экранам; SwiftUI декларативен и строит UI из состояния. В реальном продукте они могут сосуществовать, поэтому обсудите interop и единую бизнес-логику.
Потренировать этот ответ08. Как организовать сетевой слой iOS-приложения?
частоСпрячьте URLSession и DTO за протоколом/репозиторием, выделите ошибки, таймауты и декодирование. Учитывайте отмену, auth refresh, кэширование и тестовую подмену зависимости.
Потренировать этот ответ09. Какие тесты вы пишете для iOS-приложения?
частоПокажите unit-тесты чистой логики и view model, интеграционные проверки сетевого слоя через mock URLProtocol и немного UI-тестов критичных пользовательских путей. Асинхронность тестируют ожиданиями без искусственных sleep.
Потренировать этот ответ10. Расскажите о техническом решении, которое пришлось пересмотреть в iOS-проекте.
почти всегдаОпишите контекст, исходное допущение, сигнал, что решение перестало работать, альтернативы и измеримый итог. Хороший пример показывает ответственность за решение, а не только удачный финал.
Потренировать этот ответ04 · Практика
Практический кейс iOS-разработчика
Кейс часто выглядит как экран поиска с отменяемыми запросами, списком результатов и переходом в детали. Уточните сценарии, затем отделите состояние UI от сети, защититесь от устаревших ответов и обозначьте, где нужен MainActor.
Если используется SwiftUI, объясните владение состоянием и identity; если UIKit — жизненный цикл контроллера и освобождение ресурсов. Завершите ответом о тестах и наблюдаемости ошибки, а не только макетом классов.
Общая подготовка — резюме, техника, звук и демонстрация экрана — разобрана в чек-листе подготовки к онлайн-собеседованию. Как осознанно использовать AI-подсказки во время звонка — в гайде «Как использовать AI на собеседовании».
05 · FAQ
Частые вопросы
Нужно ли знать Objective-C для iOS-собеседования?
Для новых Swift-вакансий обычно достаточно понимать базовый interop и memory model, но в старых продуктах могут спросить runtime, категории и ARC в Objective-C. Изучите стек конкретной вакансии.
Что важнее: UIKit или SwiftUI?
Оба направления востребованы: SwiftUI чаще встречается в новых экранах, UIKit остаётся значимой частью зрелых приложений. Лучше уверенно объяснить состояние и lifecycle в обоих подходах, чем противопоставлять их.
Как показать уровень без опубликованного приложения?
Подготовьте небольшой репозиторий или разбор тестового кейса с README: архитектура, границы состояния, тесты и принятые компромиссы. На интервью важнее качество рассуждений и личный вклад, чем название приложения.
Тренировка перед интервью
Репетируйте ответы вслух с Mira
Mira слышит вопрос и показывает подсказку для ответа прямо во время звонка. 30 минут бесплатно каждый месяц, банковская карта не нужна.
Mira