Pull to refresh

Какие вопросы задают Junior iOS разработчику на первых собеседованиях

Reading time5 min
Views48K

Что хотят услышать работодатели? Что вы должны знать? В интернете пишут много, но на деле человеческий фактор играет свою роль и вас ловят на простых вопросах к которым вы не были готовы.


Здравствуй, Хабр. За недавние 7 месяцев обходил собеседований, где-то больше 20. Все они были на позицию Junior iOS developer. В итоге после многочисленных терзаний и подтягиваний различных нюансов мобильной разработки, мне дали офер в компанию, чему я был безумно рад.

Я как человек без раннего опыта в разработке, сам экономист по образованию, хотел бы поделиться и дать понять немножко человеку который только решил встать на этот путь, что ему стоит ожидать на собеседованиях и какие вопросы ему точно надо подтянуть или выучить вовсе.

Писать я тут буду только для Junior Swift iOS developer позиций. Другие собеседования на тех позицию не проходил.

Я перечислю списком вещи которые с вероятностью 99% вас будут спрашивать, потом я добавлю пару слов о каждом пункте.

Итак, начнем.

Что вас точно будут спрашивать (ну а если вдруг забудут спросить, то явно будут от вас ожидать что вы это знаете):

  • Жизненный цикл ViewController'a
  • ООП
  • Разница между класом и структом
  • Протоколы
  • Способы передачи данных между контроллерами
  • Storyboard или xib
  • AutoLayout
  • Сохранение данных (CoreData, Realm, UserDefault, etc.)
  • Запросы и работа с данными которые получаем с сервера (URLSession, Alamofire, Codable)
  • Замыкания (closures)
  • Optionals
  • Extensions
  • Generics
  • ARC
  • Многопоточность (поверхностно, никто не будет требовать глубинных познаний от джуна)
  • weak, unowned, private, fileprivate
  • Разница между frame и bounds
  • Cocoapods (SwiftPacketManager, carthage)
  • Git

Разберем вкратце несколько пунктов.

  • Жизненный цикл ViewController'a

Тут все просто. От вас хотят услышать:

viewDidLoad()
viewWillAppear(_ animated: Bool)
viewDidAppear(_ animated: Bool)
viewWillDisappear(_ animated: Bool)
viewDidDisappear(_ animated: Bool)

Есть конечно еще методы, но этих в принципе будет достаточно.

  • ООП

Этот момент можно легко загуглить и прочитать что там есть.

  • Class vs Struct

Тут на самом деле казалось бы все просто, но вам действительно нужно знать в чем у них отличия. Нужно понимать хоты бы на базовом примере что выдаст print() и почему.

let customClass = EasyQuestion()
let a = customClass
let b = a
b.someProperty = 4
print(a.someProperty)

Вы должны знать что вам выдаст print в этих двух кейсах.

Так же будет плюс если добавить от кого ViewController'ы могут наследоваться, а от кого нет. (P.S. от Struct'a — нет)

  • Протоколы

Почитайте что это и для чего они используются (хотя я думаю вы и так уже о них слышали).
Так же могут спросить о extension к протоколу. Нужно точно понимать кто такие делегаты и как эта связь работает.

  • Способы передачи данных между контроллерами

Вам достаточно будет назвать парочку. Методы делегата, closures, через init если создаем ViewController через xib и т.д.

  • Storyboard или xib

Тут вас скорее всего спросят создавали ли вы когда либо ViewController через xib. В нюансы и детали ударяться вас просить не будут. Вы джун, вы еще много-го не знаете. Тут главное им понять сможете ли вы это написать. Ну и надо будет дать ответ почему вы создаете через xib или наоборот.

  • AutoLayout

Тут расписывать можно долго на эту тему. Советую загуглить что это такое. Уловите общую суть, этого будет достаточно.

  • Сохранение данных (CoreData, Realm, UserDefault, etc.)

Этот вопрос будет вас преследовать долго. Самое важное это знать когда использовать UserDefault, что сохранять в KeyChain, что такое Realm. Посохраняйте данные пару раз у себя в домашних проектах в CoreData что бы у вас было общее представление что это за зверь и как его укротить.

  • Запросы и работа с данными которые получаем с сервера (URLSession, Alamofire, Codable)

Тут нужно знать что такое POST, GET. Это будут спрашивать.

Нужно уметь обрабатывать ошибки при запросе. Идеальный вариант это если вам дали Техническое задание на дом перед собеседованием. Там вы и можете продемонстрировать всю мощь вашего ума.

