44 сложнейших вопроса для собеседования от Apple

Содержание
  1. Вопросы и ответы на собеседование iOS разработчика (часть 1)
  2. Вопрос 1: Что такое полиморфизм?
  3. Вопрос 2: Что такое инкапсуляция? Что такое нарушение инкапсуляции?
  4. Вопрос 3: Чем абстрактный класс отличается от интерфейса?
  5. Вопрос 4: Расскажите о паттерне MVC. Чем отличается пассивная модель от активной?
  6. Вопрос 5: Реализация синглтона в ARC и в non-ARC?
  7. Вопрос 6: Какие еще паттерны проектирования вы знаете?
  8. Вопрос 7: Что такое responder chain?
  9. Вопрос 8: Как работают push-уведомления?
  10. Вопрос 9: Что такое SOLID принципы?
  11. Вопрос 10: Цикл жизни ios-приложения
  12. 49 вопросов, которые вам зададут на собеседовании в Apple
  13. // На управленческие позиции
  14. // На роль менеджера по продажам
  15. // На позицию в команду поддержки
  16. // На другие позиции
  17. Собеседование iOS-разработчика: устные вопросы по языку Swift
  18. Вопрос №1 – Swift 1.0 и далее
  19. Вопрос №2 – Swift 1.0 и далее
  20. Вопрос №3 – Swift 1.0 и далее
  21. Вопрос №4 – Swift 1.0 и далее
  22. Вопрос №5 – Swift 1.0 и далее
  23. Средний уровень
  24. Продвинутый уровень
  25. Вопрос №1 – Swift 1.2
  26. Это собеседование на работу в Apple. Ответьте на вопросы
  27. Вопросы к инженерам
  28. Вопросы тестировщикам ПО и продуктов
  29. Вопросы к дизайнерам
  30. Вопросы консультантам
  31. Вопросы менеджерам
  32. Вопросы к специалистам и технарям
  33. Прочие вопросы

Вопросы и ответы на собеседование iOS разработчика (часть 1)

44 сложнейших вопроса для собеседования от Apple

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

Вопрос 1: Что такое полиморфизм?

Ответ: Полиморфизм — это базовый принцип ООП. Суть заключается в том, что один и тотже метод разных наследников имеет собственную реализацию.

Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового. Для тех, кто не особо сведущ в ООП, это, наверно, звучит сложно. Поэтому рассмотрим применение полиморфизма на примере.

Определение полиморфизма как «один интерфейс — много реализаций», популяризованное Бьерном Страуструпом, относится к ad hoc полиморфизму, но в действительности, ad hoc полиморфизм не является истинным полиморфизмомПолиморфизмом назвается возможность работать с несколькими типами так, как будто это один и тот же тип и в то же время поведение каждого типа будет уникальным в зависимости от его реализации.

Полиморфизм может быть:

  • Статическим
  • Динамический
  • Параметрический

Классическим примером полиморфного типа служит список элементов произвольного типа.

https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)

Полиморфизм для начинающих

Вопрос 2: Что такое инкапсуляция? Что такое нарушение инкапсуляции?

Ответ: Инкапсуляция (англ. encapsulation) это фундаментальная объектно-ориентированная концепция, позволяющая упаковывать данные и поведение в единый компонент с разделением его на обособленные части — интерфейс и реализацию.
Еще вариант определения:

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

Говоря проще: мы скрываем реализацию от пользователя, предоставляя ему интерфейс. Как класс или метод реализован на самом деле — пользователю знать не обязательно.

Вопрос 3: Чем абстрактный класс отличается от интерфейса?

Ответ: Абстрактный класс — это класс, у которого не реализован один или больше методов (некоторые языки требуют такие методы помечать специальными ключевыми словами).

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

Например, один класс хочет дать другому возможность доступа к некоторым своим методам, но не хочет себя «раскрывать». Поэтому он просто реализует интерфейс.

Абстрактный класс нужен, когда нужно семейство классов, у которых есть много общего. Конечно, можно применить и интерфейс, но тогда нужно будет писать много идентичного кода.

В некоторых языках (С++) специального ключевого слова для обозначения интерфейсов нет. Можно считать, что любой интерфейс — это уже абстрактный класс, но не наоборот.

Вопрос 4: Расскажите о паттерне MVC. Чем отличается пассивная модель от активной?

