最近一两个月没写博客,因为在换工作,最近移动开发不好找工作,同行都劝说不要轻易换工作,也问过朋友,有些3个月了还没找到工作,还有些干脆转行了,当前这是少数,我既然选择了这一行就不要轻易的放弃,抱着学习的态度去面试,做好了思想工作没报多大信心会立马被录取,当时给自己的目标是面试一个月。
写好简历挂到网上,第二天下午接到几个电话,还是外包公司的电话,由于不想去外包,果断拒绝了。一天了,没一个电话,有点慌了,市场至于这么惨吗?以前只是开放简历都是一个接一个的电话来,于是赶紧加投简历;第三天终于等到了一个电话!可想而知现在的就业市场增长速度远低于iOS开发者的增长速度;虽然培训的人数减少了,但目前的数量还是处于饱和的状态。废话不多说了,我们来总结下面试的情况。
最终我花了一个礼拜的时候,面试了7家公司,得到了2个offer。时隔一个礼拜后又成功就业了!之前的同事都惊呼我神速,他们简历都没写好呢!我感觉我之前的准备做的充分些,其实面试的时候我也是被虐的很惨的。比如一些细节问题:
- 创建ViewControllor的初始颜色?
- 有几种定时器?分别怎么用?
- device-token与UUID的区别?
- self.与self->有什么区别?
现总结如下:
1、笔试
大部分公司现在有笔试了,我面试了7家公司,6家有笔试;为什么现在公司有笔试呢?众所周知,笔试测验不出来一个人的真实水平,但是为什么公司还这么做呢?因为目前市场应聘者较多,鱼龙混杂,难于挑选;所以公司先选择了这种简单暴力的方式先筛选一部分人,虽然不能断定为好的,但至少能去掉一些不怎么好的。所以我们应聘的人还是多复习复习理论知识,多敲敲代码,不要一直复制粘贴,不然离开了机器啥都不会。
2、多线程
多线程是性能优化的一步,使用多线程可以将任务分割分批执行,有效的提高应用性能;在应用需要提高性能时,很爱提问这些多线程的问题;所以我们要清楚有哪几种多线程,分别怎么用,在项目中的实际例子等。线程创建的三种方法:NSThread、GCD的dispatch、子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread。
3、isa指针
isa是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象的类,而Class里也有个isa的指针, 指向meteClass(元类)。元类保存了类方法的列表。当类方法被调 用时,先会从本身查找类方法的实现,如果没有,元类会向他父类查找该方法。同时注意的是:元类(meteClass)也是类,它也是对象。元类也有isa指针,它的isa指针最终指向的是一个根元类(root meteClass)。根元类的isa指针指向本身,这样形成了一个封闭的内循环。一个objc对象的isa的指针指向他的类对象,从而可以找到对象上的方法。
4、性能测试
其实这个问题可以用Xcode自带的方法检测:Profile-> Instruments ->Time Profiler
5、OC的反射机制
Objective-C语言中的OC对象,都继承自NSObject类。这个类为我们提供了一些基础的方法和协议,我们可以直接调用从这个类继承过来方法。大部分的动态反射支持来自NSObject 类。NSObject是所有类(除了一些很少见的例外)的根类。所以基本常用到的类应该都可以支持反射。
1. class反射
//通过类名的字符串形式实例化对象
Class class = NSClassFromString(@"user");
User *user = [[class alloc] init];
//将类名变为字符串
Class class =[User class];
NSString *className = NSStringFromClass(class);
2. SEL的方法反射
//通过方法的字符串形式实例化方法
SEL selector = NSSelectorFromString(@"setName");
[stu performSelector:selector withObject:@"Song"];
//将方法变成字符串
NSStringFromSelector(@selector*(setName:));
6、如何修改一个类的私有属性?
修改私有属性有两种方法,一种是通过KVC获取;另一种是通过runtime访问并修改私有属性。
7、Runtime、RunLoop
在这里我就不讲解这个东西了,我深知自己也没有完全理解透,就列举一些常问的问题:
// Runtime
1.objc在向一个对象发送消息时,发生了什么?
2.什么时候会报unrecognized selector错误?iOS有哪些机制来避免走到这一步?
3.能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量?为什么?
4.runtime如何实现weak变量的自动置nil?
5.给类添加一个属性后,在类结构体里哪些元素会发生变化?
// RunLoop
1.runloop是来做什么的?runloop和线程有什么关系?主线程默认开启了runloop么?子线程呢?
2.runloop的mode是用来做什么的?有几种mode?
3.为什么把NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环以后,滑动scrollview的时候NSTimer却不动了?
因为笔者面试的公司并不是很多,有很多面试问题没有列举出,上面只是列举一些比较常问的问题。说实话,有些项目中没有涉及到或者没有考虑到的问题,我们确实很难回答,这也提醒我们是不是做项目的时候是不是总是生搬硬套?总是认为自己以前是怎么弄的现在就该怎么弄,我们要多考虑以前的方法是不是可以改进?多借鉴借鉴大神的做法。多看些技术博客和技术书籍,努力的丰富自己,如果你感觉自己啥都会了就完了,因为只有大神才知道学无止境,越深入越觉得自己知道的东西太少!换了家公司,换了个环境,换了个心情,也希望自己也越来越好!
附几张自己面试的真实笔试题:
真心希望能够帮助你们!!!