1,介绍常用的设计模式,例如中介者模式,外观模式,MVC MVVM 模式
- 单例模式
能确保在程序运行期间只有一份实例,使用简单,方便全局的状态和资源管理,缺点是这个对象的生命周期过长,常驻内存,增加了内存的开销,系统的[UIApplication sharedApplication]就是一个例子 - 观察者模式
通常适用于对象之间一对多的依赖关系时,例如通知中心 kvo 等,任何位置都可以发送,注册观察这对象可以就可以接受,但也要注意过多的注册和发送会导致的一些问题 - 代理模式
最用户实现对象之间的通信和解耦,常见的就是UITableview UIcollectionView 通过delegate ,但是也会导致代码分散,可能增加了阅读的理解和难度 - 工厂模式
适用于根据不同条件创建不同类型的对象的情况,但是当设计多个工厂或者产品是,也会增加代码的复杂性
当然还有一些 例如中介者模式,通常用于几种处理多个对象之间的通信,避免对象之间的互相依赖,常用语及时通讯中的用户之间的发送下消息, 外观模式通常就是简化接口,便于客户端与子系统之间的访问和交互
不同的的设计模式的目的就是,简化设计 避免造很多的轮子,,降低代码的耦合度,便于维护和扩展,增加代码的灵活性,促进代码的复用,以及增加代码可读性,提高工作效率
MVC和MVVM
model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制,MVVM 其实是一个mvc 的增强版,从controller的讲逻辑控制的代码分离到的viewmodel中用户管理view和model之间的逻辑控制,更加抽象,减少了controller 的复杂性,MVC 提供了明确的逻辑控制,而MVVM更注重数据的绑定和解耦吧
2, cpu 以及GPU介绍,cpu 如何调用gpu
cpu是中央处理器,主要负责大多数的计算和逻辑控制,适用于顺序执行的任务以及一些复杂逻辑的运算,在ios中通常用户程序的逻辑控制,数据处理ui交互,以及一些一般计算任务
gpu是图形处理器,最初设计用户处理图形和渲染任务,更擅长并行的计算,在ios中通常用用于图形渲染,图像处理,
iOS主要是通过 UIKit,core animation, metail , scencekit 等底层库通过cpu 将指令传输到gpu进行渲染和处理
- UIkit 是iOS的UI框架,负责用户界面,core animation 是底层图形渲染引擎,通过UIkit cpu 处理ui事件,将界面元素传递给 core animation 再转换成gpu 可处理的格式,交给gpu 渲染
- Metal 是Apple的低级图形和计算api,允许开发人员直接与GPU交互,可以直接创建队列 缓冲区 着色器 计算管线等参数,直接发送到GPu
- OPen gl cpu能通过 OpenGL ES 传递指令到GPU
- SceneKit Sprite kit,是3D 和 2D的高级框架,基于metal实现的
3,Get 和 Post的区别,http 个版本有什么区别,?http协议和Tcp 协议有什么区别
Get 和 post 是http协议中的两种请求方法,都用于客户端与服务器之间数据传输,区别在于
- get多用于资源和数据的请求,post常用语提交数据或者操作
- 数据的传输,get 是明文的通过拼接url 提交,有长度限制,易于缓存,而post将数据放在body中,通常用户较大数据或者铭感数据的交互
- get 请求是幂等的,也就是说多次请求不会修改服务器数据,结果是一直的,而post不是
http 是应用层协议,定义客户端和服务器之间的通信规则,报错请求/响应的格式,方法状态码等
tcp 是传输层协议,负责数据的传输,包括对数据报的分段,传输,重传确认等
在http1/2中,客户端和服务器是tcp进行的通信,http3是基于QUIC协议,QUIC是基于UDP的传输协议,是结合TCP和UDP的一种传输协议
3次握手和4次挥手是描述网络协议中的链接建立和中止的过程,特别是tcp
- 三次握手
确保双方都同意连接,并且收到序列号,避免网络问题引起的错误连接
SYN - 客户端向服务器发送SYN报文,表示建立想建立链接,并包含一个初始化序列号
SYN-ACK - 服务端收到SYN之后,回应一个SYN-ACK报文,表示接受链接请求,同时也发送一个自己的初始化序列号
ACK - 客户端收到SYN-ACK报文的之后,发送一个ACK报文,确认自己收到了服务器的序列号,表明连接的可靠建立,做了数据传输的准备
- 四次挥手
关闭链接过程,确认双方都能正常释放资源,避免数据丢失
FIN
- 客户端向服务器发送Fin报文,表明希望关闭链接,并且中止数据的数据的发送
ACK - 服务器收到FIn后,回应一个ACK报文,确认客户端请求,这时候服务器可能还有数据要发送
FIN - 服务器处理完剩余数据,想客户端发送FIN报文 ,表示服务器也希望关闭连接
ACK - 客户端收到FIN,发送一个ACK报文,确认关闭请求,此时TCP连接才算中止
4.内存缓存策略有哪些,NSCache 使用的是什么缓存策略
- FIFO(first in first out )
按照收据进入缓存的时间顺序,最先进入的最先被淘汰 - LIFO (last in first out)
最先进入最后被淘汰 - LRU (last rencetly used ) 时间有限
最近最少使用的数据先淘汰,维护一个访问时间排序的列表,每次访问更新,最少使用的排在最后 - LFU (last frequtly used)访问优先
淘汰访问次数最少的数据,通常使用计数器记录数据的访问评率 - ARC
根据LRU LFU 的有点动态调整的策略 - TTL (time to live)
为每个缓存数据设置有效期,过期自动淘汰
NSCache 应该使用的LRU,有内存压力下,淘汰最近最少使用的数据,还支持自动内存管理,及自动释放数据环节内存压力,还可以兹定于缓存限制,线程安全,支持弱应用,能够保证对象的自动释放
5,图片格式有哪些,有什么区别
常见的图片格式有 jpg,png,bmp ,TiFF,webp,svg等,JPEG适用于照片和复杂图像,PNG适用于需要透明度的图像,GIF常用于简单动画,BMP 和 TIFF适用于高质量图像,webp 适用于网页图片,svg适用于矢量图和可缩放的图像。
6,如何计算一个像素点的大小以及一张图片的大小
像素点的存储大小一般是 颜色深度除以8,颜色深度表示需要多少位来表示颜色,通常是8位 16位 24 或者32位,常用的RGB 是24位,红绿蓝各8位,而RGBA 这是32位 多了一个透明度,
图片的代销这是宽度X高度X像素点大小 ,例如一张1920 * 1080的rgb颜色深度为24位, 图片大小为 1920 * 1080 * (24/8) = 2220800字节 约等于 8M