C874dee30a9c4442b01127bc70c56536
iOS 开发者如何在互联网寒冬中杀出重围

前言

在2018这个寒冬里,我们或多或少都有听到一些消息,许多互联网公司纷纷裁员或收紧社招通道,其中不乏国内大厂的身影。不过对于我们iOS开发者来说,可能早就波澜不惊了,毕竟只要某个跨平台或移动端的新技术火起来的时候,就会出现“iOS开发又没人要了”这样的声音。但iOS开发的需求量其实一直都没怎么减过,至少我身边的朋友或公司都一直苦于招不到合适的人。关键在于这个‘合适’二字, 以前说iOS找不到工作其实大部分是因为门槛提升了,对于iOS开发者的能力要求更严格了,换句话说就是iOS初级开发者没人要了,中高级/资深开发仍然是卖方市场,这是2018年寒冬之前的情况。 而现在整个互联网行业的形势由于资本以及各种环境的影响,确实比以往都要严峻得多,相信大家也能感受到这股凉意。

之所以前面要提下现在的大环境,是因为最近本人也换了工作,本来打算年底休息一阵,出去散散心之类的。但每天都被各种各样的微博朋友圈裁员文章轰炸,加上身边人一些担忧的气氛,弄得我也心慌了起来,已经完全没有了任何出去玩的心思,毕竟为了生活,还是要恰饭的嘛。

我从准备面试到最终入职共3周左右,目前就职于字节跳动。 今天我会从几个方面来简单聊下,希望对各位准备换工作或者正在努力找工作的同学们提供一些参考:

  • 如何准备面试
  • 简历二三事
  • 从面试中脱颖而出

如何准备面试

梳理基础知识

我相信大部分开发者恐惧面试有一部分原因是由于平时忙于公司项目的业务或者界面开发, 对一些计算机基础知识疏于记忆和理解,往往在面试过程中被面试官问到时,明明有印象但却表述不出来。所以个人认为在面试准备时做好知识梳理非常重要,我整理了一些基础知识点:

  • 网络

    • TCP/IP 推荐《TCP/IP详解 卷一》
    • HTTP协议结构,重用, 缓存,安全传输(HTTPS握手机制)
    • Socket (理解流和包)
    • 序列化协议 (Protocol Buffer)
  • 内存管理

    • 推荐《 iOS与OS X多线程和内存管理》
    • 理解属性的不同内存管理策略
    • 内存布局
    • 循环引用
    • 弱引用
  • 多线程编程

    • 任务并发
    • 线程同步
    • 数据竞争
  • 基本的数据结构 (树/图/堆就看个人掌握程度,这些必须掌握的)

    • 数组,队列,栈
    • 单链表/双向链表
    • 哈希表
  • 基本的算法

    • 排序
    • 二分
    • 递归
    • 哈希
  • 界面渲染性能

    • CPU和GPU负责的任务分别是哪些?
    • 如何分析和定位卡顿问题?
    • 如何解决或优化复杂布局下界面卡顿?

在面试前仔细去梳理和回顾这些知识点,把基础掌握得越扎实,就越能够提高自信,给面试官留下好印象。并且我建议大家能想一个项目中的具体case来增强你对这些知识的运用,因为也有很多面试官会问到你在项目中的具体应用,比如像Runloop , 可以用在处理主线程中分片的耗时任务,通过监听Runloop间隙,将一些需要在主线程中做,但一次做完又会很耗时的任务,切分成小块Task去执行,减少主线程卡顿。同样还可以用来监测应用的卡顿情况。所以将知识点发散到实际的项目或者场景中去解决某个具体的问题也是很重要的一种能力。

过往项目梳理

我在头条的面试过程中,面试官都有问到过往项目技术架构设计,以及项目中的一些技术难点和亮点。个人觉得在准备过程中选取最近的一两个项目做一个全面的分析是比较重要的,最好是不局限于某个自己写的功能页面或模块,如果能自己在白板上清晰的画出架构设计图是最好的,虽然在公司具体开发中一般都是负责具体的业务模块,但整体的程序设计能力在面试中所占配比还是很高的。

数据结构和算法

从我最近面试六七家公司的经历来看,包括头条,腾讯等,现在面试官对于程序员计算机基础能力的考察是愈来愈重视了, 无论大小互联网公司,都会有那么几道算法题等着你,或笔试中,或面试中让你解决某个问题,无外乎都是对基本算法和设计模式的检验。比如如何设计一个表现良好的缓存框架?如何在有限的额外内存中进行海量数据的排序查找? 不过话说回来,基础能力在于长期的巩固与练习,并不能一蹴而就。如果同学们觉得自己在这方面的基础比较薄弱的话,可以在LeetCode上多加练习,通过Discuss也可以学习到其他人的一些解题思路。在这里推荐一本书《剑指 offer》,如果需要快速准备一下的话不妨看看,会有不少收获。


简历二三事

写好简历的正确姿势

其实大家在网上能搜到不少技术简历的模版,各式各样,良莠不齐。首先我个人觉得技术简历最重要的一点就是要简洁 , 为什么这么说, “Simple is better than complex.” ——— Python之禅

个人信息一定要一个条目占据单行,为了清晰整洁, 包含必要的基本信息就可以了,最好不要把兴趣爱好什么的也写进去。 姓名/性别/年龄/工作年限/学历/联系方式就OK了。

专业技能这个写与不写,在网上其实是分两派的,大部分技术人都觉得这个东西没什么用,都差不多,就很赘余。 还有一部分就觉得这个在是对自我技能树的一个阐述,需要写一点。在这里我觉得,写与否分情况,所以最好你准备两份。为什么这么说呢,因为像国内一线的互联网公司,一般是用人部门会来做简历筛选, 大家其实都不太喜欢看这个,所以如果你投的是大厂这一项能省就省掉,另外也有一部分公司,HR会先做初步的简历筛选,这个时候技能项也可能会作为一个快速筛选的依据项,我只是说可能,因为很多公司HR可能每天要看几百份,如果你的项目和背景不是特别突出的话,其实HR是没有那么多时间去研究的。

项目经历的话最好是按照时间倒序方式, 精选出2-3个放上去就可以了,然后说清楚整个项目的技术栈和你在其中负责的部分就可以了。至于该项目产品的一个说明和愿景之类的可以在面试中聊,简历上就别写了。

如果有个人博客/开源项目之类的可以把这些也加上去, 虽然简历筛选者也不一定会看(除非某个很知名的开源项目),但还是会给简历加一些分, 另外还可以加上自己的一些技术分享,最近在深耕研究的领域书籍,放在后面也不影响。

大概技术简历的内容篇幅就这么多,记住开始提到的简洁原则应该就没什么问题。还有一点,尽量使用Markdown编写, 如果是在招聘网站上投递一定要使用附件简历。

top Created with Sketch.