# 无客户端开发经验如何准备面试？

> 原文：https://pjhubs.com/2019/11/10/how-to-prepare-to-interview01/
>
> 作者：PJHubs · 发布于 2019-11-10 · 标签：面试

> 此文章为无客户端开发经验的同学准备面试的一些个人方法论。已具备客户端经验的同学可见[招一个靠谱的iOS实习生（附参考答案）](http://pjhubs.com/2018/04/08/招一个靠谱的iOS实习生（附参考答案）/)和[关于面试的一些个人看法](http://pjhubs.com/2018/10/15/关于面试的一些个人看法/)两篇文章。

## 前言

从第一份正式实习结束后，我就在琢磨，到底应该如何准备一个好的简历去应对面试。到现在，经过大大小小十几次的面试后，我开始发现有一些套路可循，并且好像还是一个「银弹」！接下里，我先把几个给我印象比较深的面试过程描述一遍，看看能否观察出一些特点。

## 过程
### A 面试
最开始，我的 A 面试连简历都没带，不是我不想带，而是我根本就不知道面试居然要带简历，并且整场面试下来，我异常紧张，行动迟缓，根本不知道自己在干嘛，导致面试官直接接手我的电脑，自己看我的项目结构去了......

### B 面试
我的 B 面试给了我一个强心针，虽然 HR 明确表态只要应届生，但我还是去了，而且 HR 居然也接待了我，还聊了一会儿。

我认为，在 B 面试的过程中，我**终于明白了怎么去梳理和组织我要表达的内容**，估计因为对方是非技术背景的面试官，能够「让我把话说完」，走出大楼后，我突然明白了，原来我第一次面试时的紧张是来源于我并没有给自己大脑连贯性思考的空间！！！

### C 面试
在这次面试中，面试官上来就怼了我 C++ 的基础知识，但我全都在准备 iOS 相关的内容，所以一连三个不知道后，心态就崩了，根本不想继续，双方的脸都黑了，这场面试就这样草草了事。

事后，我得出一个结论，不能被面试官带着走，因为一旦他发现你某个知识点不清楚后，经验不足的面试官会一直怼与这个知识点的衍伸内容，并不会跳跃性的切换到其它知识点上。

### D 面试
D 面试有了前几次的积累，我开始运用一些技巧，遇到比较深入的问题时，并且我之前从未考虑过或者思考过，我运用“目前只是大二，这块知识还需要继续学习...”等话术来「告诉」面试官，这块内容你再问我，我也不知道，换下一个吧。

也有人说，那你直接说不知道就好了呀，但「我不知道」这几个字在面试过程中是最忌讳的，这两年的面试已经不存在对校招生或者实习生没有了解过的超纲内容，如果你说出了「我不知道」，只能证明一件事，你在偷懒。

但很多东西，虽然确实我们真的不知道，但是「我不知道」并不能逃避掉一些问题，在这个行业不存在无解的问题，一切问题都可以使用某些方法「规避」掉。

### E 面试
E 面试我从被动变为了主动，因为我的这一轮的第一个面试，就是我非常想去的公司，因此我想速战速决，主动向对方表示出我的热情。

所以，基本上面试官抛出一个问题，我不但给出了我当时能力范围内的最优解，还给出了我之前遇到类似问题在业务上的具体场景，换句话说，我并不是在回答你的问题，并不是在给出问题的答案，而是这个问题在具体的业务场景下，我真正的遇到了，而且真正的解决掉了它，并没有纸上谈兵。

而且，通过这种做法，基本上这个知识点衍伸出的后续拓展问题，也不会太过于纠结细节，因为你已经证明了你解决了它，那些衍伸出的拓展问题，不会作为鉴定点。现在的情况是，大部分问题的答案几乎所有人都懂，但是几乎只有很少的人会去真正的拿出一个实实在在的东西去证明，我不但懂，而且还会用，用的活灵活现，所以才导致为什么我们在回答出了几乎完美的答案，但面试官依然不满意，因为你自己都知道自己得到这个几乎完美的答案成本有多低。

### F 面试
在这次面试中，我真的累了，我根本不想再去准备什么，所以我才在上一家公司实习了这么久，真的累了。

我感觉这个行业给了我一种窒息的感觉。我不想是因为我刷完了多少多少道题，回答上面试官多少多少个问题，通过了多少多少个考核点，我才拿到这个 offer，我不想是因为「我达到了某个指标」而加入这家公司。

我想这家公司之所以把我招进去，看重的是我这个人、我的创意、我的想法、我的热情、我解决的问题的能力和思路。所以，之前跟几个小伙伴们一直在说，我们要打造自己的「个人品牌」。公司招人，一定会把自己的利益最大化，他们想要能够解决问题的人，我们想要能够得到成长的公司，回到这个问题上，这就是一个信息对等的天平了。

因此，我们要从公司这一层面去考虑问题，如果你是老板，你想要什么样的员工？

* 能够解决问题，在解决问题的问题同时不留下坑；
* 能够提升团队氛围和技术；

这两点是最重要的同时也是最容易被忽视的。很多人包括我自己最开始都认为：如果我把面试官的所有问题都回答上来了，那我就应该能够加入这家公司。

然而事实上不是这样的，实话实说，在两位候选人都是同一水平的前提下， 学历永远是迈不过去的那道坎，常春藤永远能吊打 985，所以，要学会一些技巧。直接拼正常面试套路，这是最直接的一步，也是最容易阵亡的一步。

## 可能会被问到的点
以下内容均为个人观点，未列举的知识点不代表不会被问，列举出的知识点均为重点：

### 算法
技巧：不要背题！不要背题！不要背题！只要是面试官出的题，都不能说「我不知道」，最次也要等面试官主动切下一题，**不是你主动提出换题**。

「排序」基本上均为所有面试的开题，除非你有在非常认真的刷题，否则很难遇到「原题」，因此真的不要背题，提高自己的抽象理解能力，能够在高压的环境下快速转换思维才是最佳。

算法部分内容真的太宽泛了，这部分内容只能靠自己造化，而且貌似只能靠刷题去解决，因为有些模版算法，如果不背模版，比较难在高压环境下推出来。以下几个点是经常出现的载体，面试官会通过这几个载体去出一些有意思的东西，比较务实的面试官会给一个业务场景带着去思考，但记得不能被带偏，一定要抽象到具体。

* 数组；
* 二叉树；
* 链表；

### 计算机网络
技巧：在准备这部分内容时，一定要把自己作为一个客户端。

* 一个 API 从发送到接收的全流程是怎么样的？尽可能详细。
* HTTP/HTTPS 全概念。
* OSI 网络模型全概念。

网络部分基本上都是概念题，而且绝对出不了课本，尤其第一个点如果非常细致的全流程全部搞懂，基本上后续不会再问了。

### 操作系统
技巧：面试官基本上都会给一个业务场景，这部分把书上给的几个竞争模型都弄懂就稳妥了。

不排除会问一些内存交换的设计题，解决在内存不足的机器上进行文件的各种操作问题。如果是面试后端的同学，这部分内容可以玩出花来，一旦扯到分布式，那就可有的玩了。

* 多线程；
* 锁；

### 数据库
基本上都是设计题。例如，如何设计一个良好的数据缓存结构，不过，如果没有客户端开发经验的同学，基本上也不会问太多。

* 持久化；
* 缓存架构；

### 编译原理
这部分内容可以不用准备，如果是前端基本上也会玩出花来，一个 `Babel` 可以玩一天。但是如果能够对自己最熟悉的语言，说出一些亮点内容，那是个加分项。

* 编译型和解释型语言的差异。

## 总结
注意观察，很多东西我不能说的太明白，并且在一次面试靠谱的前提下，长达两三个小时，不靠谱的前提下差不多一个小时，在这不短不长的时间里，想要全面考核一个候选人的真实水平那是肯定不行的，学会从被动变为主动。

确实又是一年秋招季，去年的这个时候，我拿到了滴滴的转正 offer，但我最后因为一些特殊原因没去滴滴，至今依然怀念在滴滴的那段时光。有些东西，会因为一些人而存在，有些东西会因为一些人的离开而变味。

以上只是我在几次面试中的个人经验所谈，每一次面试都给我了自己一个成长的机会，我学会了如何引导面试官去面试我，而不是被面试官带着走，所有的一切要记得换位思考。

**如果你是面试官，你会怎么招人？**
