摘自网络
1.如何暂停一个UIView中正在播放的动画?暂停后如何恢复?
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
_number++;
if (_number % 2 == 1) {
[self pauseLayer:self.view.layer];
}
if (_number % 2 == 0) {
[self resumeLayer:self.view.layer];
}
}
//暂停动画
- (void)pauseLayer:(CALayer*)layer{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}
//继续layer上面的动画
-(void)resumeLayer:(CALayer*)layer{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}
2.setNeedsDisplay和layoutIfNeeded两者是什么关系?
setNeedsDisplay 是给当前的视图做了标记
layoutIfNeeded 发现是否有标记,如果有标记及立即刷新
只有这两者合起来使用,才会立刻重新刷新的效果
3.nil. NIL,NSNULL有什么区别
nil NIL等价 代表内存中的一块空地址
NSNULL 代表一个指向nil的对象
4.如何定义一台iOS设备的唯一性
1.IMEI 国际移动设备身份码 iOS 5以后苹果不再允许获取
2.UDID iOS的设备的唯一识别码 在iOS 6以后被苹果禁止
3.IDFA 广告标识符 每台设备的唯一ID 用户可以禁止 重置 还原 iOS 6 提出
4.MAC地址 网络唯一标识符 iOS7以后
5.UUID(通用唯一标识符) NSUUID每次获取的值都会发生变化 但是他会保持唯一性
6.IDFV 供应商标识符 厂商标识符 只要用户的设备中没有卸载当前Vendor的所有APP 则不会发生变化
Vendor 是bundleID的前两部分
想要追踪广告的话,可以使用IDFA
想要用来分析用户行为可以使用IDFV + KeyChain来解决
5.id和instanceType有什么区别
相同点
instanceType和id都是万能指针 指向对象
不同点
id在编译的时候不能判断对象的真实类型 instanceType在编译的时候可以判断对象的真实类型
id可以用作定义变量 作为返回值类型 作为形参类型 instanceType只能作为返回值类型
区别
@在ARC环境下
instanceType在编译期确定实例的类型 而使用id 编译器不检查类型 运行时检查类型
@在MRC环境下
instanceType和id一样 不做具体类型检查
instancetype只适用于初始化方法和便利构造器的返回值类型
6.了解逆变和协变吗?
__covariant 协变 用于泛型的数据类型强转 可以向上强转 子类可以转成父类
__contravariant:逆变 用于 泛型 的数据类型强转,可以向下强转,父类 可以转成 子类
7.Obj-C中的反射机制了解吗
// SEL和字符串转换
FOUNDATION_EXPORT NSString * NSStringFromSelector( SEL aSelector);
FOUNDATION_EXPORT SEL NSSelectorFromString(NSString * aSelectorName);
// Class和字符串转换
FOUNDATION_EXPORT NSString * NSStringFromClass(Class aClass);
FOUNDATION_EXPORT类__nullable NSClassFromString(NSString * aClassName);
//协议和字符串转换
FOUNDATION_EXPORT NSString * NSStringFromProtocol(Protocol * proto)NS_AVAILABLE(10_5,2_0);
FOUNDATION_EXPORT协议* __nullable NSProtocolFromString(NSString * namestr)NS_AVAILABLE(10_5,2_0);
8.typeof和__typeof,typeof的区别?
三个意思是相同的,但没有一个是标准C,不同的编译器会按需选择符合标准的写法
9.Http和Https的区别?为什么更加安全?
1.HTTPS需要向机构申请CA证书,极少免费。
2.HTTP属于明文传输,HTTPS基于SSL进行加密传输。
3.HTTP端口号为80,HTTPS端口号为443。
4.HTTPS是加密传输,有身份验证的转换,更加安全。
SSL(安全套接层) TLS(传输层安全)
以上两者在传输层之上,对网络连接进行加密处理,保障数据的初始,更加的安全
10.Http的请求方式有什么?Http有什么特性?
Http的请求方式有一下8种:
1.获取
2.开机自检
3.头
4.放
5.删除
6.选项
7,跟踪
8.连接
1.无连接:可以理解为持久链接。
2.无状态:利用session&&cookie区分用户
11.解释一下 三次握手 和 四次挥手?
三次握手
1.由客户端向服务端发送 `SYN` 同步报文。
2.当服务端收到 `SYN` 同步报文之后,会返回给客户端 `SYN` 同步报文和 `ACK` 确认报文。
3.客户端会向服务端发送 `ACK` 确认报文,此时客户端和服务端的连接正式建立。
建立连接
1.这个时候客户端就可以通过 `Http` 请求报文,向服务端发送请求
2.服务端接收到客户端的请求之后,向客户端回复 `Http` 响应报文。
四次挥手
当客户端和服务端的连接想要断开的时候,要经历四次挥手的过程,步骤如下
1.先由客户端向服务端发送 `FIN` 结束报文。
2.服务端会返回给客户端 `ACK` 确认报文 。此时,由客户端发起的断开连接已经完成。
3.服务端会发送给客户端 `FIN` 结束报文 和 `ACK` 确认报文。
4.客户端会返回 `ACK` 确认报文到服务端,至此,由服务端方向的断开连接已经完成
解释一下为什么是"三次握手"
客户端在与服务端建立连接的过程中,客户端向服务端发送连接请求,如果因为网络的原因,导致它超时触发了重传机制,那么客户端会重新向服务端发送一次连接请求,那有可能第二次发送的连接请求,服务端收到之后,直接返回给客户端确认连接的报文。
如果只需要两次就可以建立连接,假如说第一次建立连接的请求终于被服务端接收到了,那服务端收到之后,会以为客户端想新建另外一个链接,这样的话就会建立两个连接。
而采取三次握手,在客户端收到服务端的确认报文之后,客户端再向服务端发送一个确认报文,这时才正式建立连接。那么第一次因为超时而迟迟没有收到的建立连接的请求,这时在收到之后,服务端依然会向客户端返回一个确认报文,但是服务端现在已经与客户端建立的连接,所以客户端就不会再向服务端发送确认报文,服务端迟迟没有收到确认报文,那么也就不会真正的建立再一次连接。
又为什么是"四次挥手"?
建立的时候是双方面的建立,而释放的时候,也必然是客户端和服务端双方面的断开连接。
客户端与服务端建立的连接是双通的,这也就意味着客户端可以向服务端发送请求,服务端向客户端返回响应,同样的也可以从服务端向客户端发送,然后由客户端向服务端返回,如果你只关闭了客户端,向服务端通道,这只叫半关闭状态,并没有完全的切断客户端与服务端的关联。
12.GET和POST请求的区别?
1.参数位置
1.GET方式的请求参数以?拼接到Url后面。
2.Post请求的参数在请求体内。
2.参数长度
1.GET方式的请求参数长度限制为2048个字符。
2.Post请求的参数长度没有该限制。
3.安全性
1.GET方式不会引起服务端的任何变化
4.幂等性(相同方法执行多次和执行一次效果相同)
1.GET幂等。
2.POST不幂等。
5.缓存性
1.GET可缓存。
2.Post不可缓存。
13.HTTP请求报文和响应报文的结构?
1.请求报文的结构。
①:请求行(请求方式,URL)
②:首部行(键值对形式,`CRLF`代表换行结束)
③:实体主体(post请求中,存放请求参数)
2.响应报文的结构。
①:响应行(版本,状态码)
②:首部行(键值对形式,`CRLF`代表换行结束)
③:实体主体(响应返回的数据)
14.什么是Mimetype?
在浏览器中显示的内容有HTML,有XML,有GIF,还有Flash……那么,浏览器是如何区分它们的,决定什么内容
用什么形式来显示呢?答案是MIME Type,也就是该资源的媒体类型
//向该文件发送请求,根据请求头拿到该文件的MIMEType-
-( NSString *)getMIMETypeURLRequestAtPath :( NSString *)path {
// 1.确定请求路径
NSURL * url = [ NSURL fileURLWithPath: path];
// 2.创建可变的请求对象
NSMutableURLRequest * request = [ NSMutableURLRequest requestWithURL: url];
// 3.发送请求
NSHTTPURLResponse * response = nil ;
[ NSURLConnection sendSynchronousRequest:请求returningResponse:&response错误:无];
NSString * mimeType =响应。MIMEType ;
返回mimeType;
}
15.数据传输的加密过程?
SSL(安全套接层) TLA(传输层安全)
以上两者在传输层之上,对网络连接进行加密处理,保障数据的初始,更加的安全。
1.客户端:发送数据-> HTTP(应用层)-> SSL&TLS(加密处理)-> TCP(传输层)-> IP(网络层)
2.服务端:IP(网络层)-> TCP(传输层)-> SSL&TLS(解密处理)-> HTTP(应用层)->接受数据
16.说一下TCP/IP五层模型的协议?
应用层
传输层
网路层
数据硼层
物理层
[图片上传失败...(image-6f41f0-1602664320281)]
17.说一下OSI七层模型的协议?
应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示层数据格式化,代码转换,数据加密没有协议
会话层解除或建立与别的接点的联系没有协议
传输层提供端对端的接口TCP,UDP
网络层为数据包选择路由IP,ICMP,RIP,OSPF,BGP,IGMP
数据传输层传输有地址的帧以及错误检测功能SLIP,CSLIP,PPP,ARP,RARP,MTU
物理层以二进制数据形式在物理媒体上传输数据ISO2110,IEEE802,IEEE802.2
[图片上传失败...(image-b2d40c-1602664320281)]
[图片上传失败...(image-726a52-1602664320281)]
18.大文件下载的功能有什么注意点?
注意要边下载数据边写入文件,不然会造成占用内存空间过大
19.断点续传功能该怎么实现?
1.利用http的头部前端,设置http的Range属性
2.检测下载进度,并且判断是否需要重新创建下载文件
20.封装一个网络框架有一些注意点?
https://juejin.im/post/5b3a303be51d4555c07a7ae1
21.如何在测试过程中MOCK各种网络环境?
https://blog.csdn.net/u010828718/article/details/46986795
22.DNS的解析过程?网络的DNS优化。
DNS是域名到IP地址的映射,DNS解析使用UDP数据报,端口号53,并且采用明文传输的方式
客户端在向服务端发送请求时,会先将域名到DNS服务器映射出IP地址,然后再访问。
- DNS解析的两种方式
1.递归查询
不断地自下而上遍历解析,“我去给你问一下”的方式
2.继承查询
继承查询是“我告诉你谁可能知道”的方式
- DNS解析存在的问题
1.DNS劫持
被钓鱼网站劫持,有可能返回错误的`IP`,浏览的不是目标浏览器
2.DNS解析转发
晓得运营商可能将`DNS`解析请求转发,解析的比较慢,效率低
- DNS劫持解决办法
1.HTTPDNS
使用`http`协议向`DNS`服务器80端口进行请求
2.长连接
客户端和这个长连通信即可。找一个中间的长连`server`,内部网专线进行`Http`请求`server`。
23.Post请求体有某种格式?
应用程序/ x-www-form-urlencoded
这应该是最常见的POST提交数据的方式了。浏览器的原生form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据
POST HTTP / 1.1
主持人:www.demo.com
缓存控制:无缓存
邮递员令牌:81d7b315-d4be-8ee8-1237-04f3976de032
内容类型:application / x-www-form-urlencoded键=值&测试键=测试值
多部分/表单数据
POST HTTP / 1.1
主持人:www.demo.com
缓存控制:无缓存
邮递员令牌:679d816d-8757-14fd-57f2-fbc2518dddd9
内容类型:多部分/表单数据;boundary = ---- WebKitFormBoundary7MA4YWxkTrZu0gW------ WebKitFormBoundary7MA4YWxkTrZu0gW
内容处置:表单数据;name =“ key”值
------ WebKitFormBoundary7MA4YWxkTrZu0gW
内容处置:表单数据;name =“ testKey”测试值
------ WebKitFormBoundary7MA4YWxkTrZu0gW
内容处置:表单数据;name =“ imgFile”; filename =“ no-file”
内容类型:应用程序/八位字节流<数据 在 这里>
------ WebKitFormBoundary7MA4YWxkTrZu0gW--
应用程序/ json
文字/ xml
24.网络请求的状态码都大致代表什么意思?
1.1xx
代表临时响应,需要请求者继续执行操作的状态代码。
2.2xx
代表的多是操作成功。
3.3xx
代表重新定义,表示要完成请求,需要进一步操作
4.4xx
代表请求错误,表示请求可能出错,妨碍了服务器的处理。
5.5xx
代表服务器错误,表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错
25.抓包软件 Charles 的原理是什么?说一下中间人攻击的过程。
Charles 的原理实际就是网络的 中间人攻击。
中间人(MITM)攻击是一种攻击类型,其中攻击者将它自己放到两方之间,通常是客户端和服务端通信线路的中间。
这可以通过破坏原始频道之后拦截一方的消息并将它们转发(有时会有改变)给另一方来实现。
客户端发给服务端的请求,被中间人劫持篡改之后,再发送给服务端。
服务端返回给客户端的数据,被中间人劫持篡改之后,再返回给客户
26.如何判断一个请求是否结束?
1.查看Content-Length是否达到1024字节。
2.通过Post发送请求时,消息一般都是一段一段返回的,看最后的一个chunked是否为空?
27.SSL 传输协议?说一下 SSL 验证过程?
1.配备了 身份证书,防止被冒充。
2.有 校验机制,一旦被篡改,双方都会知道。
3.通过 加密 进行传播
连接过程如下:
①:客户端向服务端发消息,包括客户端支持的 加密算法 以及 随机数1 、TLS 版本号。
②:服务端向客户端返回信息,包括双方已经匹配好的 加密算法 以及 随机数2、Server证书 。
③:服务端向客户端返回 验证证书。
④:客户端进行证书验证,首先要评估信任证书
1.服务端向客户端返回证书的 数字摘要 与服务端证书返回客户端,解密后的是否一致,防止被篡改。
2.验证证书链:逐级验证服务端证书是否在可信任证书列表。
3.验证通过后:
①:将 随机数1、随机数2、服务器端返回 证书公钥 加密过后的 预主秘钥 三者组合成 会话密钥。
②:服务端拿到 会话秘钥 后,会用服务端证书 私钥进行解密,得到 预主秘钥。
③:服务端将 随机数1、随机数2、服务器端证书私钥解密得到的 预主秘钥 三者组合成 会话密钥。此时客户端的 会话秘钥 和 服务端的 会话秘钥 应该是一致的。
④:接下来会经行验证: - 1.客户端通过 会话秘钥,加密信息发给服务端,看服务端能否成功接收。 - 2.服务端通过 会话秘钥,加密信息返给客户端,看客户端能否成功解析。
4.以上步骤都通过了,此时 SSL 验证连接。
28.解释一下 Http 的持久连接?
每次建立连接的时候都要经过三次握手等必须的程序,如果我们拥有一条可以一直使用的连接的话,也就意味着我们只需要进行一次连接的建立,这就省去了每次建立连接的时间。
使用过的连接会比新建立的连接速度会快一些,这是由于TCP连接慢启动的特性,每次建立新的连接,当然不如已经被调教的很好的连接速度快。
每个连接对于服务器和客户端来说都是负担,能少开尽量少开,当然是在不影响功能和体验的前
1.keep-alive
connection:keep-alive,在头部字段添加该字段,如果服务器返回的也是这个字段,就可以保持持续连接。
2.timeout
timeout:20 表示持续时间
3.max
max:30 表示最多建立多少个 `Http` 连接
29.说一下传输控制协议 - TCP ?
1.面向连接
数据传输开始之前,需要建立连接,例如 `三次握手` 和 `四次挥手`。
2.可靠传输
@无差错
@不丢失
@不重复
@按序到达(滑动窗口协议实现的)
停止等待协议
@无差错情况
@超时重传
@确认丢失
@确认迟到
3.面向字节流
可以对照 `UDP` 的面向报文,字节由 `TCP` 控制
4.流量控制
滑动窗口协议
5.拥塞控制
@慢开始,拥塞避免
@快恢复、快重传
30.说一下用户数据报协议 - UDP ?
特点
1.无连接
不需要事先建立连接,也不需要释放
2.尽最大努力交付
不保证可靠传输
3.面向报文
既不合并,也不拆分
功能
1.复用、分用
多端口复用-不管从哪个端口发送出去,都可以复用传输层的数据报
根据目标端口可以进行数据分发
2.差错检测
即时通讯项目要保证消息的准确性
31.谈一谈网络中的session和和cookie?
因为Http无状态的特性,如果需要判断是哪个用户,这时就需要Cookie和Session。
Cookie一般都是服务端把生成的`Cookie`通过响应返回给客户端,客户端保存。
Session存储在网络端,需要依赖Cookie机制。服务端生成了Session后,返回给客户端,客户端
setCookie:sessionID,所以下次请求的时候,客户端把Cookie发送给服务端,服务端解析出
SessionID,在服务端根据`SessionID`判断当前的用户。
如何修改`Cookie`?
相同`Key`值得新的`Cookie`会覆盖旧的`Cookie`。
覆盖规则是名称路径和域等需要与内部的一致
如何删除`Cookie`?
相同`Key`值得新的`Cookie`会覆盖旧的`Cookie`。
覆盖规则是名称路径和域等需要与内部的一致
设置`Cookie`的`expires`为过去的一个时间点,或者`maxAge = 0`
如何保证`Cookie`的安全?
对`Cookie`进行加密处理
只在`Https`上携带`Cookie`。
设置`Cookie`为`httpOnly`,防止跨站脚本攻击。





网友评论