Ответ: Model-view-controller (MVC, «модель-представление-контроллер», «модель-вид-контроллер») — схема использования нескольких шаблонов проектирования, с помощью которых модель приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента таким образом, чтобы модификация одного из компонентов оказывала минимальное воздействие на остальные. Такой паттерн проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.
В оригинальной концепции была описана сама идея и роль каждого из элементов: модели, представления и контроллера. Но связи между ними были описаны без конкретизации. Кроме того, различали две основные модификации:

  • Пассивная модель — модель не имеет никаких способов воздействовать на представление или контроллер, и используется ими в качестве источника данных для отображения. Все изменения модели отслеживаются контроллером и он же отвечает за перерисовку представления, если это необходимо. Такая модель чаще используется в структурном программировании, так как в этом случае модель представляет просто структуру данных, без методов их обрабатывающих;
  • Активная модель — модель оповещает о произошедших в ней изменениях те представления, которые подписались на получение таких оповещений. Это позволяет сохранить независимость модели от контроллеров и представлений.

Вопрос 5: Реализация синглтона в ARC и в non-ARC?

Ответ: В случае использования ARC:

+ (SomeClass*)shared { static SomeClass* singleton = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, { singleton = [[SomeClass alloc] init]; }); return singleton; }

    static SomeClass* singleton = nil;    static dispatch_once_t onceToken;    dispatch_once(&onceToken, {        singleton = [[SomeClass alloc] init];

Без использования ARC:
AppUtils.h

@interface AppUtils : NSObject { NSString* className; } @property ( nonatomic, retain ) NSString* className; + ( id ) sharedInstance; @end // AppUtils

@interface AppUtils : NSObject {@property ( nonatomic, retain ) NSString* className;

AppUtils.m

static AppUtils* sharedAppUtilsInstance = nil; @implementation AppUtils @synthesize className; – ( id ) init { self = [ super init ]; if ( self ) { className = [ [ NSString alloc ] initWithString: @”AppUtils” ]; } return self; } – ( void ) dealloc { // Should never be called [ className release ]; [ super dealloc ]; } + ( id ) sharedInstance { @synchronized( self ) { if ( sharedAppToolsInstance == nil ) sharedAppToolsInstance = [ [ super allocWithZone: NULL ] init ]; } return sharedAppUtilsInstance; } + ( id ) allocWithZone: ( NSZone* ) zone { return [ [ self sharedInstance ] retain ]; } – ( id ) copyWithZone: ( NSZone* ) zone { return self; } – ( id ) retain { return self; } – ( unsigned int ) retainCount { // denotes an object that cannot be released return UINT_MAX; } – ( oneway void ) release { // never release } // release – ( id ) autorelease { return self; } @end

static AppUtils* sharedAppUtilsInstance = nil;className = [ [ NSString alloc ] initWithString: @”AppUtils” ];// Should never be called+ ( id ) sharedInstance {if ( sharedAppToolsInstance == nil )sharedAppToolsInstance = [ [ super allocWithZone: NULL ] init ];return sharedAppUtilsInstance;+ ( id ) allocWithZone: ( NSZone* ) zone {return [ [ self sharedInstance ] retain ];- ( id ) copyWithZone: ( NSZone* ) zone {- ( unsigned int ) retainCount {// denotes an object that cannot be released- ( oneway void ) release {

Вопрос 6: Какие еще паттерны проектирования вы знаете?

Ответ:
Порождающие паттерны, паттерны создания объектов (Creational):

Структурные паттерны (Structural):

Патерны поведения и взаимодействия объектов (Behavioral):

Вопрос 7: Что такое responder chain?

Ответ: Для обработки взаимодействия пользователя с UI и внешних событий в iOS используется механизм Responder Chain
Для touch-событий:

  • Объект типа UIWindows пытается передать touch в объект типа UIView, в котором он был вызван (hit-testing)
  • Если UIView не может обработать данный touch (например, объект в данный момент невидим, или отключил возможность взаимодействия с собой), touch передается в superview данного компонента, и так далее вверх, пока он не будет обработан

Класс UIApplication, UIViewController и UIView наследуются от класса UIResponder.
Класс UIResponder определяет порядок, в котором объекты обрабатывают события (touch-события, события от элементов UI (кнопки и т.д.), изменение текста). Кроме того, UIResponder объявляет методы, которые позволяют объектам определять, кто первым будет отвечать и обрабатывать сообщения:

  • becomeFirstResponder — объект-получатель сообщения будет первым получать все события, посылаемые системой
  • resignFirstResponder — объект-получатель отказывается от обработки сообщений первым

Документация от Apple.

Вопрос 8: Как работают push-уведомления?

Ответ: Push-уведомление — это короткое сообщение, состоящее из токена девайса, полезной нагрузки (payload) и ещё некоторой информации. Полезная нагрузка — это актуальные данные, которые будут отправляться на девайс. Схема работы выглядит следующим образом:

  1. Apple Push Notification Service (APNS) запрашивает у устройства token, своеобразный ключ, который можно считать «адресом».
  2. Есть сервер (наш или иной сервис).
  3. Приложение отправляет token на сервер, коткорый занимается отправкой push-уведомлений.
  4. Когда произойдёт какое-либо событие для вашего приложения, сервер отправит push-уведомление в APNS.
  5. APNS отправит push-уведомление на девайс пользователя.

Для разработки push-уведомлений, надо учитывать следующие моменты:

  • iPhone, iPad или iPod touch. Push-уведомления не работают в симуляторе, поэтому для тестирования нужен настоящий девайс.
  • Регистрация в iOS Developer Program. Для каждого приложения, в котором будет интегрирован механизм push-уведомлений, необходимо создать новый App ID и provisioning profile, а также SSL-сертификат для сервера. Эти действия выполняются на iOS Provisioning Portal.
  • Необходимо создать provisioning profile и SSL-сертификат.
  • Сервер, подключенный к интернету. Push-уведомления всегда отправляются сервером.

Push-уведомления — это нечто довольно маленькое; размер полезной нагрузки не может превышать 256 байт. Это примерно столько же, сколько позволяет вместить в себя СМС или твит. Push-сервер не будет тратиться на переносы на новую строку и пробелы.
Тонкие моменты при работе с push-уведомлениями:

  • Они не надёжны! Нет гарантий, что push-уведомления будут доставлены, даже если APNS примет их.
  • Как только ваш сервер сформировал push-уведомление, он безответно отправляет его в APNS. Нет способа узнать статус доставки уведомления конечному пользователю после отправки. Время доставки может варьироваться от нескольких секунд до получаса.
  • Кроме этого, у пользователей i-девайсов может не быть возможности получать push-уведомления всё время. Например, рядом нет Wi-Fi сети с доступом в интернет либо девайс может быть вообще выключен.
  • APNS будет пытаться доставить последнее отправленное уведомление, когда девайс станет доступен для приёма. Но эти попытки ограничены по времени. После тайм-аута push-уведомление будет потеряно навсегда!
  • Они могут быть дорогими! Добавить push-функционал в приложение довольно просто и недорого, если вы владеете данными. Однако если у вас много пользователей либо необходимо запрашивать данные, то затраты резко возрастают.

Вопрос 9: Что такое SOLID принципы?

S — Single responsibility principle — Принцип единственной обязанности:
На каждый класс должна быть возложена одна-единственная обязанность.

O — Open/closed principle — Принцип открытости/закрытости:
Программные сущности должны быть открыты для расширения, но закрыты для изменения.

L — Liskov substitution principle — Принцип подстановки Барбары Лисков:
Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

I — Interface segregation principle — Принцип разделения интерфейса
Много специализированных интерфейсов лучше, чем один универсальный.

D — Dependency inversion principle — Принцип инверсии зависимостей:Зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.Еще почитать по теме:

От STUPID кода к SOLID коду

Шпаргалка по SOLID принципам

Вопрос 10: Цикл жизни ios-приложения

Ответ: Состояния приложения

СостояниеОписание
Not runningПриложение не запущено или было запущено, но его выполнение было прервано системой
InactiveПриложение запущено на переднем плане, но в данный момент не принимает события. (Хотя может выполнять в этот момент какой-то другой код). Приложение обычно остается в этом состоянии очень ненадолго, поскольку оно сразу переходит в другое состояние.
ActiveПриложение работает на переднем плане и принимает события. Это обычный режим для приложений на переднем плане.
BackgroundПриложение находится в фоновом режиме и выполняет код. Большинство приложений вводят это состояние ненадолго, во время перехода к состоянию suspended. Однако приложение, запрашивающее дополнительное время выполнения, может оставаться в этом состоянии еще некоторое время. Кроме того, приложение, запускаемое непосредственно в фоновом режиме, сразу входит в состояние Background, а не в состояние Inactive.
SuspendedПриложение находится в фоновом режиме, но не выполняет код. Система автоматически переводит приложения в это состояние и не уведомляет их об этом. Приложение приостановлено, оно остается в памяти, однако не выполняет никакого кода. При возникновении состояния с нехваткой памятью система может удалять приостановленные приложения без уведомления, чтобы освободить место для приложений переднего плана.

Источник: http://coderjob.ru/2017/05/12/%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B-%D0%B8-%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%8B-%D0%BD%D0%B0-%D1%81%D0%BE%D0%B1%D0%B5%D1%81%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-ios-%D1%80%D0%B0/

49 вопросов, которые вам зададут на собеседовании в Apple

44 сложнейших вопроса для собеседования от Apple
Apple — одна из самых технологичных компаний в мире, где прохождение собеседования считается достижением. Здесь вам зададут технические головоломки и брейнтизеры, которые логичны для некоторых ролей. Но есть вопросы, смысл которых мы так и не поняли.

Вопрос на должность инженера-конструктора

Есть чашка горячего кофе и бутылка молока из холодильника. Температура в комнате — посредине этих значений. Когда нам стоит добавить молоко в кофе, чтобы получить максимально холодный напиток (в начале, середине или конце процесса)?

Вопрос на должность ученого-исследователя

Как вы проверите, является ли бинарное дерево зеркальным отображением левого и правого поддеревьев?


Вопрос на должность инженера-тестировщика

Как бы вы протестировали тостер?

Вопрос на должность ведущего технического специалиста

Если вы поднимаетесь на гору в один день и спускаетесь на следующий, начиная путь в одно и то же время — окажетесь ли вы хоть однажды в одном и том же месте, в одно и то же время?

Вопрос на должность ведущего системного инженера

Как работают крылья самолета?

Вопрос на должность аппаратного инженера

Назовите 5 способов, с помощью которых можно определить, сколько бензина в бензобаке.

Вопрос на должность инженера по механике для команды Apple Watch

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

Вопросы на должность инженера ПО

Что привело вас сюда сегодня?

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

Вопрос на должность инженера-тестировщика ПО

«62 — 63 = 1». Измените один элемент (цифру или знак), чтобы сделать утверждение правдивым.

Вопросы на должность технического специалиста

Ваше любимое Apple-устройство? Почему именно оно?

Опишите момент, в котором вы навредили другу. Как вы это исправили?


Вопрос на должность ведущего специалиста по хардверным тестам

Как вы спланируете полет на дельтаплане в Северную Корею для своих коллег?

Почему вы хотите присоединиться к Apple? О чем с прошлой работы вы будете скучать, если Apple наймет вас?

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

Вы креативный? Приведите пример креативной идеи, над которой думаете.

Опишите интересную проблему и то, как вы ее решили.

У вас есть 100 монет. 10 монет лежат орлом вверх, еще 90 — решкой. Вы не можете их прощупать, посмотреть или еще каким-то образом узнать их положение. Разделите их на две равные кучи, в которых будет равное количество монет, лежащих орлом и решкой вверх.

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

Вопросы на должность инженера-тестировщика

Есть три коробки: в одной только яблоки, во второй только апельсины, в третьей — оба фрукта вперемешку. Бирки на коробках перепутали и они некорректно отображают их содержимое. Вы открываете одну коробку, не глядя достаёте один фрукт. Посмотрев на него, как вы мгновенно определите правильные бирки для других коробок?

Как вы будете тестировать ваше любимое приложение?


Вопрос на должность ведущего создателя аппаратных тестов

Опишите внутреннее устройство iPhone.

Вопрос на должность инженера по механике

Вы ставите стакан воды на пластинку для записи и начинаете медленно увеличивать скорость. Что произойдет быстрее: стакан соскользнет, перевернется или расплескается вода?

Вопрос на должность билд-инженера

Вы умны?

// На управленческие позиции

Вопрос на должность менеджера отдела ПО

Какими были ваши провалы и чему они вас научили?

Вопрос на должность менеджера по разработке ПО

Расскажите о чем-то, за что вы испытываете особенную гордость.

Вопрос на должность ведущего аналитика

Вам дали кувшин, в котором смешаны поддельные и настоящие монеты. Вы достаете одну из них, трижды подбрасываете и получаете результат «решка — решка — орел». Какие шансы, что вы достали фальшивку или оригинал?

Вопрос на должность менеджера по инженерным проектам

Каким был ваш лучший день за последние 4 года? Каким был худший?

Вопрос на должность консультанта по решениям

Сколько весит Эмпайр-стейт-билдинг?

Вопросы на должность специалиста

Сценарий таков: вы взаимодействуете с разозленной клиенткой, которая ждала помощи в течение 20 минут и очень этим возмутилась. Покупатель говорит, что сейчас отправится в Best Buy или Microsoft Store и купит компьютер, который хочет. Решите проблему.

Заходя в Apple Store в качестве покупателя, что вы заметите в первую очередь, как будете себя ощущать?

Почему Apple сменила название с Apple Computers Incorporated на Apple Inc?

// На роль менеджера по продажам

Вопросы на должность специалиста по розничным продажам

Вы — человек, к которому обращаются за решением технических вопросов?

Расскажите об опыте, который кажется вам неудачным.


Вопрос на должность специалиста по продажам

Каким супергероем вы бы хотели быть?

Вопросы на должность менеджера по международным поставкам

Как бы вы снизили стоимость этой ручки?

Сколько ежедневно рождается детей?

// На позицию в команду поддержки

Вопрос в команду поддержки Apple Genius

Объяснить пятилетнему ребенку, что такое ОЗУ.

Вопросы на должность консультанта поддержки, работающего удаленно

Что важнее: решить проблему покупателя или обеспечить его наилучшим опытом взаимодействия с поддержкой?

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

Объясните восьмилетнему ребенку, что такое модем/роутер и какие у него функции.

Вопрос на должность специалиста поддержки, работающего в магазине

Вы выглядите жизнерадостно, что может испортить вам настроение?

Вопрос на должность консультанта по образовательным продуктам, работающего удаленно

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

// На другие позиции

Вопрос на должность помощника-администратора

Какое ваше любимое мороженое?

Вопрос на должность специалиста по поставкам

Как вы построите эффективную модель цепочки поставок?

Вопрос на должность в финансовом отделе

Какие данные вам нужны, чтобы вывести iPhone на новый рынок?

Вопрос на должность младшего проектного менеджера

Расскажите о моменте, когда вы провалились. Не о том, когда вы оступились и все поправили, а когда действительно потерпели неудачу.

Вопрос на должность менеджера магазина

Расскажите мне о времени, когда у вас было больше дел, чем вообще возможно выполнить.

Источник: Business Insider

Перевод: AIN

Источник: https://icanchoose.ru/blog/49-voprosov-kotorye-vam-zadadut-na-sobesedovanii-v-apple/

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

44 сложнейших вопроса для собеседования от Apple

Перейдем к более открытому варианту тестирования – собеседование iOS-разработчика с устными вопросами по Swift. Вместе с ними также приведены ответы.

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

Вопрос №1 – Swift 1.0 и далее

Что такое опционал и какие проблемы он призван решать?

'Решение

Опционал считается мощным инструментом языка Свифт.

Если после объявления типа поставить вопросительный знак, это будет указывать на то, что значение либо есть, либо его нет, а String и String? – это два разных типа. Например, в Objective-C отсутствие значения доступно только в ссылочных типах, и используется специальное значение nil.

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

Вопрос №2 – Swift 1.0 и далее

Когда вы должны использовать структуру, а когда – класс?

'Решение

Собеседование iOS может включать в себя и такой противоречивый вопрос. Продолжение темы о том, является ли предпочтение классов хорошей практикой. Функциональное программирование имеет тенденцию поддерживать типы значений, тогда как объектно-ориентированное программирование предпочитает классы.

В Swift классы и структуры отличаются рядом особенностей. Выведем обобщенную разницу следующим образом:

  1. Классы поддерживают наследование, структуры – нет.
  2. Классы являются ссылочными типами, структуры – это типы значений.

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

Подробную информацию можно найти здесь.

Вопрос №3 – Swift 1.0 и далее

Что такое дженерики и какие проблемы они решают?

'Решение

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

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

Например, в следующем коде вторая функция является «клоном» первой: она просто принимает строки вместо целых чисел:

func areIntEqual(x: Int, _ y: Int) -> Bool { return x == y } func areStringsEqual(x: String, _ y: String) -> Bool { return x == y } areStringsEqual(“ray”, “ray”) // true areIntEqual(1, 1) // true

Знающий Objective-C может подумать о решении с помощью NSObject:

import Foundation func areTheyEqual(x: NSObject, _ y: NSObject) -> Bool { return x == y } areTheyEqual(“ray”, “ray”) // true areTheyEqual(1, 1) // true

Этот код работает, но есть одно «но»: он позволяет сравнивать строку с целым числом. Например:

areTheyEqual(1, “ray”)

Приложение не крашится, но сравнение строки с целым числом, вероятно, не должно допускаться. С дженериками вы можете объединить две функции в одну и сохранить безопасность типов:

func areTheyEqual(x: T, _ y: T) -> Bool { return x == y } areTheyEqual(“ray”, “ray”) areTheyEqual(1, 1)

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

Вопрос №4 – Swift 1.0 и далее

Объясните суть неявно развернутых (извлеченных) опционалов.

'Решение

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

Не применяйте неявно развернутые опционалы, если они не нужны. Неправильное использование увеличивает вероятность сбоев во время выполнения.

Вопрос №5 – Swift 1.0 и далее

Перечислите способы извлечь опционал. Как они оцениваются с точки зрения безопасности?

Подсказка: Есть по крайней мере семь способов.

'Решение
  • оператор принудительного извлечения ! – небезопасный;
  • неявное извлечение – во многих случаях небезопасно;
  • опциональное связывание – безопасное;
  • опциональная цепочка  – безопасна;
  • оператор объединения со значением nil – безопасный;
  • Swift 2.0 оператор guard – безопасный;
  • Swift 2.0 паттерн опционала – безопасный.

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

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

Продвинутый уровень

В конце концов собеседование iOS приведет вас к сложным вопросам, и к ним нужно подготовиться.

Вопрос №1 – Swift 1.2

Объясните проблему в Swift 1.2, связанную с объявлением перечисления с дженерик-типами. Возьмем, например, перечисление Either с двумя дженерик-типами T и V. При этом T используется как связанный тип значения для Left, а V – для Right:

enum Either { case Left(T) case Right(V) }

'Решение

Ошибка компиляции со следующим (загадочным) сообщением об ошибке:

unimplemented IR generation feature non-fixed multi-payload enum layout

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

class Box { let value: T init(_ value: T) { self.value = value } } enum Either { case Left(Box) case Right(Box) }

Эта проблема была решена в версии Swift 2.0.

Это собеседование на работу в Apple. Ответьте на вопросы

44 сложнейших вопроса для собеседования от Apple

Для многих работа в Apple — настоящая мечта. Мы разузнали, какие вопросы задают представители компании во время собеседования.

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

Вопросы к инженерам

1. Инженеру по разработке продуктов. У вас есть чашка горячего кофе и немного молока из холодильника. Температура в комнате где-то между температурами этих двух жидкостей. Когда нужно добавить молоко, чтобы добиться максимального охлаждения кофе (сразу перед подачей напитка, немного погодя или в конце)?

Ответ: Кофе нужно дать возможность немного остыть. После 10 минут долить молока. Так можно добиться максимального охлаждения.

2. Ведущему инженеру-программисту. Каков принцип работы крыла самолета?

Ответ: Если вкратце: полет становится возможен за счет разницы скоростей потока над поверхностью крыла и под. Скорость ведет к снижению давления. В определенный момент давление над крылом становится ниже атмосферного, а под крылом — выше. За счет чего самолет выталкивает вверх.

3. Техническому инженеру. Приведите пять способов измерения уровня топлива в баке автомобиля.

Ответ: Посмотреть на приборку — лишь один из них. Остальные четыре предлагаем написать вам;)

4. Инженеру по ПО. Если бы у вас было два яйца и вам требовалось определить с какого максимального этажа можно бросить их, чтобы не разбить, какой бы оптимальный план такого теста вы выбрали?

Ответ: Логичнее было бы отказаться от теста вовсе. Разве что яйца сделаны, как минимум, из дерева.

5. Инженеру по ПО. Расскажите об интересной проблеме, с которой вам довелось столкнуться, а заодно опишите метод ее решения.

6. Инженеру по ПО. У вас есть 100 монет лежащих на столе. У каждой есть две грани: орел и решка. 10 из них лежат орлом вверх, 90 — вниз. Вы не видите монет, не можете их потрогать и как-либо взаимодействовать с ними физически.

Разделите монеты на две кучки так, чтобы в каждой было равное число тех, что лежат орлом вверх.

7. Инженеру. Вы умный?

Ответ: Логичнее будет услышать ответ: «Я рациональный».

8. Инженеру по ПО. У вас когда-нибудь возникали разногласия с менеджерами? Как вы разрешали конфликт? Приведите конкретный случай из вашей жизни и решение конфликта. Как бы вас охарактеризовал тот самый менеджер сегодня?

9. Инженеру-механику. Вы поставили стакан с водой на виниловый проигрыватель и начали постепенно увеличивать скорость вращения пластинки. Что случится первым: выльется вода из стакана или упадет сам стакан?

Ответ: Не спешите выпаливать ответ! Все зависит от формы стакана и насколько он наполнен водой. Заполненный до краев стакан расплескается при незначительном повышении скорости.

Низкий стакан с небольшим количеством воды — результат такой же. Стакан не будет двигаться, а капля воды рано или поздно выльется при повышении скорости. А вот с чашкой Петри все наоборот. Она соскользнет с диска до того как выльется вода.

Высокий сосуд упадет до того как выльется вода. Правильным ответом будет приведение нескольких примеров с акцентом на том, что все зависит еще и от материала, из которого изготовлена пластинка. Трение — оно такое.

10. Инженеру по ПО. Расскажите каким поступком или событием в жизни вы гордитесь?

11. Инженеру по ПО. Вы креативны? На какое новое творчество вы способны?

12. Инженеру по ПО. Зачем вы сюда пришли?

13. Инженеру по ПО. Представьте, что у вас есть приложение, которое дампит изображения из iTunes, но со временем эти изображения устаревают. Какую стратегию для удаления устаревших картинок вы бы использовали?

14. Инженеру. Поясните физический термин «момент инерции».

Ответ: Характеризуется распределением масс в теле: момент инерции равен сумме произведений элементарных масс на квадрат их расстояний до базового множества (точки, прямой или плоскости).

15. Инженер по проектам. Какой был ваш самый счастливый день за последние четыре года? А худший?

16. Инженеру по ПО. Почему вы хотите работать в Apple и что вынудило вас оставить прошлую работу ради Apple?

17. Инженеру-механику. Расскажите о напряжении и нагрузках на спицах упрощенного велосипедного колеса.

18. Инженеру. Что будет происходить с устройством, если вы измените напряжение в сети?

19. Инженеру. Что такое твердость?

Ответ: Свойство материала сопротивляться внедрению более твёрдого тела — индентора.

Вопросы тестировщикам ПО и продуктов

20. Ведущему тестировщику оборудования. Нарисуйте, как выглядит iPhone изнутри.

21. Тестировщику ПО. Как вы будете тестировать любимое приложение?

22. Тестировщику ПО. Перед вами три коробки. В одной лежат одни яблоки, в другой — только апельсины, в третьей — яблоки и апельсины вперемешку. Все коробки неправильно промаркированы, стикеры на них не соответствуют содержимому.

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

Ответ: Да, это возможно. Предположим, вы достали яблоко. На коробке написано: «смешанные фрукты», но коробки ведь промаркированы неверно. А значит в этой коробке либо апельсины, либо чисто яблоки. Но ведь вы достали яблоко, значит это точно не апельсины. Определяемся, что перед нами коробка с яблоками, а стикеры на двух коробках просто меняем местами.

23. Тестировщику. Как вы будете тестировать тостер?

24. Тестировщику ПО. Внесите изменения в равенство «62 – 63 = 1» таким образом, чтобы оно стало верным.

Примечание: Превратить 1 в -1, конечно, хороший вариант. Но Apple явно ждет от вас не этого.

Ответ: Более правильный ответ будет, если равенство примет вид: 26 – 63 = 1 (два в шестой степени минус 63).

25. Тестировщику оборудования. Расскажите, как бы вы планировали поездку в Северную Корею?

Вопросы к дизайнерам

26. Техническому дизайнеру. Вы попробовали сидеть на двух матрацах. Один в два раза выше другого. Оба накачаны до одинакового давления. Почему на более высоком матраце есть ощущение, что вы погружаетесь в него глубже?

Ответ: Против силы тяжести не попрешь.

27. Дизайнеру. Какой тип сенсорных экранов вы будете использовать на мобильных устройствах?

28. Дизайнеру. В комнате есть очень много шаров наполненных Гелием. Как лопнуть их все? Приведите как можно больше способов.

Ответ: Из не совсем банальных вариантов — существенное снижение температуры в комнате. Перепад приведет к взрыву шаров.

29. Дизайнеру. В чем разница между жесткостью и прочностью.

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

Вопросы консультантам

30. Консультанту по решениям. Какова масса Эмпайр-стейт-билдинг?

Ответ: 331 000 тонн

31. Консультанту в отдел поддержки Apple Genius. Объясните пятилетнему ребенку, что такое оперативная память.

32. Консультанту на дому. Объясните восьмилетнему ребенку что такое «модем» и «роутер». Для чего эти устройства нужны?

33. Консультанту в магазин. Вы беседуете с разозленным клиентом, который вынужден был прождать помощи около 20 минут. Клиент открыто заявляет, что лучше он обратится в Best Buy или вообще выберет компьютер, который ему нужен в Microsoft Store. Как вы разрешите данную ситуацию?

Ответ: Лучший мотиватор для потенциального покупателя — скидка или выгодное предложение.

34. Консультанту на дому. Что важнее: решить проблему клиента или получить хороший опыт по работе с клиентами?

35. Консультанту (ранее эта должность называлась Family Room Specialist). Вы выглядите весьма позитивно. А что выбивает вас из колеи больше всего?

36. Консультанту на дому. Покажите (актерская игра), как бы выглядел клиент, которому вы бы хотели помочь. Используйте только голос.

37. Консультанту. Вы относитесь к тому типу людей, к которым часто обращаются за технической помощью?

38. Консультанту. Расскажите о случае, когда вам нужно было сделать больше, чем вы физически могли.

39. Консультанту на дому. Вам звонит клиент с компьютером, который уже больше похож на древний камень (очень старый Mac). Что вы будете делать?

Вопросы менеджерам

40. Менеджеру розничной торговли. Каким бы супергероем вы хотели стать и почему?

41. Менеджеру по международным поставкам. Возьмите эту ручку. Что можете предложить для снижения ее себестоимости?

42. Менеджеру по международным поставкам. Сколько детей ежедневно рождается в мире?

Ответ: Цифра весьма размыта. Средний показатель — около 365 тысяч детей появляется на свет ежедневно.

43. Менеджеру по ПО. Расскажите о своих неудачах и какой урок из них вы вынесли?

44. Менеджеру по продажам. Опишите уничижительный навык.

45. Менеджеру по сбыту. Опишите эффективную модель цепочки поставок, которую вы бы предложили.

46. Менеджеру по проектам. Расскажите о случае полного фиаско, о неудаче, которую вы потерпели без права на исправление.

Вопросы к специалистам и технарям

47. Специалисту. Почему Apple сменила имя с Apple Computers Incorporated на Apple Inc.?

Ответ: Имя Apple поменяла в день, когда Стив Джобс анонсировал первый iPhone. Джобс пояснил такое решение желанием Apple не ассоциироваться исключительно с компанием, которая производит только компьютеры.

48. Специалисту. Опишите ваши ощущения, когда вы посещаете Apple Store как клиент. На что вы обращаете внимание и что бросается в глаза?

49. Ведущему техническому специалисту. Если вы отправитесь в горы, а затем в то самое время (скажем, вышли в 12 дня и решили возвращаться назад в 12 дня) на следующей день вы будете в точное такое же время на том же месте?

50. Техническому специалисту. Расскажите случай, когда вы обидели или подкинули проблем своему другу. Как вы разрешили эту ситуацию?

51. Техническому специалисту. Какой ваш любимый продукт Apple и почему?

Прочие вопросы

52. Ведущий аналитик. Вы достаете из кувшина одну монету. В нем лежит одна настоящая, а одна поддельная. Каков шанс, что вы достали сможете определить фальшивую и настоящую монету после трех подкидываний (на одной монете два «орла»)?

Ответ: Путем подсчетов и незначительнго погружения в теорию вероятностью, можно подсчитать, что шансы определить поддельную монету составляют 60%. Настоящую — 40%. Главное, ответ тут явно не 50/50.

53. Администратору. Какое мороженное вы любите?

54. Финансисту. Какие данные вы бы запросили, если бы решили выводить iPhone на рынок новой страны?

Ну что, как результаты?

(3 , общий рейтинг: 4.67 из 5)

Источник: https://www.iphones.ru/iNotes/XX-voprosov-kotorye-Apple-zadaet-na-sobesedovanii-06-29-2018

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: