一、多线程网络

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. 【HDOJ5996】dingyeye loves stone(Nim游戏)

    题意:dingyeye喜欢和你玩石子游戏.dingyeye有一棵n个节点的有根树,节点编号为0到n−1,根为0号节点. 游戏开始时,第i个节点上有a[i]个石子.两位玩家轮流操作,每次操作玩家可以选择 ...

  2. poj 1637 Sightseeing tour 混合图欧拉回路 最大流 建图

    题目链接 题意 给定一个混合图,里面既有有向边也有无向边.问该图中是否存在一条路径,经过每条边恰好一次. 思路 从欧拉回路说起 首先回顾有向图欧拉回路的充要条件:\(\forall v\in G, d ...

  3. TCP/IP协议详解笔记——ARP协议和RARP协议

    ARP:地址解析协议 对于以太网,数据链路层上是根据48bit的以太网地址来确定目的接口,设备驱动程序从不检查IP数据报中的目的IP地址.ARP协议为IP地址到对应的硬件地址之间提供动态映射. 工作过 ...

  4. ftk学习记(label篇)【转】

    转自:http://blog.csdn.net/feixiaoxing/article/details/25000093 版权声明:本文为博主原创文章,未经博主允许不得转载. [ 声明:版权所有,欢迎 ...

  5. Cryptography I 学习笔记 --- 数论简介

    0. Zn代表{0,1....n-1}的集合 1. 模运算符合交换律结合律 2. gcd(greatest common divisor),可以由扩展欧几里得算法快速得到. 3. 模逆(modular ...

  6. BZOJ1801 [Ahoi2009]chess 中国象棋(DP, 计数)

    题目链接 [Ahoi2009]chess 中国象棋 设$f[i][j][k]$为前i行,$j$列放了1个棋子,$k$列放了2个棋子的方案数 分6种情况讨论,依次状态转移. #include <b ...

  7. 【原创】Android View框架总结(三)View工作原理

    测量/布局/绘制顺序 如何引起View的测量/布局/绘制? PerformTraversales() ViewRoot View工作基本流程  MeasureSpec SpecMode Measure ...

  8. How To Commit Just One Data Block Changes In Oracle Forms

    You have an Oracle Form in which you have multiple data blocks and requirement is to commit just one ...

  9. arcgis10安装及破解

    操作系统:win7    arcgis版本:10.0 1.运行arcgis10安装包里的esri.exe,出现以下安装界面.先点“许可管理器”的“安装”,一路点下去,什么都不用管. 2.完成后在lic ...

  10. Scut游戏服务器引擎6.1.5.6发布,直接可运行,支持热更新

    1. 增加exe版(console),web版本(IIS)的游戏服宿主程序 2. 增加Model支持脚本化,实现不停服更新 3. 增加Language支持脚本化 4. 修改Sns与Pay Center ...