一、多线程网络

1. 多线程的底层实现?

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

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

3> 开发中非常少用Mach级的线程,由于Mach级的线程没有提供多线程的基本特征,线程之间是独立的

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

l C语言的POSIX接口:#include <pthread.h>

l OC的NSThread

l C语言的GCD接口(性能最好。代码更精简)

l OC的NSOperation和NSOperationQueue(基于GCD)

2.线程间怎么通信?

1> performSelector:onThread:withObject:waitUntilDone:

2> NSMachPort

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

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

4.用NSOpertion和NSOpertionQueue处理A,B,C三个线程,要求运行完A,B后才干运行C,怎么做?

// 创建队列

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

// 创建3个操作

NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operation1---“);

}];

NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operation1---“);

}];

NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@”operation1---“);

}];

// 加入依赖

[c addDependency:a];

[c addDependency:b];

// 运行操作

[queue addOperation:a];

[queue addOperation:b];

[queue addOperation:c];

5.列举cocoa中常见对几种多线程的实现。并谈谈多线程安全的几种解决的方法及多线程安全怎么控制?

1> 仅仅在主线程刷新訪问UI

2> 假设要防止资源抢夺。得用synchronized进行加锁保护

3> 假设异步操作要保证线程安全等问题, 尽量使用GCD(有些函数默认就是安全的)

6.GCD内部怎么实现的

1> iOS和OS X的核心是XNU内核,GCD是基于XNU内核实现的

2> GCD的API所有在libdispatch库中

3> GCD的底层实现主要有Dispatch Queue和Dispatch Source

l Dispatch Queue :管理block(操作)

l Dispatch Source :处理事件

7. 你用过NSOperationQueue么?假设用过或者了解的话。你为什么要使用NSOperationQueue,实现了什么?请描写叙述它和GCD的差别和类似的地方(提示:能够从两者的实现机制和适用范围来描写叙述)。

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

2> GCD仅仅支持FIFO的队列,NSOperationQueue能够非常方便地调整运行顺序、设置最大并发数量

3> NSOperationQueue能够在轻松在Operation间设置依赖关系。而GCD须要写非常多的代码才干实现

4> NSOperationQueue支持KVO,能够监測operation是否正在运行(isExecuted)、是否结束(isFinished)。是否取消(isCanceld)

5> GCD的运行速度比NSOperationQueue快

任务之间不太互相依赖:GCD

任务之间有依赖\或者要监听任务的运行情况:NSOperationQueue

8. 既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?block在ARC中和传统的MRC中的行为和使用方法有没有什么差别,须要注意些什么?

Block的使用注意:

1> block的内存管理

2> 防止循环retian

l 非ARC(MRC):__block

l ARC:__weak\__unsafe_unretained

9.在异步线程中下载非常多图片,假设失败了,该怎样处理?请结合RunLoop来谈谈解决方式.(提示:在异步线程中启动一个RunLoop又一次发送网络请求,下载图片)

1> 又一次下载图片

2> 完成下载, 利用RunLoop的输入源回到主线程刷新UIImageVIUew

10. Socket的实现原理及Socket之间是怎样通信的

11. http协议的实现

二、内存管理

1. 怎么保证多人开发进行内存泄露的检查.

1> 使用Analyze进行代码的静态分析

2> 为避免不必要的麻烦, 多人开发时尽量使用ARC

2.非自己主动内存管理情况下怎么做单例模式.

创建单例设计模式的基本步骤 ·

>声明一个单件对象的静态实例,并初始化为nil。

>创建一个类的类工厂方法,当且仅当这个类的实例为nil时生成一个该类的实例

>实现NScopying协议, 覆盖allocWithZone:方法,确保用户在直接分配和初始化对象时,不会产 生还有一个对象。

>覆盖release、autorelease、retain、retainCount方法, 以此确保单例的状态。

>在多线程的环境中,注意使用@synchronizedkeyword或GCD,确保静态实例被正确的创建和初始化。

3.对于类方法(静态方法)默认是autorelease的。全部类方法都会这样吗?

1> 系统自带的绝大数类方法返回的对象,都是经过autorelease的

4.block在ARC中和MRC中的使用方法有什么差别,须要注意什么

1.对于没有引用外部变量的Block,不管在ARC还是非ARC下,类型都是__NSGlobalBlock__,这样的类型的block能够理解成一种全局的block,不须要考虑作用域问题。同一时候,对他进行Copy或者Retain操作也是无效的

2.应注意避免循环引用

5.什么情况下会发生内存泄漏和内存溢出?

当程序在申请内存后。无法释放已申请的内存空间(比如一个对象或者变量使用完毕后没有释放,这个对象一直占用着内存),一次内存泄露危害能够忽略。但内存泄露堆积后果非常严重。不管多少内存,迟早会被占光。

内存泄露会终于会导致内存溢出。

当程序在申请内存时。没有足够的内存空间供其使用。出现out of memory;比方申请了一个int,但给它存了long才干存下的数。那就是内存溢出。

