很多时候,我们作为面试者其实也是很盲目的在参加面试,如果我们了解了面试官的心理,以及面试官会针对那些问题对我们进行提问,我们前期做好相应的准备,在我们的面试过程中会有很大帮助的,下面是我在网上搜索一些关于面试官会对iOS开发工程师进行相关面试的一些整理。希望对大家有用。也希望和大家进行交流。
1.简历上的描述以及项目要是最熟悉的,讲自己熟悉的东西容易让面试官进入状态,展示自己好的一面。(面试官主要考察两方面,一是有没有在某些点上有过深入研究。二是对项目整体了解如何)。
2.在描述项目的时候选几个自己能够清晰描述的功能点。(面试官主要是了解候选人在这块功能点深入的程度,从思路到方法,从上层 API 调用到框架流程再到底层实现。如果我们在讲述时有一条逻辑主线,例如讲述业界普遍是怎么做的,自己在业界方案基础上做了什么改进,怎样做到更好,进一步改进的思路是怎样,这是最好的。如果还能把解决问题的方法归纳起来运用在其他地方,能举一反三,包装成通用解决方案,或者做开源贡献,就更好了。)
3.面对面试官体提问我们哪一个项目技术点最能体现自己的技术,然后不停追问技术细节,例如做了一个相册项目,觉得列表优化是最能体现技术点的,会问这里优化的思路是什么,怎样评估,遇到过什么困难,怎么解决的,如果用到图片缓存开源项目,说说它具体做了什么事,缓存策略是什么,从下载到显示的整个流程是怎样的,还有没有更好的方案,追问到一定程度后也会发散去问跟这个话题相关联的问题,例如如果有部分用户反馈图片显示不了,你会怎样排查问题,排查修复后怎样监控,就会过度到一些网络和运营监控方面的内容,也会顺便问到一些基础知识。
4.通过上面的了解,面试官会选择项目的大致架构以及核心功能进行提问,我们最好能画出项目的大致结构,也会问网络层和数据层是怎样实现的,为什么这样实现,项目最核心功能是怎样实现的,例如做读书的至少要知道项目里的排版引擎的大致实现方式,做 QQ 的要知道消息收发的机制,如果不知道,也可以说说如果自己实现会怎么做。这里主要看看有没有技术好奇心,会不会积极主动了解项目里已有的非职责范围内的技术点,主动和好学这两点是很重要的。
5.到最后面试官会问一些基础知识,如果前面的回答的都很好,这块应该会减少很多。基础知识比如像内存 / 网络 / 存储 / 线程等,例如 ARC 是怎样做到自动管理内存的,跟 java/js 的垃圾回收的区别,网络 http 协议是怎样的,用过什么数据库框架,db 索引是什么,多线程开发要注意什么,跟 runloop 的关系是什么等等。数据结构和算法在笔试时会涉及,面试会比较少,如果问算法的话只会问问思路,一般我觉得如果项目经历方面不太好,才会考虑考考算法作为辅助判断。
6.一些通用能力像逻辑思维能力,沟通能力,自我驱动能力等都可以在上面那些问题的交流中表现出来,另外像团队协作能力、抗压能力和性格特征这些也会看情况考察一下,比如会问如果产品做的个设计,你觉得不靠谱,会怎样做,设计让你做个很难实现的效果,你会怎样评估等。
7.作为程序员,如果我们有 GitHub 开源项目是最好的,直接可以看到代码风格,代码质量,处理 issue 和 PR 的方式,如果有技术博客也是很好的,可以提前看到平时的一些技术积累,省了很多事。但如果 GitHub 内容是培训班的那种仿写 APP,博客内容是摘抄文章什么的就是负分了。
总结:其实面试就是公司想低成本找到合适在团队里一起工作的人,因为如果通过一起工作一段时间去判断是否合适,成本太高。这种低成本的代价就是会误判,有些工程师是理论型,有些是实践型,面试的方式会对实践型的人不利,尽管我们如果被招进去是适合的人,而且人会在不同环境下会有不同的表现,只根据过去的经历去判断有时是不准确的。对于面试官只能尽量采取一些措施去减少误判的概率,例如公司会提高面试官的判断能力,或多几轮面试。一般如果不是急招,策略都会是宁杀错不放过,所以其实就算面试被否了,也不一定代表能力不行。