gelya 14 октября 2020

? Как начинающему iOS-разработчику успешно пройти собеседование

Преодолеть выставленные отделом HR на пути соискателей препоны едва ли не труднее, чем освоить профессию iOS-разработчика. Разбираем распространенные вопросы и даем примеры практических заданий из реальных собеседований при трудоустройстве.

Если вы прошли этап переписки и смогли добраться до собеседования, начинается самая интересная часть квеста по получению работы мечты. Внимательно изучите эту статью: чтобы пройти все ловушки, нужно уверенно ответить на каждый затронутый в ней вопрос. Не имеющий многолетнего опыта iOS-разработчик является для компании своеобразным котом в мешке – чтобы провести отсев, отдел HR работает с многими кандидатами в общем потоке. Если к найму мидлов и сеньоров российские работодатели подходят индивидуально, джуниоров собеседуют по стандартным скриптам.

Телефонный звонок рекрутера

По телефону будут спрашивать, почему вы выбрали профессию разработчика. «Как вы попали в эту область? В каких проектах участвовали?» – HR задает наводящие вопросы, исходя из резюме. Его цель – узнать вас получше. Вопросов будет меньше, если резюме грамотно оформлено и демонстрирует компетентность соискателя.

С HR нужно быть вежливым и придерживаться официального стиля общения. Вас проверят на адекватность и сделают вывод о целесообразности очного собеседования с техническим специалистом.

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

Очное собеседование с рекрутером

До беседы с техническим специалистом с вами может опросить рекрутер по списку поверхностных вопросов на знание технологий: «Что такое Swift?», «Что такое ООП?» и т.д. Он может дать вам мини-тест, в котором нужно будет набрать энную сумму баллов, чтобы пройти на собеседование с техническим специалистом. Задача HR – отсеивать заведомо негодных соискателей.

Собеседование с техническим специалистом

Теоретические вопросы

Общение с техническим специалистом начинается с проверки ваших теоретических познаний. На рядовых собеседованиях задают типовые вопросы – всего их около десятка.

Несмотря на кажущуюся простоту вопросов, даже разработчик уровня 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 управляет общим пулом потоков и решает, когда именно выпустить поток на ядро в зависимости от доступных системных ресурсов. На каждое ядро приходится по одному потоку.

GCD оптимизирует приложение и обеспечивает вызов потока безопасно и автоматически.

Платформа GCD объявляет несколько типов данных и функций (Dispatch Queues, Dispatch Sources, Dispatch Groups, Dispatch Semaphores).

Dispatch Queues – очередь, в которую вы отправляете единицы работы (блоки кода). Затем GCD решает, в каком потоке их выполнять и сколько параллелизма требуется.

8. Что такое UIStackView?

UIStackView– контейнер для UIView. В него мы помещаем выстраивающиеся в виде стека горизонтально или вертикально UIView. Выкладываться они будут автоматически в соответствии с доступным пространством, которое определяется через настройки: alignment, distribution, spacing.

9. Какие существуют логические операторы, что такое оператор объединения с nil?

  1. !a – НЕ;
  2. a && b – И;
  3. a | | b – ИЛИ;
  4. ?? – оператор объединения с nil.

?? возвращает либо значение опционала, либо значение по умолчанию (второе).

        var optionalInt: Int? = 90
var result = optionalInt ?? 30 // 90
    

Если optionalInt не nil, оно возвращается, в противном случае возвращается строка по умолчанию.

10. Объясните иерархию классов UIButton. Суперкласс UIViewController?

NSObject → UIResponder → UIView → UIControl → UIButton

UIResponder → UIViewController

***

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

Практические вопросы

В практической части вам дадут MacBook и попросят решить несложные задачи. Затратных по времени заданий скорее всего не будет – едва ли технический специалист захочет тратить на соискателя слишком много времени.

Если нужно написать приложение, это попытка проверить, чем вы руководствуетесь, как делаете переходы и какую архитектуру используете. Лучше всего показать умение применять MVVM и подчеркнуть, что выбор обоснован легкостью трансформации в VIPER.

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

Расскажите, как бы вы проектировали такое приложение:

  1. Бесконечная лента картинок. Каждый элемент ленты – картинка + мета-информация к ней. При нажатии на картинку та открывается в полном размере. Источник картинок – публичный API. Необходимо реализовать оффлайн-режим, т.е. приложение должно функционировать без сети в максимально возможной степени.
  2. Спроектировать чат. Пример: Telegram. Функциональность: список диалогов, в диалогах – сообщения. Можно отправлять текст, фото, видео, аудио. Из диалога можно посмотреть профиль пользователя.
  3. Есть два источника: А и В. Необходимо отобразить на экране список получаемых из них элементов.

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

Не стесняйтесь спрашивать сами

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

О чем можно спросить:

  1. Какие задачи придется выполнять в первое время?
  2. Будет ли ментор?
  3. Какой стек технологий использует компания?
  4. Как компания относится к code review?
***

Самообразование необходимо каждому ИТ-специалисту, но если вы нацелены на карьеру программиста всерьез, стоит обратить внимание на факультет iOS-разработки GeekBrains. Занятия ведут опытные преподаватели, а успешно прошедшим курсы студентам онлайн-университет не только выдает дипломы, но и помогает с трудоустройством.

РУБРИКИ В СТАТЬЕ

МЕРОПРИЯТИЯ

Комментарии 0

ВАКАНСИИ

Ведущий программист Unity3D
Москва, по итогам собеседования
Programmer Unity
Краснодар, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

BUG