...

среда, 23 октября 2013 г.

Вопросы на собеседование middle/senior iOS Developer

Все мы ходили/ходим на собеседования. Каждый раз при подготовки к очередному собеседованию просматриваем основные темы, вспоминаем вопросы, которые нам задавали в предыдущие разы, или вопросы, которые сами задавали. Ниже хочу представить основные вопросы, которые часто (основано на личном опыте) можно получить на собеседовании на должность middle/senior iOS Developer. Так сказать, шпаргалка. Заодно можно проверить свой уровень знания платформы.



General:

— Чем абстрактный класс отличается от интерфейса?

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

— Реализация синглтона в ARC и в non-ARC?

— Какие еще паттерны знаете?

— Напишите код, который разворачивает строку на С++.

Networking:

— Что такое 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/retaine. :)))

— Что такое 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, а какой в Cash?

А какие Вам задавали вопросы на собеседованиях?

P.S. Спасибо Василию Мирончуку за содействие при подготовке данного материала.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий