Если вы прошли этап переписки и смогли добраться до собеседования, начинается самая интересная часть квеста по получению работы мечты. Внимательно изучите эту статью: чтобы пройти все ловушки, нужно уверенно ответить на каждый затронутый в ней вопрос. Не имеющий многолетнего опыта iOS-разработчик является для компании своеобразным котом в мешке – чтобы провести отсев, отдел HR работает с многими кандидатами в общем потоке. Если к найму мидлов и сеньоров российские работодатели подходят индивидуально, джуниоров собеседуют по стандартным скриптам.
Телефонный звонок рекрутера
По телефону будут спрашивать, почему вы выбрали профессию разработчика. «Как вы попали в эту область? В каких проектах участвовали?» – HR задает наводящие вопросы, исходя из резюме. Его цель – узнать вас получше. Вопросов будет меньше, если резюме грамотно оформлено и демонстрирует компетентность соискателя.
С HR нужно быть вежливым и придерживаться официального стиля общения. Вас проверят на адекватность и сделают вывод о целесообразности очного собеседования с техническим специалистом.
Стоит узнать, какой стек технологий используется в компании. Это позволит подготовиться к собеседованию более основательно, к тому же задавая вопросы, вы будете выглядеть компетентным и заинтересованным в вакансии разработчиком. Любопытство здесь вполне уместно: работодатели часто сами публикуют список технологий, которыми должен владеть соискатель.
Очное собеседование с рекрутером
До беседы с техническим специалистом с вами может опросить рекрутер по списку поверхностных вопросов на знание технологий: «Что такое Swift?», «Что такое ООП?» и т.д. Он может дать вам мини-тест, в котором нужно будет набрать энную сумму баллов, чтобы пройти на собеседование с техническим специалистом. Задача HR – отсеивать заведомо негодных соискателей.
Собеседование с техническим специалистом
![🍏 Как начинающему iOS-разработчику успешно пройти собеседование](https://media.proglib.io/posts/2020/10/14/2b41090ce4d60d908b12cdfc609af3cf.png)
Теоретические вопросы
Общение с техническим специалистом начинается с проверки ваших теоретических познаний. На рядовых собеседованиях задают типовые вопросы – всего их около десятка.
Несмотря на кажущуюся простоту вопросов, даже разработчик уровня senior может ответить на них невнятно и произвести впечатление посредственного специалиста. Дело здесь не в отсутствии знаний, а скорее в неумении объяснять простые вещи на словах в стрессовых условиях собеседования. К тому же разработчики не учат информацию, которую легко в сети.
К собеседованию обязательно нужно подготовиться. Для этого у нас уже есть отличная статья. Не пытаясь ее дублировать, мы рассмотрим другие вопросы:
1. Что такое свойство lazy?
Значение ленивого свойства не вычисляется до первого использования.
2. Что такое mutating, и где он используется? Приведите примеры.
По умолчанию свойство структуры не может быть изменено внутри функции. При попытке изменить var name
внутри func makeAnonymous
вы получите ошибку. Мы можем это осуществить, если поставим ключевое слово mutating
перед func
.
struct Person {
var name: String
mutating func makeAnonymous() {
name = "Anonymous"
}
}
3. Что делают map, filter и reduce? Приведите примеры.
Метод map
позволяет применить переданное в него замыкание для каждого элемента коллекции.
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let result = numbers.map { $0 * 10 }
print(numbers) //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(result) //[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
Метод filter
используется, когда требуется отфильтровать элементы коллекции по определенному правилу.
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let filted = numbers.filter{$0 % 2 == 0}
filted
//[2, 4, 6, 8, 10]
Метод reduce
позволяет объединить все элементы коллекции в одно значение в соответствие с переданным замыканием.
let cash = [10,50,100,500]
let total = cash.reduce(210, +) //870
4. В чем разница между NSArray и NSSet?
NSArray
– это упорядоченная коллекция, а NSSet
– неупорядоченная. NSSet
используется для создания уникальных объектов, а NSArray
может иметь повторяющиеся.
5. Какие архитектуры вы использовали? Какая из них у вас любимая и почему?
Стоит потренироваться в использованию архитектуры MVVM
, поскольку она наиболее распространена.
6. Что такое main queue?
Main queue
– очередь, в которой происходят все операции с пользовательским интерфейсом (UI). Затратные по времени блоки кода, вроде загрузки данных из сети, мы уводим с main queue
. Когда мы получаем данные через другую очередь, main queue
— свободна и обслуживает события UI. Затем мы вновь возвращаемся на main queue
, чтобы обновить элементы интерфейса.
Переключение затратных заданий с main queue
на другой поток всегда async
. Метод sync
на main queue
не применяют, потому что это приведет приложение к deadlock
.
7. Что такое Grand Central Dispatch? Что такое Dispatch Queues?
Grand Central Dispatch (GCD)
– технология Apple API, реализующая параллелизм (выполнение нескольких потоков одновременно) в многоядерном процессоре. GCD управляет общим пулом потоков и решает, когда именно выпустить поток на ядро в зависимости от доступных системных ресурсов. На каждое ядро приходится по одному потоку.
![🍏 Как начинающему iOS-разработчику успешно пройти собеседование](https://media.proglib.io/posts/2020/10/14/78f27883d71f946f6c29c6c9e84bf71a.png)
GCD оптимизирует приложение и обеспечивает вызов потока безопасно и автоматически.
Платформа GCD объявляет несколько типов данных и функций (Dispatch Queues
, Dispatch Sources
, Dispatch Groups
, Dispatch Semaphores
).
Dispatch Queues
– очередь, в которую вы отправляете единицы работы (блоки кода). Затем GCD решает, в каком потоке их выполнять и сколько параллелизма требуется.
8. Что такое UIStackView?
UIStackView
– контейнер для UIView
. В него мы помещаем выстраивающиеся в виде стека горизонтально или вертикально UIView
. Выкладываться они будут автоматически в соответствии с доступным пространством, которое определяется через настройки: alignment
, distribution
, spacing
.
9. Какие существуют логические операторы, что такое оператор объединения с nil?
- !a – НЕ;
- a && b – И;
- a | | b – ИЛИ;
- ?? – оператор объединения с nil.
??
возвращает либо значение опционала, либо значение по умолчанию (второе).
var optionalInt: Int? = 90
var result = optionalInt ?? 30 // 90
Если optionalInt
не nil
, оно возвращается, в противном случае возвращается строка по умолчанию.
10. Объясните иерархию классов UIButton. Суперкласс UIViewController?
NSObject → UIResponder → UIView → UIControl → UIButton
UIResponder → UIViewController
![🍏 Как начинающему iOS-разработчику успешно пройти собеседование](https://media.proglib.io/posts/2020/10/14/e83fb316e5b49412e9c387315168a2e0.png)
![🍏 Как начинающему iOS-разработчику успешно пройти собеседование](https://media.proglib.io/posts/2020/10/14/8a34b489b60aaa86281ba9f3bf105add.png)
Эти вопросы наиболее популярны и ответы на них нужно знать обязательно. Если несмотря на все старания вы получили отказ, добейтесь от компании фидбэка и проведите работу над ошибками.
Практические вопросы
В практической части вам дадут MacBook и попросят решить несложные задачи. Затратных по времени заданий скорее всего не будет – едва ли технический специалист захочет тратить на соискателя слишком много времени.
Если нужно написать приложение, это попытка проверить, чем вы руководствуетесь, как делаете переходы и какую архитектуру используете. Лучше всего показать умение применять MVVM и подчеркнуть, что выбор обоснован легкостью трансформации в VIPER.
За короткое время полноценное приложение написать не получится. Покажите, какая сущность отвечает за определенные задачи, опишите проектирование приложения, его структуру и этапы реализации. Здесь важно умение мыслить логически и навыки проектной работы. Ниже приводятся примеры заданий, которые часто всплывают на собеседованиях:
Расскажите, как бы вы проектировали такое приложение:
- Бесконечная лента картинок. Каждый элемент ленты – картинка + мета-информация к ней. При нажатии на картинку та открывается в полном размере. Источник картинок – публичный API. Необходимо реализовать оффлайн-режим, т.е. приложение должно функционировать без сети в максимально возможной степени.
- Спроектировать чат. Пример: Telegram. Функциональность: список диалогов, в диалогах – сообщения. Можно отправлять текст, фото, видео, аудио. Из диалога можно посмотреть профиль пользователя.
- Есть два источника: А и В. Необходимо отобразить на экране список получаемых из них элементов.
Для устранения багов кандидату могут дать уже готовое приложение, которое ломается известными для технического специалиста способами. Экзаменуемого оценивают по качеству и скорости решения проблем.
Не стесняйтесь спрашивать сами
В конце собеседования желательно, чтобы у вас остались вопросы к работодателю. Их отсутсвие показывает , что соискатель не сильно заинтересован в вакансии или слишком стеснителен. Крайне важно показать интерес к проектам компании.
О чем можно спросить:
- Какие задачи придется выполнять в первое время?
- Будет ли ментор?
- Какой стек технологий использует компания?
- Как компания относится к code review?
Хочу научиться программировать с нуля, но не знаю, с чего начать. Что делать?
Можно учиться самостоятельно (долго) или пойти на курсы с преподавателями (быстро). Плюс нужно учитывать, что джунов много, конкуренция выше и работодатели повышают порог вхождения при найме на работу. Чтобы получить актуальные знания, мы в proglib.academy запустили курсы:
- Основы программирования на Python.
- Профессия Python-разработчик.
- Алгоритмы и структуры данных.
- Математика для Data Science.
- Профессия Data Science.
- Frontend Basic: принцип работы современного веба.
- Профессия Фронтенд-разработчик.
- Обработка естественного языка. Полный курс.
На подходе еще больше 10 курсов для взрослых и детей.
Комментарии