一、OC与Swift的区别
1.swift是静态语言,有类型推断,OC是动态语言。
2.swift面向协议编程,OC面向对象编程
3.swift注重值类型,OC注重引用类型。
4.swift支持泛型,OC只支持轻量泛型
5.swift支持静态派发(效率高)、动态派发(函数表派发、消息派发)方式,OC支持动态派发(消息派发)方式。
6.swift支持函数式编程
7.swift的协议不仅可以被类实现,也可以被struct和enum实现
8.swift有元组类型、支持运算符重载
9.swift引入了命名空间,从此不用再import其他文件
10.swift支持默认参数
11.swift比oc代码更加简洁
二、结构体与类的区别
1.类型不同:结构是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
2.存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低。
3.作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。
4.关键字不同:在类中可以使用但是在结构中限制使用的关键字有:abstract、sealed、protected;StaTIc关键字可以用在类名前面用来声明静态类,但是不能用在struct前面,不存在静态结构。
5.初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。
类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
三、面向协议编程pop
1.用协议代替基类
2.用值类型(结构体)代替引用类型(类)
好处,比如ABC都有一个公共方法,把方法发到协议D,使之 ABC遵循协议D
oop面向对象 是用基类解决的,从中插一个基类
四、三次握手的步骤
1.客户端发送sync报文给服务端建立连接
2.服务端收到后发送sync+ack报文给客户端
3.客户端收到发送ack报文给服务端
五、https为什么更安全
1.HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的TLS(SSL)加密传输协议
2.HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
3.HTTP 的连接很简单,是无状态的;HTTPS协议是由 HTTP+SSL/TLS 协议构建的可进行加密传输、身份认证的网络协议,比 HTTPS 协议安全。
六、死锁理解
cpu流水调度加了一个标记,等下一个线程访问临界区时,cpu就不会分配cpu资源给这个线程访问临界区,让这个线程等待
两个或多个进程,由于资源的竞争或者彼此间的通信而造成的阻塞现象
线程A持有资源A,要获取资源B
线程B持有资源B,要获取资源A
解决:设置占有锁的超时时间
避免一个线程同时获取多个锁
避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源
尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制
对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况
七、并行与并发区别
并行同时执行AB任务
并发暂停执行A任务,区执行B任务,执行完B任务再执行A任务
并行是同时执行
并发是交替执行
八、并发底层是怎么实现的
https://zhuanlan.zhihu.com/p/68171984
修改线程直接的优先级
线程间的调度
进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
进程线程的区别
地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
网友评论