第一次面试别人是怎样的体会

2017-02-27 13:58:13 +08:00
 ArthurHe

不安的开始

自从去年后半年以来, iOS 开发相关工作就被唱衰。很多人抱怨裸辞后找不到工作,可谓是哀鸿遍野。看到了太多这样的帖子,身边也有相识的人遭遇了公司解散,失业后迟迟找不到工作的窘境。这也直接导致了我内心的忐忑和不安,不禁要问, iOS 从业者的未来在哪里?我又该何去何从呢?这样的疑问,这样的不安,一直伴随着我。在结合别人的现实的遭遇后,分析了一下造成现阶段初级,中级 iOS 从业者找工作难的原因:

  • 市场过度饱和,培训机构追求自身利益,在 iOS 开发人员相对稀缺阶段,培训了大量的从业人员,扰乱了市场正常的供需关系,导致从业人员供大于需;
  • 鱼龙混杂的从业者,很多开发者并不是科班出身,只是听说 iOS 开发者的薪资待遇高,才决定去培训机构学习,经过四五个月左右的强制灌输和培训机构的包装后,摇身一变成了具有两年开发经验的 iOS 开发者,其本身不具备计算机专业相关的基础知识;
  • 资本市场资金的收紧,导致流向互联网领域的热钱迅速减少,相比前几年互联网行业的创业潮,很多创业者张口闭口我们是颠覆者,一定会替代某某某,只要嘴炮一番就能忽悠到投资人的钱,今年的资本市场回归了理性。那些没有清晰盈利模式的初创公司迅速倒闭,相关中小互联网公司的用人需求在萎缩;
  • 市场需求的理性回归,很多培训班出身,或者工作年限不足三年,或者是一年工作经验用了三年的初中级开发者满足不了市场上很多公司对于中高级开发者相关的技术要求,于是,被市场无情的淘汰;
  • 行业内薪资待遇的降低, iOS 开发已经结束了早期因从业者稀少而造成的市场红利时期,进入到了一个稳步发展的相对稳定时期。因此,薪资待遇回归到了一个正常的水准。那些早期享受到这种红利的开发者,一时间接受不了薪资待遇的降低;
  • 技术层面方面, iOS 开发依托苹果提供的平台,该平台的封闭性决定了开发者所接触的技术面比较狭窄,脱离了苹果,不能完全胜任其他技术工作;

我所遇到的一个例子

