Skip to content

Instantly share code, notes, and snippets.

@dodikk
Last active January 5, 2018 13:14
Show Gist options
  • Save dodikk/7fa888c32b4a3e6ff1d8 to your computer and use it in GitHub Desktop.
Save dodikk/7fa888c32b4a3e6ff1d8 to your computer and use it in GitHub Desktop.

Computer science theory

  1. Что такое инвариант цикла?

  2. Что такое сложность алгоритма? O(n) нотация. O(???) для операций с NSArray, NSDictionary, запрос в БД (индексированный VS. неиндексированный)

  3. CS data structures (linked list, binary tree, array)

  4. Различия аутентификации, авторизации аутентификация - проверка подлинности, личности авторизация - предоставление прав доступа к ресурсу

  5. Асинхронность vs многопоточность - различия (асинхронность может быть с одним потоком)

  6. Примитивы синхронизации (mutex/semaphore)

Objective-C basics

  1. Основные конструкции OOP в Objective-C
  • class
  • protocol
  • struct
  • enum (NS_ENUM)
  • enum (NS_OPTIONS)
  1. Как происходит вызов метода? Что такое selector? [self doesNotRecognizeSelector]

  2. Отличие nil, Nil, NULL, 0

  3. Вызов метода у nil объекта

  4. Что такое instancetype, id, self, super, _cmd?

  5. Что такое designated initializer ?

  6. Что такое @property ? Если вы преписываете и геттер, и сеттер для какого-то свойства, то писать @synthesize

  7. Атрибуты свойств atomic/nonatomic, strong/weak/assign, readonly/readwrite

  8. Что такое swizzling, зачем он нужен

  9. Реализация конструктора

  10. Отличие ivar от property

  11. Категории. Что это? Примеры удачного и неудачного применения.

  12. NSObject (класс и протокол), его методы

  13. Переопределить isEqual (должен не забыть про hash)

  14. Когда имеет смысл сравнивать с помощью operator==() ? В unit test при проверке установки делегатов

  15. @synchronized, ручная реализация atomic property

Memory management

  1. Какие есть виды memory management? В чем различие? Manual, ARC Garbage Collection - было раньше на OS X

  2. dealloc - без и с использованием ARC

[?] 3) Реализация property вручную, без ARC.

  1. Использование self, ivar, property внутри блока

  2. Что такое retain cycle? Как его избежать?

  3. Стек и куча. Где хранятся объекты, где структуры CGRect?

  4. Что такое POD структуры?

[!bonus!] 8) Exceptions

Исправить ошибки в коде.

// либо оба добавятся, либо оба не добавятся
// 
-(void)addObject:
		  forKey:
{
    // can throw
	[self->_list addObject: x];
	
	// can throw
	[self->_map addObject: x forKey: key];
}
  1. Ключевые слова weak и block

Error Handling

  1. Какие виды? (исключения и коды ошибок)

  2. Почему NSError, а не exceptions? (exception трудно перебрасывать между потоками)

  3. Реализовать метод

-()parseData:(NSData*)json
       error:()error
  1. Наследоваться или не наследоваться от NSError? Почему?

Blocks

  1. Что такое блоки, для чего нужны?

  2. Использование блоков как ivar/property Какие атрибуты нужны?

  3. Альтернативные способы получения callback (delegate, NSNotification centre, KVO)

  4. Захват контекста и время жизни. https://gist.github.com/dodikk/4c47b7fee92d795624e1

Collections

  1. Какие коллекции знаешь?

  2. Mutable/immutable - зачем такое разделение?

  3. Можно ли наследоваться от Objc коллекций? (нет) Почему?

  4. Что может быть ключем NSDictionary? (Наследники NSCopying протокола.)

  5. Что такое boxing? Преобразование примитивных типов в объекты для

  6. Что такое NSFastEnumeration?

for (id x in myCollection)

OOP

  1. Отличие класса от интерфейса

  2. Абстрактные классы

  • Что это, для чего он нужен?
  • Как реализовать в Objective-C
  1. Отличие интерфейса от абстрактного класса

  2. Полиморфизм в Obj-C

@interface A
@end

@interface B : A
@end

@implementation A

-(instancetype)init
{
   NSLog(@"A init")
}

-(void)dealloc
{
	NSLog(@"A dealloc");
}

@end

@implementation B

-(instancetype)init
{
   NSLog(@"B init")
}

-(void)dealloc
{
	NSLog(@"B dealloc");
}

@end


B* b = [B new];
// что выведется на консоль?

-- ответ
B init
B dealloc
A dealloc

  1. Возможно ли множественное наследование в Obj-C? Почему? (идеи испытуемого, понимание проблем множественного наследования)

  2. Design patterns - общие. Какие применяете в своих проектах?

  3. Design patterns - cocoa specific.

  1. Thread safe singleton без dispatch_once()

