Некоторые вопросы с собеседования на позицию мидл. Вдруг кому интересно будет

xcode

#1

Собеседовался на позицию мидла. Вот некоторые вопросы которые задавали. Часть на obj-c, часть swift. Что-то может забыл. Но по темам довольно дотошно расспрашивали.

  • Виды архитектур, с чем работал(mvc, mvp, viper… etc)
  • В паттернах отличие фасада от билдера
  • Root-классы Obj-c (перечень, для чего нужны)
  • NSObject (основные методы)
  • Почему при создании объекта вызываем 2 метода alloc,init
  • Отличие id/instancetype
  • Как убедится что объект поддерживает метод
  • Директивы свойств (strong, weak …). Отличия, какие ставятся по умолчанию.
  • Зачем нужен synthesize?
  • Чем свойства отличаются от ivar
  • Что такое Computed propery
  • Опциональный тип (структура, назначение)
  • Структуры и классы (отличия в аспектах производительности, памяти, многопоточности)
  • SOLID
  • Протокол-ориентированная парадигма
  • Многопоточное и асинхронное программирование (способы работы с потоками)
  • Отличия GCD/OperationQueue
  • Frame/bounds
  • Жизненный цикл контроллера
  • Жизненный цикл приложения
  • Структура appDelegate
  • Виды нотификаций, настройка, обработка итд.
  • Deep link
  • App transfer protocol (что именно запрещает-разрешает)
  • Разрешения для доступа к фото, локации, камере итп
  • Работа с картами (гугл, яндекс…)
  • Кластеризация
  • Codable
  • Серилизация
  • BLE
  • tvOS
  • watchOs
  • TestFlight
  • Отличие internal/external testers
  • Настройка учетки разработчика для запуска на устройстве
  • Provision profile

[upd]

  • Алгоритмы (О-нотация, определение, эффективность алгоритма)
  • Почему при оценке алгоритма не учитываются коэффициенты?
  • Почему оценке алгоритма log не важно основание логарифма?
  • Оценка сложности задач
  • Технологии разработки (waterfall, kanban…)
  • Виды тестирования
  • TDD

[upd 2]

  • GitFlow
  • Rebase vs Merge

[upd 3: после нового собеседования]

  • SOLID - по каждому пункту пояснить как это используется в Apple-овских классах
  • rxSwift
  • ООП (полиморфизм)
  • По архитектурам (MVVM, MVP, Clean architecture: отличия и структуру)
  • ARC (и пр. управление памятью)
  • Обсуждение репозиториев в гите.

[upd 4]

  • Родные средства для дебага кода-интерфейса
  • Сторонние тулзы для дебага траффика, интерфейса.

#2

Я наверное 60-70% не ответил бы :smiley:


#3

Жопа была отвечать на вопросы про objc и вспоминать что там внутри NSObject и как оно работает. И в рантайм погружаться. :slight_smile: Потому что objc последний раз нормально ковырял 1.5 года назад. )))


#4

Я objc трогал на первом проекте, когда только начал работать с iOS. Почитал лишь синтаксис и способ работы с objc за 2-3 часа, дальше уже по проекту смотрел куски кода.
Swift читал/изучал немного дольше, около 2-3 дней, но опять же, все по коду и немного детальнее по элементам, IB.
Так что в итоге меня можно отнести к джуну по теории :slight_smile:


#5

меня можно к джуну отнести =(
Например, вопрос в тупик поставил: в objc при создании проекта создается main класс где создается делегат, autoreleasepool и прочее. А где main-класс и точка входа в Swift-приложении? :wink:

Сейчас-то это знаю, но на момент собеседования был в затруднении. :slight_smile:


#6

AppDelegate.swift, это?


#7

Ну в objc тоже есть AppDelegate. ) А main-класс где в свифте?


#8

Даже не знаю. Я и не знал о main-классе пока вы не написали :slight_smile:
В проекте его нету. Получается его нужно создавать самому и наследоваться от UIApplication. Я прав?


#9

Нет. Вы же прложение как-то запускаете и оно само находит точку входа. :slight_smile:
Короче я внимательно еще не изучал тему но на SO пишут что в свифте main и appDelegate объединили.


#10

AppDelegate помечается как @UIApplicationMain, видимо так это работает.


#11

нигде, компилятор под капотом делает main функцию.

Code written at global scope is used as the entry point for the program, so you don’t need a main() function


#12
  • Почему оценке алгоритма log не важно основание алгоритма?

Могу ошибаться, но вместо основание алгоритма должно быть основание логарифма.


#13

Да, опечатался. :wink:


#14

Могу добавить хороший и интересный вопрос (для Мидлов интересный, не сеньоров уже), который иногда на собеседованиях задаю.

  • Можно ли добавить в Swift хранимое свойство в расширении?
  • Почему нельзя?
  • И как все-таки это можно сделать?

А по objective-c:

  • Как реализовать let и var наиболее простым способом без потери автодополнения?
  • Иногда ещё про libextobjc (очень помогает в разработке)

#15

После чтения статей - на первые вопросы могу ответить. :wink: Да. Вопросы хорошие. После их решения уже никогда не будешь кодить как раньше. ;)))


#16

Еще пригодятся вопросы про диспатч методов и его побочные эффекты.
Свифт в этом плане крут наличием почти всех вариантов в разных проявлениях.