先是程序员,然后才是 iOS 程序员 — 写给广大非科班 iOS 开发者的一篇面试总结

2,863 阅读3分钟

Objective-C | Swift | C

这篇面试总结很短,也没有面试题的答案,只是写给像我一样的非科班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开发者),应该提高忧患意识,未雨绸缪,更何况,雨已经来过了。


图片来自:pixabay.com