Как начинающему iOS-разработчику успешно пройти собеседование
Преодолеть выставленные отделом HR на пути соискателей препоны едва ли не труднее, чем освоить профессию iOS-разработчика. Разбираем распространенные вопросы и даем примеры практических заданий из реальных собеседований при трудоустройстве. Обсудить Если вы прошли этап переписки и смогли добраться до собеседования, начинается самая интересная часть квеста по получению работы мечты. Внимательно изучите эту статью: чтобы пройти все ловушки, нужно уверенно ответить на каждый затронутый в ней вопрос. Не имеющий многолетнего опыта iOS-разработчик является для компании своеобразным котом в мешке – чтобы провести отсев, отдел HR работает с многими кандидатами в общем потоке. Если к найму мидлов и сеньоров российские работодатели подходят индивидуально, джуниоров собеседуют по стандартным скриптам. По телефону будут спрашивать, почему вы выбрали профессию разработчика. «Как вы попали в эту область? В каких проектах участвовали?» – HR задает наводящие вопросы, исходя из резюме. Его цель – узнать вас получше. Вопросов будет меньше, если резюме грамотно оформлено и демонстрирует компетентность соискателя. С HR нужно быть вежливым и придерживаться официального стиля общения. Вас проверят на адекватность и сделают вывод о целесообразности очного собеседования с техническим специалистом. Стоит узнать, какой стек технологий используется в компании. Это позволит подготовиться к собеседованию более основательно, к тому же задавая вопросы, вы будете выглядеть компетентным и заинтересованным в вакансии разработчиком. Любопытство здесь вполне уместно: работодатели часто сами публикуют список технологий, которыми должен владеть соискатель. До беседы с техническим специалистом с вами может опросить рекрутер по списку поверхностных вопросов на знание технологий: «Что такое Swift?», «Что такое ООП?» и т.д. Он может дать вам мини-тест, в котором нужно будет набрать энную сумму баллов, чтобы пройти на собеседование с техническим специалистом. Задача HR – отсеивать заведомо негодных соискателей. Общение с техническим специалистом начинается с проверки ваших теоретических познаний. На рядовых собеседованиях задают типовые вопросы – всего их около десятка. Несмотря на кажущуюся простоту вопросов, даже разработчик уровня senior может ответить на них невнятно и произвести впечатление посредственного специалиста. Дело здесь не в отсутствии знаний, а скорее в неумении объяснять простые вещи на словах в стрессовых условиях собеседования. К тому же разработчики не учат информацию, которую легко в сети. К собеседованию обязательно нужно подготовиться. Для этого у нас уже есть отличная статья. Не пытаясь ее дублировать, мы рассмотрим другие вопросы: 1. Что такое свойство lazy? Значение ленивого свойства не вычисляется до первого использования. 2. Что такое mutating, и где он используется? Приведите примеры. По умолчанию свойство структуры не может быть изменено внутри функции. При попытке изменить 3. Что делают map, filter и reduce? Приведите примеры. Метод Метод Метод 4. В чем разница между NSArray и NSSet? 5. Какие архитектуры вы использовали? Какая из них у вас любимая и почему? Стоит потренироваться в использованию архитектуры 6. Что такое main queue? Переключение затратных заданий с 7. Что такое Grand Central Dispatch? Что такое Dispatch Queues? GCD оптимизирует приложение и обеспечивает вызов потока безопасно и автоматически. Платформа GCD объявляет несколько типов данных и функций ( 8. Что такое UIStackView? 9. Какие существуют логические операторы, что такое оператор объединения с nil? Если 10. Объясните иерархию классов UIButton. Суперкласс UIViewController? NSObject → UIResponder → UIView → UIControl → UIButton UIResponder → UIViewController *** Эти вопросы наиболее популярны и ответы на них нужно знать обязательно. Если несмотря на все старания вы получили отказ, добейтесь от компании фидбэка и проведите работу над ошибками. В практической части вам дадут MacBook и попросят решить несложные задачи. Затратных по времени заданий скорее всего не будет – едва ли технический специалист захочет тратить на соискателя слишком много времени. Если нужно написать приложение, это попытка проверить, чем вы руководствуетесь, как делаете переходы и какую архитектуру используете. Лучше всего показать умение применять MVVM и подчеркнуть, что выбор обоснован легкостью трансформации в VIPER. За короткое время полноценное приложение написать не получится. Покажите, какая сущность отвечает за определенные задачи, опишите проектирование приложения, его структуру и этапы реализации. Здесь важно умение мыслить логически и навыки проектной работы. Ниже приводятся примеры заданий, которые часто всплывают на собеседованиях: Расскажите, как бы вы проектировали такое приложение: Для устранения багов кандидату могут дать уже готовое приложение, которое ломается известными для технического специалиста способами. Экзаменуемого оценивают по качеству и скорости решения проблем. В конце собеседования желательно, чтобы у вас остались вопросы к работодателю. Их отсутсвие показывает , что соискатель не сильно заинтересован в вакансии или слишком стеснителен. Крайне важно показать интерес к проектам компании. О чем можно спросить: *** Самообразование необходимо каждому ИТ-специалисту, но если вы нацелены на карьеру программиста всерьез, стоит обратить внимание на факультет iOS-разработки GeekBrains. Занятия ведут опытные преподаватели, а успешно прошедшим курсы студентам онлайн-университет не только выдает дипломы, но и помогает с трудоустройством. Интересно, хочу попробовать!Телефонный звонок рекрутера
Очное собеседование с рекрутером
Собеседование с техническим специалистом
Теоретические вопросы
var name
внутри func makeAnonymous
вы получите ошибку. Мы можем это осуществить, если поставим ключевое слово mutating
перед func
.
struct Person { var name: String mutating func makeAnonymous() { name = "Anonymous" } }
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
NSArray
– это упорядоченная коллекция, а NSSet
– неупорядоченная. NSSet
используется для создания уникальных объектов, а NSArray
может иметь повторяющиеся.MVVM
, поскольку она наиболее распространена.Main queue
– очередь, в которой происходят все операции с пользовательским интерфейсом (UI). Затратные по времени блоки кода, вроде загрузки данных из сети, мы уводим с main queue
. Когда мы получаем данные через другую очередь, main queue
— свободна и обслуживает события UI. Затем мы вновь возвращаемся на main queue
, чтобы обновить элементы интерфейса. main queue
на другой поток всегда async
. Метод sync
на main queue
не применяют, потому что это приведет приложение к deadlock
.Grand Central Dispatch (GCD)
– технология Apple API, реализующая параллелизм (выполнение нескольких потоков одновременно) в многоядерном процессоре. GCD управляет общим пулом потоков и решает, когда именно выпустить поток на ядро в зависимости от доступных системных ресурсов. На каждое ядро приходится по одному потоку.Dispatch Queues
, Dispatch Sources
, Dispatch Groups
, Dispatch Semaphores
).Dispatch Queues
– очередь, в которую вы отправляете единицы работы (блоки кода). Затем GCD решает, в каком потоке их выполнять и сколько параллелизма требуется.UIStackView
– контейнер для UIView
. В него мы помещаем выстраивающиеся в виде стека горизонтально или вертикально UIView
. Выкладываться они будут автоматически в соответствии с доступным пространством, которое определяется через настройки: alignment
, distribution
, spacing
.??
возвращает либо значение опционала, либо значение по умолчанию (второе).
var optionalInt: Int? = 90 var result = optionalInt ?? 30 // 90
optionalInt
не nil
, оно возвращается, в противном случае возвращается строка по умолчанию.Практические вопросы
Не стесняйтесь спрашивать сами
- 20 views
- 0 Comment