6.[NSArray arrayWithobject:<id>] 这种方法加入对象后,须要对这个数组做释放操作吗?

不须要 这个对象被放到自己主动释放池中

7.Json数据的解析,和解析数据的时候有内存泄露吗?有的话 怎样解

1> JSON解析的方案

l SBJson

l JSONkit

l NSJSONSerialization

2> 内存泄漏么?

8. 自己主动释放池底层怎么实现

自己主动释放池以栈的形式实现:当你创建一个新的自己主动释放池时,它将被加入到栈顶。当一个对象收到发送autorelease消息时,它被加入到当前线程的处于栈顶的自己主动释放池中,当自己主动释放池被回收时,它们从栈中被删除, 而且会给池子里面全部的对象都会做一次release操作.

三、Foundation

1. KVO内部实现原理

1> KVO是基于runtime机制实现的

2> 当某个类的对象第一次被观察时, 系统就会在执行期动态地创建该类的一个派生类,在这个派生类中重写基类中不论什么被观察属性的 setter 方法。

派生类在被重写的 setter 方法实现真正的通知机制(Personà NSKVONotifying_Person)

2. 能否够把比較耗时的操作放在NSNotificationCenter中

假设在异步线程发的通知。那么能够运行比較耗时的操作;

假设在主线程发的通知,那么就不能够运行比較耗时的操作

3.Foundation对象与Core Foundation对象有什么差别

1> Foundation对象是OC的。Core Foundation对象是C对象

2> 数据类型之间的转换

l ARC:__bridge_retained、__bridge_transfer

l 非ARC: __bridge

4.不用中间变量,用两种方法交换A和B的值

A = A + B

B = A - B

A = A - B

或者

A = A^B;

B = A^B;

A = A^B;

5.简单描写叙述下对单利模式设计的理解?

节省内存资源,一个应用就一个对象。

6.什么是动态。举例说明

1> 在程序执行过程才执行的操作

7.runtime实现的机制是什么,怎么用。一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?

执行时机制,runtime库里面包括了跟类、成员变量、方法相关的API。比方获取类里面的全部成员变量,为类动态加入成员变量。动态改变类的方法实现,为类动态加入新的方法等 须要导入<objc/message.h><objc/runtime.h>

1> runtime。执行时机制。它是一套C语言库

2> 实际上我们编写的全部OC代码,终于都是转成了runtime库的东西,比方类转成了runtime库里面的结构体等数据类型,方法转成了runtime库里面的C语言函数,平时调方法都是转成了objc_msgSend函数(所以说OC有个消息发送机制)

3> 因此,能够说runtime是OC的底层实现。是OC的幕后运行者

4> 有了runtime库。能做什么事情呢?runtime库里面包括了跟类、成员变量、方法相关的API,比方获取类里面的全部成员变量,为类动态加入成员变量,动态改变类的方法实现,为类动态加入新的方法等

5> 因此。有了runtime,想怎么改就怎么改

8.是否使用Core Text或者Core Image等?假设使用过,请谈谈你使用Core Text或者Core Image的体验。

CoreText

• 任意改动文本的样式

• 图文混排(纯C语言)

• 国外:Niumb

Core Image(滤镜处理)

* 能调节图片的各种属性(对照度, 色温, 色差等)

9.NSNotification和KVO的差别和使用方法是什么?什么时候应该使用通知,什么时候应该使用KVO,它们的实现上有什么差别吗?假设用protocol和delegate(或者delegate的Array)来实现类似的功能可能吗?假设可能,会有什么潜在的问题?假设不能,为什么?(尽管protocol和delegate这样的东西面试已经面烂了…)

通知比較灵活(1个通知能被多个对象接收, 1个对象能接收多个通知),

代理比較规范,可是代码多(默认是1对1)

KVO性能不好(底层会动态产生新的类),仅仅能监听某个对象属性的改变, 不推荐使用(1个对象的属性能被多个对象监听,  1个对象能监听多个对象的其它属性)

更具体參考:

http://blog.csdn.net/dqjyong/article/details/7685933

10.Block内部的实现原理

Objective-C是对C语言的扩展。block的实现是基于指针和函数指针

11. 有两个数组a,b。大小都为n,数组元素的值随意,无序;

要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小

算法题。要么靠功底,要么百度

四、数据存储

1. 假设后期须要添加数据库中的字段怎么实现,假设不使用CoreData呢?

编写SQL语句来操作原来表中的字段

1> 添加表字段

ALTER TABLE 表名 ADD COLUMN 字段名 字段类型;

2> 删除表字段

ALTER TABLE 表名 DROP COLUMN 字段名;

3> 改动表字段

ALTER TABLE 表名 RENAME COLUMN 旧字段名 TO 新字段名;

2. SQLite数据存储是怎么用?

1> 加入SQLite动态库:

2> 导入主头文件:#import <sqlite3.h>

