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

results matching ""

    No results matching ""