这篇面试总结很短,也没有面试题的答案,只是写给像我一样的非科班iOS开发者的一些话。
昨天进行了人生第一次视频面试,一共三个小时的技术面,还没见到人事,应该是挂了。
不过整个过程下来感触还是蛮多的,除了感受到面试官的牛X之外,也知道自己平时在学习中的不足。
先介绍一下面试中觉得比较吃力的问题:
1.如果让你实现属性的weak,如何实现的?
2.如果让你来实现属性的atomic,如何实现?
3.KVO为什么要创建一个子类来实现?
4.类结构体的组成,isa指针指向了什么?(这里应该将元类和根元类也说一下)
5.RunLoop有几种事件源?有几种模式?
6.方法列表的数据结构是什么?
7.分类是如何实现的?它为什么会覆盖掉原来的方法?
另外值得一提的就是问了我自己写的博客里的东西(JSONModel的解析,EOC的笔记)等等。。
这次面试让我深刻意识到了两点:
1.对于每个设计,不能只停留在“会用”而已,应该理解它的实现机制,而且几乎每个设计都是与数据结构息息相关的,理解了数据结构和指针会有助于理解这些设计。
2.了解设计的原理之后,还要知其所以然:为什么这么设计?最好还要知道这个设计存在什么缺陷,这个缺陷是哪个解决类似问题的设计所没有的?
第一点是“how”的问题,第二点是“why”的问题,然而我相信有不少人只停留在“what”和“using”上。
在面试的时候,我强烈感受到了面试官的功力之深:给我的感觉,对他而言,几乎所有的设计都可以用某种数据结构解释出来(有的时候也会结合指针),对知识点理解得非常透彻:即便是很简单知识点,也能说出很多深层次的东西来。而我自己只是刚开始学数据结构不久,在面对提到数据结构的问题几乎是没有思路的。
我想说的:
所以我觉得对于广大非科班的iOS开发来说,如果想在iOS开发上走远,就必须尽快补充数据结构,算法,指针等计算机基础知识,不然会对知识的理解形成很大的阻力。因为只有知道了这些基础知识,才能更深入得理解每一个技术点,而且以后如果学习其他的语言,也会更高效一些。
简单来说就一句话:先是程序员,然后才是iOS程序员。只有这样思考,路才能越走越宽,越走越快,越走越远。
现在iOS开发形势这么不好,市场要过滤掉那些计算机基础知识薄弱的人也是情有可原的。
所谓的现在的“不好”,只是相对于之前“不正常的好”的不好。现在这个行业变得“不好”,其实是因为这个行业正在变得好,应该值得我们高兴才是。
所以对于我们这群人(非科班的iOS开发者),应该提高忧患意识,未雨绸缪,更何况,雨已经来过了。
最后,给大家推荐一个iOS进阶内推交流群679884541,不管你在地球哪个方位,不管你参加工作几年都欢迎你的入驻!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)