3> 利用C语言函数创建\打开数据库。编写SQL语句

3. 简单描写叙述下client的缓存机制?

1. 缓存能够分为:内存数据缓存、数据库缓存、文件缓存

2. 每次想获取数据的时候

1> 先检測内存中有无缓存

2> 再检測本地有无缓存(数据库\文件)

3> 终于发送网络请求

4> 将server返回的网络数据进行缓存(内存、数据库、文件)。 以便下次读取

4. 你实现过多线程的Core Data么?NSPersistentStoreCoordinator。NSManagedObjectContext和NSManagedObject中的哪些须要在线程中创建或者传递?你是用什么样的策略来实现的?

1> CoreData是对SQLite数据库的封装

2> CoreData中的NSManagedObjectContext在多线程中不安全

3> 假设想要多线程訪问CoreData的话,最好的方法是一个线程一个NSManagedObjectContext

4> 每一个NSManagedObjectContext对象实例都能够使用同一个NSPersistentStoreCoordinator实例,这是由于NSManagedObjectContext会在便用NSPersistentStoreCoordinator前上锁

5. core  data数据迁移

http://blog.csdn.net/jasonblog/article/details/17842535



IOS-4-面试题1:黑马程序猿IOS面试题大全的更多相关文章

  1. 黑马程序猿_7K面试题之交通灯系统

    交通灯信号模拟系统 一.概述 模拟实现十字路口的交通灯管理系统逻辑,详细需求例如以下:(需求直接来源于老师的文档) ①      异步随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆 ...

  2. 黑马程序猿————Java基础日常笔记---反射与正則表達式

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...

  3. 黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile

    ------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  4. 黑马程序猿——15,String,StringBuffer,基本数据类型包装对象

    ------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...

  5. 黑马程序猿_Java 代理机制学习总结

    -------<a href="http://www.itheima.com/"">android培训</a>.<a href=" ...

  6. 黑马程序猿——Java中的类载入器

    ------- android培训.java培训.期待与您交流! -------- 类载入器 Java虚拟机中能够安装多个类载入器,系统默认三个主要类载入器,每一个类负责载入特定位置的类: BootS ...

  7. 黑马程序猿_try-catch-finally

    ------- android培训.java培训.期待与您交流! ---------- try-catch-finally中怎样定义语句呢? 1.try块中主要定义可能出现的异常处理语句 2.catc ...

  8. 黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream

    ---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- package cn.itcast.IO; i ...

  9. 黑马程序猿————OC在Foundation框架结构和字符串

    ------<a href="http://www.itheima.com" target="blank">Java火车.Android火车.iOS ...

随机推荐

  1. [agc014d] Black and White Tree(玄学树D)

    Description 有一颗n个点的树,刚开始每个点都没有颜色. Alice和Bob会轮流对这棵树的一个点涂色,Alice涂白,Bob涂黑,Alice先手. 若最后存在一个白点,使得这个白点所有相邻 ...

  2. 移动WEB前端开发资源的一些素材

    meta篇: <meta name="viewport" content="width=device-width,initial-scale=1.0,user-sc ...

  3. SQL查询重复记录方法大全 转

    原文发布时间为:2010-08-09 -- 来源于本人的百度文章 [由搬家工具导入] 查找所有重复标题的记录: SELECT *FROM t_info aWHERE ((SELECT COUNT(*) ...

  4. ThreadPool基础之RegisterWaitForSingleObject

    原文发布时间为:2010-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 首先我们看一下它的原型: Codepublic static RegisteredWaitHandle Regis ...

  5. 从头实现一个koa框架

    koajs是最流行的nodejs后端框架之一,有很多网站都使用koa进行开发,同时社区也涌现出了一大批基于koa封装的企业级框架.然而,在这些亮眼的成绩背后,作为核心引擎的koa代码库本身,却非常的精 ...

  6. error C2275 将此类型用作表达式非法

    http://blog.csdn.net/lqk1985/article/details/7389159 C2275: “size_t”: 将此类型用作表达式非法,同时还导致一堆变量未定义的bug. ...

  7. Linux和Windows兼容

    1. 介绍 我们知道Linux上的应用程序是ELF格式的,而Windows则是PE格式 所以要解决这个问题首先二进制加载问题:其次,就是API问题,两者的API完全不同要实现兼容,就需要构建一个虚拟层 ...

  8. eWebEditor不支持IE7以上版本Bug修改

    修改: \Include\Editor.js //把此行 if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous() ...

  9. Action 和 Func 的用法以及区别

    Action 无返回值 Func 有返回值,且最后一个参数为返回值 Action用法 public static void test(string s) { Console.WriteLine(&qu ...

  10. Block为什么使用Copy?

    block:本质就是一个object-c对象block:存储位置,可能分为3个地方:代码去,堆区.栈区(ARC情况下会自动拷贝到堆区,因此ARC下只能有两个地方:代码去.堆区)代码区:不访问栈区的变量 ...