[!bonus!] 9) Какие pattern использованы в классе NSOperation ?

GUI

  1. Жизненный цикл UIViewController

  2. Жизненный цикл UIView

  3. Отличие загрузки из xib/storyboard от написания руками в терминах lifecycle (сам реализуешь loadView)

  4. Отличие frame от bounds https://dl.dropboxusercontent.com/u/32947027/MAC/Frame-vs-Bounds.png

  5. UITableView/UICollectionView - reuse ячеек. Что такое prototype cells?

  6. UIAppearance - что такое, для чего? Какие альтернативы?

  1. GUI библиотеки и средства верстки кодом - ComponentKit, AsyncDisplayKit, DyCI, ReactNative (Не углубляясь в детали. Проверка кругозора)

  2. Что такое watchdog?

Persistance

  1. Что такое bundle? Организация ресурсов приложения

  2. Caches VS. Documents директории - где что хранить?

  3. синхронизация с iCloud и appstore ban

4. [?] SQLite.

4.1) Режимы sqlite_open (in-memory, файл)

4.2) Особенности диалекта (нет оптимизатора)

4.3) Что такое курсор? RecordSet, sqlite3_step(), sqlite3_column_XXX()

[!Bonus!] 4) custom functions sqlite3_create_function_v2()

4.5) Что такое схема, primary key, unique? CREATE_TABLE

  1. Индекс

  2. График посещения сайта по неделям

CREATE TABLE VisitsLog,
SiteId  integer,
SiteUrl string,
Date    datetime,
Value   integer,
Visits  integer;

Ответ :

SELECT SUM(Visits)
FROM [VisitsLog]
WHERE [Date] BETWEEN X AND Y
GROUP BY strftime('%Y-%W', [Date]);

bonus - нужно учесть локаль

  1. Нормированные значения визитов (в промежуток [0..1])

SELECT *, [Visits] / [MaxVisit] AS  NormVisit
FROM
(
	SELECT *
	FROM [VisitsLog]

	LEFT JOIN

	SELECT MAX([Visits]) AS MaxVisit
	FROM [VisitsLog]

	ON 1 == 1
)

9) Оптимизация запросов
(изменить порядок проверок, EXPLAIN QUERY PLAN)

4. Core Data

  1. Координатор, контекст, store - что это такое, как взаимодействуют?

  2. Виды store

  3. request.fetchBatchSize

  4. Многопоточность и CoreData. (использовать разные контексты, делать fetch по новой)

  5. Что такое faulting http://code.tutsplus.com/tutorials/what-is-a-core-data-fault--cms-25157

  • Debugger. Объект еще не загружен.
  • Неверный deletion rule. Объект есть в памяти, но уже удален из Persistent store didTurnIntoFault
  1. Оптимизация -com.apple.CoreData.SQLDebug

  2. Те же запросы на предикатах

Tools and Compiler

  1. *.pch files https://gist.github.com/dodikk/7351827 https://gist.github.com/dodikk/7870197

  2. Extern VS. "Extern C" OBJC_EXPORT Корректное объявление констнант.

[!bonus!] 3) Разница между i386, x64. Возможные проблемы https://gist.github.com/dodikk/8002842

  1. Что такое project, target, workspace, scheme, build phases?

  2. -fobjc-arc, -fobjc-no-arc

  3. Атрибуты, аннотации clang. Что это? Какие знаешь? NS_REQUIRES_SUPER NS_UNAVAILABLE NS_DESIGNATED_INITIALIZER __attribute__((nonnull))

  4. Способы подключения third-party

  • drag&drop / cocoapods

  • sub-project

  • static lib

  • static framework

  • dynamic framework / (+carthage)

[?] 7) Переключение между xcode beta и xcode stable xcode-select

  1. Что такое *.ipa ?

  2. Внутреннее устройство framework и fat library (директории, Mach-O slices итп.)

  3. Что такое linker?

  4. Ошибки

  • undefined symbol
  • duplicated symbol
  1. Что такое sniffer? wireshark, charles, tcpdump

  2. Private API. Как о нем узнать? class-dump, hopper, ida, mach-o viewer

KVC, KVO

  1. Декларативные запросы. keypathToCollection.@operator.keypathToProperty
  • avg
  • count
  • max
  • min
  • sum
  1. Альтернатива KVC? (элементы FP/Linq : map, each, select)

Unsubscribe - @try/@catch removeObserver:forKeyPath:

  1. Ручная реализация KVO compliant property
- (void)setOpeningBalance:(double)theBalance {
    if (theBalance != _openingBalance) {
        [self willChangeValueForKey:@"openingBalance"];
        _openingBalance = theBalance;
        [self didChangeValueForKey:@"openingBalance"];
    }
}
  1. Недостатки KVO
  • Exception при unsubscribe
  • Строковые keypath не проверяются компилятором

Опции addObserver:forKeyPath:options:context: old/new/initial

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment