2018iOS面试题总结

1,GET和POST请求哪个更安全?

get请求一般把参数放在url上这样参数的请求地址容易被bookmark,其次url长度有限制(一般2kb)。

post请求则把参数放在request body区,长度没限制,在浏览器退回时会再次提交请求。

这样表面上看来post是比get请求更安全的一个请求方式。

但其实,get和post的本质都是TCP连接,并没有区别差别。如果把get请求的参数也放在其request body区,那get和post则是同样的实现。之所以在我们的认知力觉得post比get更安全呢?我们知道HTTP是基于TCP/IP的关于数据如何在万维网中进行通信的协议,由于受到http协议/浏览器/服务器端的限制,从而导致在实际应用中出现一些不同。

2,KVC/KVO/通知

首相KVC与KVO是完全不同的两个概念,只是简写比较像,并没有实质的关联

KVC的实质是:可以不通过set getter方法,通过setValue forKey 和valueForKey的方法去访问属性。

KVO的实质是:一个对象能够通过keyPath观察另外一个对象的属性值,并发现值得变化。

通知:是通过观察中心观察所有对象。

3,RunLoop为何会有事做事没事休息?

RunLoop的模式是所有要监视的输入源和定时源以及要通知的runloop注册观察者的集合。

在RunLoop运行的过程中只有和模式相关的源才会被监视并允许他们传递事件。

和其他模式相关的源只有在runloop运行其模式下才会运行,否则处于暂停状态。

4,数据存储方式

对象序列化:实现NSCoding协议的对象将其转化为二进制流进行存储。

属性列表:通过writeToFile的方法将数据存储在plist文件里

sqlit:用来存储大量的有规律的数据,并且数据用来多次的增删改查(FMDataBase)

coredata:实质是sqlit

钥匙串:通过keyChainItemWrapper将数据存储在钥匙串上。特点是就算app被删除所存在钥匙串上的数据仍然存在

5.用NSUSerDefault存储的字段相同的对象在不同的应用程序中会不会有冲突?

不会。因为苹果的存储机制是沙河存储,安全性极高。本质是给每一个应用程序分配了自己的文件夹,每个App只能访问分配给自己的文件夹,而不能访问其他应用程序的文件夹。

6,TCP/UDP/HTTP/socket/HTTPS

TCP/UDP/socket属于网络传输层的协议,HTTP属于应用层的协议

TCP/UDP:TCP提供可靠的数据连接,UDP提供不可靠的数据连接。TCP面向连接的一对一的通信方式,UDP广播式的一对多的通信方式。TCP的3次握手。

socket:是通信的基石,支持TCP/IP协议。根据http协议规范完全可以用socket来达到发送http请求

socket/http:socket是长连接,http是短链接;socket是双向通信,http是单向通信;socket的内容完全由自己组织,http必须根据http协议的格式来发送。

Https:是一个安全的通信协议,基于http开发,用安全套字节(SSL)来进行信息的交换。

多个TCP连接/多个应用程序进程,可能用同一个TCP协议端口传输,为了区别不同应用程序进程和连接,在端口加套子节。

7,block的本质

带有自动变量的匿名函数。block的格式:^ 返回值类型 参数列表 {表达式}。

即:源代码可以使用匿名函数;自动变量在block中表现为“截获自动变量的能力”

8,多线程有多少种方式,常用哪种为什么?

NSThread,NSOption,GCD,Pthreads

常用GCD:1>苹果官方中讲应用程序中编写的线程管理的代码要在系统级实现。而系统级即ios osx的核心XNU内核级上实现。GCD正式XNU内核级实现的,所以在性能上没有比GCD更好的。

2>用GCD比NSThread和Pthreads这些一般的多线程API更好,因为不必编写为操作线程反复出现的类似源代码,而可在线程中集中处理。

9,什么是内存泄漏

当废弃的对象在超出其生命周期后继续存在时即发生内存泄漏。

10,Runtime

runtime简介:我们都知道oc是一门动态的语言,它会将一些工作放在代码运行时才处理而非编译时。也就是说有很多类和成员变量在我们编译时是不知道的,而在运行时我们所编写的代码会转换成完整的确定的代码运行。因此只要编译器是不够的我们还需要一个运行时系统(Runtime system)来处理编译后的代码

runtime的作用:

1>有些oc不好实现的功能,就可以使用Runtime,例如:

动态交换两个方法的实现(常用于交换系统方法);动态添加对象的成员变量和成员方法;获得某个类的所有成员变量以及方法。

2>项目中遇到很多具体问题就可以用runtime来实现

黑魔法;实现分类中可增加属性;实现NSCoding的自动归档和自动解挡;实现字典和模型的自动转换。

11,为何tableview可以滑倒屏幕外边区?

12,oc的消息传递机制是什么样的?

13,oc的响应机制是怎么样的?

14,Runloop是什么?

15,SDWebImage的底层?(LB之类的那些东西)

16,入口类的main函数是干嘛用的,它是怎么结合runloop去实现的?

17..a文件与framework的区别


未完待续,如有不同见解可留言给我~

你可能感兴趣的:(2018iOS面试题总结)