# 关于面试的一些个人看法

> 原文：https://pjhubs.com/2018/10/15/interview01/
>
> 作者：PJHubs · 发布于 2018-10-15 · 标签：面试

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```
主攻 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 ](https://github.com/windstormeye/Peek)，两天后就有人找到了我。

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

### 其它常见的招聘渠道
实习僧（找实习非常靠谱）、拉钩、100 offer 、Boss 直聘（不是很推荐）、智联招聘等

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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