iOS程序员面试题系列(2)
2015-08-27 21:47
519 查看
1.MVC的理解
答:MVC设计模式考虑三种对象:数据模型对象、视图对象和控制器对象。
数据模型:负责存储、定义、操作数据;
视图:用来展示数据给用户,和用户进行操作交互;
控制器:M与V的协调者,控制获取数据,将数据交给视图去展示。
2.线程和进程
答:1>进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
2>线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程。
线程和进程的关系:
1>一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
2>资源分配给进程,同一个进程的所有线程共享该进程的所有资源。
3>线程在执行过程中,需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
4>真正在处理机上运行的是线程。
5>线程是指进程内的一个可执行单元,也是进程内的可调度实体。
线程和进程的区别:
1>调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位。
2>并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
3>拥有资源:经常是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
4>系统开销:创建或者撤销进程的开销比较大。
3.进程的同步机制
答:原子操作、信号量机制、自旋锁、分布式系统等。
4.进程死锁的原因
答:资源竞争以及进程推进顺序非法。
5.死锁的4个必要条件
答:互斥、请求保持、不可剥夺、环路。
6.死锁的处理:
答:鸵鸟策略、预防策略、检测与解除死锁。
7.KVC、KVO
答:1>KVC(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量。
2>KVO(键值观察)是一种能使得对象获取到其他对象属性变化的通知机制。
3>实现KVO键值观察模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础或者说KVO的实现是建立在KVC的基础之上。
8.深复制、浅复制
答:深复制:不仅复制对象本身,对象持有的属性对象也做复制。
浅复制:只复制对象本身,不对里面的属性复制。
9.定义属性时,什么时候用assign、retain、copy、nonatomic?
答:1>assign:普通赋值,一般用于基本数据类型,常见委托设计模式,以此来防止循环引用。
2>retain:保留计数,获得了对象的所有权。引用计数在原有基础上加1。
3>copy:一般字符串使用。Foundation中的不可变对象使用copy效果相当于retain,只是引用计数+1。
4>nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。
10.strong与weak,_unsafe _unretained与weak的区别
答:1>strong叫做强引用,weak叫做弱引用,在ARC中,使用strong告诉编译器自动插入retain, weak相当于手动管理内存的assign。
2>_unsafe_unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。
11.ARC存在内存泄露吗?
答:循环引用(协议或者block的使用)导致内存泄露,OC对象与CoreFoundation类之间桥接时,管理不当也会产生内存泄露。
12.事件响应者链
答:响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder)。
View->ViewController->Window->Application->丢弃事件
13.SVN、git的使用
14.打包静态库
15.APP发布的上架流程
16.Storyboard的使用
17.CALayer与UIView的区别是什么?
答:两者最大的区别是,图层(CALayer)不会直接渲染到屏幕上。
UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。
真正的绘图部分,是由一个CALayer类来管理。
一个UIView上可以有n个CALayer,每个layer显示一种东西,增强UIView的展现能力。
18.GCD
答:GCD是Apple开发的一个多核编程的较新的解决方法。
GCD是一个替代诸如NSThread等技术的很高效和强大的技术,完全可以处理如数据锁定和资源泄露等复杂的异步编程问题。
19.TCP和UDP
答:TCP(传输控制协议),提供面向连接的、可靠的、点到点的通信。
UDP(用户数据报协议),提供非连接的不可靠的颠倒多点的通信。
用TCP还是UDP,看程序注重哪一个方面,可靠还是快速。
20.socket连接与http连接
答:http连接:短连接。即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。
Socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉。
21.TCP的三次握手
答:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器端收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k)即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器端的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手。
22.iOS中对象之间有哪些通信方式?
答:代理、block、通知、KVO。
23.http协议的特点,GET请求与POST请求,https协议。
答:1>http协议是短协议,都是客户端主动发送请求,服务器作出响应,服务器响应之后,连接断开。GET请求没有请求体,POST含有请求体。
2>https协议:安全超文本传输协议。基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说是HTTP的安全版。
24.XML与JSON数据解析。
答:1>xml数据解析有两种解析方式:DOM解析与SAX解析。
2>DOM解析必须先完成DOM树的构造,在处理规模较大的XML文档时很耗内存,占用资源较多。
3>SAX是用事件驱动模型,解析XML文档时每遇到一个开始或者结束标签、属性或者一条指令,程序就产生一个事件来进行相应的处理。SAX相对应DOM来说,更适合操作大的XML文档。
4>json解析比较好用的是第三方的JSONKIT和iOS自带的json解析类。
25.tableView的复用、设计模式。
26.Core Data的相关知识。
27.断点续传是如何实现的?
28.Core开头的系列内容。比如CoreAnimation和CoreGraphics,分别使用CA和CG做过些什么动画或者图像上的内容。
29. NSOperationQueue、GCD。
30.算法比如冒泡算法、二分法、数据结构(很重要)、操作系统、网络知识。
答:MVC设计模式考虑三种对象:数据模型对象、视图对象和控制器对象。
数据模型:负责存储、定义、操作数据;
视图:用来展示数据给用户,和用户进行操作交互;
控制器:M与V的协调者,控制获取数据,将数据交给视图去展示。
2.线程和进程
答:1>进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
2>线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),一个线程可以创建和撤销另一个线程。
线程和进程的关系:
1>一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
2>资源分配给进程,同一个进程的所有线程共享该进程的所有资源。
3>线程在执行过程中,需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
4>真正在处理机上运行的是线程。
5>线程是指进程内的一个可执行单元,也是进程内的可调度实体。
线程和进程的区别:
1>调度:线程作为调度和分配的基本单元,进程作为拥有资源的基本单位。
2>并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
3>拥有资源:经常是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
4>系统开销:创建或者撤销进程的开销比较大。
3.进程的同步机制
答:原子操作、信号量机制、自旋锁、分布式系统等。
4.进程死锁的原因
答:资源竞争以及进程推进顺序非法。
5.死锁的4个必要条件
答:互斥、请求保持、不可剥夺、环路。
6.死锁的处理:
答:鸵鸟策略、预防策略、检测与解除死锁。
7.KVC、KVO
答:1>KVC(键值编码)是一种间接访问对象实例变量的机制,该机制可以不通过存取方法就可以访问对象的实例变量。
2>KVO(键值观察)是一种能使得对象获取到其他对象属性变化的通知机制。
3>实现KVO键值观察模式,被观察的对象必须使用KVC键值编码来修改它的实例变量,这样才能被观察者观察到。因此,KVC是KVO的基础或者说KVO的实现是建立在KVC的基础之上。
8.深复制、浅复制
答:深复制:不仅复制对象本身,对象持有的属性对象也做复制。
浅复制:只复制对象本身,不对里面的属性复制。
9.定义属性时,什么时候用assign、retain、copy、nonatomic?
答:1>assign:普通赋值,一般用于基本数据类型,常见委托设计模式,以此来防止循环引用。
2>retain:保留计数,获得了对象的所有权。引用计数在原有基础上加1。
3>copy:一般字符串使用。Foundation中的不可变对象使用copy效果相当于retain,只是引用计数+1。
4>nonatomic:非原子性访问,不加同步,多线程并发访问会提高性能。
10.strong与weak,_unsafe _unretained与weak的区别
答:1>strong叫做强引用,weak叫做弱引用,在ARC中,使用strong告诉编译器自动插入retain, weak相当于手动管理内存的assign。
2>_unsafe_unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止调用野指针。
11.ARC存在内存泄露吗?
答:循环引用(协议或者block的使用)导致内存泄露,OC对象与CoreFoundation类之间桥接时,管理不当也会产生内存泄露。
12.事件响应者链
答:响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder)。
View->ViewController->Window->Application->丢弃事件
13.SVN、git的使用
14.打包静态库
15.APP发布的上架流程
16.Storyboard的使用
17.CALayer与UIView的区别是什么?
答:两者最大的区别是,图层(CALayer)不会直接渲染到屏幕上。
UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。
真正的绘图部分,是由一个CALayer类来管理。
一个UIView上可以有n个CALayer,每个layer显示一种东西,增强UIView的展现能力。
18.GCD
答:GCD是Apple开发的一个多核编程的较新的解决方法。
GCD是一个替代诸如NSThread等技术的很高效和强大的技术,完全可以处理如数据锁定和资源泄露等复杂的异步编程问题。
19.TCP和UDP
答:TCP(传输控制协议),提供面向连接的、可靠的、点到点的通信。
UDP(用户数据报协议),提供非连接的不可靠的颠倒多点的通信。
用TCP还是UDP,看程序注重哪一个方面,可靠还是快速。
20.socket连接与http连接
答:http连接:短连接。即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。
Socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉。
21.TCP的三次握手
答:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器端收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k)即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器端的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手。
22.iOS中对象之间有哪些通信方式?
答:代理、block、通知、KVO。
23.http协议的特点,GET请求与POST请求,https协议。
答:1>http协议是短协议,都是客户端主动发送请求,服务器作出响应,服务器响应之后,连接断开。GET请求没有请求体,POST含有请求体。
2>https协议:安全超文本传输协议。基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说是HTTP的安全版。
24.XML与JSON数据解析。
答:1>xml数据解析有两种解析方式:DOM解析与SAX解析。
2>DOM解析必须先完成DOM树的构造,在处理规模较大的XML文档时很耗内存,占用资源较多。
3>SAX是用事件驱动模型,解析XML文档时每遇到一个开始或者结束标签、属性或者一条指令,程序就产生一个事件来进行相应的处理。SAX相对应DOM来说,更适合操作大的XML文档。
4>json解析比较好用的是第三方的JSONKIT和iOS自带的json解析类。
25.tableView的复用、设计模式。
26.Core Data的相关知识。
27.断点续传是如何实现的?
28.Core开头的系列内容。比如CoreAnimation和CoreGraphics,分别使用CA和CG做过些什么动画或者图像上的内容。
29. NSOperationQueue、GCD。
30.算法比如冒泡算法、二分法、数据结构(很重要)、操作系统、网络知识。
相关文章推荐
- lintCode-删除链表中倒数第n个节点
- 面试常见问题
- 优雅的程序员
- Binary Tree Zigzag Level Order Traversal——关于广度优先的经典面试题
- 21道工作中总结的iOS高频面试题
- 黑马程序员--对象和方法之间的关系
- iOS程序员面试题系列(1)
- 美团面试算法题
- 黑马程序员_集合框架(二)
- Java常见面试题
- 部分面试知识点(web前端工程师)
- 黑马程序员--函数和对象方法的区别
- 程序员面试笔试宝典——读书笔记3、预处理、结构体与类、位操作
- 程序员,请远离拖延症!
- 黑马程序员训练营十道满分题解
- 黑马程序员--对象的存储细节
- LintCode-删除排序链表中的重复元素
- 剑指offer——面试题30:最小的k个数
- 一道阿里面试题(js)
- 黑马程序员 多线程通信