带着这些不安,对于已经结束的 16 年,我做了一份[总结]( http://xibhe.com/2017/01/15/再见! 2016/),也包括 17 年的一些计划。或许是心志不坚,或许是颓废太久,这种不安仍旧存在,直到上周面试了一个来公司应聘 iOS 开发的应聘者......

周五下午,人事和我说能不能帮忙面试一下,本来是另一个项目组需要的人,但恰巧他们的负责人不在,就让我去面了。第一次面试别人还是有些紧张,好像自己第一次被别人面试一样紧张。但左等右等还是等不到人事通知我去面试,后来大概半小时后被人事告知那个来面试的人已经走了,据她说面试题只做了一半,人就走了,可能是被我们的面试题吓走了。但面试题我也看过,是四十道很基础的面试题呀!表示不解啊!本以为这次安排的面试就这样结束了,后来人事通知还有一个已经写完了面试题,在沙发区等着,于是我就开始了这次面试之旅。

短暂的两分钟的沉默,我简单看了一下他的简历,上面工作经验写着三年。心里便盘算着从哪些知识点入手可以探出对方是不是真的有三年工作经验。先是让对方做了一个简单的自我介绍,然后开始对着简历问一些问题,简历上写了四个项目,每个项目所用到的技术都是一些大众化的技术,比如,网络请求库 AFNetworking ,图片加载库 SDWebImage ,数据库 FMDB ,刷新库 MJRefresh ,适配库 Masonry 等各种三方库的使用。于是我便问了以下的问题:

  • NSOperation 与 GCD 的区别
  • GCD 中如何避免死锁和数据竞争
  • Block 的使用及如何避免循环引用
  • 使用过哪些设计模式
  • 单例,什么是单例,单例的作用
  • 内存管理
  • 网络请求库的使用
  • JS 与原生应用是如何交互的
  • 了解过 RunTime 吗
  • 通知是异步还是同步
  • 该如何对 tableView 进行优化,实现滑动的流畅性,以及如何避免 tableView 代理方法中冗长的代码
  • SDWebImage 的运行机制
  • App 中的多用户逻辑
  • 如何实现一个可以循环滚动的轮播图(类似于京东,淘宝首页顶部效果)
  • 给你一个新项目你会怎么做
  • 是否能看一下你的技术博客或是 GitHub 上的开源项目

对方对上述问题的回答模棱两可,十分的模糊。其中涉及到 GCD 那块的问题,只说了用过, GCD 的如何避免数据竞争和死锁,以及它与 NSOperation 的区别只是把什么是 NSOperation 用名词解释了一下,而对于 Block 的循环引用问题,支支吾吾想了半天回答的文不对题。设计模式是典型的 MVC ,倒是提到了 MVVM ,但这里也只是简单的提到,就没有什么下文了。单例的使用,边想边说,整了半天也没有将声明单例的具体方法说明白。内存管理这块,据他说,学 iOS 开发时 MRC 已经没人用了,他就直接用的 ARC 。 JS 与原生应用交互这块说没有用过。那么 RunTime 呢?说是底层的东西没有怎么了解过。 tableView 的优化方面,说是用的原生 API 的代理方法,这个还需要优化吗? SDWebImage 的运行机制,把它的使用方法说了一遍。 App 中的多用户逻辑,说是服务器的事,客户端不需要考虑。轮播图功能的实现,说的是使用 NSTimer 。给你一个新项目你会怎么做,说的是先花一周进行需求分析,再新建工程,使用 CocoaPods 把那些要用到的三方库引入到工程中。问完了这些问题,我还是抱有一丝幻想的,心想也许是太过紧张了,再看看他做的项目吧!

看了下对方手机上他参与开发的项目,是一些与美食推荐相关的项目,有一个已经停止维护,拉取不到任何数据了。剩下的都是一些数据使用 tableView 展示的普通项目,没有什么逻辑特别复杂或是需要使用很高明技术的功能。自此,我仍然没有放弃,心想或许对方还研究过其他的技术点,于是就问对方,是否能看一下你的技术博客或是 GitHub 上的开源项目。对方回答说,没有。此刻,我也只能道了两声谢谢,说有结果人事会通知你。心里想着,本来还想问有没有使用过 Swift ,可是现在看来,已经没有问的必要了。

结束

红利已经结束了,那个只要会使用 tableView 等常用控件就能找到工作的时代结束了。 曾听一位前辈说过,

“感觉每个做技术的一开始都是一粒沙子,不断修炼学习吸收营养变成大颗粒的沙子。 再学习其他东西把自己变成土块儿,时间是一把大筛子,每次过滤掉小沙粒,只留大块儿在上面,在你被筛掉之前要么变的比网眼大留下来,要么赶紧被筛掉转行吧!”

7227 次点击
所在节点    职场话题
33 条回复
tianshuang
2017-02-27 14:15:54 +08:00
赞同 👍
jadetang
2017-02-27 15:08:40 +08:00
5 年工作经验了,结果面试的时候,别人问我 HTTP CODE 405 的意思,我答不上来,感觉好鄙视自己哈。(逃
game3108
2017-02-27 15:48:44 +08:00
我来回答一下,可以一起讨论讨论,感觉很多地方说错了,但脑子里着么记得。

NSOperation 与 GCD 的区别
NSOperation 是在 GCD 上封装了一层,可以取消暂停未执行任务,也可以方便的设置任务优先级(其实 GCD 也可以,只是比较麻烦),GCD 是 c 的 api ,具体代码可以看 libdispatch (虽然看过一些,但不确定要说到什么程度,比如 async 底层是一个 pthread 的线程池,有优先级 8 个队列,任务 block 先进队列,然后从线程池里面捞出\创建线程执行)。

GCD 中如何避免死锁和数据竞争
死锁的四个条件,只要不全部满足就不会死锁。如果避免的话,没想到好的办法,只想到自己建一个 serial queue ,串行执行。

Block 的使用及如何避免循环引用
mrc 下用__block , arc 下用__weak 修饰参数。

使用过哪些设计模式
单例(dispatch_once),原型(copy 协议),抽象工厂,抽象方法,建造者(mansory 的 maker),适配器(对象适配器 delegate),组合(uiview),中介者,观察者( nsnotification ),装饰器(category), proxy(nsproxy 消息转发)。剩下的不太记得了。

单例,什么是单例,单例的作用
单例就是内存里常驻一个对象,获取和使用都是这一个对象。作用的话。。。

内存管理
引用计数原理。核心是谁创建的谁释放,谁 retain 的谁释放。

网络请求库的使用
AFNetwork?ASIHttpRequest?

JS 与原生应用是如何交互的
iOS7+,使用 javascriptCore , iOS6 与 iOS6 以下用 uiwebview 的拦截 request 。 oc 可以直接运行 js , evaluteJavascript 什么的方法。

了解过 RunTime 吗
了解过,看过 runtime 源代码,分 old 和 new 版本。网上 old 版本解读比较多。

通知是异步还是同步
notification 是同步

该如何对 tableView 进行优化,实现滑动的流畅性,以及如何避免 tableView 代理方法中冗长的代码
ASDK 核心: CoreGraphic 异步绘制,回主线程用 CALayer 显示(backed layer)。多图层预先累加,防止离屏渲染和多图层累加。 FDTableViewCell 核心:预先缓存 cell 和 cell height 。 VVTableViewDemo 核心: estimate 预估。
避免冗余代码,单独抽出 delegate 也可以, mvp 或者 mvvm 将业务逻辑封装成 presenter 和 viewmodel 进行运行。

SDWebImage 的运行机制
两个 NSOperation ,一个操作缓存,查找失败,调另一个下载图片,然后直接解压图片,再回到主线程设置。(解压过程就是空间换时间,也算是优化流畅速度的方法)

App 中的多用户逻辑
没做过。。。 NSUserDefaults 存?加 token ?

如何实现一个可以循环滚动的轮播图(类似于京东,淘宝首页顶部效果)
UIScrollView,pageEnabled=yes,然后用 NSTimer 做轮巡?(这个好像有开源库,但没看过)

给你一个新项目你会怎么做
分析项目,列需求,分析需求,设计文档,评审文档,排工期,开始做。。。

是否能看一下你的技术博客或是 GitHub 上的开源项目
能,但没啥 star 。都是一些开源代码的解读文章。。。倒给 mansory 提过 pull request 修过 bug 。
Warder
2017-02-27 19:42:23 +08:00
最后那句像是禅师会说的话
coderluan
2017-02-27 19:52:58 +08:00
具体的忘了,大概就是问了些常见的技术问题,感觉就是让人家用嘴又答套笔试题。

现在面试别人也有两年了,目前的原则就是:

1.能笔试的题不面试问(笔试也是我出题),也就是各种用背的知识都不在面试问。
2.笔试题留两道算法题,然后面试引导对方优化代码和复杂度,考察对方的思考能力。
3.就简历中的项目询问些技术细节。
4.我很喜欢问对方最近看了什么书,感觉咋样。或者论坛博客 github 之类的。
5.鼓励对方询问我各种问题。
6.考虑对方性格,稳定性之类的问题。
maitiantuzi
2017-02-27 20:28:08 +08:00
说起来特别搞笑,我刚刚被某企业面试,而就在 6 个月之前,我还作为技术面试官替前东家面技术员,那是我第一次面试别人。
感觉就是有种小小的窃喜——我 tm 也可以面试别人了。
开始时事无巨细,从垃圾收集到设计模式,但是在面了 6 个人之后就已经麻木了,我有一本《麻衣神相》,研习已久。
从此以后,我会对面试者的面相,穿衣搭配,一些小动作细节来形成初步印象,大约占 40%。
至于技术嘛,就交给另外两个面试官吧。。。
chiu
2017-02-27 22:44:15 +08:00
虽然不是做移动开发这一方面的,但文中道理放到很多地方都适用,学习了
HLT
2017-02-27 22:45:09 +08:00
这几年面过至少 300 人左右。。。

这说来就话长了。。哈哈哈。。。奶子大了什么鸟都有
elgae
2017-02-27 23:00:52 +08:00
@ArthurHe 公司还在招么?求勾搭
YiYing
2017-02-27 23:11:06 +08:00
第一次面人比较紧张,问的问题比较凌乱。
最近也被面了好几次,发现一些面试官根本就脱离了面试的目的,为了问问题而问问题,以考倒被面试者为目的。

最近写了一篇博文<a href="http://muchstudy.com/2017/02/12/%E6%80%8E%E6%A0%B7%E5%85%A8%E9%9D%A2%E4%BA%86%E8%A7%A3%E5%BA%94%E8%81%98%E8%80%85%E7%9A%84%E5%AE%9E%E5%8A%9B/">怎样全面了解应聘者的实力</a>
YiYing
2017-02-27 23:13:36 +08:00
@YiYing a 标签不能用,贴个短点的

怎样全面了解应聘者的实力: http://blog.csdn.net/yzf913214/article/details/55008065
Zubin
2017-02-27 23:17:20 +08:00
@HLT 奶......奶子??
HLT
2017-02-27 23:26:06 +08:00
@Zubin 吸起来。。没毛病!
scnace
2017-02-27 23:27:50 +08:00
@coderluan 就比较喜欢你这样的面试官…
onevcat
2017-02-27 23:39:20 +08:00
好难...各种不会 =_=
Sunnyyoung
2017-02-28 00:27:23 +08:00
@onevcat ……
lhbc
2017-02-28 00:32:08 +08:00
面过近百人,靠谱率不到 5%
kingcos
2017-02-28 00:44:11 +08:00
……人心惶惶啊……今年还要去实习……
感觉要学的太多了……
ArthurHe
2017-02-28 08:31:54 +08:00
@elgae 貌似已经招够了,矮子里挑的将军。
lj61785636
2017-02-28 08:38:22 +08:00
惊现喵大

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343503

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX