iOS开发进阶ios专题iOS面试

2018年4月招人心得(附面试题)

2018-05-15  本文已影响1713人  梦想编程家小枫

就在上个月月初,技术总监让我招3个2-3年的iOS开发,把简历的筛选和第一轮技术面试的任务交给了我。

从筛选第一份简历,准备面试题,到成功招到三个人一共花了两个星期多一点,总体来说还是比较顺利的。两位通过者都比较稳重踏实,而且对技术也比较有追求。这也可能和我筛选简历比较谨慎有关系,这次筛选简历所花费的精力是不比面试花费的少的。

虽然时间跨度不是很长,但是毕竟是第一次,所以有些感触,想总结出来分享给大家。这篇总结分为两个部分:

第一部分是我当时准备的面试题

第二部分是我的招人心得

我重点在本文的第二部分说一下这次面试别人的心得体会。而关于第一部分的面试题,文中不提供答案(因为不是本文的重点),需要参考答案的话可以加小编的iOS交流群:659170228。免费获取。

第一部分:面试题

注意,下面这些题只是我准备的题库。在实际面试的时候我会根据面试者的水平抽出相应的题目来出的。

声明:面试是对自我审视的一种过程,面试题和iOS程序员本身技术水平没任何关联,无论你能否全部答出,都不要对自己产生任何正面或消极的评价!

技术

基础

1、为什么说Objective-C是一门动态的语言?

2、weak和unowned 

3、什么是GDB和LLDB?

4、static 关键字的作用:

5、Objective-C如何对内存管理的,说说你的看法和解决方法? 

6、什么是延迟加载? 

7、GCD与NSOperation这两者有什么区别?

8、单例的优弊是什么?

9、如何令自己所写的对象具有拷贝功能?

10、可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?

11、UICollectionView自定义layout如何实现?

12、用StoryBoard开发界面有什么弊端?如何避免?

13、进程和线程的区别?同步异步的区别?并行和并发的区别?

14、一个函数执行10次,有二次结果不正确 八次正确,你应  该怎么检查该bug。

15、数据持久化的几个方案(fmdb用没用过)

底层:

1、runloop和线程有什么关系?

2、你是否接触过OC中的反射机制?简单聊一下概念和使用

3、objc中的类方法和实例方法有什么本质区别和联系?

4、runloop的mode作用是什么?

5、1runloop是什么/runloop的概念?

6、使用block时什么情况会发生引用循环,如何解决?

7、IBUser Defined Runtime Attributes如何使用?

8、模拟栈操作 

9、你是否接触过OC中的反射机制?简单聊一下概念和使用 

10、ldb(gdb)常用的调试命令?

11、block一般用那个关键字修饰,为什么? 哪些情况会引起block循环引用,怎么解决

12、为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain?

13、ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?

高级

1、UITableview的优化方法(缓存高度,异步绘制,减少层级,hide,避免离屏渲染)

2、有没有用过运行时,用它都能做什么?(交换方法,创建类,给新创建的类增加方法,改变isa指针)

3、看过哪些第三方框架的源码?都是如何实现的?(如果没有,问一下多图下载的设计)

4、SDWebImage的缓存策略?

5、AFN为什么添加一条常驻线程?

6、谈谈你对HTTP 、TCP、 IP、socket 协议的理解

项目

有已经上线的项目么?

项目里哪个部分是你完成的?(找一个亮点问一下如何实现的)

开发过程中遇到过什么困难,是如何解决的?

学习

遇到一个问题完全不能理解的时候,是如何帮助自己理解的?举个例子?

有看书的习惯么?最近看的一本是什么书?有什么心得?

有没有使用一些笔记软件?会在多平台同步以及多渠道采集么?(如果没有,问一下是如何复习知识的)

有没有使用清单类,日历类的软件?(如果没有,问一下是如何安排,计划任务的)

平常看博客么?有没有自己写过?(如果写,有哪些收获?如果没有写,问一下不写的原因)

有关技术类的问题可以在评论区留言,我重点说一下这轮面试的心得和体会。

第二部分:心得

面试者千万不要答非所问

如果让我选一个让面试官觉得印象减分的点,答非所问应该是首当其冲的。

面试者一定要知道面试官问的点是什么。

如果在知道面试官问的点,但是自己却不知道答案的时候,可以提出思路,思考过程。其实有几次面试者在我的引导下很容易就把答案说出来了,认清问题的点是解决问题的一半。

如果没有理解好面试官问的问题,一定要事先和面试官确认好。

其实这也属于沟通能力的一点:如果不能保证和对方沟通内容的一致性,自己弄个filter把对方的话都曲解了,以后合作的时候又怎能保证沟通好呢?

面试者一定不要来得太早

这里说的来得太早,是来得太早并告知面试官自己已经来了

因为在约定好的面试时间之前,往往面试官还有别的事情在做,如果他知道你来的很早,就可能会扰乱他的计划。有一位面试者早来了1个小时,结果把我们的面试计划打乱了,而且正好是我的第一次面试,所以真的是有点措手不及。

求职者和公司定下来的时间属于一个约定,约定是要遵守的。而且遵守约定同样也是对对方的尊重。如果入职之前都没能把握好,入职之后又如何能保证把握好呢?

实践与理论的脱节,让人很不安

能做出来项目,但是基础知识很薄弱

几乎每位面试者都能给我展示他做的一些app,虽然没有很难的功能,但也都算是有板有眼。可让我比较意外的是,虽然能做出有模有样的app,但当我问到很多基础的问题的时候却答不上来,比如属性和成员变量的区别,属性的默认关键字,Designated Initializer的概念等等。。

这不禁让我怀疑他们的代码的稳定性,更怀疑他们治学,做技术的态度。

虽说技术活需要实践的磨练,但和理论脱节的技术是钻不深的。可能有人会说我的面试题过于理论,实际中用不到。但有些时候,在实际开发中遇到的一些问题往往就是因为一些很基本的东西没有弄清导致的,相信你我都深有体会。

而且,我们都知道技术的提升是阶梯式的。什么是阶梯式的呢?就是可能我们会有比较长的时间才会有一个突破。但这个突破来的有多快,提升的有多高,是跟平时每个细小知识点的掌握程度是分不开的。

因为知识也是有复利效应的,准确地掌握越多的知识点,在以后的学习过程中,这些知识点相互之间想成的积极作用会越来越大:对新知识的理解更快,对问题的定位会更准,解决问题的方法也会越多。相反,如果你每个问题都得过且过,这些结果的复合作用就会导致你今后很难会有所突破了。

真的可能被简历骗到

上家的薪资很高,但是实际能力很不符

有一位面试者在简历里号称上一个工作拿了15k,但当我问到NSString属性使用strong还是copy作为关键字的时候他却说是strong,甚至连delegate都拿不准使用strong还是weak,我就有些奇怪了。

看技术博客和技术书籍的人还是很少的

只依赖于公司里的项目应该是不够的,毕竟不是每个公司里都有上乘的代码和技术

面试了大概20个人,但是真正有看过技术博客和技术书籍的真的不多,更别提Github了。不过其中一位面试通过者是有github账号的,并且有几个小项目,印象非常好,加了不少分。

我相信在这一行的未来,简历里面github账号和博客绝对会越来越受重视:

一方面简历真的是应接不暇,而且同时千篇一律,很难找出亮点。

另一方面,如果可以把自己的代码和成长展示给招聘公司,就会使得自己的能力在公司面前变得更加纯粹和透明,更有助于找到适合你自己的公司。

以上就是我上个月的面试心得,希望大家多交流,有说的不对的地方还请多指正。

(有一句话叫做三人行必有我师,其实做为一个开发者,有一个学习的氛围跟一个交流圈子特别重要这是一个我的iOS交流群659170228,不管你是小白还是大牛欢迎入驻,正在求职的也可以加入,大家一起交流学习,话糙理不糙,互相学习,共同进步,一起加油吧。)

上一篇下一篇

猜你喜欢

热点阅读