Тех собес на middle-senior IOS Developer в ****

Доступно с премиум-подпиской

Оформите премиум-подписку, чтобы получить доступ к:

  • Фильтрации по компаниям
  • Названиям компаний в интервью
  • Видеозаписям собеседований в категории IOS Developer

Посмотреть видео в категории

(2025-03-30)

Всё собеседование проходило в формате систем-дизайна. В прикреплённом архиве находятся схема приложения и условие задания.

  • Систем дизайн:
    • У нас есть вот такой схематичный мок дизайн (прикреплённый скриншот).
    • Считай что это у нас маркетплейс, где можно находить товары, можно читать описание товаров и можно добавлять товар в корзину.
    • Твоя задача нарисовать архитектуру этого приложения.
    • Ты первый разработчик который закладывает остальную архитектуру. Мы 100 процентов знаем что через полгода будет много пользователей, будет большая команда, команд может быть даже несколько. Тут нужно хорошо заложиться на будущее.
    • Меня не интересуют какие-то глубокие детали, достаточно интерфейсов, классов, структур, свойств. Сущности не нужно описывать, бэкенд не интересен.
    • Мой совет: я ожидаю что в этом рисунке будут какие-то связи и если между двумя квадратиками нашей архитектуры стрелка — значит один обращается к другому.
    • Нет никакого легаси кода, проектируем с нуля. 14 ios.

Далее идут вопросы, которые задавал собеседующий по ходу построения собеседуемым системного дизайна приложения:

  • Архитектура и проектирование:
  1. Нарисуй архитектуру экрана деталки (product details). Какие основные компоненты и связи ты заложил бы?
  2. Какую архитектуру выберешь для этого экрана: MVC, MVVM, VIPER, Clean Swift или что-то другое?
  3. Какую минимальную версию iOS стоит взять для проекта?
  4. В какой момент и каким образом detail_view_module попадает в detail_view_controller?
  5. Как api_client попадает в detail_view_module?
  6. Где должна происходить связка view_controller, view_module и api_client — в фабрике или в другом месте?
  7. Нужно ли использовать router или coordinator для навигации между экранами?
  8. Ты бы сделал роутер отдельным для каждого экрана или общий?
  • Работа с сетью и данными:
  1. Что бы ты выбрал для взаимодействия с сетью: Alamofire, URLSession, GraphQL или что-то другое?
  2. Слышал ли ты про gRPC?
  3. Как реализовать работу приложения, если у пользователя пропал интернет? Например, при нажатии на карточку товара всё равно показать деталку с ранее загруженными данными.
  4. Как реализовать кэширование данных: использовать готовый фреймворк или писать самому?
  5. Что выберешь для локального хранения: CoreData, SQLite, Realm?
  6. Какие минусы у использования CoreData?
  7. Можно ли кэшировать данные без использования базы данных? Если да, то как?
  8. Для чего используется Keychain и когда он очищается?
  • Backend-driven UI и гибкость интерфейса:
  1. Как можно менять порядок элементов на экране деталки с помощью данных, приходящих с бэкенда?
  2. Как бы ты реализовал возможность управлять отображением описания товара (ссылки, жирный текст, курсив, картинки) через бэкенд?
  3. Слышал ли ты про такие подходы, как Backend-driven UI или Server-driven UI?
  • Аналитика и метрики:
  1. Какую аналитику ты бы встроил в приложение, и где бы в архитектуре разместил этот компонент?
  2. Где именно должен происходить вызов метрики — во view_controller или во view?
  3. Если нужно передать параметры (например, id товара) в событие аналитики, как это сделать?
  4. Если придётся добавить вторую систему аналитики (например, AppsFlyer), будет ли твое текущее решение достаточно гибким?
  5. Должна ли аналитика попадать во view_controller через DI или быть доступной глобально?
  • Локализация:
  1. Как решить проблему отображения валюты при выходе приложения в Узбекистане (где не рубли)?
  2. Как устроена локализация в iOS? Какие файлы для этого используются?
  3. Можно ли исправить опечатку в тексте уже выпущенного приложения без нового релиза? Если да, как это реализовать через бэкенд?
  • Принципы проектирования (SOLID):
  1. Что означает аббревиатура SOLID?
  2. Можешь объяснить принцип единственной ответственности (Single Responsibility)?
  3. Что значит принцип разделения интерфейсов (Interface Segregation)?
  4. Можешь привести пример нарушения этого принципа в UIKit?
  5. Как бы ты разделил методы у UITableViewDataSource и UITableViewDelegate, чтобы соответствовать этому принципу?
  • Модульность:
  1. Приходилось ли тебе работать с многомодульностью в проектах?
  2. Как бы ты реализовал многомодульность (через CocoaPods, SPM или другими способами)?
  • Тестирование:
  1. Приходилось ли тебе писать тесты? Какие инструменты ты использовал?
  2. Что знаешь про пирамиду тестирования?
  3. Работал ли ты с XCTest?
  4. Как у вас на проекте были устроены автотесты и кто ими занимался?