Язык Swift: вопросы и ответы на собеседовании

2
11652
Добавить в избранное

Да, язык Swift прост, но не настолько, чтобы некоторые вопросы с собеседований не загоняли в тупик. Давайте разберемся, как на них отвечать.

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

Язык Swift

В действительности Swift – сложный язык. Он охватывает как объектно-ориентированные (ООП), так и функциональные подходы, и продолжает совершенствоваться с каждым новым выпуском.

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

Используйте эти вопросы, чтобы проверить знания потенциальных кандидатов на рабочее место или свои собственные! Если вы не уверены в своем ответе, не волнуйтесь: к каждому вопросу в этой статье прилагается скрытое «под катом» решение, чтобы вы могли учить и запоминать новую информацию.

Вопросы разделены на две основные категории:

  1. Письменные. Хорошее дополнение практического тестирования по электронной почте, так как зачастую это базовый этап с последующим допуском к собеседованию.
  2. Устные. Они могут озвучиваться телефону или в личном интервью.

Кроме того, каждая из этих категорий разделена на три уровня:

  1. Начальный: подходит для начинающего Swift-программиста, который прочел одну или две книги, после чего начал писать несложные приложения.
  2. Средний: для тех, кто сильно заинтересован в языковых концепциях, читает литературу, блоги, смотрит видео и экспериментирует с полученной информацией в реализации своих приложений.
  3. Продвинутый: для лучших из лучших – людей, которые успели хорошо освоить язык, постоянно себя проверяют и используют самые современные методы.

Если вы хотите по-настоящему себя испытать, постарайтесь не раскрывать спойлеры с ответами сразу. Все решения были протестированы с помощью Xcode 7.0 beta 6.

Письменные вопросы

Начальный уровень

Вопрос №1 — язык Swift 1.0 и далее

Каков наиболее оптимальный способ написать этот цикл for с диапазонами?

Вопрос №2 — язык Swift 1.0 и далее

Рассмотрим следующий пример:

Что из себя представляют tutorial1.difficulty и tutorial2.difficulty? Было бы все иначе, если бы Tutorial был классом? Почему?

Вопрос №3 — язык Swift 1.0 и далее

view1 объявляется с var, а view2 объявляется с let. В чем разница, и будет ли последняя строка компилироваться?

Вопрос №4 — язык Swift 1.0 и далее

Этот код сортирует массив имен по алфавиту и выглядит сложным. Упростите его:

Вопрос №5 — язык Swift 1.0 и далее

Этот код создает два класса – Address и Person, а также два экземпляра для представления – Ray и Brian:

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

Что произошло? Что не так?

Язык Swift

Средний уровень

С повышением уровня будет больше каверзных вопросов, ведь язык Swift не так прост. Вы готовы?

Вопрос №1 – язык Swift 2.0 и далее

Рассмотрим следующее:

В чем разница между nil и .None? Чем отличаются переменные optional1 и optional2?

Вопрос №2 – язык Swift 1.0 и далее

Вот модель термометра как класса и структуры:

Этот код не компилируется. Почему? Где ошибка?

Вопрос №3 – язык Swift 1.0 и далее

Что выводит этот код и почему?

Вопрос №4 – язык Swift 2.0 и далее

Вот глобальная функция, которая подсчитывает количество уникальных значений в массиве:

Здесь используются операторы < и ==, что ограничивает T. Вызывается это следующим образом:

Перепишите этот код следующим образом:

Вопрос №5 – язык Swift 2.0 и далее

Язык Swift не так прост. Вот функция для вычисления делений, заданных для двух (необязательных) даблов. Перед выполнением необходимо проверить три условия:

  • Делимое должно содержать значение, отличное от nil.
  • Делитель должен содержать значение, отличное от nil.
  • Делитель не должен быть равен нулю.

Этот код работает так, как и было задумано, но есть две проблемы:

  1. Предварительные условия могут воспользоваться преимуществами оператора guard.
  2. Используется принудительное разворачивание.

Улучшите эту функцию, используя guard и избегая принудительного разворачивания.

Итак, второй этап письменных вопросов пройден. Двигаемся дальше?

Язык Swift

Вопрос №1 – язык Swift 1.0 и далее

Рассмотрим следующую структуру, которая моделирует термометр:

Чтобы создать экземпляр, вы, очевидно, можете использовать этот код:

Но было бы лучше инициализировать немного иначе:

Сможете реализовать? Каким образом? Подсказка: это связано с кабриолетами, но не с такими как Camaro и Mustang 🙂

Вопрос №2 – язык Swift 1.0 и далее

Язык Swift обладает набором предопределенных операторов, которые ориентированы на различные типы операций (например, арифметика или логика). Он также позволяет создавать пользовательские операторы: как унарные, так и бинарные. Определите и реализуйте собственный оператор ^^ со следующими характеристиками:

  1. Принимает два входа в качестве параметров.
  2. Возвращает первый параметр, поднятый до степени второго.
  3. Игнорирует возможные ошибки переполнения.

Вопрос №3 – язык Swift 1.0 и далее

Можете ли вы определить перечисление с такими значениями? Почему?

Вопрос №4 – язык Swift 2.0 и далее

Рассмотрим следующий код, который определяет Pizza как структуру, а Pizzeria – как протокол, с расширением, включающим реализацию для метода makeMargherita():

Теперь вы определяете ресторан Lombardi следующим образом:

Следующий код создает два экземпляра Lombardi. Кто из двух сделает Маргариту с базиликом?

Вопрос №5 – язык Swift 2.0 и далее

Следующий код имеет ошибку. Можете ли вы определить, где и почему она происходит?

Подсказка: Есть три способа это пофиксить.

Поздравляем! Мы рассмотрели самые распространенные варианты задач, которые используются для предварительного письменного тестирования. Теперь переходим к устным вопросам, которые по сложности также разделены на три уровня: начальный, средний и продвинутый. Их разберем во второй части нашего материала.

Следующая статья: Собеседование iOS-разработчика: устные вопросы по языку Swift

Инетесуетесь разработкой под iOS?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Добавить комментарий