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:

  • Какие существуют 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?

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 на с++?
  • Если я вызову performSelector:withObject:afterDelay: – объекту пошлется сообщение retain?
  • Как происходит обработка memory warning? Зависит ли обработка от версии iOS?

Networking:

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

Multithreading:

  • Что такое deadlock?
  • Что такое livelock?
  • Что такое семафор (semafor)?
  • Что такое мьютекс (mutex)?
  • Асинхронность vs многопоточность. Чем отличаются?
  • Какие технологии в iOS возможно использовать для работы с потоками. Преимущества и недостатки.
  • Чем отличается dispatch_async от dispatch_sync?

UIKit:

  • Чем отличается frame от bounds?
  • Какие бывают состояния у приложения?
  • Цикл жизни UIViewController?

CoreData:

  • Что такое Core Data?
  • В каких случаях лучше использовать SQLite, а в каких Core Data?
  • Что такое Managed object context?
  • Что такое Persistent store coordinator?
  • Какие есть нюансы при использовании Core Data в разных потоках? Как синхронизировать данные между потоками?
  • Использовали ли NSFetchedResultsController? Почему?

CoreAnimation, CoreGraphics:

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]);

Algorithms:

  • Напишите код, который разворачивает строку на С++.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment