-
Что такое инвариант цикла?
-
Что такое сложность алгоритма? O(n) нотация. O(???) для операций с NSArray, NSDictionary, запрос в БД (индексированный VS. неиндексированный)
-
CS data structures (linked list, binary tree, array)
-
Различия аутентификации, авторизации аутентификация - проверка подлинности, личности авторизация - предоставление прав доступа к ресурсу
-
Асинхронность vs многопоточность - различия (асинхронность может быть с одним потоком)
-
Примитивы синхронизации (mutex/semaphore)
- Основные конструкции OOP в Objective-C
- class
- protocol
- struct
- enum (NS_ENUM)
- enum (NS_OPTIONS)
-
Как происходит вызов метода? Что такое selector? [self doesNotRecognizeSelector]
-
Отличие nil, Nil, NULL, 0
-
Вызов метода у nil объекта
-
Что такое instancetype, id, self, super, _cmd?
-
Что такое designated initializer ?
-
Что такое @property ? Если вы преписываете и геттер, и сеттер для какого-то свойства, то писать @synthesize
-
Атрибуты свойств atomic/nonatomic, strong/weak/assign, readonly/readwrite
-
Что такое swizzling, зачем он нужен
-
Реализация конструктора
-
Отличие ivar от property
-
Категории. Что это? Примеры удачного и неудачного применения.
-
NSObject (класс и протокол), его методы
-
Переопределить isEqual (должен не забыть про
hash
) -
Когда имеет смысл сравнивать с помощью
operator==()
? В unit test при проверке установки делегатов -
@synchronized, ручная реализация atomic property
-
Какие есть виды memory management? В чем различие? Manual, ARC Garbage Collection - было раньше на OS X
-
dealloc - без и с использованием ARC
[?] 3) Реализация property вручную, без ARC.
-
Использование self, ivar, property внутри блока
-
Что такое retain cycle? Как его избежать?
-
Стек и куча. Где хранятся объекты, где структуры CGRect?
-
Что такое POD структуры?
[!bonus!] 8) Exceptions
Исправить ошибки в коде.
// либо оба добавятся, либо оба не добавятся
//
-(void)addObject:
forKey:
{
// can throw
[self->_list addObject: x];
// can throw
[self->_map addObject: x forKey: key];
}
- Ключевые слова
weak
иblock
-
Какие виды? (исключения и коды ошибок)
-
Почему NSError, а не exceptions? (exception трудно перебрасывать между потоками)
-
Реализовать метод
-()parseData:(NSData*)json
error:()error
- Наследоваться или не наследоваться от NSError? Почему?
-
Что такое блоки, для чего нужны?
-
Использование блоков как ivar/property Какие атрибуты нужны?
-
Альтернативные способы получения callback (delegate, NSNotification centre, KVO)
-
Захват контекста и время жизни. https://gist.github.com/dodikk/4c47b7fee92d795624e1
-
Какие коллекции знаешь?
-
Mutable/immutable - зачем такое разделение?
-
Можно ли наследоваться от Objc коллекций? (нет) Почему?
-
Что может быть ключем NSDictionary? (Наследники NSCopying протокола.)
-
Что такое boxing? Преобразование примитивных типов в объекты для
-
Что такое NSFastEnumeration?
for (id x in myCollection)
-
Отличие класса от интерфейса
-
Абстрактные классы
- Что это, для чего он нужен?
- Как реализовать в Objective-C
-
Отличие интерфейса от абстрактного класса
-
Полиморфизм в 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
-
Возможно ли множественное наследование в Obj-C? Почему? (идеи испытуемого, понимание проблем множественного наследования)
-
Design patterns - общие. Какие применяете в своих проектах?
-
Design patterns - cocoa specific.
- Class cluster (https://gist.github.com/dodikk/10978977)
- Responder chain (http://nsomar.com/understanding-cocoa-and-cocoa-touch-responder-chain/)
- Delegate
- MVC
- Thread safe singleton без dispatch_once()
[!bonus!] 9) Какие pattern использованы в классе NSOperation ?
-
Жизненный цикл UIViewController
-
Жизненный цикл UIView
-
Отличие загрузки из xib/storyboard от написания руками в терминах lifecycle (сам реализуешь loadView)
-
Отличие frame от bounds https://dl.dropboxusercontent.com/u/32947027/MAC/Frame-vs-Bounds.png
-
UITableView/UICollectionView - reuse ячеек. Что такое prototype cells?
-
UIAppearance - что такое, для чего? Какие альтернативы?
- выносить класс темы и красить вручную
- https://github.com/Pixate/pixate-freestyle-ios
- https://github.com/tombenner/nui
-
GUI библиотеки и средства верстки кодом - ComponentKit, AsyncDisplayKit, DyCI, ReactNative (Не углубляясь в детали. Проверка кругозора)
-
Что такое watchdog?
-
Что такое bundle? Организация ресурсов приложения
-
Caches VS. Documents директории - где что хранить?
-
синхронизация с iCloud и appstore ban
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
-
Индекс
-
График посещения сайта по неделям
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 - нужно учесть локаль
- Нормированные значения визитов (в промежуток [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)
-
Координатор, контекст, store - что это такое, как взаимодействуют?
-
Виды store
-
request.fetchBatchSize
-
Многопоточность и CoreData. (использовать разные контексты, делать fetch по новой)
-
Что такое faulting http://code.tutsplus.com/tutorials/what-is-a-core-data-fault--cms-25157
- Debugger. Объект еще не загружен.
- Неверный deletion rule. Объект есть в памяти, но уже удален из Persistent store
didTurnIntoFault
-
Оптимизация -com.apple.CoreData.SQLDebug
-
Те же запросы на предикатах
-
*.pch files https://gist.github.com/dodikk/7351827 https://gist.github.com/dodikk/7870197
-
Extern VS. "Extern C" OBJC_EXPORT Корректное объявление констнант.
[!bonus!] 3) Разница между i386, x64. Возможные проблемы https://gist.github.com/dodikk/8002842
-
Что такое project, target, workspace, scheme, build phases?
-
-fobjc-arc, -fobjc-no-arc
-
Атрибуты, аннотации clang. Что это? Какие знаешь? NS_REQUIRES_SUPER NS_UNAVAILABLE NS_DESIGNATED_INITIALIZER
__attribute__((nonnull))
-
Способы подключения third-party
-
drag&drop / cocoapods
-
sub-project
-
static lib
-
static framework
-
dynamic framework / (+carthage)
[?] 7) Переключение между xcode beta и xcode stable xcode-select
-
Что такое *.ipa ?
-
Внутреннее устройство framework и fat library (директории, Mach-O slices итп.)
-
Что такое linker?
-
Ошибки
- undefined symbol
- duplicated symbol
-
Что такое sniffer? wireshark, charles, tcpdump
-
Private API. Как о нем узнать? class-dump, hopper, ida, mach-o viewer
- Декларативные запросы.
[email protected]
- avg
- count
- max
- min
- sum
- Альтернатива KVC? (элементы FP/Linq : map, each, select)
Unsubscribe - @try/@catch
removeObserver:forKeyPath:
- Ручная реализация KVO compliant property
- (void)setOpeningBalance:(double)theBalance {
if (theBalance != _openingBalance) {
[self willChangeValueForKey:@"openingBalance"];
_openingBalance = theBalance;
[self didChangeValueForKey:@"openingBalance"];
}
}
- Недостатки KVO
- Exception при unsubscribe
- Строковые keypath не проверяются компилятором
Опции
addObserver:forKeyPath:options:context:
old/new/initial