YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

iOS面试题二

[转][http://www.jianshu.com/p/9179e5d780c8]

  • 线程与进程的区别和联系**
    • 一个程序至少要有进程,一个进程至少要有一个线程。
    • 进程:资源分配的最小独立单元,进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
    • 线程:进程下的一个分支,是进程的实体,是CPU调度和分派的基本单元,它是比进程更小的能独立运行的基本单位,线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器、栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。
    • 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
    • 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
    • 但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
  • 多线程编程
    • NSThread:当需要进行一些耗时操作时会把耗时的操作放到线程中。线程同步:多个线程同时访问一个数据会出问题,NSlock、线程同步块、@synchronized(self){}。
    • NSOperationQueue操作队列(不需考虑线程同步问题)。编程的重点都放在main里面,NSInvocationOperation、BSBlockOperation、自定义Operation
    • GCD(`Grand Central Dispatch)宏大的中央调度,串行队列、并发队列、主线程队列;
    • 同步和异步:同步指第一个任务不执行完,不会开始第二个,异步是不管第一个有没有执行完,都开始第二个
    • 串行和并行:串行是多个任务按一定顺序执行,并行是多个任务同时执行
    • 代码是在分线程执行,在主线程队列中刷新UI
  • 定时器与线程的区别
    • 定时器:可以执行多次,默认在主线程
    • 线程:只能执行一次
  • TCP和UDP的区别于联系
    • TCP为传输控制层协议,为面向连接、可靠的、点到点的通信;
    • UDP为用户数据报协议,非连接的不可靠的点到多点的通信;
    • TCP侧重可靠传输,UDP侧重快速传输。
  • Scoket连接和HTTP连接的区别
    • HTTP协议是基于TCP连接的,是应用层协议,主要解决如何包装数据。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
    • HTTP连接:短连接,客户端向服务器发送一次请求,服务器响应后连接断开,节省资源。服务器不能主动给客户端响应(除非采用HTTP长连接技术),iPhone主要使用类NSURLConnection
    • Socket连接:长连接,客户端跟服务器端直接使用Socket进行连接,没有规定连接后断开,因此客户端和服务器段保持连接通道,双方可以主动发送数据
  • ASIHttpRequest、AFNetWorking之间的区别
    • ASIHttpRequest功能强大,主要是在MRC下实现的,是对系统CFNetwork
      API进行了封装,支持HTTP协议的CFHTTP,配置比较复杂,并且ASIHttpRequest框架默认不会帮你监听网络改变,如果需要让ASIHttpRequest帮你监听网络状态改变,并且手动开始这个功能。
    • AFNetWorking构建于NSURLConnection、NSOperation以及其他熟悉的Foundation技术之上。拥有良好的架构,丰富的API及模块构建方式,使用起来非常轻松。它基于NSOperation封装的,AFURLConnectionOperation子类。
  • XML数据解析方式各有什么不同,JSON解析有哪些框架
    • XML解析:DOM和SAX
    • JSON解析:性能比较好的主要是第三方的JSONKIT和iOS自带的JSON解析类,其中自带的JSON解析性能最高
  • 对NSUserDefaults的理解
    • 系统提供的一种存储数据的方式,主要用于保存少量的数据,默认存储到library下的Preferences文件夹。
  • SDWebImage原理
    • 从内存中(字典)找图片(当这个图片在本次程序加载过),找到直接使用;
    • 从沙盒中找,找到直接使用,缓存到内存。
    • 从网络上获取,使用,缓存到内存,缓存到沙盒。
  • 单例模式理解与使用
    • 单例模式是一种常用设计模式,单例模式是一个类在系统中只有一个实例对象。通过全局的一个入口点对这个实例对象进行访问
    • iOS中单例模式的实现方式一般分为两种:非ARC和ARC+GCD
  • 对沙盒的理解
    • 应用程序在自己的沙盒中运作,但是不能访问其他应用程序的沙盒
    • 应用之间不能共享数据,沙盒里的文件不能被复制到其他应用程序的文件夹中,也不能把其他应用文件夹复制到沙盒中
    • 沙盒目录有三个文件夹:Ducuments——存储,应用程序的数据文件,存储用户数据或其他定期备份的信息;Library:Caches存储应用程序再次启动所需的信息,Preferences包含应用程序的偏好设置文件,不可在这更改偏好设置;temp存放临时文件即应用程序再次启动不需要文件
      • 获取沙盒根目录的方法,有几种方法:用NSHomeDirectory获取
      • 获取Document路径:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)。
  • @synthesize、@dynamic的理解
    • 前面这个是自动生成getter和setter属性声明;除非开发人员做了,否则由编译器生成相应的代码以满足属性声明
    • 后面这个是开发者自己提供的属性声明,
  • View和View之间传值方式
    • 属性传值
    • 方法参数传值
    • NSUserDefault传值
    • 块传值
    • delegate传值
    • 单例传值
  • 对于Run Loop的理解
    • 一个线程一次只能执行一个任务,默认不运行RunLoop。
    • 每一个线程都有对应的RunLoop,只是默认只有主线程的RunLoop启动的,手动启动