关于面试的一些个人看法

面试准备

这篇文章是结合了《iOS 面试之道》的第一章“iOS 工程师的面试”部分以及自己的所掌握的知识内容所得,主要用于提醒自己和帮助其它同学。注意:本文章不保证信息准确性,仅供参考!

简历的准备

页数

简历通常最好是两页,一页的简历会显得过于简洁,正常来说不管一个人在某个行业做得好与坏,都能够把自己的所掌握的东西转换到两张 A4 纸上。

精简简历

  • 删除不必要的自我介绍:不要写上任何与课程有关的东西,操作系统、计算机网络、数据结构等等这些计算机专业核心课程或知识,是我们必须要掌握的,没有必要突出你上过这些课,这些课只要是国内高校相关专业都会上。这就好像应聘一个环卫工人,你要跟雇主说我会用芭蕉叶扫把、竹子叶扫把以及会使用大剪刀修建枝芽,这些东西都是一名合格环卫工人必须要掌握的,完全没必要突出。

  • 删除不必要的工作或实习、实践经历:这点我深有感触,我的第一份实习实在一家外包公司,干了两个月,在这两个月中,我没有做多么深入的性能调优,也不允许我去做(两个月的时间上了两个 app),这段时间给我的最大感触就是我对 iOS 的相关需求有了非常大的熟练度,也就是说,我在这两个月的时间中存粹就是去练代码熟练度的。所以,这段实习经历完全没必要摆出来。

    而且要注意分类!如果我们找的是一家 社会企业,社会企业可能会要求我们有“奉献精神”,这就可以把我们的各种志愿者经历放到简历中;如果我们要找的是一家 互联网企业,志愿者经历等等的类似的信息就不要放上去了。

  • 删除不必要的证书:我觉得四六级都没必要放上去,计算机是变化最快的行业之一,没人保证你拿了什么证就能够做什么事情,也没人能保证没有这个证你就不会做什么事情。如果我们自己都觉得这个证书没什么技术含量,那就不要放上去。

  • 删除不必要的细节:简历上写自己做过的项目时,不要连这个项目用到的环境都上去,比如,xxx项目的环境为 macOS ,设备为 Macbook pro 等等。

重要的信息写在简历的最前面

最开始的时候我的简历十分尴尬,我居然是按照时间顺序排序的,隔了大半年的外包实习经历我居然放在了最前面,这就导致了每次面试官都从第一个项目开始问起,而我自己已经记不起太多细节了(也没多少细节可说),所以最后我决定在简历中删掉了这段实习经历。

所以,最好的做法是先把重要的信息放在简历的相对靠前的位置。比如个人的一些基本信息,写清楚自己的名字、邮箱、院校、博客地址、GitHub 等等即可,接下来就要重点“渲染”自己最厉害的经历放出来,可以是名气较大的公司实习,也可以是比赛奖项等。

最好不要去网上下模版,最佳的做法是直接 markdown 搞起,让面试官专注你的内容而不是那些酷炫的排版。

不要简单的罗列工作经历

不要在简历上写太多关于某个项目的事情,也不要一笔带过。个人推荐最好的做法是分版本描述,在每个版本的描述中概括性的描述出自己做了哪些事情即可,如果面试官对你做的这个项目中的某个版本中的某个功能点感兴趣,他是会问我们的。这有个例子:

  • v1.5.0 :数据缓存、网络监控
  • v1.6.0 :弱网体验提升、数据异常中间件
  • ……

需要注意的是,必须要保证只要我们写在简历上的东西就是自己做过、摸过的,要不然如果只是为了充数好看,被问到而答不上来就十分尴尬了。

不要写任何虚假或夸大的信息

千万千万不要出现“精通”二字,甚至也不要出现“熟练”,摸着自己的良心说话,你真的精通,真的熟悉了吗?我始终不认为少于 10000 个小时或者少于 10 万行代码量的锻炼就能够称得上精通 or 熟悉。但是如果你对自己非常有自信,确实在某些方面有自己的心得,那可以这么说:

1
主攻 iOS 开发,正在学习以 python 为主的后端开发技术栈。

短短的一句话涵盖了非常多的东西,“主攻”二字没有自狂但很实在。但如果你的情况是真的没什么项目可写,自己参加的又是一些“边角料”的工作,可以把面试官引导到自己比较稳妥的方向上来,比如说可以让面试官问你算法和数据结构。

