最近到新公司有些忙,这篇文章一直想写但没时间,今晚也不往后拖了,抽出时间将其写完。
前一阵子换工作,离职前给公司招一个iOS成员来接任,期间面试近10人,有一些东西想和大家分享一下。
下面是我出的面试题
1.下面这种写法有问题吗
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *myView; //
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.myView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:_myView];
[UIView animateWithDuration:1.0 animations:^{
self.myView.frame = CGRectMake(100, 100, 200, 200);
}];
}
@end
2.平时都用了哪些第三方库,用于做什么?
3.你在做项目过程中做过哪些重构?为什么要重构
KVO,KVC
4.block,delegate的运用过程。 weak assign copy Notification
5.有做过网络缓存吗?怎么做的
6.GCD队列,同步异步,不耗时任务多线程处理,耗时任务多线程处理。
7.layer 绘制图形,layer的锚点,如何确定点击到layer
UIImageView加圆角
view,系统如何寻找到需要响应用户操作的那个Responder
8.一个文字轮播,上下滚动,点击要能输出所显示的文字,你能想出几种办法?实现思路
9.做过SDK开发吗?会swift吗?
有看博客,写博客吗
10.讲下你工作中遇到的一些问题和如何解决它们的,讲下你的优点
公司是做地图的,对图形方面有一些要求,目前已用openGLES技术实现3D效果,但不要求面试人员会openGL技术,以上问题 7 一定会问,是为了了解一下面试者图形方面的知识(2D层面)。
出这些题的原因是,根据咱们公司对人才的需求(和能给出的薪资范围),给出一条主线,面试的时候根据主线来走,期间有可以扩展的问题扩展,可以省掉的问题省掉。主考面试者的逻辑思维能力,想着这一套主线多问些,也够了解面试者的能力了。
不过面试了这么些人,总的来说还是很失望的,我以为这些题目对于面试者来说会很简单,回答起来应该都可以讲到问题的点上,可结果却是只有一两个人能回答得很好。
按时间细数一下面试的情况,面试的时候我们领导会跟我一起,我问面试者答,领导听(领导也懂技术),面完技术之后领导会问其他的。
最开始面试的是一位女生,那个时候我其实也没准备好面试题,就问了两个问题,一个多线程,一个逻辑问题。在我问技术之前她已经跟我们领导谈过,领导叫我面时可能也是我进门时气场给人感觉很压抑,感觉得出来她比较紧张和警惕(?),两个问题回答得都不好,多线程不了解,逻辑问题回答的解决办法不够好,也不够多...问了两个问题从回答其实可以看出水平了,跟公司需求应该是不符的。
每次面试完我都会主动联系领导,告诉领导我这边面试得到的结果,好就是好,不好就是不好,直接告诉我对技术最真切的面试结果,其他的让领导自己权衡,所以这个女生pass了。
随着时间,遇到第一次较满意的,4年iOS开发经验,简历上写了了解OpenGLES,咱们项目了解OpenGLES的话是一个很好的加分项,为了面试他,我专门又出了10道OpenGLES的题,大部分都是基础的。他的面试是在周六,领导和我也专门抽时间周六过来了一趟,面试他的时候,iOS方面的知识答得还不错,多线程方面也还可以,问任务执行的线程时有没答对的地方,不过总体已经很好了。但OpenGLES,虽然简历上写的了解,实际上10道题一道也没答出来,问了下,其实只算是看了看别人OpenGLES的代码,自己没有真正写过一个哪怕最基本的流程代码。
对遇到做iOS还会OpenGLES的工程师可遇不可求,领导也深知这一点,所以我反馈的时候也是突出他iOS方面可以,可以考虑,但OpenGLES这边几乎为0,让领导自己斟酌。 (最后领导估计是想考虑他的,但他住的太远,并且女朋友也在那边上班,换住处不太可能,所以没成)
期间又面试了好些人,男男女女,也将我群里的两位群友推过来面试了,结果都不如意,上面一些基本的题目回答不上,多线程几乎不懂,说会的东西往深一点问还是不会...还是很失望的,对我来讲也是一种意外,没想到这么多的开发者一个个简历上都是 3年 4年,对技术的了解却像是一个1年左右的水平。
这里不是我装逼,也不是我要中伤某些人,从这些面试和我平时的了解,iOS这行水分真的太多,好的iOS工程师比例真的太低,普遍都很拉,大家有时间还是多积累一些知识和技术,平平无奇没有任何竞争力,等着机遇降临不如自己去把握每一次机会。
最后说一下最好的,也是最后一天面试的,5年iOS开发经验,从MRC时代过来,在前3家公司做的都是移动小组负责人,上面的问题问了一些,都答得很好,然后更加深入的问了iOS的runtime、runloop等,也对他的逻辑思维考得更多更深,回答得都很不错。面完后,领导也很满意,和我商量确实不错,本来是想定他的。也和他约定了下周3入职的。
不过后面没有来入职
这次面试经历对我真的非常有用,能与这些人交流,了解和学习不同人的沟通能力,也从这些人身上获取iOS行业的真实信息,知己知彼。受益匪浅,特此也来和大家分享一下。
文章的最后,我们来回顾这些问题吧:
1.下面这种写法有问题吗
#import "ViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *myView; //
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.myView = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:_myView];
[UIView animateWithDuration:1.0 animations:^{
self.myView.frame = CGRectMake(100, 100, 200, 200);
}];
}
@end
2.平时都用了哪些第三方库,用于做什么?
3.你在做项目过程中做过哪些重构?为什么要重构
KVO,KVC
4.block,delegate的运用过程。 weak assign copy Notification
5.有做过网络缓存吗?怎么做的
6.GCD队列,同步异步,不耗时任务多线程处理,耗时任务多线程处理。
7.layer 绘制图形,layer的锚点,如何确定点击到layer
UIImageView加圆角
view,系统如何寻找到需要响应用户操作的那个Responder
8.一个文字轮播,上下滚动,点击要能输出所显示的文字,你能想出几种办法?实现思路
9.做过SDK开发吗?会swift吗?
有看博客,写博客吗
10.讲下你工作中遇到的一些问题和如何解决它们的,讲下你的优点
1.第一题其实是没有任何问题的,这道题考的其实是开发者对代码的掌控程度,信心。 面试中这个可能是一道坑,除了那个4年5年的说这个没问题外,其他人都会说这有问题或者长时间沉默直到我问那个动画会不会产生循环引用。
除了那个5年的,所有人都说会产生循环引用,这里其实不会,循环引用是双向的,这里只是单向的。 朋友们不理解的请自行 www
2.问平时用过什么库,了解他做项目的广度,再选其中几个细细问问,主要问AFN的常驻线程和SDWebImage的异步和缓存
3.第三和第8题都是看了 仓鼠(简书搜 戴仓薯) 的博客觉得问题还可以,借鉴来的,第三题考开发者对项目的整体架构设计和对项目的负责程度。
4.在问第四题的时候我会选择性的去问一下KVO和KVC,没必要的就不会问,问KVC主要想知道用于做什么,KVO用于做什么,回调方法是什么...面试者若说没怎么用或者没用过,我便不会问。
第四题问block,delegate的运用过程,要求面试者理理思想,讲一下block,delegate从创建到使用的过程和保持安全的办法,我会跟着他们的思维不会让面试者漏下每一步。 也会顺便提到weak assign copy,还有一对多的Notification (可惜,想不通的是大部分连这道题都过不去...)
5.有做过网络缓存吗?怎么做的 这道题问出来几乎没人说做过,我也就当给大家提供新知识了,告诉他们系统的NSURLCache可以做GET的网络缓存。当然,前提是也会让他们想想若要他们做该如何去做。
6.GCD队列,同步异步,这道题除了5年那人答得很好外,其他人都答得很不好,几乎不懂稍微深一点的用法。 问的时候都说会用,用得最多GCD,问到GCD的同步异步和队列组合用法,不会;问到GCD中的group、queue、semaphore、barrier等,几乎都不会,说知道的,问得细一点,还是不会。问到任务执行顺序和任务执行的线程的时候,不会;还有,除了5年的,其他人全认为下面代码会死锁:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_queue_t ser_queue = dispatch_queue_create("Ser", DISPATCH_QUEUE_SERIAL);
dispatch_sync(ser_queue, ^{
NSLog(@"1");
});
NSLog(@"2");
}
说是主线程同步死锁,怕是大家都是看博客看资料被误导或者没看明白,主线程同步死锁是在主队列里才会死锁。希望大家不明白的自己查查。
7.第7题完全属于我们公司特有考核的问题了, 主考layer的无响应能力和多边形被拾取事件的判定,会考面试者这方面的逻辑。
UIImageView加圆角是为了性能,因为如果用layer来做,触发离屏渲染,图形少性能可能看不出差别,但图形一多,性能差别就出来了,关于UIImageView加圆角提升性能不懂可以查查..
8.第8题其实很简单,不要求办法的难度和高端程度,尽可能想出多个方法,然后比较这些方法的差别,找出最优的办法,不过这道题也难住了大部分人,也是意料之外......
9.无要求,了解下
10.给面试者展示自我的机会。
第10几乎没有面试者能把握这个机会...可能也是技术能力摆在那里,也可能沟通能力有些欠缺,我觉得这个机会如果有,大家把握不住那可真是遗憾...希望大家可以自省
结语:通过自己的经历跟大家分享心得,希望大家能一起进步。
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=esdwr228r1pf
网友评论
第一题说这个循环引用我真是笑尿了 这个答不出来下面就不用问了吧
不过现在iOS开发人员水平差距确实很大...同样三年经验有的人就是大神有的人简直惨不忍睹...
第7题layer的圆角在iOS 9已经不会触发离屏渲染了。layer响应事件这个问题就有点奇怪,不如直接问事件传递与响应链。
个人见解,不喜勿喷。
信号量 group 栅栏 这些业务简单的话,虽然用不到 但最起码用过啊
KVC KVO 最早用于创建属性,iOS5以前
第10题 我去面试,我也说不出什么
最后问一句,iOS真的没人要了吗
昨天我也去面试了
试试水