1.内存管理
2.单例的理解
3.post和get的区别
4.md5和base64是什么,有什么区别
5.简单谈谈UDP和TCP(http和https)
6.谈谈多线程吧?你在项目中一般那些地方用到多线程。gcd有几种队列。
7.设计一个多线程,分别下载三个图片然后再将图片组合。
8.x=1。线程a:{x++;}线程b:{x++;}为什么结果是x=2。
9.现在有一个资源网址(资源是什么未知),要请求这个资源你会怎么做(你会考虑哪些东西)?
10.assign和weak是什么,有什么区别?_block和_weak又是什么,有什么区别?(strong,nonatomic,readonly等)
11.oc语言的三大特点(面向对象语言的特点)。
12.数据库。
13.自动布局autolayout
14.#import、class和#include的区别
15.在一个对象的方法里面:self.name=“object”;和name= “object”有什么不同。
16.程序和页面的生命周期
17.MVC的理解
18.KVC和KVO是什么,有什么区别
19.深浅复制的区别
20.frame 和bounds有什么不同
21.队列和栈有什么区别
22.UIview和CLayer有什么区别?
23.类别的作用?继承和类别在实现中有何区别?扩展类?
24.tableview的复用机制?
25.程序崩溃通常是因为啥原因。
26.有使用instrument么?简单谈谈吧。
27.自动释放池是什么,如何工作的。
28.ios数据存储的方式有那些?
29.SDWebImage的原理。
30.程序性能的优化和程序存储大小的缩减(如何缩减.ipa文件的大小)。
人事
1.简单介绍下自己。
2.为什么会离职。
3.有什么关于公司想要了解的。
=========================================
一、多线程及网络相关的问题:
1.多线程的底层实现?
2.线程间怎么通信?
3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题?
4.用NSOpertion和NSOpertionQueue处理A,B,C三个线程,要求执行完A,B后才能执行C,怎么做?
5.列举cocoa中常见对集中多线程的实现,并谈谈多线程安全的几种解决办法及多线程安全怎么控制?
6.gcd内部怎么实现的
7.你用过NSOperationQueue么?如果用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方(提示:可以从两者的实现机制和适用范围来描述)。
8.既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?block在ARC中和传统的MRC中的行为和用法有没有什么区别,需要注意些什么?
9.在异步线程中下载很多图片,如果失败了,该如何处理?请结合RunLoop来谈谈解决方案.(提示:在异步线程中启动一个RunLoop重新发送网络请求,下载图片)
10.Socket的实现原理及Socket之间是如何通信的
11.http协议的实现
二、内存管理相关的问题:
1.怎么保证多人开发进行内存泄露的检查.
2.非自动内存管理情况下怎么做单例模式.
3.对于类方法(静态方法)默认是autoRelease的。我添加的代码导致了过渡释放。所有类方法都会这样吗?
4.block在ARC中和MRC中的用法有什么区别,需要注意什么
5.什么情况下会发生内存泄漏和内存溢出?
6.[Nsarry array withobject:]这个方法添加对象后,需要对这个数组做释放操作吗?
7.Josn数据的解析,和解析数据的时候有内存泄露吗?有的话如何解决
8.自动释放池底层怎么实现
三、C语言和Foundation相关的问题
1.KVO内部实现原理
2.是否可以把比较耗时的操作方在NSNotificationCenter中
3.Cocoa的Foundation对象与Core
Foundation对象有什么区别
4.不用中间变量,用两种方法交换A和B的值
5.简单描述下对单利模式设计对理解?
6.什么是动态,举例说明
7.runtime实现的机制是什么,怎么用,一般用于干嘛.你还能记得你所使用的相关的头文件或者某些方法的名称吗?
8.是否使用过CoreText或者CoreImage等?如果使用过,请谈谈你使用CoreText或者CoreImage的体验。
9.NSNotification和KVO的区别和用法是什么?什么时候应该使用通知,什么时候应该使用KVO,它们的实现上有什么区别吗?如果用protocol和delegate(或者delegate的Array)来实现类似的功能可能吗?如果可能,会有什么潜在的问题?如果不能,为什么?(虽然protocol和delegate这种东西面试已经面烂了…)
10.Block内部的实现原理
11.有两个数组a,b,大小都为n,数组元素的值任意,无序;
要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小
四、数据存储相关的问题
1.如果后期需要增加数据库中的字段怎么实现,如果不实用核心数据呢?
2.SQLite数据存储是怎么用?
3.简单描述下客户端到缓存机制?
4.你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?
5.coredata数据迁移
五、UI控件相关的问题
1.怎么解决缓存池满的问题,(cell)
2.CAAnimation的层级结构
3.UIButton与UITableView的层级结构
4.如何渲染自定义格式字符串的UILable
5.设置scroll view的contensize能在Viewdidload里设置么,为什么
6.按钮或者其它UIView控件的事件传递的具体过程
7.控制器View的生命周期及相关函数是什么?你在开发中是如何用的?
六、应用程序相关的问题
1.NSRunLoop的实现机制,及在多线程中如何使用
2.IOS7之前,后台执行内容有几种形式,都是什么
3.简单说一下APP的启动过程,从main文件开始说起
4.把程序自己关掉和程序进入后台,远程推送的区别
5.本地通知和远程推送通知对基本概念和用法?
七、第三方框架相关的问题
1.第三方API是怎么用的?
2.列举现在熟悉iOS开发库和第三方开发库?
八、其它相关的问题
1.客户端安全性处理方式?
2.简单描述下社交行为到步足?
3.sip是什么?
4.数据比较大的时候是用内循环,还是外循坏?
5.有些图片加载的比较慢怎么处理?你是怎么优化程序的性能的?
6.你实现过一个框架或者库以供别人使用么?如果有,请谈一谈构建框架或者库时候的经验;如果没有,请设想和设计框架的public的API,并指出大概需要如何做、需要注意一些什么方面,来使别人容易地使用你的框架。
7.App需要加载超大量的数据给服务器发送请求,但是服务器卡住了如何解决?
8.利用NSNotificationCenter实现跨多控制器传输数据和消息中用同步还是异步?
9.如何编写xml
10.什么时候该使用通知,什么时候该使用KVO,如果用delegate来实现类似功能可以吗
11.地图导航不能用了怎么办
12.SDWebImage具体如何实现
13.AFN与ASI有什么区别
14.你在实际开发中,有哪些手机架构与性能调试经验
15.runloop定时源和输入源
16.你们项目中都用了哪些框架,及何种开发工具,具体到是哪个版本,这个版本的特性有哪些???(比如xcode的版本)
17.自己怎么实现原子锁
18.运行时的内部实现
19.即时通讯中的大数据处理
20.json解析的具体实现
21.runtime机制下,当碰到多层嵌套而且数据有空值时,怎样防止错误
22.还有一个问题,就是如果在网络数据处理过程中,发现一处比较卡,一般怎么解决
23.怎么介绍一个项目
24.怎么解决sqlite锁定的问题啊
25.AFN框架里面判断WIFI和有无网络的那4种情况。问我他实现的原理是什么
======================================
1、简述一下UIViewController的生命周期?
2、#import和#include的区别?
3、写一个计算A、B中较大值的标准宏MAX?
4、谈一下iOS中的多线程?
5、谈一下Objective-C的内存管理方式?
6、简述assign、retain、copy、weak和strong分别在什么情况下使用?
7、类别的作用?说一下类别和类扩展的区别?
8、说说你对KVC和KVO的理解?
9、深复制和浅复制的区别?
10、谈一下你对block的理解,请写一个block类型的属性?
11、frame和bounds的区别?
12、谈一下UITableViewCell的重用机制?
13、简述一下消息推送的流程?
14、简述一下App发布到AppStore的流程?
15、谈一下面向对象的几个主要特征?
16、谈一下你常用的一些设计模式及应用场景?
17、谈一下关键字static的作用?关键字const呢?
18、堆和栈的区别是什么?
19、break、continue、return的区别是什么?
20、int *p中*p和p的分别代表什么?
21、讲一下OC和C有哪些区别?
22、谈谈你对代理设计模式的理解?
23、谈谈Http协议,其中GET和POST有哪些区别?
24、谈谈你对MVC开发模式的理解及你是如何在项目中采用MVC模式开发的?
25、谈谈你对Socket的理解?TCP和UDP协议有什么区别
26、你常用的数据存储方式有哪些?
27、通知中心和代理都可以用来发送消息和数据,两者有什么区别?
28、类别和继承有哪些区别?
29、你在项目当中是如何进行网络数据请求的?
30、你有做过iPhone6的屏幕适配吗?在项目中你是如何进行适配的?
=========================================
问题陷阱
1、请你做一下自我介绍
2、你在找工作时,最重要的考虑因素是什么?
3、你对我们公司了解多少?你为什么想来我们公司工作?
4、请谈谈你的优点和缺点?
5、你为什么离开上一家公司?
6、工作中曾面临的最大困难是什么?如何解决的?
7、你的职业目标是什么?(短期和长期)
8、你是应届生,缺乏经验,如何胜任这份工作?
9、你对加班的看法?
10、你对薪资的要求?
11、你最擅长的技术方向是什么?谈谈你之前做的项目?
12、你有什么问题要问我?
北京中德福林软件科技有限公司
1、简述下苹果的开发框架?
2、常用的ios设计模式有哪些?
3、简叙述下苹果开发者的认证过程,以及上传应用,怎么供给其他开发者进行使用?
4、继承跟类别的区别,为什么要有类别的存在?
5、简述下ios6新增的新特性?
6、简述ARC的机制原理
7、简单编写一个block代理?
8、怎么解决ios5,ios6中横竖屏的问题?
9、MVC是什么?有什么特性?为什么在iphone上被广泛运用?
10、委托是什么?委托的property声明用什么属性?为什么?
11、项目使用过哪些第三方库?
12、怎么实现tableView懒加载?
13、编写一个singleton的类?
14、开发过程中最常见的异常有哪些,列举几个?
艺恩
1、假设有一个字符串aabcad,请编写一段程序。去掉字符串中不相邻的重复字符,即上述字符串处理之后的输出结果为:aabcd。
2、获取一台设备唯一标识的方法有哪些?
3、写一个NSString类的实现?
爱卡汽车
1、写出以下的NSLog的输出格式
intNSStringfloat/double
2、[ UIImageimagewithnamed:@”xx.png”];好处坏处?
3、这是同步还是异步取得数据
ASIHTTPRequest*request=[ ASIHTTPRequestrequestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
4、写一个委托的interface。
5、列举一下你们常用的UI控件
6、如何管理内存?
7、使用UITableView时候必须要实现得几个方法?
8、列举一下你们用过的xml或是json接口的样式?
9、简述一下在ios开发中SQLite的使用方法(以文字或是代码的形式来叙述)
10、谈谈你对ios下的多线程开发的理解。
11、如何设计一个新闻浏览。评论的app。简述一下用到的开发技术,和实现方式。
龙宇北腾
1、ios类是否可以多继承,浅复制和深复制有什么区别?
2、堆和栈的区别?
3、内存管理Autorelease、retain、,copy、assign的set方法和含义?
4、请写出ios组件,要求不低于20个?
5、写出方法获取ios内存使用情况?
6、ios本地数据存储都有哪几种方式?
7、在已越狱设置中ios如何强制信息通知?
北京融易通信息技术有限公司
1、NSArray与NSMutableArray的区别,多线程操作哪个更安全?
2、copy和retain有什么区别?那么原子(atomic)和非原子(nonatomic)属性又有什么区别
3、选择一种iOS常用的设计模式,并作简要介绍
4、unsigned int和int有什么区别。假设int长度为65535,请写出unsigned
int与int的取值范围
5、介绍一下iOS sandbox的层级结构,我们经常使用到的NSUserDefauits它的保存路径是什么?
6、描述UIButton和UITableView的层级结构(即该类的父类父类的父类)
7、解释MyClass * object1 = [[[MyClass alloc] init [object2hello]autorelease]
8、能否了解过category的实现原理,为什么category只能为对象增加成员变量
编程题:
9、使用Delegate或者Block实现类之间的通讯
10、当前有一个数组,里面有若干重复的数据,如何除去重复的数据
凤凰网真实面试题
1、关键字volatile有什么含义?并给出三个不同的例子
2、简述static关键字的作用
3、#import和#include的区别@class呢
4、线程和进程的区别和联系
5、简述堆和栈的区别
6、简述Objective - c内存管理
7、为什么内置类如UITableVIewController的delegate属性都是assign?
8、定义属性时,什么情况适用copy assign和retain
9、对象在什么时候被release
10、iPhone OS有没有垃圾回收机制
11、ViewController的loadView、viewDidLoad、viewDidUnLoad分别是在什么时候调用?自定义ViewController的时候这几个函数在里面做什么
12、ViewColntroller的didRectiveMemoryWarning是在什么时候被调用?默认操作是什么
13、列举Cocoa中长用得几种多线程实现,并谈谈安全性问题的几种方案,什么地方会用到多线程
14、你是怎么理解MVC的, 在Cocoa中MVC是怎么实现的
15、用预处理指令#define生命一个常数没用你表明一年有多少秒
16、Objecative—有多重继承么?不是的话有什么替代方法
17、关键字const有什么含义
汽车之家真实面试题
1、请写出以下代码的执行结果:
NSString * name =[[NSString alloc] init];
name = @“ Habb ”;
[name release];
2、异常通常有哪些方式?
3、id是什么类型?何时使用?
4、委托的概念是什么
5、继承可以有多个parent么?
6、isKingOfClass与isMemberOfClass以及selector作用分别是什么
7、7、@class和#import的区别是什么
8、object c中有私有方法定义么?
9、category的作用是什么?
10、iOS应用开发中常用的UI控件有哪些?
11、使用宏应该注意哪些问题?
12、堆和栈的区别是什么?
13、说说你对retain、copy、strong、assign的理解
14、dealloc、release、autorelease的区别是什么?简述它们是如何工作的?
15、UIViewVontroller的didRectlveMemoryWarning是在什么时候被调用
16、protocal是什么?如何使用?
17、说说你对线程的理解?
18、说说你对MVC的理解?
杉德面试题
1、iOS允许最近本地通知数最大是多少
A.16B.32C.64D.128
2、int sum =0 ;
for ( int i= 0 , i < 5,I ++){
for( int j = 0, j < 3, j++){
sum = i + j ;
}
}
请问sum等于多少
A.3B.4C.5D.6
3、iOS自动布局首先出现在哪个iOS系统中?
A.iOS4.0B.iOS5.0
C.iOS6.0D.iOS7.0
4、让一个UIView刷新的方法是
A.setNeedsDisplayB.drawPect
C.loadViewD.initWithFrame
5、objective—C中category是什么
A.类目B.协议
C.延展D.代理
6、int m =0; int n = m++; m= n ++,请问m的结果是什么
A.0B.1C.2D.3
7、要实现自定义对象的归档必须实现的协议是
A.NSCopyingB.NSCoding
8、指出深拷贝和浅拷贝的区别
9、指出protocal和notification的区别和使用方式
10、Objective—C的内存管理机制
11、纤细说明kvc和kvo的区别和在什么情况下使用
12、什么是UITableView的重用机制
13、有一个序列M,如何判断其中是否有两个元素A、B的和为K?如何判断三个元素A、B、C的和为K
高德面试题
1、简述Object-C的内存管理方式及过程(非ARC)?
2、什么时候需要在程序中创建内存池(autorelease
pool)?
3、写一个setter方法用于完成@property(nonatomic,retain)NSString*name;
a)写一个setter方法用于完成@property(nonatomic,copy)NSString*name?
4、什么时候使用NSMutableArray,什么时候使用NSArray?他们的线程安全性如何?
5、简述#import与#include的区别,@class呢?
6、简述继承和类别(categories)的区别?
7、什么是KVO和KVC?
8、什么事lazy loading?有什么地方用到了?
9、你经常使用类NSObject的哪些方法?
10、写出获取单例(Singleton)的类方法,考虑多线程的问题?
11、用object-c写一个冒泡排序函数,输入为一个储存NSNumber的可变数组,输出void?
快约真实面试题
1、OOP设计遵循什么样的原则
2、例举一些你擅长的设计模式
3、介绍一下你最擅长的设计模式
4、了解过哪些UML图
5、如果设计一个交易平台,流程如下:A用户在平台P发现B用户有东西出售,P平台的业务逻辑是需要A先付款到P得中间账户,等到A确认收货后,P向B付款,你能尝试某种表示方式来让程序员,产品设计,美术设计明白这个流程么?
6、你最常用的设设计模式有哪些?
7、OC中如何实现继承
8、OC是否有指针的概念
9、NS/CF/CG/CA/UI这些前缀分别是什么含义
10、OC中最常用的类,时间,UI元素,库,以及第三方库?
11、如果你来指导新人入手OC的学习,你会如何让划分学习路径?
12、从其他语言转向OC开发,需要有哪些适应?
13、如何实现一个布局?以及嵌套布局?
14、如何实现多层UI?
15、OC中有哪些事件
16、动画如何实现?如果自己实现动画,该如何考虑
17、OC中如何做内存管理?何时需要手动管理
18、如果A引用B1,B1引用C1,然后B2也引用C1,现在B1释放了C1如何做到B2也自动释放C1
19、有哪些实现多线程的方式?有哪些库?
20、多线程冲突如何解决
21、iOS运行时至少运行了几种线程?分别是什么
22、OC中异步使用的哪种事件模型
23、聊聊iOS中异步实现机制
24、如何指定使用哪个函数来处理异步结果
25、iOS的核心是什么
26、为什么MVC与PC不一样?有哪些不一样?
27、你认为iOS开发和Android开发有什么相通之处?为什么?
28、iOS中包含哪些信息?
29、Xcode调试时如何及时产看表达式的值
30、清告诉你的客户为什么要升级到iOS7
31、介绍一下你最常用的数据结构
32、计算过程最重要的信息是什么?
33、iOS对网络的定义中,分了几层?分别是哪几层?
34、访问方法GET和POST的区别是什么?
35、HTTP头是什么样子的?其中有哪些信息?哪些信息是必须的?
36、客户端渡河将二进制数据传送给服务器
37、以前的项目如何保证安全
38、在客户端与服务器端结合开发的整合系统中,客户端与服务器端分贝适合做什么?客户端不能做什么?
39、HTTP与HTTPS过程分别是什么样子?有何异同
40、你在工作过程中,觉得最重要的能力有哪些?怎么获得这些能力
41、能否告诉我们你对自己的未来是如何规划的?现阶段你学要什么?
42、在校期间学习了哪些专业课程?
43、如何学习,聊聊你在学习方面的习惯
44、如何解决问题?
45、在校期间哪些课程学的比较好?
46、告诉我们,你常活跃的社区,账号
47、为什么离开上家公司?为什么是现在离开?
48、聊聊最精彩的实现实例
49、谈谈以前最喜欢的同事
50、薪资要求
51、我们的问题虽多,但还是不能全面挖掘你的潜力。能否聊聊哪些方面比较擅长?我们没有问到的?
终端中心面试题目
1、有一个老板类boss类,一个助理类assistant类,让助理实现发工资方法payOff(),在第三个类user类里调用(delegate实现)
2、2.@interfaceViewController:UIViewController
{
NSData*_c;
}
@property(nonatomic,retain)NSData *a;
@property(nonatomic,copy)NSData *b;
@property(nonatomic,copy)NSData *c;
@implementation ViewController
@synthesize a;
@synthesize b;
@synthesize c = _c;
-(void)viewDidLoad
{
[super viewDidLoad];
NSData *e = [[NSData alloc]init];
NSData *d;
self.a = 0;
self.b = 0;
d = 0;
_c = 0;
self.c = 0;
NSLog(@“count====%d”,[e reatinCount]);
}
retainCount值是多少?
3、简述delegate,KVO,NSNotification区别?
4、IOS动画处理如何做出弹性效果?
5、IOS中类方法的好处?
6、请写出结果
void main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a+1);
printf(“%d,%d\n\n”,*(a+3),*(ptr-2));
}
7、用指针方法将字符串“carsmart123456”对调显示
珍品网面试题
1、求以下程序段的输出
int func(int x)
{
int countx = 0;
while(x){
countx++;
x=x&(x-1);
}
return counts;
}
int main(int argc,constchar*argv[])
{
@autoreleasepool{
NSLog(@“%d”,func(2013));
}
return 0;
}
2、什么时候使用NSMutableArray,什么时候使用NSArray?
3、你所了解的单例有哪些?请写一个单例的示例代码?
4、请写出使用委托(代理)的示例代码?
5、写出控制器加载视图的常规调用方法流程?
6、Objective-C有多继承么?不是的话,如何解决?
7、请写出下面代码的打印结果(默认在32位机器下运行)
char a[] = “hello world”;
char *p = a;
NSLog(@“%ld”,sizeof(a));
NSLog(@“%ld”,sizeof(p));
如果在64位机器上运行
8、检查如下代码是否有问题,如果有问题,正确的写法是?
-(void)setTarget:(NSObject*)target
{
self.target = target;
}
9、指出下面代码的问题
-(void)willEndStepOne:(NSObject*)userInfo
{
[NSThreaddetachNewThreadSelector:@selector(doSomeThing:)toTatget:selfwithObject:userInfo];
}
-(void)doSomeThing:(NSObject*)userInfo
{
int max_loop_times = 999999;
for(int i=0,i
int randNum = rand();
NSString *tmpString =[NSString stringWithFormat:@“%d”,randNum];
NSLog(@%@“,tmpString);
}
}
10、谈谈对Block的理解?并写出一个使用Block执行UIView动画?([UIView
transitionWithView:duration:animations:completion:];)
11、做过的项目是否涉及网络访问功能,使用什么对象完成网络功能?
12、简单介绍下NSURLConnection类及+sendS也能长荣欧式Request:returningRespinse:error:与-initWithRequest:delegate:两个方法的区别?
13、在iPhone应用中如何保存数据?
北京银达面试题
1、截止到2012年1月,iPhone手机所使用的操作系统最新版本是多少?
A .4.2B. 4.3C. 5.0D.5.0.1
2、以下设备中,iPhone软件开发一般不会涉及的是?
iPhoneB.iPod touchC.ThinkpadD.iPad
3、在一个最常见的Xcode工程中,通常不会出现的文件扩展名是?
A.PNGB.XIBC.MD.CPP
4、曹某在Interface Builder中绘制了一个按钮,并想在代码中修改这个按钮上的文字,一般是通过什么方式让代码与界面中的按钮建立联系的?
A.OutletB.ActionC.EventD.Build
5、客户有一份联系人名单,是联系人姓名和电话的对应关系,需要从远程服务器动态获取,并在内存中暂存,以供界面调用,以下数据结构中适合此要求的是?
A.DictionaryB.HashMapC.NSMutableURLRequestD.NSDictionary
6、iPhone应用可以相应用户旋转手机屏幕的操作,并根据当前手机所处的方向来决定内容如何显示,请问表示iPhone手机默认朝向的时以下哪种代码?
A.UIInterfaceOrientationPortralt
B.UIInterfaceOrientationPortraltUpsideDown
C.UIInterfaceOrientationLandscapeLeft
D.UIInterfaceOrientationLandscapeRight
7、曹某在自己的业务类中写了一个方法,能动态创建一个NSObject对象的实例objA,并以其作为方法的返回值。但应用在调试过程中总是发生内存泄露,经跟踪是这个方法出了问题。请问曹某再次方法中漏写了什么。
A.[objA release];B.[objA alloc];C.[objA autorelease];D.[objAretain];
曹某谢了一个金融应用,由于金融交易过程较为敏感不适合被中途打断,此外客户的手机同时还运行着其他重要的应用,他决定让自己的应用尽可能的减小不必要的资源占用。请试回答一下问题。
8、曹某在自己的手机上调试此应用时,发现程序代码收到了系统方法来的内存警告事件,他应该在didReceiveMemoryWarning方法中实现的操作室?
A.清理当前所有状态信息,并退回登陆界面
B.显示对话框以提醒使用者
C.将此情况通知远程服务器进行记录
D.以上皆非
9、客户要求此应用一直驻留后台,定时从远程服务器获取最新数据,在允许违反官方应用设计规范的前提下,不能实现此要求的方法是?
A.实现后台位置服务接口
B.实现VoIP接口
C.实现音乐播放器接口
D.实现后台延时任务接口
10、客户修改了需求,要求按home键退出应用之后,下次再进入时不保留上次应用所处的状态,直接回到初始界面,要实现此功能最好的方法是?
A.响应系统发出的applicationDidEnterBackground事件,并清理所有状态信息
B.相应系统发出的applicationWillEnterForeground事件,并清理所有状态信息
C.相应系统发出的applicationWillTerminate事件,并清理所有状态信息
D.修改应用plist,放弃多任务支持
11、简答题二选一:
使用TabBarController和NavigationController实现一个iPhone基本应用的界面,请简单画出根视图和若干子视图之间的嵌套关系。
实现一个基本的iPad应用,请简单画出根视图和其他视图之间的嵌套关系。
12、简答题:请简述你所开发的应用在过去某次iPhone系统版本更新后遇到的API兼容问题,以及时如何解决的。
13、编程题:现有一个控制器是UITableViewController的子类,其中一个名叫functions的属性是包含了tableView个选项名称的NSArray对象,另有一个images属性是包含了各选项图片的NSArray对象。在不考虑复用UITableViewCell节省内存的前提下,请实现其中的如下方法:
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
注:UITableViewCell通过textLable和imageView属性来设置名称和图片。
搜房网面试题
1、Object-c的类可以多重继承么?可以实现多个接口么?Category是什么? 重写一个类的时候是继承好还是分类好? 为什么 ?
2、#import跟#include有什么区别#import<>跟#import有什么区别?
3、类变量的@protected,@private,@public,@package声明各有什么含义?
4、id声明的对象有什么特性?
5、对于语句Nsstring*testObject=[NSData alloc]init];testObject在编译时和运行时…..的对象。
6、MVC是什么 ?有什么特征?为什么在iphone上被广泛运用?
7、什么是安全释放?
8、property中属性retain,copy,assgin的含义分别是什么?有什么区别?将其转换成get/set方法怎么做?有什么注意事项?
-(void)setInstance:(id)instance{
if (_instance != instance) {
[_instance release];
_instance = [instance retain];
}
}
-(void)setInstance:(id)instance{
if (_instance != instance) {
[_instance release];
_instance = [instance copy];
}
}
-(void)setInstance:(id)instance{
if (_instance != instance) {
_instance = instance;
}
}
9、浅拷贝和深拷贝区别是什么?
10、
for(int index=0;index<20 index++){
NSString
*tenpStr=@“tempStr”;
NSLog(tempStr);
NSNumber*tempNumber=[NSNumbernumberWithint:2];
NSLog(tempNumber);
}
这段代码有什么问题.?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么??
11、内存管理的几天原则是什么?按照默认法则,哪些关键字生成的对象需要手动释放内存的时候怎样有效地避免内存泄露?
12、在一个对象释放前.如果他被加到了notificationCenter中.不在notificationcenter中remove这个对象可能会出现什么问题?
13、怎样实现一个singleton的类,给出思路。
14、什么是序列化或者Acrchiving,可以用来做什么,怎样与copy结合,原理是什么
15、线程是什么? 有什么注意事项?
16、在iphone上有两件事情要做,请问是在一个线程里按顺序做效率高还是两个线程里做效率高?为什么?.
17、runloop是什么?在主线程中的某个函数里调用了异步函数,怎么样block当前线程,且还能响应当前线程的timer事件,touch事件等?
未命名1
1、打开URl到网页的代码
2、判断字典对象的元素是否为空
3、以下每行代码执行后,parson对象的retain count分别是多少
Person * person = [[Person alloc] init ] ;
[person retain];
[personrelseae];
[person release];
4、ViewController得LoadView,viewDidLoad,viewDidUnLoad分别是什么时候调用的?
5、frame和bounds的区别
6、写一个标准的宏MIN,这个宏输入两个参数并返回较小的一个。
7、你使用过json解析方式么,它们的底层是如何处理的你了解么?对{}、[]、:等的理解?
8、@synthesize
xxx来实现实际代码
未命名2
1、属性readwrite,readonly,assign,retain,copy,nonatomic各有什么作用,在什么情况下用?
2、为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain的?
3、Object-c的类可以多重继承么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?
4、#import跟#include有什么区别,@class呢?
5、谈谈你对ARC的认识和理解?
6、什么是Notification ?什么时候用delegate,什么时候用Notification?
7、ViewController的loadView,viewDidLoad,viewDidUnload分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
8、简述多线程操作的方法,以及各个方法的优缺点。
9、说一说对BLOCK的解释。使用过程中需要注意的地方有哪些?
10、简述ios动画机制。
11、简述ios数据存储方式。
12、简要介绍常见的第三方框架,以及用途。
13、简要叙述MVC在ios开发中的应用。
14、简述常见ios流媒体传输协议。
15、简述播放流媒体的常见方法。
16、如何采集视频源和音频源的数据?
17、什么是H264编码?什么是AAC编码?如何实现?
18、是否了解ffmpeg? 请简要叙述ffmpeg的理解
未命名3
1、下面片段代码中,哪个选项是正确的初始化,为什么?有哪些类型的初始化需要手动去释放?
@property (nonatomic,retain)NSMutableArray* votelist;//.h文件
@synthesize votelist;//.m文件
a、self.votelist=[[NSMutableArrayalloc] init];
b、votelist=[[NSMutableArray alloc] init];
2、assign、retain、copy、nonatomic、readonly属性的作用
3、Category与继承的区别
4、KVC和KVO是什么?
5、ViewController的viewDidLoad,viewWillAppear,viewDidUnload,dealloc
分别是在什么时候调用,在自定义ViewController的中这几个函数里面应该做什么工作?
6、声明一个类和一个静态方法
7、TaableView加载网络文本,图片时要注意什么
8、#import与#imclde的区别
9、线程与进程的区别和联系
10、写一个委托delegate的定义,实现过程
未命名4
3、定义int
**a[3][4],则变量占有的内存空间为:_______
4、写一个函数完成内存之间的拷贝
void *mymemcpy( void * dest , const void * src , size_tcount).
5、编写一个函数subs(char * str)打印出str的所有子串(例如1234的子串包括:1.2.3.4.12.23.34.123.234.1234.)
6、完成字符串拷贝可以使用sprintf、strcpy、以及memcpy函数,请问这些函数有什么区别?你喜欢哪一个?为什么?
7、首先编写函数计算一个字节(byte)里有多少bit被置为1,例如输入9即(1001) ,输出2.然后考虑如果大量重复调用此函数如何优化
8、完成下列链表类
class List{
…………//任意增加类成员
public:
//将pNewNode插入到链表中,放在pOldNode的前面
bool InsertBefore(Node * pNewNode,Node *pOldNode);
void Delete(Node * pNode);
}
9、
chass find {
void add(char * tel);
void find(char *
tel);
}
//号码长度有11位,有一文件存这10亿个电话号码,实现上面find类,使下面的程序
f.ind(tel)函数可以快速的查找任意号码是否存在
void main(){
find f;
char * tel;
while(tel = readtel()){ //从文件中读出电话号码
f.add(tel);
}
tel = 13512345678;
if (f.find (tel)){
pringf(“找到手机号码%s\n,tel”);
} else {
pringf(“未找到手机号码%s\n,tel”);
}
}
10、怎样快速检测出一个巨大的链表中得死链,(遍历链表时会循环的链)?
尽量不改变原有链表数据,考虑好空间复杂度与时间复杂度。
======================================
以下是我面试过程中记录下来的重点的面试及笔试题,算是我对千锋的一点点感恩致谢,在此感谢恩师的栽培。
总结了一下:新浪微博爱问UI,数据缓存应用方面的实现,腾讯爱问原理,坑爹的百度就喜欢拿算法来得瑟。
面试制胜之招:
1.原理性的知识,必须背下来,代码不需要会写,没人要求写原理、底层的代码(这是一个空子,可以钻)
2.链表操作,排序算法最好是能默写
3.面试始终保持平静,冷静,镇静,面试再刁难也要保持端坐,面带一丝微笑
4.对喜欢的公司最好能表现出对加入目标公司的渴望,对技术的追求
5.加分的地方:对简历上的项目很熟悉,技术点都有所研究,包括封装,细节实现;最好能把MJExtension框架多敲几遍,包装成自己开发的工具(显示自己大神的威力)
工作建议:没人查个人背景(这点不用太担心,大不了重新找);上班后勤勉工作,最好不要泡在QQ上,不懂赶紧问,别拖延时间,转正期也是适应期多,花点时间在工作上,工作态度非常非常重要。
一.简述题
1.堆和栈的内存区别,它们是如何分配和释放的--必须问,必须背下来
2.self.与self->区别--必须问,必须背下来
3.ARC自动引用技术原理,自动释放池什么时候销毁(两次被问到,回答大括号结束时销毁,面试官就笑着对我:“呵呵”。最后问了面试官:runloop结束时销毁,还是没弄明白)---腾讯,百度,新浪微博
4.定义属性时nonatomic,atomic,copy,assign,retain内部实现原理---腾讯
5.苹果公司为什么要推出strong和weak
6.怎样实现一个singleton,请给出思路(最好直接写出来)—必须问,必须背下来
7.请简述KVO内部的实现,使用条件---新浪微博
8.请用代码描述错误消息处理---腾讯,百度
9.消息转发内部原理(结构指针,方法选择器,forwarding...一串破玩意儿)--百度
9.iOS消息传递机制都有什么?如何传递?---腾讯,百度,新浪微博
10.有网络或无网络情况下两个APP之间如何通信---新浪微博
11.将UIButton添加到UIView上,如果UIButton的frame的(0,0)不在UIView上,UIButton能不能被点击,为什么?,UIButton如果被添加到UILabel上,点击能响应吗?---新浪微博
12.如果每个View上都想增加一个时间播放控件,如何实现?---新浪微博
13.利用UIScrollView缩放性,如何实现地图上商家地理位置的动态显示---腾讯
14.运行时的工作原理,OC动态行---腾讯,百度,新浪微博
15.AFN与asi的本质区别---腾讯,百度,新浪微博(主要问底层实现)
16.clayer的坐标与frame的坐标如何转化---腾讯,百度,新浪微博
17.循环引用---腾讯,百度,新浪微博
18.runloop原理---腾讯,百度,新浪微博
二.算法题
1.定义指针函数实现数组排序(百度)
2.实现一单链表的逆转,排序(DML方面)(腾讯,百度)
3.已知一组数字:32,35,9,25,19,34,43,47,3要求按以下规则进行排序:第一个数最大,第二个数最小,第三个数是剩下中的最大的,第四个数是剩下中的最小的,依此类推。(腾讯)
4.函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5,(要求使用尽量少的时间和辅助空间)(百度)
5.实现memmove算法(金山网络)
6.求1+2+3+...+n要求不能使用除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)(金山网络)
7.判断一个IP的有效性(百度)
=========================================
一、多线程及网络相关的问题:
1.多线程的底层实现?
2.线程间怎么通信?
3.网络图片处理问题中怎么解决一个相同的网络地址重复请求的问题?
4.用NSOpertion和NSOpertionQueue处理A,B,C三个线程,要求执行完A,B后才能执行C,怎么做?
5.列举cocoa中常见对集中多线程的实现,并谈谈多线程安全的几种解决办法及多线程安全怎么控制?
6.gcd内部怎么实现的
7.你用过NSOperationQueue么?如果用过或者了解的话,你为什么要使用NSOperationQueue,实现了什么?请描述它和GCD的区别和类似的地方(提示:可以从两者的实现机制和适用范围来描述)。
8.既然提到GCD,那么问一下在使用GCD以及block时要注意些什么?它们两是一回事儿么?block在ARC中和传统的MRC中的行为和用法有没有什么区别,需要注意些什么?
9.在异步线程中下载很多图片,如果失败了,该如何处理?请结合RunLoop来谈谈解决方案.(提示:在异步线程中启动一个RunLoop重新发送网络请求,下载图片)
10. Socket的实现原理及Socket之间是如何通信的
二、内存管理相关的问题:
1.怎么保证多人开发进行内存泄露的检查.
2.非自动内存管理情况下怎么做单例模式.
3.对于类方法(静态方法)默认是autoRelease的。我添加的代码导致了过渡释放。所有类方法都会这样吗?
4._block函数在arc跟非arc里面有什么区别
5.什么情况下会发生内存泄漏和内存溢出?
6.[Nsarry array withobject:]这个方法添加对象后,需要对这个数组做释放操作吗?
7.Josn数据的解析,和解析数据的时候有内存泄露吗?有的话如何解决
三、C语言和Foundation相关的问题
1.KVO内部实现原理
2.是否可以把比较耗时的操作方在NSNotificationCenter中
3.Cocoa的Foundation对象与Core
Foundation对象有什么区别
4.不用中间变量,用两种方法交换A和B的值
5.简单描述下对单利模式设计对理解?
6.什么是动态,举例说明
7.runtime实现的机制是什么,怎么用,一般用于干嘛.你还能记得你所使用的相关的头文件或者某些方法的名称吗?
8.是否使用过CoreText或者CoreImage等?如果使用过,请谈谈你使用CoreText或者CoreImage的体验。
9.NSNotification和KVO的区别和用法是什么?什么时候应该使用通知,什么时候应该使用KVO,它们的实现上有什么区别吗?如果用protocol和delegate(或者delegate的Array)来实现类似的功能可能吗?如果可能,会有什么潜在的问题?如果不能,为什么?(虽然protocol和delegate这种东西面试已经面烂了…)
10.Block内部的实现原理
四、数据存储相关的问题
1.如果后期需要增加数据库中的字段怎么实现,如果不实用核心数据呢?
2.SQLite数据存储是怎么用?
3.简单描述下客户端到缓存机制?
4.你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?
五、UI控件相关的问题
1.怎么解决缓存池满的问题,(cell)
2.CAAnimation的层级结构
3.UIButton与UITableView的层级结构
4.如何渲染自定义格式字符串的UILable
5.设置scroll view的contensize能在Viewdidload里设置么,为什么
6.按钮或者其它UIView控件的事件传递的具体过程
7.控制器View的生命周期及相关函数是什么?你在开发中是如何用的?
六、应用程序相关的问题
1.NSRunLoop的实现机制,及在多线程中如何使用
2.IOS7之前,后台执行内容有几种形式,都是什么
3.简单说一下APP的启动过程,从main文件开始说起
4.把程序自己关掉和程序进入后台,远程推送的区别
5.本地通知和远程推送通知对基本概念和用法?
七、第三方框架相关的问题
1.第三方API是怎么用的?
2.列举现在熟悉iOS开发库和第三方开发库?
八、其它相关的问题
1.客户端安全性处理方式?
2.简单描述下社交行为到步足?
3.sip是什么?
4.数据比较大的时候是用内循环,还是外循坏?
5.有些图片加载的比较慢怎么处理?你是怎么优化程序的性能的?
6.你实现过一个框架或者库以供别人使用么?如果有,请谈一谈构建框架或者库时候的经验;如果没有,请设想和设计框架的public的API,并指出大概需要如何做、需要注意一些什么方面,来使别人容易地使用你的框架。
7.App需要加载超大量的数据给服务器发送请求,但是服务器卡住了如何解决?
8.利用NSNotificationCenter实现跨多控制器传输数据和消息中用同步还是异步?
========================================
一般而言,小公司问项目;大公司做笔试题;做地图的一定考算法
Html5你用过没有?有什么新特性?
HTTP、UDP
请求的几种方式?get和post
多线程有几种方式?你用过没有?你经常用哪种?怎么用的?
GCD并行
XMPP里面的怎么做的语言压缩?群聊怎么做的?都有哪些。。。你能自己写吗?
第三方框架你都用过哪些?怎么用的?能跟具体讲讲SDWebImage里面都有什么?图片的异步加载?图文混排?
你用过KVO和NSNotification吗?哪里用了?为什么要?KVO与NSNotification有什么区别?
介绍下你的项目吧?
====================================
常见面试题:
1、请你做一下自我介绍
要求:时间在1-2分钟提前背记好
举例:您好,我叫xxx,我是13年计算机专业本科毕业生今天来贵公司面试xxx职位,这份工作不仅与我的专业对口,同时也是我的特长与兴趣所在。现在我就从以下三个方面介绍自己
一:社会实践:我有一年半的xxx开发经验,做过xxx等几款项目,在开发中担项目组长。
二:学习能力:我有较强的学习能力,能熟练的进行xxx操作,并能使用xxx等语言编程。
三:交际能力:我的性格沉稳,能坐得住,对IT行业的工作,具有非常好的适应能力,而且为人谦和,具有很强的组织和协调能力,富有的事业心和责任感使我能够面对任何困难和挑战。
从以上的简单自我介绍,我希望公司能给我一个展示自己能力的机会,让我我可以学以致用,同时我也很欣赏XX公司的企业文化与工作环境。我愿意成为企业一员,为企业的发展贡献自己的一份力量。我的职业生涯目标是,做一个既懂技术,又懂业务的复合型人才。
2、你对我们公司了解多少?
怎么样了解企业
a、查企业营业执照:登陆北京工商行政管理局,到企业信用信息查询,关注:注册资金,营业时间
b、了解企业:登陆企业网站,查询企业的情况关注:主营业务、规模、iOS团队、上线产品等
3、请谈谈你的优点和缺点。
4、你为什么离开上一家公司?
原因有:
家里有事,简称个人原因(买房搬家、治病救人都行!)
公司转型,简称结构调整(公司转战阵地、主要业务变更、人事结构性裁员等无望之灾!)
个人发展,简称寻找挑战(小有成功、寻找新的个人发展前景什么的,个人转型!)
忌:
与人合不来!(精神病患的同事,受不了!)
与上事不合!(脾气大,摆架子,不认错!)
失职和无能!(大意了,惹祸了,做不了!)
贪污渎职了!(没进去,算命大,没人用!)
5、你的职业目标是什么?(短期和长期)
短期发展:
以做好本职工作为主展开
长期发展:
方向一、成为项目经理
方向二、成为研发经理或技术总监
方向三、转向管理岗位
6、你对加班的看法?
实际上好多公司问这个问题,并不证明一定要加班,只是想测试你是否愿意为公司奉献。这个时候你可以回答:如果是工作需要我会义不容辞加班,我现在没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班。
7、你对薪资的要求?(你期望薪资多少?)
•具体数值(我期望的薪资是xx,但是如果其他方面的待遇不错的话,也是可以商量的)
8、你有什么问题要问我(面试官)的?
•面对人事:公司晋升机制、企业文化等
•面对技术:面试中的某个技术、公司某个项目情况
•面对总监:团队组成及氛围,开发前景的看法
8、工作经历:
9、工作流程:
一个产品的流程:
项目流程:
第一步:介绍你项目是干嘛的
第二步:介绍下你负责的是哪块
第三步:介绍下里面都有什么功能,你是怎么实现的,怎么分层的?写了什么模型?封装了什么工具类?自定义什么?用了什么分类?等等
======================================
iOS笔试题
l基础
1、#import和#include的区别?
2、写一个计算A、B中较大值的标准宏MAX?
3、谈一下关键字static的作用?关键字const呢?
4、break、continue、return的区别是什么?
5、讲一下OC和C有哪些区别?
6、堆和栈的区别是什么?
7、谈一下iOS App的生命周期?
8、简述一下UIViewController的生命周期?
9、frame和bounds的区别?
10、谈一下Objective-C的内存管理方式?
11、简述assign、retain、copy、weak和strong分别在什么情况下使用?
12、深复制和浅复制的区别?
13、说说你对KVC和KVO的理解?
14、谈一下你对block的理解,请写声明一个block变量?
15、iOS代理和block有哪些相同点和区别点
16、类别的作用?说一下类别和类扩展的区别?
17、谈一下UITableViewCell的重用机制?
18、UICollectionView和UITableView的区别有哪些?
19、谈一下面向对象的几个主要特征?你是如何理解面向对象编程思想的?
20、谈一下你常用的一些设计模式及应用场景?
21、类别和继承有哪些区别?
22、你常用的数据存储方式有哪些?
23、JSON和XML有什么区别?
l高级
24、Http协议是什么?,Http协议中GET和POST有哪些区别?
25、谈谈你对Socket的理解?TCP和UDP协议有什么区别?
26、谈谈你对MVC开发模式的理解,为什么要采用MVC模式?你是如何在项目开发中采用MVC模式的?
27、通知中心和代理都可以用来传递消息和数据,两者有什么区别?
28、你在项目当中是如何封装网络数据请求的?
29、你有做过屏幕适配吗?在项目中你是如何进行适配的?
30、在开始一个新项目时,你通常如何分析采用什么样的模式写代码,是纯代码或者XIB或者Storyboard?
31、谈一下iOS中的多线程?以及在分别在什么情况下使用多线程?
32、简述一下消息推送的流程?
33、你上线过App吗?简述一下App发布到AppStore的流程?
34、你做过电商项目吗?谈谈购买一个商品的具体流程应该是怎样的?你使用什么支付方式?
35、AFNetworking是最常用的网络框架,谈谈这个框架内部是如何请求数据的?
36、SDWebImage可以用来异步加载图片,谈谈这个库内部是如何异步加载并显示图片的? AFNetworking也提供了异步加载图片的方式,为什么要使用SDWebImage,它有什么好处?
37、数据库FMDB库和CoreData有什么区别?
38、你使用过Xcode7开发吗?需要注意什么?
39、谈一下你使用第三方登录的业务逻辑?
40、你使用过版本管理工具SVN/Git吗?多人开发时需要注意什么?
41、你在项目开发中使用过哪些常用的第三方库?
42、iOS中的响应链是什么?它是如何发挥作用的?
43、你在iOS项目开发中是如何查看Bug?如何调试?如何解决的?
l扩展
44、你对蓝牙开发有了解吗?在iOS端如何做蓝牙开发?
45、做过多语言开发吗?多语言(国际化/本地化)开发需要注意什么?
46、你有做过动画吗?如何做?
47、你有做过绘图吗?如何做?
48、做过地图App吗?你通常使用什么地图?
49、使用过CocoaPods这个第三方库管理工具吗?
50、做过IM(即时通讯)吗?有用过XMPP吗?
51、做过音频,视频播放器吗?你是如何做的?
52、你了解哪些iOS8和iOS9的新特性知识?在实际项目中使用过哪些?
53、谈一下你对iOS中Runloop的了解?
54、谈一下OC运行时Runtime?
55、请描述一下Instruments及其作用?
l人事
56、你前公司技术部门有多少人?都有哪些人?分别做什么?你们如何协调工作?
57、你们是如何开始一个项目的?如何分配工作的?在做项目过程中有问题怎样去解决?
58、你前公司是如何管理项目进度的?
59、你为什么选择离开上家公司?
60、你工作了两年,你觉得你现在处于怎样的水平?这两年的工作让你收获了哪些?对你来说最大的收获是什么?
61、你觉得以你现在的能力,能够承担多大的项目?和其他iOS开发人员相比,你的优势在哪里?
=======================================
一、自我介绍:
我叫**,毕业于***大学,此前一直就职于***公司,担任iOS开发工程师一职,在职期间做过的项目种类繁多,有商场类,医疗类,旅游类,金融类等等一共十多个,其中有四个是自己独立完成的,其余的是团队合作完成的。
二、面试专业技能
1、熟悉开发环境,熟悉语言,大部分面试官会对debug能力比较感兴趣,都会问这个问题,我的回答是:
对于每个程序员来说,遇到bug是最头痛的事情,想着自己写的代码是如何漂亮,是如何思路清晰,程序怎么就给crash掉了的,那么我对于这样的问题,有我自己解决的一套,不会像普通程序员那样,遇到问题就急躁,不知所措。首先,我会先看下问题出错的原因,仔细查看reason,然后可以打一个全局断点,看断点指向的位置上下文代码的逻辑,一般情况下都可以很快找出问题所在,那么有的时候,我们会发现全局断点也找不到错误所在,那么我会根据reason找到出错的事件,一般情况下我们都是系统响应了某个事件才会crash的,我会根据事件逻辑相关的代码,仔细查看问题所在,若是碰到了bad_access这样的问题,还可以打开僵尸调试来做处理。现在碰到了问题,想到的不再是代码明明是对的啊,而是想着我解决了一个问题,就是一次进步,如果不是碰到问题,进步的速度会变得很慢,有时候,很多新东西都是从bug中学到的。
注:有些面试官会问到自己是否会处理真机调试的crash日志,可以这样回答:
1、Xcode自己本身带有查看crash日志的功能,在device那里,我们可以根据日志的具体内容或是通过百度来找出crash的reason;
2、通过第三方的,虽然我没有用过,但是我知道可以实现这个功能,而且不会很麻烦,一个是听云,一个是我们熟悉的友盟,都可以获取这些crash log。
2、MRC/ARC,可以直接说自己没有实际MRC的产品,但是懂得大致的原理(可以说下黄金法则和自动释放池),但是目前主流的都是ARC,他本身就是比MRC方便,高效,在编译期间会自动判断在需要做release或者retain操作的地方加上内存管理的方法,这个也使得我们做开发的时候更加方便,快捷。
具体的内存管理语义呢(retain,copy,strong,weak,assign等等可以网上查资料,有很多);
3、多线程:多线程分为四种:pthread,
nsthread,GCD, nsopreation,由于前两者的复杂和不安全性,目前主流的是用的GCD(C的API)和nsopreation,那么GCD分任务和队列,它是才用block的方式,将任务加到队列中实现多线程,具体可以实现的种类有同步串行,同步并行,异步串行,异步并行,其中异步并行用的最多,当然GCD还有很多其他的用法,比如设置屏障,group,source等等,实现的功能繁多(要查的人可以查看这篇blog:http://blog.devtang.com/blog/2012/02/22/use-gcd/和这篇:https://github.com/nixzhu/dev-blog/blob/master/2014-04-19-grand-central-dispatch-in-depth-part-1.md)
那么nsopreation是在GCD的基础上做了封装后OC的API,它采用对象的形式来创建多线程,其中nsopreation是一个抽象类,我们不可以直接使用,只能用到它的子类,系统已经帮我们设计了它的两个子类,一个是invocation(采用selector的形式),一个是block(采用block的形式),那么我们在通过子类创建人物后,再加载到queue上,系统自动帮我们分配多线程完成任务,同时我们也可以对不同线程设置依赖关系,功能同样很强大。
有的面试官会问你用到哪一种方式多一点,我个人回答的是nsopreation,回答如下:
他们两种都是主流的方式,我个人偏向nsopreation,主要还是看不同的情况,GCD是一种很直观的形式去创建多线程,在使用过程种如果创建线程不会多次使用,并且操作较为简单的话,我会选择GCD,大多数情况下需要重复创建子线程,那么我会选择nsopreation,因为他的重用性比较高,而且使用起来,我觉得更加适合面向对象编程的思想,在一些大的项目我更加偏爱nsopreation。
4、TCP/IP协议,socket相关:
我回答的要点:TCP/IP协议是传输层的协议族,他提供了数据传输的可靠性和可行性,让我们的数据可以在网络上传输;Http是应用层的协议,保证了数据传输的安全和数据可靠性,是对TCP/IP协议的再次封装,通过加头部和校验,让我们可以更方便的传输数据;
socket:是封装了TCP/IP协议的一组API,他让我们程序员更加方便的使用网络去达到我们想要的效果,传输数据,我们不需要针对复杂的网络协议做太多的了解,就可以实现C/S模式的一个通讯方式,它是一个长连接的过程,我们具体要做的事情是:create一个socket对象,监听IP地址和端口,readData&writeData,我们只需简单的几步就可以完成强大的功能。
有的面试官问我是怎么实现IM的,我说的是用公司底层的接口,自行更具客户需要写客户端,这样面试官就不会问底层的东西了。
如果面试官问道TCP/IP等协议的原理,那只能说面试官不懂或者是问的东西跟他表达的不一样。我们可以这样回答,TCP/IP协议族本来就是一个非常复杂的协议,可以写三本书,说到原理还真说不出来,如果说对于一个前端的工程师还需要了解这么多的网络知识,可能对于一个程序员来说,要求太苛刻,如果真的是这样,那么我们是不是把后台的事情一起做了算了呢?这显然是不合理的,不过公司若真是有这样的需求,当然,我觉得我对网络的了解,做这样的项目也是可以的,去学习并很快用到项目上也是可以的,但是对于项目进度,肯定会在最开始立项的时候就说明,时间可能会稍微久,这个都是可以商量的。
5、设计模式:
所有的设计模式都是从面向对象编程的六个原则来的(http://m.blog.csdn.net/blog/dragonseek24/13293947,这个需要花时间去理解,不过现在面试可以强记下,吹逼用下),那么可以先说原则后,在谈设计模式,切记装逼的话:我们编程不是为了用某种设计原则而用某种设计原则,而是说我心中有了这样的思想,为了让代码变得好看,逻辑更加清楚,便于扩展和重构,我才这样编程,在我们编写的过程中是不知不觉就用到了一些设计模式,所以,以思想为主,编程为辅。然后设计的模式大家都懂,随便说下就行了。
注:工厂模式是将功能相同或者类似的方法或者类封装起来,通过抽象类的方式,给出最少的接口,实现最多的功能。
6、AF的使用以及原理:
见blog(2.0版本:http://blog.cnbang.net/tech/2320/;3.0版本:http://www.jianshu.com/p/0ab3ffa9c5f5)
6、FMDB和coreData的区别:
FMDB:第三方lib,是对sqlite的封装,存储结构为表结构,使用sql语句来做存储管理;
coreData为苹果原生的API,同样是封装了SQLite,但是存储的基本单元是对象;
个人认为FMDB使用更加方便和灵活,在项目构架阶段,设计好了表结构后,后期的增删改查都非常容易;
7、使用过的第三方lib:SD,AF,JSONModel,MJ,MBProgressHUD,SVProgressHUD,Masonry,YTK,YYKit(这个是最新的,估计很多人都听过,用的人就更少了,但是这个工具库在GitHub上已经引起了爆炸性轰动);
8、runtime
(http://southpeak.github.io/blog/2014/11/03/objective-c-runtime-yun-xing-shi-zhi-san-:fang-fa-yu-xiao-xi-zhuan-fa/)
9、runloop
http://blog.ibireme.com/2015/05/18/runloop/
10、YTK介绍:
https://github.com/yuantiku/YTKNetwork
找到基础教程和高级教程;
11、YYKit介绍:
https://github.com/ibireme/YYKit查看中文介绍;
其他的像内存优化啊,蓝牙啊,支付啊,都是按照老师那套来的,我也是根据老师的demo说的。
搭建框架不是指的UI而是指的你怎么去设计一个类,整体规划整个产品所要用到的所有类,从面相对象编程的六个原则来说就行了。
如有需要补充的,群聊或者私聊都可,我会在群里更新;
============================
1.GCD都有哪些API?(胡忠应)
提示:dispatch_async
dispatch_group_async
dispatch_group_async
dispatch_barrier_async
dispatch_queue_create
dispatch_after
dispatch_get_main_queue
dispatch_get_global_queue
2.app测试时怎样避免没有测试完善出现的bug,比如说在6上运行没事在4上运行就出bug了。(胡忠应)
提示:1.项目做完,需要现在iphone4,iphone4s,iphone5,iphone6,iphone6+等模拟器上运行一遍,确保模拟器没有问题。然后在公司测试机上运行。
2.项目中都要采用自动布局。确保在任何屏幕坐标都是相对的。
3.注意api的版本,低版本不用用高api函数,如果需要使用,必须判断版本。
3.自己独立负责的项目,你的项目框架是怎么搭建的?(吴永祥)
提示:这个说起来比较多,我给你一个链接,里面写的很详细,主要谈公司架构的,写的很好:
http://www.cocoachina.com/ios/20141112/10199.html
4.在异步线程创建的对象需要释放吗?(王松)
提示:这个问题问的不是太清楚,可以从mrc和arc角度考虑。可以从堆和栈角度来说,栈上的对象我们不需要手动释放,堆上的对象需要手动释放等。
5.支付宝生成的订单是放在哪里的?,添加到购物车的数据放在哪里,在ipad上登录能看见添加到购物车的信息?(王松)
提示:订单是服务器返回的,以json/xml方式返回过来的。购物数据保存两份,本地有保存,服务器也有保存。如果购物车信息在服务器有保存,可以看到。
6.请说一下第三方登录以及支付的过程和原理。
授权原理:
OAuth2.0分为四种鉴权方式, 已分别应对不同的需求, 比如说web或app. 通常我们在web端使用第一种Authorization Code方式。为了简单说明,我直接拿QQ做例子,简单说一下流程:
当用户点击QQ登陆,你会通引导用户跳转到第三方登陆的登陆界面, 当用户成功登录以后会自动跳转回来,并附带一个code参数,接着你使用code就可以获得access token(访问令牌),对于QQ,由于第三方登录结合了Openid, 所以需要再通过token获取openid。这个openid是和QQ用户一一对应的, 使用access token + openid 即可获取用户信息。
第三方平台和本地用户系统结合应该分为三种情况:
本地未登录,第一次登录第三方:此时相当于注册,直接把第三方信息拉取来并注册成本地用户就可以了,并建立本地用户与第三方用户(openid)的绑定关系
本地未登录,再次登录第三方:此时用户已注册,获取到openid后直接找出对应的本地用户即可
本地登录,并绑定第三方: 这个只要将获取到的openid绑定到本地用户就可以了。
支付:看下我讲的支付,文档里面都有支付流程和原理。详细看下。
7.说一下AFNetWorking和SDWebImage的底层实现机制。
AFNetWorking基于系统NSURLConnection和NSURLSession实现的,也是基于CFNetWork的,AFN回调采用Block,使用方便。而且AFN也封装了图片缓存的处理等。
SDWebImage实现机制见截图