Вопросы на собеседование iOS разработчика (дополненное издание): ======= General: -------- - Чем `абстрактный` класс отличается от `интерфейса`? - Расскажите о паттерне `MVC`. Чем отличается `пассивная` модель от `активной`? - Реализация `синглтона` (Singleton) в `ARC` и в `non-ARC`? - Какие еще `паттерны` знаете? - Паттерны `порождающие, создания объектов` (Creational): `Singleton, Abstarct Factory`? - Паттерны `структурные` (Structural): `MVC, Decorator(Categories, Delegation), Adapter(Delegation), Facade, Composite`? - Патерны `поведения и взаимодействия объектов` (Behavioral): `Observer(Notification, KVO), Memento(Archiving+UserDefaults), Chain of Recponsibility, Command(Target-Action mechanism)`? Objective-C, Foundation: ------------------------ - Какие существуют `root` классы в iOS? Для чего нужны `root` классы? - Что такое указатель `isa`? Для чего он нужен? - Что происходит с методом после того, как он не нашелся в объекте класса, которому его вызвали? - Чем `категория` отличается от `расширения` (extension, наименованная категория)? `категория vs extension`? - Можно ли добавить `ivar` в категорию? - Когда лучше использовать `категорию`, а когда `наследование`? `категория vs наследование`? - Какая разница м/у использование `делегатов (delegation)` и `нотификейшенов (notification)`? - Чем отличается `NSSet` от `NSArray`? Какие операции происходят быстро в NSSet и какае в NSArray? - `Формальный и неформальный (informal)` протокол? - Есть ли `приватные и защищенные` методы в Objective-C? - Как имитировать `множественное наследование`? - Что такое `KVO`? Когда его нужно использовать? - Что такое `KVC`? Когда его нужно использовать? - Что такое `designated initializer`? - Как удалить объект в ходе итерации по циклу? Memory Management: ------------------ - Как происходит ручное управление памятью в 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 на с++? Networking: ---------- - Преимущества и недостатки `синхронного и асинхронного` соединения? - Что означает `http, tcp`? - Какие различия между `HEAD, GET, POST, PUT`? Multithreading: --------------- - Что такое `deadlock`? - Что такое `livelock`? - Что такое `семафор (semafor)`? - Что такое `мьютекс (mutex)`? - `Асинхронность` vs `многопоточность`. Чем отличаются? - Какие технологии в iOS возможно использовать для работы с потоками. Преимущества и недостатки. - Чем отличается `dispatch_async от dispatch_sync`? UIKit: ------ CoreData: --------- - Что такое `Core Data`? - В каких случаях лучше использовать `SQLite`, а в каких `Core Data`? - Что такое `Managed object context`? - Что такое `Persistent store coordinator`? - Какие есть нюансы при использовании `Core Data в разных потоках`? Как `синхронизировать данные между потоками`? - Использовали ли `NSFetchedResultsController`? Почему? CoreAnimation, CoreGraphics: ---------------------------- Code Puzzels: ------------- - Что не так с этим кодом? Зачем нужны инициализаторы? ```objective-c [[[SomeClass alloc] init] init]; ``` - Сработает ли таймер? Почему? ```objective-c 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? ```objc @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? Почему? ```objc @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»? Почему? ```objective-c - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"Hello world"); }); /* Another implementation */ return YES; } ``` - Что выведется в консоль? ```objective-c 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]); ``` Algorithms: ----------- - Напишите код, который разворачивает строку на С++.