iOS面试招人分享

作者: _清墨 | 来源:发表于2018-04-12 01:51 被阅读1179次

    最近到新公司有些忙,这篇文章一直想写但没时间,今晚也不往后拖了,抽出时间将其写完。

    前一阵子换工作,离职前给公司招一个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

    相关文章

      网友评论

      • 炒鸡范:这个...中级工程师面试题吧...除了GLES这个大多数人都是不会的除外...
        第一题说这个循环引用我真是笑尿了:joy: 这个答不出来下面就不用问了吧:joy:
        不过现在iOS开发人员水平差距确实很大...同样三年经验有的人就是大神有的人简直惨不忍睹...
      • 莫太极:讲真,干几年也就是个参考,3年多工作经验搭简单UI都费劲的我都见过:joy: 还是得看那个人是否上进 :no_mouth:
        _清墨:@王Moment 说的是,每个行业都是这样,什么情况的都有
      • 我是C:大佬,看看我的博客可否要我?
        _清墨:@我是C 看不出来:sweat_smile:只能面谈:sweat_smile:
      • CampbellQi:哈哈,我也不懂OpenGL,4年了,但layer懂一些,锚点默认值是(0,0),可以设置(0.5,0.5),(1,1),如果修改layer 的锚点,会发生位置偏移,那么问题来了,如何让一个view围绕中心旋转并且不发生位移,而不是左上角。layer就是管图像渲染的,view只是管理相应事件。在公司做一个技术含量不高的产品,每天看看这,看看那,好迷茫,哈哈,想搞副业了,能赚钱才是硬道理。别一条路走到黑。
        _清墨:@CampbellQi 可以的……不过锚点默认不是(0,0)哦:smile:
      • 小北风sky:收获颇丰,感谢分享
      • _方丈:去过一些大公司面试,楼主算是用心的了,中规中矩但也考察全面,没个人可以都所擅长和弱点,layer不知道:joy:
      • 郡王丶千夜:第6题不是只有主线程才会锁死,是因为dispatch_sync(queue ,block)会阻塞queue,等待block 返回,如果在queue 里面执行这段代码queue 也是会锁死的,这和主不主线程没关系。
        第7题layer的圆角在iOS 9已经不会触发离屏渲染了。layer响应事件这个问题就有点奇怪,不如直接问事件传递与响应链。
        个人见解,不喜勿喷。
        _清墨:@郡王丶千夜 是的,不止主线程,子线程一样,只要相互等待就死锁,另外,离屏渲染不止圆角触发,iOS9还是10是image view的圆角不会再离屏渲染,这个概念和影响对做绘制的人还是要了解的,最后,layer点击事件说法可能是不太好,但就是要做的是不规则图形的响应,拾取……就得考虑这个问题,可能大家对这方面没怎么接触过,所以不怎么理解
      • 九剑仙:UIControl负责用户交互,Layer负责图形显示。“点击到layer”,这种说法真别致,我学的是假iOS:smile:
        _清墨:@九剑仙 :grin::grin::grin::grin:
      • 多思_5fb4:第一题 没有问题 但是用weak保证view只有一个引用技术就行了,用strong没有问题,但是看了心里难受,同时每个代码执行都去干什么都要知道,这些都是1-2年面试题,都是基础中基础
        _清墨:@多思_5fb4 做事想好先,事情不是试试试试,错了改改改的
        _清墨:@多思_5fb4 不用weak兄弟
      • 李某lkb:上个rac,都不用问那么多了.
      • PGOne爱吃饺子:贵公司ios有几个人
      • 翻滚的炒勺2013:感觉自己太菜了
      • 程序员小福子:第一题我看的第一眼觉得有问题的是那个动画能不能流利并完整执行,一般viewDidLoad到viewWillAppear中间是有时间间隔的
        _清墨:你的思考还可以,生命周期是viewDidLoad到viewWillAppear再到viewDidAppear,不过这段时间...除开业务功能需要,请相信运行速度:grin:
      • 钢蛋来了:GCD 串行同步 串行异步 并行同步 并行异步 这些都是基础啊
        信号量 group 栅栏 这些业务简单的话,虽然用不到 但最起码用过啊
        KVC KVO 最早用于创建属性,iOS5以前
        第10题 我去面试,我也说不出什么
        最后问一句,iOS真的没人要了吗
        昨天我也去面试了
        试试水
        kirito_song:@9b298c9c5162 iOS5…我入行的时候iOS7都不太需要适配了…:+1::+1:
        _清墨:技术够硬的找工作还是很简单的,有亮点有真本事傍身便不必担心:smile:
      • 钢蛋来了:第一题,MRC 有问题,ARC下写法不友好
      • Sky521:可以,都是跟实际开发相关的,有基础,有深入。要是问TCP/IP、算法相关的估计会更伤心:smile:
        _清墨:@PGOne爱吃饺子 确实懂的人少,但要是有用过socket做项目,多多少少会了解点。以个人经历讲,我没做socket相关功能前,完完全全不懂这到底是什么...
        PGOne爱吃饺子:Tcp/Ip真的没有啥鸟用,有人会估计也是会说,但是真的懂得没有多少
        _清墨:@Sky521 这些也有考虑,上面问题回答的好的会问些…

      本文标题:iOS面试招人分享

      本文链接:https://www.haomeiwen.com/subject/vffmqftx.html