2019年iOS面试攻略

笔者工作经验4年,经过一年的精心准备,拿到了字节跳动和腾讯的 Offer,在这里分享一下我的一些心得,希望能帮助到有需要的同学。

一、摆正心态

我加了好几个 iOS 技术交流群,发现大家都有一个共识 ”iOS 没人要了“ 😂,其实很大部分是大佬们的自嘲(当真你就输了),不过也从侧面印证出移动端开发市场的要求越来越高,加上市场大环境不好,想要斩获大厂 Offer 难度越来越大。

但是作为程序员,我们没必要为这些事情所烦扰,越是寒冬,我们更应当充实自己,让自己变得稀缺,市场总会给到你满意的报酬。我们既然选择了这个高速发展的行业,自己就应该充满活力,保持学习的心态和惯性。

所以应对资本寒冬,我们应该保持平和的心态,潜心学习,等待机会。

分享下为了大厂Offer所做的准备工作:

  1. 坚持阅读技术书籍、技术博客、技术文档
  2. 输出技术博客
  3. 阅读开源项目源码
  4. 尝试独立开发,独立完成自己的APP
  5. 练习算法题

二、阅读技术书籍、博客

通过阅读技术书籍、博客、文档,可以快速学习到大佬们总结的经验,完善自己的知识体系,扩宽知识面。分享下我获取知识的渠道吧:

  • 掘金:掘金我机会每天都要上去看看,个人认为掘金是国内 iOS 技术社区中含金量较高的了,强力推荐掘金上的一个专栏《老司机 iOS 周报》,是一线大佬们精心挑选的文章,看就对了😁。

  • 小专栏:这是一个付费的知识平台,由于付费的原因,作者在文章更新频率和更新质量上都有所保证。我订阅了35个专栏(别问我都学完没,订阅了就算学习了😂)。推荐几个不错的专栏,《在PPT动画中学算法》《WWDC19 内参》《iOS 图像处理》《图解数据结构》《Mac 高效开发指南》《App 架构》

  • 知识小集:这是个公众号,是一群大佬共同维护的,更新频繁,文章质量不错。

  • 书籍推荐:《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》、《Objective-C 高级编程 iOS和OS X多线程和内存管理》、《OBJECTIVE-C编程之道 IOS设计模式解析》、《高性能iOS应用开发》、《iOS Core Animation Advanced Techniques》、《代码整洁之道》。这些书我读了好几遍,每次读都有新的收获。

  • 博客推荐:这篇文章总结的很好,直接分享给大家高质量 iOS 博客推荐

  • 极客时间:极客时间是专门为程序员打造的知识服务平台,涵盖了各个领域的知识,上面的课程值得一学,推荐滴滴技术专家戴铭大佬的课程 《iOS开发高手课》

三、输出技术博客

只阅读书籍、文章还远远不够,输出是最好的学习方式,在输出的过程中,你会发现很多细节其实自己并没有掌握,所以我也在坚持输出技术博客。同时技术博客也是很好的简历,比起简历上的一句 ”精通XXX技术“,一篇精彩的 ”XXX技术解析“ 是不是更有说服力呢?

我从开始工作就开始写技术博客,刚开始产量比较低。直到一本书改变了我对写作的看法,Spenser 大神的《写作是最好的自我投资》,以前一直认为写文章很难,要写的完美才敢发出来,很多时候创作激情来了,写两个字,看了看嫌弃自己写的太烂又默默的删掉了,最后啥也没有留下来。看完这本书才明白,以前的想法就是作茧自缚,要先动手写,多写,积累多了自然就会写了。

于是下定决心,先写起来,用 Hexo 搭建了技术博客(传送门),在简书上也同步更新。把对自己的要求和期望放低,不求写出像霜神、喵神等大神们教科书般的经典文章,就分享一些工作学习中遇到的小 tip。渐渐也收获到了大家的一些喜欢和评论,发现帮助了一些有需要的朋友,就更加坚定自己的路是走对了。

四、挑战算法这种大山

算法是一个合格程序员必备的内功心法,是进入大厂必备的技能,不过大家常常会产生一些误解,有两种极端:

1、认为算法很难,像洪水猛兽一般难以克服,一堆数据结构,各种抽象的数学公式,于是就放弃了。
2、认为算法没用,之前面试的时候和很多iOS开发聊过算法的问题,发现很多人都觉得算法在移动端开发也没啥用,做了好几年开发了都没用到过,唯一有关系的数组排序,查询啥的系统库都封装好了,不需要自己去实现。曾经的我也这么想过,不过在体会过算法的精妙之后,我才领悟到算法的重要性。

我认为首先算法很有用,其次算法并不难,而且很有趣。

举个例子,在开发功能时,为了满足产品变态的需求,难免有系统类提供的API不够用的时候,这时候私有变量就可以发挥它光和热了。怎么通过一个类,一层一层的找到特定类型的私有成员变量?在学习了广度优先搜索(BFS)算法之后,我利用BFS写了一个工具类来实现这个需求,

详情见runtime实现私有变量搜索

除了解决开发中的问题,当然学习算法还有一个比较重要的作用,应对大厂面试,现在大厂对于算法还是比较重视的,我在面试字节跳动的时候,每一轮技术面结束都有一道算法题,难度不大,但是很考验平时的积累。我分享下我的学习方法吧:

  • 首先是系统的学习相关知识,推荐两个学习算法的专栏《在PPT动画中学算法》《图解数据结构》,有多余的时间最好能看看这两本书《算法》、《剑指Offer》(面试必备!)。
  • 然后就是练题了,一定要多练题!!Leetcode是一个非常好的平台,坚持每周刷两道题,一年就能做快100道题,应对面试也就差不多了(我刷了97道)。

五、尝试独立开发

我一直都有很多idea,但是一直都没狠下心来做,后来有幸接触了开源大佬的专栏《KyXu 教你独立开发赚钱》,他以程序员的角度,展现了一个产品的从0到1的全貌,让我心驰神往,于是心一横,购买了一个开发者账号。在2018年上架了两款独立应用识之香蕉播放器,积累了一些技术之外的经验,比如产品、设计、运营之类的,感觉收获还是蛮大的。

这里推荐两本关于设计的电子书:《Producter:让产品从 0 到 1》《程序员聊设计》


最后,祝各位拿到心仪的Offer!(👻点赞并分享祝福加倍)。