37个底层的iOS面试题总结

问题和答案 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销毁,网络请求销毁。
数据请求优先级高于图片请求。网络层做区分。

21: 排序题︰冒泡排序,选择排序,插入排序,快速排序(二路,三路)能写出那些?

https://www.jianshu.com/p/2f267dd9637f

22: iOS开发中的加密方式

https://www.jianshu.com/p/70d81a05446b

23: App安全,数字签名,App签名,重签名

https://www.jianshu.com/p/01666c63bd92

24: OC数据类型

https://www.cnblogs.com/fcug/p/6275054.html

25: property和属性修饰符

https://www.jianshu.com/p/a6e1ffe43859

26: 成员变量ivar和属性property的区别,以及不同关键字的作用

https://www.jianshu.com/p/5b1a515eb67b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

27: 类簇的优缺点

https://www.jianshu.com/p/c0db12606786

28: 谈谈设计模式

https://www.jianshu.com/p/85a9a3a5fb5a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

29: 谈谈架构设计

https://www.jianshu.com/p/072552705610

30: ReactiveCocoa的使用及优缺点

https://www.jianshu.com/p/f4c0ca3a0d19

31: 类的继承,类能否多继承,协议能不能做继承?

https://www.jianshu.com/p/020f8541f77b

32: 分类(category)和类扩展(extension)的区别

https://www.jianshu.com/p/6e3c7d487f58

33: 如何实现weak

https://www.jianshu.com/p/13c4fb1cedea

34: 字典注意事项:setvalue和setobject的区别

https://www.jianshu.com/p/8257e0eeb71e

35: 多线程和锁

https://www.jianshu.com/p/a4c74a7ca1df

36: WebSocket与TCP Socket的区别

https://www.jianshu.com/p/c0aa6d3f021a

37: 事件传递和响应机制

https://www.jianshu.com/p/2e074db792ba

转载:https://www.jianshu.com/p/4fba05f92b7a

你可能感兴趣的:(37个底层的iOS面试题总结)