留下更多的信息

我推荐大家留下:

  • github
  • 掘金/简书或者自己的 blog
  • 邮箱
  • 社交账号,如微博等

需要注意的是,要确保我们留下的这些账号是真实有效的,其中的信息都是可考证的。比如说,如果你留下了 github 地址,我是一定会去看的,而且会去思考哪部分代码是你写的,写的怎么样,甚至会去观察你的 contributes, 还会去看你代码中的命名等等,如果发现了你只是因为两个月或者一个月要找工作而开始“疯狂”的 commit ,那么你还不如不放,我知道大部分同学的 github 上没有多少优秀的 repo (我也一样),但是一旦你放到 github 上了,并且还把你的 github 地址放在简历上了,这就表明了你是有内容的,想给面试官去查看。

不要附加任何带来负面影响的消息

  1. 不要放个人照片。(我曾经犯过这个错,现在想起来真是太傻了)这是你的简历!不是你的相亲!工作就是创造价值,你的性格如何,人品如何,会有专门的面试去考量,只要你能保质保量的完成任务,单臂编程也没问题。
  2. 如果你没有出色爱好证明,比如国家二级运动员等等荣誉,那请也不要把你的个人爱好放到简历上来。等你入职了,会有专门的自我介绍环节,这个时候请你多多表现,不要哑口无言。
  3. 如果要求电子简历,请转成 PDF!
  4. 如果我们要留邮箱,最好留一个能够及时收到消息提醒的邮箱,唐巧在书中说的是不要留 QQ 邮箱,但是我明确知道在国内 QQ 邮箱的体验还算不错,很多时候我之所以留 QQ 邮箱是因为我绑定了 QQ 和微信的收件提醒,而 QQ 和微信是我几乎不会关闭的 app 。
  5. 不要写上任何职业培训信息。我一点都不反对培训出来的程序员同学,因为他们至少证明了一点,他们想做这个事情,然后有所付出。至于培训出来的程序员质量如何,这里不做考究。从我自身来说,我是 mooc 的常客,coursera 和 edX 是我经常活跃的地方。但是你没必要把参加这些课程或者培训写到简历上,因为参加这些课程或者培训是我们应该做的,这是提升我们自己的手段,换种方式,如果连这种事情都要放在简历上,是不是也要把自己看过什么书也放到简历上呢?

寻找机会

网上流传这么一句话,大部分的工作都不是面试来的。

寻找内推机会

  1. 找师兄师姐(也可以找我 😃)。
  2. 微博、知乎等社交平台。
  3. github。这是一个极好的平台,曾经我开源了 PLook ,两天后就有人找到了我。

你要相信,只要是个人才,谁都喜欢,更何况还有丰厚的内推奖金等着呢。

其它常见的招聘渠道

实习僧(找实习非常靠谱)、拉钩、100 offer 、Boss 直聘(不是很推荐)、智联招聘等

面试流程

自我介绍

在这个环节中我们千万要把握好时间和要阐述的内容,时间把握在 3 ~ 5 分钟。这个环节我跟唐巧老师的看法是一致的,非常重要。我记得去年的暑期实习面试中,我临时采取了一种方法,就是按照简历上的内容一个一个介绍,但是这个介绍不是细致无比的介绍,而是笼统的大概介绍自己都做了什么,用到了哪些技术,这个项目是服务于谁,用于做什么的。

我反而不推荐大家去背自我介绍,只要我们的简历写得足够清晰明了,错落有致,那我们就先在自我介绍环节引导面试官去看我们的简历,让面试官把注意力放到我们的简历上,而不是让他把注意力集中到自己之前准备好的问题上(虽然也有一定几率转移注意力失败)。在这个环节中,其实我觉得自我介绍根本没啥用,与我相关的内容早都已经写在简历上了,让我做个自我介绍不就代表着简历你都没看就来面试我?当然,我觉得面试官们让我们做的应该不是自我介绍,应该是给我们一个梳理自己思路,让自己进入面试状态的阶段。

需要注意的是,不要在这个环节表现得自己无话可说,磕磕碰碰,支支吾吾。适当停顿是好的,但是不要停顿了很久,然后才接着说,如果真的在面试过程中出现了这个情况,我们需要用一些“自我调侃”的语气来匀一下,比如:“之前的做这个的时候,我想着是学习一个产品怎么从 0 到 1 ,但是没想到最后 xxxxx”,这部分因为是我们缓解自我介绍过程中断片用的,不要一直都在“调侃”,适当抓住时机回到正轨上。

如果我是面试官的话,我会非常喜欢听面试者谈论他当初为什么要做/加入这个产品/项目。用唐巧老师的话来说:“优秀的应聘者会通过自我介绍“引导”面试官问到自己擅长的领域知识”,用我自己的话来说,就是忽悠面试官到我们自己擅长的领域或者项目中来,最后别让面试官上来就问,“会手写快排么?来一个”,说真的,如果你没啥说的,我是会问的,但是如果你已经做过很多东西了,我要问的会往架构和设计方面的更多一些,因为之所以问我们算法和数据结构,是因为这是面对一个与自己毫不相干的人时最直接的方法,因为这更能省事,如果你已经做了很多东西了,并且也能够给我看到,那么我当然会认为你已经会写代码了。

项目介绍

这里有一个我自己认为是禁忌的地方,当面试官问到你 xxx 项目时,千万不要表现出这个项目简单啊、没什么说的等等,因为这会让面试官觉得,既然你自己都觉得没什么可说的,那你为什么要写在简历上呢?并且当我们确定要把一个项目放在简历上时,千万要记得这就是你身上的一块肉,如果这块肉是你身上的,点一下都会有感觉,更不要说这块肉被割了一下,所以我的意思是,这个项目是你做的,那就要事无巨细的从零到一的所有细节你都要知道,因为比如说我,我就会抓住其中一个点问下去,反正也是你做/参与其中的,这其中肯定有你构思了很久的地方,所以我是一定会问下去的。

需要注意的地方有:

  • 这个工作具体的产品需求是什么样的?
  • 大概做了多长的时间?
  • 整体的软件架构师什么样的?(划重点)
  • 涉及哪些人合作?几个开发几个测试?(这问题我不会问,只要是个项目肯定不只一个人,更别说在公司中了)
  • 项目的时间排期是怎么定的?
  • 你主要负责的部分有哪些?(划重点)
  • 项目进行中有没有遇到什么问题?(划重点,会被面试官问:“那你有没有想过其它方案?”,然后就开始了……)
  • 这个项目最大的收获是什么?遗憾是什么?
  • 项目中最难实现的一个需求是什么?具体是怎么实现的?

写代码

这个环节是一场面试中重中之重的环节,如果这个环节表现得好了,可以覆盖掉之前所有的表现,因为招一个程序员进来,最终的目的就是写代码。当然考察代码写得如何有非常多的方法,其中最基本的就是从数据结构、算法一直到系统架构,我个人把这个环节分成了两部分——电面和面试。

电面中千万不要让人给你做题,我自己就被这么玩过,简直痛不欲生,一是信号不号,无法想象在跟你通电话的面试官是在一个什么样的环境下跟你沟通,更何况有些走的还是 IP 电话,不想骂人;二是讲不明白,这点可以理解为双方都不知道对方在说什么,如果“隔空能力”表达不好,需要借助纸笔来辅助回答,那就别问让面试者需要纸笔辅助回答的问题,这样会让双方都很尴尬;三是沟通费劲,这点不用多说。之前我在给团队面试 iOS 实习生时出了一份电面题,基本上都是基础知识,答对这份电面题只能说明能够具备面试的要求,不是说就具备了入职的要求,千万别搞错了,链接在此

面试过程中因人而异,需要顾及的问题很多,不可随便网上找份题直接肝,这样体现不出面试者的差异性。个人推荐做法还是就事论事,简历上写了哪些东西就问哪些东西,然后结合团队本身产品及业务进行拓展,别上来就让人“手写快排”、“翻转二叉树”……这些东西需要时间去准备,更何况真正的大佬根本不会去准备面试的,因为他没时间。但是这些知识不可能不问,因为工作中真的会用到,那怎么办?给个业务例子或造一个场景,让面试者自己去发散思维,说不定面试者还能给我们长长见识呢,如果我们出的业务例子或场景只能用某个数据结构去完成,那符合要求的面试者是一定会想到的,他也应该知道怎么去调优,去实现,反而是根本想不出来或者就是错误方向的面试者才值得我们斟酌,如果出现了这种情况,十有八九是个幌子。

说到底,我还是推荐如果面试官们真的要考面试者的数据结构和算法能力(纯粹),直接让它现场上机撸码吧。

系统设计

这部分内容不一定会单独拎出来,可能会跟写代码环节有重叠,但现在问的最多的基本是这个套路:

“有看过 xxx 库么?”
如果你看过,“能说说看这其中的设计么?”
如果你没看过,“如果要你设计,你要怎么做呢?”

这是个大坑!如果你真的认认真真的研究过了,钻研过了,那你大可放心的说,“我看过!”,可问题是不是每个人都有时间去钻,我唯一重头到尾每一行代码都认认真真的看完是这个库:DOFavoriteButton,因为我觉得他写的很烂,如果我们给的是一个镂空图,它依旧会在点击状态完后给你填充,当时把我气得不行,怎么会有这么 zz 的库,把代码全部翻完后,加了个属性(当然,可能现在已经改过来了)。

由此可见,如果用到的库完全能够满足自己的需求,我还真的不一定会有时间去看源码,除非用到的库质量不高或者设计上有问题,但是其中有些地方导致了没法舍弃,只能去看源码改代码。所以,就算看过 xxx 库的源码,我也会说没看过,如果你说看过了,有些神奇的面试官还真的会问你一些犄角旮旯的问题,但如果我们说了没看过,然后自己设计一套出来,就算某些地方说的不好,也会有加分的地方。

提问

这个环节可以认为是我们全场面试中唯一一个主动出击的机会了,如果整场面试下来觉得这家公司不错,那么我会问如果我进来的话,主要负责的产品是什么?业务是什么样的?谁带我?(这个问题慎重)现在团队有多少人在负责这个产品?千万不要问:

  • 我刚才的面试情况如何?
  • 刚才 xxx 面试题的答案应该是什么?
  • 大概能有多少钱?

其它

笔试、代码考察准备

首先要明确一点,如果我们非常喜欢、期待进入某家公司,一定一定要记得用尽自己的一切手段去获取这家公司的所有细节,包括面试官都会问哪些问题、面试题/笔试题大概都有哪些、多看一些面经等等,并且如果我们真的确定了自己非这家公司不去,那就一定要记得去刷题!我十分推荐去刷 leetcode ,前段时间本想着每天一道题持续到明年春招,但是没想到自己可以转正,而且转正三面全过了,就把重心偏移到其它方面去了。

关于系统设计的准备,我个人推荐大家在平常撸码的过程中多跟后台沟通沟通,或者在业余时间做一些自己的全栈 side-project ,这样有助于从大局考虑系统设计,当然,最重要的还是对日常需求的思考,还是那句话“再简单的事情也能过做到完美!”

Offer 的比较和选择

这部分内容我跟巧哥的思路不太一样,也有可能是因为我个人经历的原因,我始终认为时间是最宝贵的,我每天都必须给自己留下一定量的时间放空自己。在这段放空的时间内,玩游戏是非常非常小的一部分,甚至可以忽略不计,大部分的时间我会选择去看书,各种书都看,可以是技术书籍也可以是人文书籍,不要小看用这些时间去阅读取得的效果,看书真的能够使人进步和加深思考,初中的时候因为还是走读生,每天回到家都有时间给自己一本一本的去看书,导致一次作文满分,好几次只扣了三四分,甚至一两分。

当然,我说这些原因主要还是想突出一点,如果我们现阶段不是特别的缺钱,当然,钱多少都不嫌多,我的意思是说,在保证自己各项开支都均衡的情况下,尽量选择能够给自己留下空余时间的 offer ,如果真的能够可以少拿钱,然后提前下班(强制性赶人),我真的愿意这么做!

至于多出来的时间要怎么消费,这就看个人的需求了,如果是我的话,我会先学做饭,把小时候妈妈逼我学的几道菜再精进一番。如果还有更多的时间,我会用自己所学的知识做一些传承的事情,比如做一些游戏化编程的事情等等,每天都有多余的时间真的很重要,因为这至少能够保证我们的热情不减,还是当初那个一腔热血的少年。

这有一张当时写下的转正面经图片:
IMG_2799.PNG