Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save svd-zp/a60f443cae216b1011352d2e6371a6e7 to your computer and use it in GitHub Desktop.

Select an option

Save svd-zp/a60f443cae216b1011352d2e6371a6e7 to your computer and use it in GitHub Desktop.
Вопросы на собеседование iOS разработчика.

Вопросы на собеседование 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)?
  • Что такое responder chain?
  • Как работают push нотификации?

Objective-C, Foundation:

  • Опишите основные понятия ОО программирования в терминах Objective-C (интерфейс, реализация, свойства, протоколы, и т.д)
  • Что такое назначеный инициализатор (designated initializer), напишите любой элементарный инициализатор, почему он так выглядит? (имеется ввиду if (self = [super ...]))
  • Какие существуют root классы в iOS? Для чего нужны root классы?
  • Что такое указатель isa? Для чего он нужен?
  • Что происходит с методом после того, как он не нашелся в объекте класса, которому его вызвали?
  • Чем категория отличается от расширения (extension, наименованная категория)? категория vs extension?
  • Можно ли добавить ivar в категорию?
  • Когда лучше использовать категорию, а когда наследование? категория vs наследование?
  • Какая разница м/у использование делегатов (delegation) и нотификейшенов (notification)?
  • Чем отличается NSSet от NSArray? Какие операции происходят быстро в NSSet и какае в NSArray?
  • Формальный и неформальный (informal) протокол?
  • Есть ли приватные и защищенные методы в Objective-C?
  • Как имитировать множественное наследование?
  • Что такое KVO? Когда его нужно использовать?
  • Что такое KVC? Когда его нужно использовать?
  • Что такое designated initializer?
  • Как удалить объект в ходе итерации по циклу?
  • Что такое Run Loop?
  • Как лучше всего загрузить UIImage c диска(с кеша)?
  • Какой контент лучше хранить в Documents, а какой в Cache?
  • Как связаны NSRunLoop и NSAutoreleasePool на пальцах?
  • Почему нам не следует вызывать instance методы в методе initialize,?
  • NSCoding, archiving
  • Протокол NSCopying, почему мы не можем просто использовать любой собственный объект в качестве ключа в словарях (NSDictionary) , что нужно сделать чтобы решить эту проблему? (разница между глубоким и поверхностным копированием)

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/release/autorelease --Что случится если вы добавите только что созданный объект в Mutable Array, и пошлете ему сообщение release? --Что случится если послать сообщение release массиву? --Что случится если вы удалите объект из массива и попытаетесь его использовать?
  • С подвохом: сборщик мусора для iPhone.

Networking:

  • Преимущества и недостатки синхронного и асинхронного соединения?
  • Что означает http, tcp?
  • Какие различия между HEAD, GET, POST, PUT?

Multithreading:

  • Что такое deadlock?
  • Что такое livelock?
  • Что такое семафор (semafor)?
  • Что такое мьютекс (mutex)?
  • Асинхронность vs многопоточность. Чем отличаются?
  • Какие технологии в iOS возможно использовать для работы с потоками. Преимущества и недостатки.
  • Чем отличается 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:

  • Чем отличается frame от bounds?
  • Какие бывают состояния у приложения?
  • Цикл жизни UIViewController?
  • что такое View (представление) и что такое window?
  • разница между свойствами bounds и frame объекта UIView какого разрешение экранов iphon'ов, и в чем разница между points (точками) и пикселями (pixels)?
  • что такое responder chain (цепочка обязанностей, паттерн chain of responsibility, на примере UI компонентов iOS ), becomeFirstResponder.
  • что означают IBOutlet и IBAction, для чего они нужны, и что значат для препроцессора?
  • как работает UITableView?
  • Как многопоточность работает с UIKit?
  • Что можно сделать если клавиатура при появлении скрывает важную часть интерфейса?
  • Почему мы должны релизить IBOutlet'ты во viewDidUnload?
  • Что такое awakeFromNeeb, в чем разница между xib и nib файлами?

CoreData:

  • Что такое Core Data?
  • В каких случаях лучше использовать SQLite, а в каких Core Data?
  • Что такое контекст- Managed object context?
  • Что такое Persistent store coordinator?
  • Какие есть нюансы при использовании Core Data в разных потоках? Как синхронизировать данные между потоками?
  • Использовали ли NSFetchedResultsController? Почему?
  • что такое Fault и зачем он нужен
  • как происходят изменения в NSManagedObjectContext
  • синхронизация разных типов NSManagedObjectContext (получение и изменение данных в child контекстах).
  • зачем нужен NSPersistentStoreCoordinator
  • зачем нужно делать двустороннии связи в таблицах
  • что таке Fetched Property и особенности работы с ним по сравнению с обычной связью
  • Как использовать coreData совместно с многопоточностью?
  • Что такое NSManagedObjectId? Можем ли мы сохранить его на потом еслиприложение закроется
  • Какие типы хранилищ поддерживает CoreData?
  • Что такое ленивая загрузка (lazy loading)? Что ее связывает с CoreData? Опишите ситуация когда она может быть полезной?
  • Что такое fetch result controlle?
  • Как синхронизировать контекст?

CoreAnimation, CoreGraphics:

  • чем отличается UIView от CALayer
  • какие типы CALayer есть?
  • чем отличается UIView based Animation от Core Animation
  • тайминги в CoreAnimation
  • что такое backing store
  • чем отличаются аффинные преобразования от трехмерных

Algorithms:

  • Напишите код, который разворачивает строку на С++. (переставить символы в строке в обратном порядке.)

Code Puzzels:

  • Что не так с этим кодом? Зачем нужны инициализаторы?
[[[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]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment