iOS笔记--面试题02

问题:

1.多线程的底层实现


答案:

1>首先搞清楚什么是线程,什么是多线程.

2>Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程

3>开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的(但是还是可以操作Mach类到子线程后,Mach回到主线程.)

4>开发中实现多线程的方案

C语言的POSIX接口: #include

OCNSThread

C语言的GCD接口(苹果官方推荐使用,由系统管理何时释放何时退出,性能最好,代码简洁)

OCNSOperationNSOperationQueue (基于GCD进行一层包装,面向对象)


问题:

2.线程间怎么通信


答案:

1>performSelector:onThread:withObject:waitUntilDone;

(子线程开始任务,任务完成后回到主线程)

2>NSMachPort


问题:

3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题?

答案:

1>利用字典(图片地址为Key,下载操作为value)


问题:

4.NSOpertionNSOpertionQueue处理A,B,C三个线程,要求执行完A,B才能执行C,怎么做?

答案:

1>开启线程,添加依赖,执行操作.


问题:

5.GCD内部怎么实现的


答案:

1>iOSOSX的核心是XNU内核, GCD是基于XNU内核,GCD是基于XNU内核实现的.

2>GCDAPI全部在lib dispatch库中.

3>GCD的底层实现主要有Dispatch QueueDispatch Source.

Dispatch Queue :管理block(操作).

Dispatch Source :处理事件理.


问题:

6.NSOperationQueueGCD区别


答案:

1>GCD是纯C语言的API, NSOperationQueue是基于GCDOC版本的封装

2>GCD只支持FIFO的队列,NSOperationQueue可以很方便的调整执行顺序,设置最大并发数量

3>NSOperationQueue可以轻松在Operation间设置依赖关系,GCD需要写很多的代码才能实现

4>NSOperationQueue支持KVO,可以监测operation是否在执行(isExecuted)是否结束(isFinished),是否取消(isCanceld )

5>GCD的执行速度比NSOperationQueue


问题:

7.客户端安全性处理方式?


答案:

1>网络数据传输(敏感数据\[账号\密码\消费数据\银行卡账号],不能明文发送)

2>协议的问题(自定义协议,游戏代练)

3>本地文件存储(游戏的存档)

4>源代码(对于iOS目前是安全的)


问题:

8.sip是什么?

答案:

1>SIP(Session Initiation Protocol),会话发起协议

2>SIP是建立VOIP连接IETF标准,IETF是全球互联网最具权威的技术标准化组织

3>所谓VOIP,就是网络电话,直接用互联网打电话,不用耗手机话费


问题:

9.有些图片加载的比较慢怎么处理?你是怎么优化程序的性能的?

答案:

1>图片下载放在异步线程

2>图片下载过程中使用占位图片

3>如果图片比较大,可以考虑多线程断点下载


问题:

10.你实现过一个框架或者库以供别人使用么?如果有请谈一谈构建框架或者库时候的经验;如果没有,请设想和设计框架的publicAPI,并指出大概需要如何做,需要注意一些什么方面,来使别人容易的使用你的框架.


答案:

1>提供给外界的接口功能是否实用,够用.

2>别人使用我的框架时,能不能根据类名,方法名就猜出接口的具体作用.

3>别人调用接口时,提供的参数是否够用,调用起来是否简单.

4>别人使用我的框架时,要不要再导入依赖其他的框架.

你可能感兴趣的:(iOS笔记--面试题02)