iOS开发工程师面试题--中级

时间:2021-11-09 18:05:11

中级iOS开发工程师面试题


1.MVC的理解

MVC即(Model-View-Controller)是模型-视图-控制器的缩写。是一种架构设计,并不属于基本的设计模式(23种设计模式)。

M(Model)数据模型:负责定义、存储、操作数据。比如数据库操作。

V(View)视图:用来展示视图,并进行用户交互

C(Controller)控制器:M和V的协调者,控制获取数据,将数据交给视图去展示。算是链接数据和视图的桥梁。

其中M和V不能直接通信,必须通过C来传递数据和事件。

2.对进程和线程了解多少

关系:

1.数量角度:一个线程只能属于一个进程,而一个进程可以包含多个线程,但至少包含一个线程。

2.资源角度:资源分配给进程,同一个进程中的线程共享该进程的所有资源。

3.线程是进程内的一个可执行单元,也是进程内的可调度实体。

4.真正运行在处理机上的是线程。

5.线程在执行过程中需要协作同步。不同进行的线程间要利用消息通信的办法实现同步。

区别:

1.拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于所在进程的资源。

2.调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位(系统根据进程分配资源)。

3.并发性:不仅进程间可以并发执行,同一个进程中的多个线程之间也可以并发执行。

4.系统开销:创建或者销毁进程的开销比较大,因为进程在分配和撤销时需要创建和回收资源。

5.健壮性:进程有自己独立的系统空间,线程没有,进程的撤销对其他进程没有影响,而线程的撤销将可能使所在进程死掉。所以,多进程的程序比多线程的程序健壮。但在进程切换时耗费的资源比较大,效率差。

3.进程的同步与死锁。

进程的同步机制:原子操作,信号量机制,管道,共享数据等。

  • 同步:避免对同一数据的并发访问(通常由中断、对称多处理器、内核抢占等引起)称为同步。
  • 原子操作:原子操作确保对同一数据的“读取-修改-写入”操作在它的执行期间不会被打断,要么全部执行完成,要么根本不会执行。
  • 信号量机制:信号量S是一个整数,S大于等于零是代表可供并发进程使用的资源实体数,当S小于零时则表示正在等待使用临界区的进程数。
    Dijkstra同时提出了对信号量操作的PV原语。

死锁

死锁的原因

资源竞争和进程推进次序不当。

死锁的4个必要条件

互斥、不可剥夺、请求保持、环路。

死锁的处理

鸵鸟策略、预防策略、检测与解除死锁。

其中同步和死锁的部分在操作系统都有。

4.kvc kvo
kvc:键值编码,一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量。

kvo:键值观察,一种能使的对象获得到其他对象属性变化的通知机制,也就是所谓的观察者。

kvo的实现必须使用KVO来修改实例变量。这样观察者才能观察到。因此kvc是kvo的基础。

深复制和浅复制
深复制:不仅复制对象本身,对象的属性对象也要复制,注意这里复制内容

浅复制:支付至对象本身,不对里面的属性复制,因此删除原来的对象,新对象中的属性对象的值就成为错误的值了。

assign、copy、retain、nonatomic

  • assign:普通复制,一般用于基本数据类型,常见委托设计模式,一次来防止循环引用。
  • retain:保留计数,获得了对象的所有权。引用计数在原有基础上+1.
  • copy:一般字符串使用copy。Foundation中的不可变对象使用copy属性,效果相当于retain,只是引用计数+1.
  • nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。默认为nonatomic

以上一般都在在非ARC情况下才出现的关键词

strong和weak

strong 强引用,weak弱引用,ARC下,strong被翻译成retain,weak相当于手动管理的assign,代理协议的属性,依然用assign,防止出现循环引用。

_unsafe_unretained与weak

_unsafe_unretained与weak功能一致,区别在于,当指向的对象销毁后,weak换将变量置为nil,防止调用野指针。

ARC存在内存泄露吗?

存在循环引用会导致内存泄露(原因主要在于:协议),Objective-C对象与CoreFoundation类之间的桥接管理不当也会产生内存泄露。

事件响应者链
响应者链表示一系列的响应者对象,事件先被交由第一响应者对象处理,如果第一响应者对象不处理,事件被沿着相应者链向上传递,交给下一个响应者。

View->parent view ->ViewController->window->application->丢弃事件

svn git熟练程度

打包静态库

APP发布上架流程等

Storyboard使用

视图加载顺序

框架模型