问题和答案 http://events.jianshu.io/p/d866de2a8173
1: 谈谈你对KVC的理解
https://www.jianshu.com/p/0634920cfd70
2: iOS项目中引用多个第三方库引发冲突的解决方法
https://www.jishudog.com/101/html
3: GCD实现多读单写
https://www.jianshu.com/p/d60452528b9c
4: 讲一下atomic的实现机制;为什么不能保证绝对的线程安全?
https://www.jianshu.com/p/c6692e2f64fe
5: Autoreleasepool所使用的数据结构是什么?
https://www.jianshu.com/p/0afda1f23782
6: AutoreleasePoolPage结构体了解么?
https://www.jianshu.com/p/0e8af0a0b4ce
7: iOS中内省的几个方法?
https://www.jianshu.com/p/59fce839ec3e#comments
8: class方法和objc_getClass方法有什么区别?
https://www.jianshu.com/p/fea799096cf7
9: 分类和扩展有什么区别?可以分别用来做什么?
https://www.jianshu.com/p/21b5991b5267
10: 分类有哪些局限性?分类的结构体里面有哪些成员?
https://blog.csdn.net/weixin_30369041/article/details/98895642
11: 能不能简述一下Dealloc的实现机制
https://www.jianshu.com/p/5aee2e571f6b
12: HTTPS和HTTP的区别
https://www.jianshu.com/p/8d864eacf184
13: TCP为什么要三次握手,四次挥手?
https://www.jianshu.com/p/8da9c7e2c70f
https://blog.csdn.net/olsQ93038o99S/article/details/84001324
14: 对称加密和非对称加密的区别?分别有哪些算法的实现?
https://blog.csdn.net/liudongdong19/article/details/82217431
15: HTTPS的握手流程?为什么密钥的传递需要使用非对称加密?双向认证了解么?
https://juejin.cn/post/6844904030750130183#1.5
客户端发送Client Hello 报文开始SSL通信。报文中包含客户端支持的SSL的版本,加密组件列表。
服务器收到之后,会以Server Hello 报文作为应答。和客户端一样,报文中包含客户端支持的SSL的版本,加密组件列表。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的
服务器发送Certificate报文。报文中包含公开密钥证书。
然后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
SSL第一次握手结束之后,客户端以Client Key Exchange报文作为会议。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串
接着客户端发送Change Cipher Space报文。该报文会提示服务器,在次报文之后的通信会采用Pre-master secret密钥加密
客户端发送Finished 报文。该报文包含链接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确揭秘该报文作为判定标准
服务器同样发送Change Cipher Space报文。
服务器同样发送Finished报文。
服务器和客户端的Finished报文交换完毕之后,SSL连接建立完成,从此开始HTTP通信,通信的内容都使用Pre-master secret加密。然后开始发送HTTP请求
应用层收到HTTP请求之后,发送HTTP响应
最后有客户端断开连接
为什么密钥的传递需要使用非对称加密?
答:使用非对称加密是为了后面客户端生成的Pre-master secret密钥的安全,通过上面的步骤能得知,服务器向客户端发送公钥证书这一步是有可能被别人拦截的,如果使用对称加密的话,在客户端向服务端发送Pre-master secret密钥的时候,被黑客拦截的话,就能够使用公钥进行解码,就无法保证Pre-master secret密钥的安全了
双向认证了解么?(这里我真想说一句不了解)
答:上面的HTTPS的通信流程只验证了服务端的身份,而服务端没有验证客户端的身份,双向认证是服务端也要确保客户端的身份,大概流程是客户端在校验完服务器的证书之后,会向服务器发送自己的公钥,然后服务端用公钥加密产生一个新的密钥,传给客户端,客户端再用私钥解密,以后就用此密钥进行对称加密的通信
链接:https://juejin.cn/post/6844904030750130183
16: 如何用Charles抓HTTPS的包?其中原理和流程是什么?
https://blog.csdn.net/olsQ93038o99S/article/details/83964608
17: 什么是中间人攻击?如何避免?
https://www.jianshu.com/p/70f17cc7b1df
https://www.jianshu.com/p/4682aecf162d
18: 了解编译的过程么?分为哪几个步骤?
1:预编译:主要处理以“#”开始的预编译指令。
2:编译:
词法分析:将字符序列分割成一系列的记号。
语法分析:根据产生的记号进行语法分析生成语法树。
语义分析:分析语法树的语义,进行类型的匹配、转换、标识等。
中间代码生成:源码级优化器将语法树转换成中间代码,然后进行源码级优化,比如把 1+2 优化为 3。中间代码使得编译器被分为前端和后端,不同的平台可以利用不同的编译器后端将中间代码转换为机器代码,实现跨平台。
目标代码生成:此后的过程属于编译器后端,代码生成器将中间代码转换成目标代码(汇编代码),其后目标代码优化器对目标代码进行优化,比如调整寻址方式、使用位移代替乘法、删除多余指令、调整指令顺序等。
3:汇编:汇编器将汇编代码转变成机器指令。
静态链接:链接器将各个已经编译成机器指令的目标文件链接起来,经过重定位过后输出一个可执行文件。
装载:装载可执行文件、装载其依赖的共享对象。
动态链接:动态链接器将可执行文件和共享对象中需要重定位的位置进行修正。
最后,进程的控制权转交给程序入口,程序终于运行起来了。
链接:https://www.jianshu.com/p/469613b7702c
19: 静态链接了解么?静态库和动态库的区别?
https://www.jianshu.com/p/b2b94586e3c3
20: App网络层有哪些优化策略?
1、优化DNS解析和缓存
2、网络质量检测(根据网络质量来改变策略)
3、提供网络服务优先级和依赖机制
4、提供网络服务重发机制
5、减少数据传输量
6、优化海外网络性能
实践
每个网络绑定到vc,vc销毁,网络请求销毁。
数据请求优先级高于图片请求。网络层做区分。