关于iOS面试

最近一直在忙于招聘,一直在思考怎么才能招聘一个优秀的iOS开发。近些年随着无线开发的走红,越来越多的同学跻身iOS的开发中来,如何甄别评价iOS开发的水平,客户端的工程师需要有怎么样的技术栈,一直是我自己也比较困惑的问题。因此在最近的招聘过程中,我总结了一些常用的技术点,也列出了一些相应的问题,希望跟大家一起讨论一下。


iOS客户端的开发就手淘而言主要分为平台架构型和业务型开发,我的理解中这两者的技术栈应该是一样的,但是在特殊的一些场景下又各有所长。比如架构对很多更底层的设计需要更清楚,比如hotpatch其实实质就是luabridge转好后用了runtime的特性进行AOP,crash相关的防护也要对nsobject的结构要非常清楚,这样才能利用特性防护住野指针。业务的同学更擅长动画绘制以及各种layer,UI性能的细节实现上非常注意,也有自己一套比较完善的优化方法和套路。针对不同场景下的业务,如扫码和LBS,也会比架构的同学有更深的理解和解决方案。我针对自己的工作经验,来整理了一些我认为工作中需要用到的常见的知识点和一些细节,这些可能不完善,可能有偏差,也希望自己抛砖引玉,让更多的同学帮我完善它。


以下是我在面试中常问的一些问题,我已经自动将他们分了几类,欢迎大家补充


基础知识篇:
ARC是怎么一回事
property是怎么实现的
property copy mutale的数据结构会出现什么情况
不手动指定autoreleasepool的前提下,autorealease相关的对象什么时候释放
block什么情况下会循环引用
GCD队列分几种,怎么同步若干个异步调用
如何手动触发KVO
UIView的bounds和frame有什么区别。
基础知识整理的比较少,一般我问的也不多,因为我默认这些是常识,如果我真的问你这些问题,估计也就马上跟你Say Goodbye了。一般简单聊几句会从应聘者的经验入手,然后穿插一些进阶相关的内容作为考核。


进阶篇:
介绍下你眼中的runloop猜测其实现原理。另外runloop和线程的关系是什么。
你眼中的runtime是什么样子的,可以干什么
block的c实现是怎么样的
autoreleasepool苹果怎实现的
怎么实现一个AOP框架。
GCD的一些高级用法
不同锁之间的区别
CPU和GPU的渲染的区别是什么
以上的内容并不是特别全面,我也希望大家补充一下,不过相对于原理上的东西,我更喜欢让大家通过实战的内容解释原理,告诉我何时用这个知识点,以及怎么用这个知识点。网上的面试宝典什么的其实也不比我的内容少,但是死记硬背和理解又是两回事。因此实战篇我整理了以下内容。


实战篇:
tableview怎么做到如丝般润滑
ayncDisplayKit的实现怎么做的
多图片的情况下如何减少卡顿
代码中有用过什么编程模型吗?如果有是什么?为什么用
MVVM+RAC 请问RAC具体底层怎么实现的,为什么会慢,多播怎么实现
MVC和MVVM到底哪个更好,为什么?
蒙版和图像合成如何做
图片的裁切
合成相关
是否做过客户端稳定性的相关方案
野指针和方法找不到的时候怎么做
你做过的比较复杂的动画是怎么做的
pop的实现和关键帧动画有何不同
如何评价动画相关的性能
有没有做过hybrid的容器,都做了什么功能
reactive native相关的方案是怎么做的,能否具体说下实现中的难点。
做过什么小工具没有?解决了什么问题。


地理位置相关的经验有吗?怎么做能让地理位置更精准,你的使用场景是什么


是否做过针对网络相关的优化,是否做过图片相关的一些优化


im相关的场景是否做过?你认为最难的技术点在哪里


本地数据和远端怎么同步
cache的性能怎么保证。
上面的一些内容,如果对方讲的方案详细,思路清晰,相信一定是在某个专业的领域有一定的经验,多个点思路清晰方案靠谱的话,就可以叫过来当面深入了解啦,当然有的时候你也想剑走偏锋,适时装逼,问一些冷僻的不常用的问题,这里也列了一些,一般在外部面试时很少有公司有手淘的场景,所以我这边列了一些针对巨型App才有的问题,也有一些是一般不需要大家考虑的问题,这里也列出来。


装逼篇:
如何解决大App瘦身的问题
如何让野指针不挂
xcode插件有没有写过
越狱,安全相关的场景,如何逆向手淘,怎么防
百人团队的巨型App架构方面需要注意什么
以上都是电面的口活,当然我还是最喜欢真枪实干,如果github有代码可以看下就最好了,毕竟talk is cheap , show me the code。另外以上只是iOS的相关知识,如果他通晓后端,Android,前端等,那就是牛逼的全端或者全栈工程师,这样的优秀人才,我们可以马上进入最后一步了。


性格 态度 责任
最后的最后,也是我认为最重要的一些点,就是要考核开发人员的性格,态度,责任心方面的东西,毕竟开发首先是一个人,而不是简单被当做资源,我们要全面了解人的一切,保证可以为团队带来贡献和变化。跟优秀的人在一起工作这件事,是我从无数集团优秀的无线开发者们身上学到的最重要的启示。


以下的问题要感谢HR苏茉姐姐给我的提示,我觉得从这些思路来非常的有效:
从积极主动去看,一般是看他是否有提前行动的思维方式,碰到困难是否不抱怨,是否通过有效的方式解决,主动寻求一些自我提升等。工作态度可以看下他的自我认知如何,可以看看他的抗压性如何等,从问题的角度可以参考:


你会经常提出新观点或新建议吗?如果有,请举一个最近发生的例子。
你有竭尽全力完成一个任务或者项目并且超出原有目标或者要求的经历吗?如果有,请举一个最近发生的例子。
在你过往的经历中,你曾采取什么措施使你的工作更容易做/更有效率/更富成效吗?请举例说明。
以上就是最近面试的一些心得,希望小伙伴们也能帮忙一起提出更好的建议,完善整个集团对无线人员的技术评价体系。

你可能感兴趣的:(ios,pop,IM,MVVM)