Вопросы на собеседование iOS-разработчика
Вопросов: 176 | Ответов: 40
Objective-C, Foundation:
- Что такое
свойство (property)
? [-] - Что такое
назначенный инициализатор (designated initializer)
? Приведите пример назначенного инициализатора (имеется ввидуif (self = [super ...])
)? [-] - Суть
рантайма (Runtime), отправление сообщения
? Как работает Runtime? [-] - Как добавить свойство в существующий объект с закрытой реализацией? Можно ли это сделать через runtime? [-]
- Объявление
свойств (property): retain, assign, nonatomic, readonly, copy
? [-] - С подвохом: вопрос о несуществующем параметре
atomic
, что он означает? Приведите пример кейса с использованиемatomic
? [+] - Как правильно реализовать сетер для свойства с параметром retain?
- Вопрос о циклах в графах владения, и почему свойства delegate (предоставляющие доступ к делегату) обычно задаются как
assign
илиweak
? - Можно ли чтобы разные классы реализовывали один протокол. (ClassA, ClassB и ClassC - реализуют ClassCProtocol)?
- Для чего нужен @dynamic, приведите примеры использования?
- Для чего нужен @synthesize, приведите примеры использования?
- В чем разница между
точечной нотацией
и использованием квадратных скобок? [-] - Что происходит когода мы пытаемся вызвать метод у nil указателя? Разница между nil и Nil и [NSNull null]?
- Что такое
селектор (selector)
? Как его вызвать? как отложить вызов селектора? Что делать если селектор имеет много параметров?(NSInvocation)
Как запустить селектор в(фоновом) потоке
? [-] - Как запустить
поток
? Что первым нужно сделать при запускепотока
? (NSAutoreleasePool)
Что такоеrunLoop
, кодга он используется?(timers, nsurlconnection ...)
?- Что такое
делегат (delegate)
? как его создать и использовать? [+] - В чем отличия коммуникационных паттернов? (
Notification
vsDelegates
vsObserving
)? [-] - Что такое
AppDelegate
? Зачем он нужен? [+] - Управление
колбэками (callbacks)
:Selectors
vsDelegate prototocls
vsBlocks
? - Как
использовать
self внутри блоков? Приведите примерretain cycle
в блоке? [-] - Как представлены
Си-структуры
(CGRect, CGSize, CGPoint) в Objective-C? - Какие существуют
root классы
в iOS? Для чего нужныroot классы
? [+] - Как работает
proxy
? - Как имитировать
множественное наследование
? [+] - Что такое
тип id
. Что случится во время компиляции если мы посылаем сообщение объектутипа id
? Что случится во время выполнения если этот метод существует? [+] - Что такое
указатель isa
? Для чего он нужен? [+] - Цепочка ответсвенности, что происходит с методом после того как он не нашелся в объекте класса, которому его вызвали (в сторону forwardInvocation:)? [+]
- Чем
категория
отличается откатегории продолжения класса
(extension, наименованная категория)? [-] - Можно ли добавить
ivar
в категорию? [+] - Когда лучше использовать
категорию
, а когданаследование
? [+] - Что такое
notifications (уведомления)
? как мы должны их использовать? - Какая разница между использованием
делегатов (delegation)
инотификейшенов (notification)
? [-] [+] - В чем разница между
NSArray и NSMutableArray
? непотоко-безопасный NSMutableArray? [-] - Чем отличается
NSSet от NSArray
? Какиеоперации
происходят быстро вNSSet
и какие вNSArray
? [-] Формальный и неформальный (informal)
протокол?Протоколы (protocols)
: основные отличия между c#/java интерфейсами и Objective-C протоколами? Что делать в случае если класс не реализует какой-то метод из протокола? [-]- Есть ли
приватные и защищенные
методы в Objective-C? [+] - Что такое
быстрое перечисление (fast enumeration)
? - Что такое
KVO
? Когда его нужно использовать? Методы для обозревания объектов? Работает лиKVO с instance переменными (полями)
объекта? - Что такое
KVC
? Когда его нужно использовать? - Как удалить объект в ходе итерации по циклу?
- Что такое
Run Loop
? - Как лучше всего загрузить
UIImage c диска(с кеша)
? - Какой контент лучше хранить в
Documents
, а какой вCache
? - Как связаны
NSRunLoop и NSAutoreleasePool
на пальцах? - Почему нам не следует вызывать
instance методы в методе initialize
? NSCoding, archiving
?- Протокол
NSCopying
, почему мы не можем просто использовать любой собственный объект в качестве ключа в словарях (NSDictionary) , что нужно сделать чтобы решить эту проблему? (разница между глубоким и поверхностным копированием)? Антипаттерны
в Objective-C?
Memory Management:
- Как происходит
ручное управление памятью - MRC
в iOS? autorelease vs release
?- Что означает
ARC
? - Что делать, если проект написан с использованием ARC, а нужно использовать классы сторонней библиотеки написанной без ARC?
Weak vs assign
,strong vs copy
?Atomic vs nonatomic
. Чем отличаются? Как вручную переопределить atomic/nonatomic сеттер в не ARC коде?- Зачем все свойства ссылающиеся на делегаты
strong/retain
. :))) - Что такое
autorelease pool
? - Как можно заимплементировать
autorelease pool на с++
? - Если я вызову
performSelector:withObject:afterDelay:
- объекту пошлется сообщение retain? - Как происходит обработка
memory warning
(предупреждение о малом количестве памяти)? Зависит ли обработка от версии iOS, как мы должны их обрабатывать? - Напишите простую реализацию
NSAutoreleasePoll
на Objective-C? - Когда нужно использовать метод
retainCount
(никогда, почему?) Объясните что такоеподсчет ссылок (retain count)
? - Темы управления памятью, такие как владение
retain/release/autorelease
? - Что случится если вы добавите только что созданный объект в
Mutable Array
, и пошлете ему сообщениеrelease
? Что случится если послать сообщениеrelease
массиву? Что случится если вы удалите объект из массива и попытаетесь его использовать? - С подвохом: как работает
сборщик мусора
в iOS? [+] - Нужно ли
ретейнить
(посылать сообщение retain)делегаты
? - Для чего используется класс
NSCoder
? - Опишите правильный способ управления памятью выделяемой под
Outlet'ы
? - Реализуйте следующие методы:
retain, release, autorelease
?
Networking:
- Преимущества и недостатки
синхронного и асинхронного
соединения? - Что означает
http, tcp
? - Какие различия между
HEAD, GET, POST, PUT
? - Как загрузить что-то из интернета? В чем разница между
синхронными и асинхронными запросами
? Небольшое задание. Опишите как загрузить изображение из интернета и отобразить его в ImageView — все это должно происходить после нажатия кнопки. - Что такое REST (Restful)?
Multithreading:
- Что такое
GCD
? Где используетсяGCD
? КакGCD
связан с многопоточностью? Типы queue? Queue == Thread? [+] NSOperation
vsGCD
?- Что такое
deadlock
? - Что такое
livelock
? - Что такое
семафор (semafor)
? - Что такое
мьютекс (mutex)
? Асинхронность
vsмногопоточность
. Чем отличаются?- Какие технологии в iOS возможно использовать для работы с потоками. Преимущества и недостатки.
- Как запустить поток? Что первым нужно сделать при запуске потока? (NSAutoreleasePool - пул автоосвобождения) Что такое runLoop, кодга он используется? (timers, nsurlconnection …)
- Чем отличается
dispatch_async от dispatch_sync
? - Для чего при разработке под iOS использовать
POSIX-потоки
?pthread_create(&thread, NULL, startTimer, (void *)t);
- А чем реально
POSIX-потоки
лучше чемGCD или NSOperationQueue вместе с NSOperation
? Приходилось ри реально использовать POSIX и как в этом были прюсы? Реально, просто интересно…Use POSIX calls if cross-platform portability is required. If you are writing networking code that runs exclusively in OS X and iOS, you should generally avoid POSIX networking calls, because they are harder to work with than higher-level APIs. However, if you are writing networking code that must be shared with other platforms, you can use the POSIX networking APIs so that you can use the same code everywhere.
UIKit:
- Разница между свойствами
bounds и frame
объекта UIView? Понимание системы координат? - Какие бывают
состояния
у приложения? - Цикл жизни
UIViewController
? [+] - Что такое
View
(представление) и что такоеwindow
? - Какого разрешение экранов iphon'ов, и в чем разница между
points (точками)
ипикселями (pixels)
? - Что такое
responder chain
(цепочка обязанностей,паттерн chain of responsibility
, на примере UI компонентов iOS ),becomeFirstResponder
. - Что означают
IBOutlet
иIBAction
, для чего они нужны, и что значат для препроцессора? - Как работает
UITableView
? - Как многопоточность работает с
UIKit
? - Что можно сделать если клавиатура при появлении скрывает важную часть интерфейса?
- Почему мы должны
релизить IBOutlet'ты
во viewDidUnload? - Что такое
awakeFromNib
, в чем разница междуxib и nib
файлами? - Иерархия наследования UIButton.
Базы данных, CoreData:
-
Составить SQL запрос на выборку всех проектов на которых сидит девелопер с id ==3. (
Developers:id,name; Projects:id,name; Developers&Projects:project_id,developer_id
)? -
Зачем нужно делать
двустороннии связи
в таблицах? -
Что такое
Core Data
? -
В каких случаях лучше использовать
SQLite
, а в какихCore Data
? -
Что такое
контекст (Managed object context)
? Как происходятизменения в NSManagedObjectContext
? -
Что такое
Persistent store coordinator
? Зачем нуженNSPersistentStoreCoordinator
? -
Какие есть нюансы при использовании
Core Data в разных потоках
? Каксинхронизировать данные между потоками
(Как синхронизировать контекст)? Синхронизация разных типов NSManagedObjectContext (получение и изменение данных в child контекстах)? -
Использовали ли
NSFetchedResultsController
? Почему? -
Что такое
Fault
и зачем он нужен? -
Что таке
Fetched Property
и особенности работы с ним по сравнению с обычной связью? -
Как использовать
СoreData
совместно смногопоточностью
? -
Что такое
NSManagedObjectId
? Можем ли мы сохранить его на потом если приложение закроется? -
Какие
типы хранилищ
поддерживает CoreData? -
Что такое
ленивая загрузка (lazy loading)
? Что ее связывает с CoreData? Опишите ситуация когда она может быть полезной? -
Что такое
нормализация
данных?
CoreAnimation, CoreGraphics:
- Что такое
CALayer
? [+] - Чем отличается
UIView от CALayer
? - Какие типы
CALayer
есть? - Чем отличается
UIView based Animation от Core Animation
? - Можно ли
отследить изменение alpha
, через KVO в CALayer? - Тайминги в
CoreAnimation
? - Что такое
backing store
? - Чем отличаются
аффинные преобразования от трехмерных
? - Нужно ли
ретейнить (посылать сообщение retain)
делегат дляCAAnimation
?
Паттерны:
Структуры данных:
Algorithms:
- Напишите код, который
разворачивает строку на С++
. (переставить символы в строке в обратном порядке)? - Поменять местами a и b не используя промежуточную переменную?
- Написать функцию вычисления n-го числа последовательности фебоначи. (если решить через рекурсию, спросят чем опасно такое решение)?
- Решить задачку о массиве: дан массив из 1001 элемента в котором присутсвуют все числа от 1 до 1000 и одно повторяется дважды, узнать какое, если к каждому элементу можно обратиться только 1 раз?
- Как из строки вытащить подстроку?
Logical:
- Есть 4 человека, каждый проходит мост за 1, 2, 5, и 10 минут соответственно. Через мост они могут переходить только парами, держась за руку и только с фонариком. Притом один должен вернуться обратно и передать фонарик. Необходимо переправить всех за 17 мин на другую сторону. Задача решаема.
Code Puzzels:
- Что произойдет здесь (компиляция + время выполнения):
NSString *s = [NSNumber numberWithInt:3];
int i = [s intValue];
- Что не так с этим кодом? Зачем нужны
инициализаторы
?
[[[SomeClass alloc] init] init];
- Сработает ли
таймер
? Почему?
void startTimer(void *threadId)
{
[NSTimer scheduleTimerWithTimeInterval:10.0f
target:aTarget
selector:@selector(tick: )
userInfo:nil
repeats:NO];
}
pthread_create(&thread, NULL, startTimer, (void *)t);
- Какой метод вызовется: класса A или класса B? Как надо изменить код, чтобы вызвался метод класса A?
@interface A : NSObject
- (void)someMethod;
@end
@implementation A
- (void)someMethod
{
NSLog(@"This is class A");
}
@end
@interface B : A
@end
@implementation B
- (void)someMethod
{
NSLog(@"This is class B");
}
@end
@interface C : NSObject
@end
@implementation C
- (void)method
{
A *a = [B new];
[a someMethod];
}
- В каких случаях лучше использовать
strong
, а в какихcopy
для NSString? Почему?
@property (nonatomic, strong) NSString *someString;
@property (nonatomic, copy) NSString *anotherString;
- Что выведется в консоль? Почему?
- (BOOL)objectsCount
{
NSMutableArray *array = [NSMutableArray new];
for (NSInteger i = 0; i < 1024; i++)
{
[array addObject:[NSNumber numberWithInt:i]];
}
return array.count;
}
- (void)someMethod
{
if ([self objectsCount])
{
NSLog(@"has objects");
}
else
{
NSLog(@"no objects");
}
}
- Выведется ли в дебагер «Hello world»? Почему?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Hello world");
});
/* Another implementation */
return YES;
}
- Что выведется в консоль?
dispatch_async(dispatch_get_main_queue(), ^
{
NSLog(@"A %d", [object retainCount]);
dispatch_async(dispatch_get_main_queue(), ^
{
NSLog(@"B %d", [object retainCount]);
});
NSLog(@"C %d", [object retainCount]);
});
NSLog(@"D %d", [object retainCount]);
- Что произойдет при исполнении следующего кода?
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];
Additional:
- Анкета в которой просят оценить свои знания по технологиям по 10 бальной шкале.
General:
- Что такое
куча (heap)
истэк (stack)
? В какой памяти создаются объекты, примитивные типы и блоки? [+] - Что такое
полиморфизм
? [+] - Что такое
инкапсуляция
? Что такоенарушение инкапсуляции
? [+] - Какие полезные быстрые клавиши знаешь, используешь? [-]
- Чем
абстрактный класс
отличается отинтерфейса
? [-] - Расскажите о
паттерне MVC
. Чем отличаетсяпассивная
модель отактивной
?[+] - Реализация
синглтона (Singleton)
вARC
и вnon-ARC
?[-] - Назовите основные отличия
синглтона
отстатического класса
, и когда следует использовать один, а когда другой? [+] - Как пересоздать синглтон? Можно ли
обнулить объект синглтона
? [-] - Что такое сериализация объекта?
- Какие знаете паттерны? Классификация паттернов? [-]
- Паттерн
MVC vs MVP vs MVVM
? https://habrahabr.ru/post/215605/ - Что такое
responder chain
? - Как работают
push нотификации
? [-] - Принципы
DRY
? - Принципы
KISS
? - Принципы
SOLID
? [-] - Что такое
IoC
? - Что такое Dependency Injection?
- Игра в
разбитые окна
? - Что такое
VIPER
? - Что такое
TDD
? - Что такое
DDD
?
Swift
Фундаментальные
типы иколлекции
? [-]- Aттрибут
@UIApplicationMain
? - Что такое
Bridge Header
? Как использовать Objective-C код в Swift проекте? - Оператор
guard
? Интерполяция
vsконкатенация
строк?let
vsvar
?typealias
? Создание своего собственного типа?- nil в Swift vs nil в Objective-C? Различия?
- Оператор
??
?