Также часто встречается Alamofire на проектах, так что вам желательно уметь им пользоваться.
Вы должны уметь парсить данные которые вам возвращает сервер используя Codable или какие-то библиотеки в духе SwiftyJSON или ObjectMapper.

  • Замыкания (closures)

Это очень важный момент. Может случиться так что вы действительно часто этим пользуетесь, но не вникали в суть этого вопроса. Если вы знаете как их писать и как ими пользоваться — отлично! Но как вы покажете работодателю что вы это знаете если вы не сможете объяснить простым языком что это. Советую хорошенько прошуршать SwiftBook по этому вопросу.

  • Optionals

Это должен быть один из самых простых для вас пунктов. Вы должны знать про этого «Кота Шрёдингера» и какие есть способы развёртывания. Обязательно скажите им что вы не сторонник Force Unwrap и глубоко презираете людей которые так «гадят» в проекте.

  • Extensions

Отдельным вопросом это вряд ли будет звучать. Скорее всего это будет в связке с другими вопросами (например вопрос про протоколы). Попишите пару раз Extension'ы. Уверяю, ничего сложного там нет. Вы точно справитесь с этим вопросом.

Но у меня к примеру были случаи когда спрашивали для чего его придумали великие умы.
Можете себе где-то пометить такой ответ — «Для расширения класса к которому у нас нет доступа». К примеру нативные эпловские, в которые мы залезть не можем, но хотим его немного расширить для нашего удобства.

  • Generics

Для чего они? Что это? Когда вы читаете про дженерики в SwiftBook вам может показаться что это нечто сверх сложное для вашего простого ума, но на самом деле там все намного проще. Главное просто понять суть того для чего он пишется. А как его создать вы всегда сможете подсмотреть. Писать его вас не заставят на собеседовании. Просто хотят услышать ваше понимание этого вопроса.

  • ARC (поверхностно, никто не будет требовать глубинных познаний от джуна)

Тут от вас хотят услышать общее представление подсчета ссылок. Как оно увеличивается и что будет если «счетчик» будет равен 0. Под капот вас нырять просить не будут, а если будут, то вряд ли они понимают что перед ними сидит джун.

Тут они хотят понимать что вы сможете правильно находить баги в коде, когда у вас «случайно» не деинициализируется (убивается, исчезает, уходит) ViewController, к примеру.

  • Многопоточность

Как перенести с main thread на background. Тут есть много нюансов. Во всех сразу не разберешься, главное разобраться с GCD и Dispatch Queues. Вот отличная статья на эту тему.

  • weak, unowned, private, fileprivate

Какие это weak проперти. Какая разница между weak и unowned.

Что такое private и fileprivate? Это простой вопрос. Вы можете почитать в интернете, тут ничего сложного нет, но знать все равно надо.

Могут также сюда включить вопрос о lazy. Тут так же все просто. Почитайте!

  • Разница между frame и bounds

С этого вопроса могут в принципе начать собеседование. Но добавлю что этот вопрос на удивление встречался не так часто как остальные. Но пошуршав в интернете я заметил что это довольно распространенный вопрос, так что не пытайте удачу, учите! Думайте что вас это обязательно спросят. Ничего сложного здесь нет, просто надо понять суть (да-да, как и со всеми другими вопросами).

  • Cocoapods (SwiftPacketManager, carthage)

Как затягивать библиотеки в свой проект вы точно должны уметь. Самое популярное это CocoaPods. Знать его вам в принципе будет достаточно. Но если хотите расширить ассортимент то можете посмотреть еще SwiftPacketManager, carthage.

  • Git

Ну тут я даже не знаю что можно добавить. Пользуйтесь гитом, делайте комиты (чем больше тем лучше).

Вы должны уметь создавать новые ветки, «мёрджить» (объединять) с другими ветками, и резолвить (решать) merge конфликты.

В принципе я перечислил самые популярные вопросы которые мне встречались. Конечно, никто не отменял человеческий фактор и вас могут подловить на любом другом вопросе, но если вы будете хорошо разбираться в этих вопросах, то вы уже готовы на 90%. Я сам еще джун и понимаю что мое мнение далеко не экспертное, но просто решил поделиться с другими тем что знаю в надежде что кому-то это очень пригодиться и поможет преодолеть этап технического собеседования.

Учите, развивайтесь и помогайте другим!
Tags:
Hubs:
Total votes 12: ↑11 and ↓1+10
Comments12

Articles