1.类和对象的区别
类是对象的抽象,对象是类的具体实例。
类是抽象的,不占用内存,而对象是具体的,占有内存空间。
例如:类就是水果,对象就是苹果。
2.SSL握手流程
- 客户端向服务器发送 ClientHello 消息,说明它支持的最高TLS协议版本,随机数、密码算法列表及压缩方法。
- 服务器回复 ServerHello 消息,包含基于客户端 ClientHello 消息所选择的TLS协议版本,随机数、密码算法列表及压缩方法。服务器选择的协议版本为客户端和服务器都支持的最高版本。
- 当双方知道了连接参数,服务器向客户端发送证书。
- 客户端验证服务器证书的合法性,包括:服务器证书是否过期、发行服务器证书的CA是否可靠、发行CA的公钥能否正确解开服务器证书的发行CA的数字签名、服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第5步。
- 客户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤3中的服务器证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
- 如果服务器要求客户端的身份认证(在握手过程中为可选),客户端可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户端自己的证书以及加密过的“预主密码”一起传给服务器。
- 如果服务器要求客户端的身份认证,服务器必须检验客户端证书和签名随机数的合法性,具体的合法性验证包括:客户端证书是否过期,发行客户端证书的CA是否可靠,发行CA的公钥能否正确解开客户端证书的发行CA的数字签名,检查客户端证书是否在证书废止列表(CRL)中。如果合法性验证没有通过,通讯立刻中断;如果合法性验证通过,服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
- 服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于SSL协议的安全数据通讯的加解密通讯。同时在SSL通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
- 客户端向服务器发出信息,指明后面的数据通讯将使用的步骤8中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
- 服务器向客户端发出信息,指明后面的数据通讯将使用的步骤8中的主密码为对称密钥,同时通知客户端服务器的握手过程结束。
- SSL的握手部分结束,SSL安全通道的数据通讯开始,客户端和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。
3.堆和栈的区别
一、堆栈空间分配区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二、堆栈缓存方式区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三、堆栈数据结构区别:
堆(数据结构):堆可以被看成是一棵树,如:堆排序。先进先出(FIFO—first in first out);
栈(数据结构):一种先进后出的数据结构。
4.iOS9 新特性
- nonnull:表示不能为空
- 泛型:指定类弄
- __kindof:一般用在方法的返回值,表示当前类或者子类
- https
5. 如何重写类方法
- 1、在子类中实现一个同基类名字一样的静态方法
- 2、在调用的时候不要使用类名调用,而是使用[self class]的方式调用。原理,用类名调用是早绑定,在编译期绑定,用[self class]是晚绑定,在运行时决定调用哪个方法。
后续需要总结
iOS 核心框架
- CoreAnimation
- CoreGraphics
- CoreLocation
- AVFoundation
- Foundation
iOS核心机制
- UITableView 重用
- ObjC内存管理;自动释放池,ARC如何实现
- runloop
- runtime
- Block的定义、特性、内存区域、如何实现
- Responder Chain
- NSOperation
- GCD
数据结构
- 8大排序算法
- 二叉树实现
- 二分查找实现
面向对象编程
- 封装、继承、多态
- 设计模式6个原则
- 设计一个类的功能,如何划分粒度(单一职责)
- 接口隔离。
- 如果有一个鸟类,有飞的动作,一个鸵鸟继承它是合适的吗(里氏替换)
- 类之间的依赖如何依赖偶合度最小(依赖倒转)
高层依赖低层,低层不能依赖高层。依赖接口,不能依赖具体的类。 - 如果A要调用C函数,但C是B的成员类,应该如何设计?(迪米特)
- 如何设计类,能做到只增加代码,而不修改代码,有哪些经验(开放封闭)
通过设计模式解决。
计算机技术
- 计算机网络: TCP/IP、HTTPCDN、SPDY
- 计算机安全: RSA、AES、DES
- 操作系统:线程、进程、堆栈、死锁、调度算法
iOS新特性、新技术
- iOS7 UIDynamic、SpritKit、新布局、扁平化
- iOS8 应用程序扩展、HealthKit、SceneKit、CoreLocation、TouchID、PhotoKit
- iOS9
- Apple Watch
- 第三方库:SDWebImage、AFNetwork、JSONKit、wax
- swift
时间: 2024-11-06 03:54:11