该面试题答案只是笔者自己整理或者根据面试过程中面试官的指点来整理的,有不对的地方欢迎指出,大家一起学习,将基本功打扎实
1.nil和null的区别
答:简单理解为,nil是对象,null是数值,对象可以接收消息,而数值不能接收消息,所以在消息传递机制中,如果向一个nil对象发送消息,系统不会奔溃,但是如果向null发送消息,会抛出异常,出现奔溃。经过检验发现sizeOf(nil)的值是8,说明nil是占有内存空间的。
2.简要描述可变数组如何实现动态改变数组内容(添加)的
答:可变数组初始化的时候系统会自动分配内存空间,当数组元素的内存空间大于这个分配的内存空间后,会自动开辟出来新的内存空间,将原先内存中的数组元素拷贝到新的内存中,然后原先的内存销毁
3.简要描述Post,get请求方法的区别
答:主要有三点:
1.get请求是从服务器拿取数据,post是向服务器上传数据
2.get的参数直接拼接在地址后面,暴露在地址栏,从安全性方面不安全;post请求的参数是放到请求体中。所以,get请求不适合用于验证密码等操作
3.get请求的URL有长度限制,而post一般认为没有长度限制(其实限制为2G,所以一般认为没有)
简述TCP、UDP的区别以及TCP三次握手的建立过程
答:TCP,UDP区别:
1.TCP是基于连接的,UDP不基于连接。
2.对系统资源的要求(TCP较多,UDP较少)
3.UDP程序结构较简单
4.TCP是流模式,UDP是数据报模式
5.TCP保证数据的正确性和顺序性,UDP不保证也可能丢包
TCP三次握手:syn:建立联机 ack:确认
1.建立连接时,客户端A发送SYN(SYN=j)给服务器B,进入SYN_SEND状态,等待服务器B确认
2.服务器B收到SYN包,必须确认客户的SYN(ACK=j+1),同时自己也发送一个SYN(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态
3.客户端A收到SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),客户端A和服务器B进入ESTEBLISH状态,完成三次握手
关闭连接:FIN:结束 RES:重置
1.客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送
2.服务器B收到这个FIN,它发送一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN占用一个序号
3.服务器B关闭与客户A的连接,并发送一个FIN给客户A
4.客户端A发回ACK确认,并将确认序号设置为收到序号加1