ios面试

作者: 你飞跃俊杰 | 来源:发表于2022-12-10 15:01 被阅读0次

    一、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
    修改线程直接的优先级
    线程间的调度

    image.png

    进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
    线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

    进程线程的区别

    地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
    资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。

    九、KVO的实现机制

    十、通知

    十一、消息转发机制

    十二、内存管理的理解

    十三、设计模式

    十四、组件化

    十五、性能做过哪些

    十六、

    相关文章

      网友评论

          本文标题:ios面试

          本文链接:https://www.haomeiwen.com/subject/iqvgfdtx.html