Q from: http://mrpeak.cn/blog/ios_interview2/
1.NSString如何计算字符的个数?
NSString -> String -> String().characters.count
2.PKI体系当中加密和签名有什么区别?
3.如何自己高效实现NSUserDefault?
Realm?, keychain?
4.解释下tcp的慢启动特性。
5.如何用HTTP实现长连接?
6.HTTP2.0针对同一个域名的多个请求,会建立多少个tcp连接?
7.数据库建表的时候索引有什么用?
8.Full Text Search为什么快?
9.iOS下如何实现指定线程数目的线程池?
10.介绍下iOS设备获取唯一设备号的历史变迁。
11.函数式编程当中的 first-class function是什么意思呢?
一等公民: 主要实现?
二等公民: 功能补充?
12.如何使用runtime hook一个class的某个方法,又如何hook某个instance的方法?
13.谈下Objective C都有哪些锁机制,你一般用哪个?
atomic(just setter)
@synchronized
func synchronized(_ lock: AnyObject, closure: () -> ()) {
objc_sync_enter(lock)
closure()
objc_sync_exit(lock)
}
// 再结合 Swift 的尾随闭包的语⾔特性,这样,使⽤起来的时候就和 Objective-C 中很像了:
func myMethodLocked(anObj: AnyObject!) {
synchronized(anObj) {
// 在括号内 anObj 不会被其他线程改变
}
}
NSLock
DispatchQueue Barrier
dispatch__semaphore__t
OSSpinLock
14.聊下HTTP post的body体使用form-urlencoded和multipart/form-data的区别。
15.让你设计一种机制检测UIViewController的内存泄漏,你会怎么做?
use life cycle
use background thread tracking object life cycle?
16.通过[UIImage imageNamed:]生成的对象什么时候被释放?
without strong ref
waiting for the end of main runloop,
autoreleasepool will receive "drain",
within autoreleasepoolpage, after guard pointer, every object will receive "release" ?
ref count -1 then release object count == 0
17.applicationWillEnterForeground和applicationDidBecomeActive都会在哪些场景下被调用?举例越多越好。
first launch
back from background
back from scheme jump
back from Notification center?
18.如何终止正在运行的工作线程?
pthread_kill
19.穷举iOS下所有的本地持久化方案。
FileManager
UserDefault
CoreData/SQLite/Realm
Keychain/cipher database