Вопросы к iOS разработчикам (middle/senior)
05 Янв 2019
4 мин. чтения
Источник
https://habr.com/ru/post/198612/
General
- Чем абстрактный класс отличается от интерфейса?
- Расскажите о паттерне MVC. Чем отличается пассивная модель от активной?
- Реализация синглтона в ARC и в non-ARC?
- Какие еще паттерны знаете?
- Напишите код, который разворачивает строку на С++.
Networking & Multithreading
- Что такое deadlock?
- Что такое livelock?
- Что такое семафор?
- Что такое мьютекс?
- Асинхронность vs многопоточность. Чем отличаются?
- Преимущества и недостатки синхронного и асинхронного соединения?
- Что означает http, tcp?
- Какие различия между HEAD, GET, POST, PUT?
- Какие технологии в iOS возможно использовать для работы с потоками. Преимущества и недостатки.
- Чем отличается dispatch_async от dispatch_sync?
- Выведется ли в дебагер «Hello world»? Почему?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"Hello world");
});
/* Another implementation */
return YES;
}
- Что выведется в консоль?
NSObject *object = [NSObject new];
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]);
CoreData
- Что такое Core Data?
- В каких случаях лучше использовать SQLite, а в каких Core Data?
- Что такое Managed object context?
- Что такое Persistent store coordinator?
- Какие есть нюансы при использовании Core Data в разных потоках? Как синхронизировать данные между потоками?
- Использовали ли NSFetchedResultsController? Почему?
Objective-C
- Какие существуют root классы в iOS? Для чего нужны root классы?
- Что такое указатель isa? Для чего он нужен?
- Что происходит с методом после того, как он не нашелся в объекте класса, которому его вызвали?
- Чем категория отличается от расширения (extention, неименованная категория)?
- Можно ли добавить ivar в категорию?
- Когда лучше использовать категорию, а когда наследование?
- Какая разница между использованием делагатов и нотификейшенов?
- Как происходит ручное управление памятью в 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 на с++?
- Чем отличается NSSet от NSArray? Какие операции быстро происходят в NSSet и какие в NSArray?
- Formal vs informal protocol.
- Есть ли приватные или защищенные методы в Objective-C?
- Как имитировать множественное наследование?
- Что такое KVO? Когда его нужно использовать?
- Что такое KVC? Когда его нужно использовать?
- Что такое блоки? Зачем они нужны?
- Когда нужно копировать блок? Кто за это ответственен: caller или reciever?
- Что такое designated initializer?
- Что не так с этим кодом? Зачем нужны инициализаторы?
[[[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];
}
@end
- В каких случаях лучше использовать 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");
}
}>)}
UIKit
- Что такое Run Loop?
- Чем отличается frame от bounds?
- Что такое responder chain?
- Если я вызову performSelector:withObject:afterDelay: – объекту пошлется сообщение retain?
- Какие бывают состояния у приложения?
- Как работают push нотификации?
- Цикл жизни UIViewController?
- Как происходит обработка memory warning? Зависит ли обработка от версии iOS?
- Как лучше всего загрузить UIImage c диска(с кеша)?
- Какой контент лучше хранить в Documents, а какой в Cache?