浅谈一点面试体验
最近部门业务扩展,移动端终于迎来了难得招人的机会。在经历半个月的招聘体验后,感触良多,想总结下这半个月的体验以及一点想法
移动端怎么了
在挂出简历了不到一天,邮箱就被上百封简历轰炸了。虽然对今天就业形势有一些耳闻,但是碰到如此情形还是有点惊讶。到昨天,整整收到了600多封iOS简历。iOS开发究竟怎么了?是苹果不行了吗?其实并不是iOS开发不行了,而是移动端的风口过了。在简历中,我看到了形形色色色的项目。从2C的教育,医疗,直播等等,到2B的IM,项目管理等等,这些项目都有一个特点 — 开发时间特别短。几乎没有一个项目是在一个人手里开发超过1年的。同时,几乎每个人手里都有四五个项目,甚至一个刚工作一年的人的简历里就写了四个项目。可见,在过去一两年,移动端开发过热导致许多公司盲目的上项目。其中印象深刻的是,光汽车蓝牙相关的APP就有十几个。不过在汽车上驾驶员使用手机的问题,就说有多少人真的需要一个APP来通过蓝牙控制汽车功能?这些项目往往在功能简单的同时,没有太多的技术难度,仅仅是为了完成公司产品而生成的。在面试的过程中,简单问了些蓝牙协议的实现,几乎100%的面试者都说通过三方实现的。随着投资热潮褪去,这些项目的一批批的死去,自然释放出了许多初级移动端开发(尤其iOS)。移动端并没有死去,而是走向理智,只是在风口上的猪掉了下来。
请不要写精通好吗
在筛选简历的时候,看到精通和熟练的次数几乎是一样多。参与竞聘的人员几乎都是1-3年经验。怎么样才可以说对某项技能达到了精通的地步?我认为,至少在对于这项技能,无论理论还是应用都达到了烂熟于心的地步。在开始时,对于简历上写着精通的面试者,我无不抱着探讨的心态去讨论。然而,迄今为止,几乎没有精通OC的面试者能够讲清楚atomic
和 nonatomic
的区别,为什么常用nonatomic
,为什么用atomic
也不能保证安全。至于精通TCP/UPD的,甚至不能准确讲出TCP连接断开的过程。正如有句话:懂的越多,越觉得自己不懂。
不好意思,我没想过
这恐怕是我听过最多的一句话,也是我听不愿听到一句话。作为一个开发,每天我们都能遇到各种各样的问题。然而遇到了问题,我们是简单的百度一下,还是停下来想想后面的原因?每逢谈到循环引用,几乎都谈到block中的情况。然而如果我直接问道除了block中的情况呢,几乎80%的面试者都懵逼了。我想,如果真正理解了循环引用,不可能只能想到block中这么一种情况。谈到autoreleasepool
的理解和用法。除了简单和ARC
关联在一起(其实这里不该混淆在一起),就只会简单的说不知道了。然而,在main.m
文件中其实就用了autorealesepool
1 | @autoreleasepool { |
请写上你熟悉的,而不是仅仅用过的
在筛选简历的时候,简历上有一些新意的字眼的确有加分项。比如swift3
的开发经历,网络和渲染的优化,熟悉第三方库的实现(YYKit
,SDWebImage
等等)。然而,当你在简历上体现出来这些东西时候,起码自己要熟悉。仅仅使用swift写了一个demo可不能熟悉swift。swift的特性,比如柯里化,比如enum,structs,class的区别和选型考虑,这些问题如果都没有考虑,仅仅把一个demo从oc转成swift也仅仅在语言层面的转化而已。而优化的部分,起码要搞清楚优化的意义在哪里,为何需要优化,仅仅封装业务相关内容可不是优化。而第三方库理解,不该只是在调调API这样。无论多么优秀的第三方实现都有自己的不足和可以改进的地方。只有自己读了源码,认真去思考,分辨优劣,才能谈得上理解。
请不要说用不到
这句话最多听到的是在问算法的时候。失望的是,到目前为止,还没有人能答出几道简单的算法和数据结构相关的题目。一个简单的求两个数的最大公约数几乎没有人能给出想法(没错,就是直接说不会)。而归并排序,快排,二分查找更是无人能说出一二。iOS开发真的不需要用到算法和数据结构吗?我想不是的。其实很多劣质的代码往往是对数据结构和算法的不熟悉导致的。记得一个非常常见的例子:新增数据的比对。比如增量上报通讯录,很多人旺旺是做for循环嵌套。然而如果能用到hash表,效率能有量级的提高。虽然如今iOS开发能真的需要自己去手写算法的地方很少,但如果就此不去学习,不说不能更进一步,可能还会产出许多劣质的代码。
基础,离不开的基础
经过多次面试后,HR反馈给我,说面试者认为我考的内容偏向于“死”的内容,而开放性关于项目的内容很少。笔者在这里阐述下自己的观点。万丈高楼平地起,再牛的人,再好的项目,无不是从一点点基础开始的。离开了扎实的基础,我不认为讲开放性的内容能够说出独特的见解。事实上,我也问过一些开放性的内容,比如渲染的优化,网络优化的点。然而,对view渲染的机制深入的不够以及对网络协议的浅薄见解,影响到了许多人能谈的很少。所以,我在后面的面试,依然会坚持对基础的考核,毕竟,基础扎实了,再去做深入的探索也不会有太大的困难。
三年,还是一
在前文说到,参与面试的人都是有两三年开发经验,有数个项目经验在身的。然而在我看来,他们仅仅是把一年经验,反复用了三年而已,甚至,我认为其中有些人甚至不如优秀的应届。为何会出现这样的问题,在我看来多数原因在于把自己的眼界困死了。几乎所有人的简历上都写着能够完成一个完整的app。但是在我看来,完成一个完整APP是一个有一年开发经验合格的iOS开发就能做到的。而两三年经验的开发,应该更多去深入细节,串联自己的知识。记得我常问一个问题:iOS中有哪些锁的实现方法?少数人能谈到NSLock
,多数人只知道synchronized
。我不是很理解三年的开发经历就没想了解过其他的实现吗?况且网上讲解的文章也不少。
吐槽了那么多,实际上也是想鞭笞自己。学无止境,有太多的点需要自己去研究,永远不能满足现有的状况,永远不要让自己待在舒适区,切记切记。
后面可能会总结下在面试中问道的问题。实际上有些问题也是最近在准备的时候学习到了更多的内容,也算为自己的知识体系做了补充。