> * 原文地址：[How to write a killer Software Engineering résumé](https://medium.freecodecamp.org/writing-a-killer-software-engineering-resume-b11c91ef699d)
> * 原文作者：[Terrence Kuo](https://medium.freecodecamp.org/@terrencekuo)
> * 译文出自：[掘金翻译计划](https://github.com/xitu/gold-miner)
> * 本文永久链接：[https://github.com/xitu/gold-miner/blob/master/TODO1/writing-a-killer-software-engineering-resume.md](https://github.com/xitu/gold-miner/blob/master/TODO1/writing-a-killer-software-engineering-resume.md)
> * 译者：[EmilyQiRabbit](https://github.com/EmilyQiRabbit)
> * 校对者：[lihanxiang](https://github.com/lihanxiang)，[iWeslie](https://github.com/iWeslie)

# 如何写一篇杀手级的软件工程师简历

这是一篇简历深度分析，它让我得到了 Google，Facebook，Amazon，Microsoft，Apple 等众多公司的面试机会。

![](https://cdn-images-1.medium.com/max/800/1*0yse40ucjmpdlaBqlY0fTg.png)

这篇简历让我进入了 Google，Facebook，Amazon，Microsoft 和 Apple 的面试环节。

![](https://cdn-images-1.medium.com/max/800/1*zYjyIdGdfDPN8gKQnRvqRw.jpeg)

2017 年在高年级的简历

我通过把我的简历持续不断的投入简历**黑洞**，也就是大家熟悉的网申，来获得了这些面试机会。

![](https://cdn-images-1.medium.com/max/800/1*pM-Aipc_Y9NzJalOhSW5OQ.jpeg)

网申是人们求职最常用的方法，在竞争环境下也是获取面试机会最有效的方式。这也就正是我获取到我所有面试机会的方式。

我是如何完成的？

在这篇文章中，基于以下几个目标，我将对我的简历进行逐行分析：

*   阐述我在创作简历过程中作出的选择
*   我为何相信简历能够帮助我获取面试机会
*   你怎样才能创作出更好的简历

我第一次找工作的时候，费了很大周折才进入面试，因此我决定写这篇文章。如果当时能有一篇有实际应用的简历范例给我看，一定会对我大有帮助的。

本篇文章由以下几个部分组成：

1.  [**所有十分熟悉的方法，都没能让我进入面试**](https://medium.com/p/b11c91ef699d#9154) —— 我刚开始找工作时一段短暂的挫折经历
2.  [**进一步分析选项**](https://medium.com/p/b11c91ef699d#d859) —— 反思不同的策略，来提高进入面试的可能性
3.  [**举例：来学习如何写一篇杀手级简历**](https://medium.com/p/b11c91ef699d#0512) —— 一步步的分析我的简历，以下是对应简历的每个部分：

*   [概要简述](https://medium.com/p/b11c91ef699d#95e6)
*   [你是谁](https://medium.com/p/b11c91ef699d#3868)
*   [联系方式](https://medium.com/p/b11c91ef699d#ebfd)
*   [教育经历](https://medium.com/p/b11c91ef699d#3fe8)
*   [工作经历](https://medium.com/p/b11c91ef699d#6bbf)
*   [个人项目](https://medium.com/p/b11c91ef699d#ed02)
*   [技能](https://medium.com/p/b11c91ef699d#1ee1)

### 所有十分熟悉的方法，都没能让我进入面试

#### 网申

你应该知道，所有公司都会提供线上申请链接。经典的招聘页面会展示给你一串职位名称，你在点开工作描述并阅读了工作最低要求之前，你认为你绝对能够胜任。

![](https://cdn-images-1.medium.com/max/800/1*cpQrWe331z5_1jtlPw4rKQ.jpeg)

Google 的招聘页

工作描述会有一系列你从没听过的，也许听过的，或者希望你听过的词汇。还有一个看上去无辜的“**申请**”按钮。

![](https://cdn-images-1.medium.com/max/800/1*pBvMe2m7SAd2-m00FMDT7w.jpeg)

Google 职位描述

![](https://cdn-images-1.medium.com/max/800/1*-FfYacrlV7MzJpfdOGuA6A.png)

尽管你对自己的资历感到不自信，但你还是申请了，因为你想找到一份工作。

所以你填写了申请表，按下了提交 —— 然后开始等待并期望一个积极的答复。

会有几个不同的结果：

1.  电话面试 🎉 （耶，有被雇用的机会）
2.  立即拒绝 😢 （靠，从头来吧）
3.  没有回复 😞 （天呐，至少给我一个礼貌性的回复来结束这件事啊）

#### 重复这样直到成功...对吗？

令人难过的是，这是很多人找工作或者实习的时候的经典流程。

申请几个公司。收到多次拒绝或者压根没有回复。然后申请更多的公司，收到更多的拒绝或没有回复。就这样一轮一轮又一轮。

为什么我们要这么对自己？我们花费了大量的时间做重复的事，得到的都是同样的并且令人失望的结果。

因为这是为了得到面试每个人都要做的，是吗？因为至少我们是在向正确的方向努力，能有一线希望的，对吗？不然你还想怎么得到面试机会呢？

### 进一步评估选项

> “挫折和失败是两个通往成功的两大绊脚石。”

> —— Dale Carnegie，（《如何赢得朋友并影响他人》的作者）

我们可以想到无法获取面试的两个解决方案：

1.  好好检查你的申请或者简历
2.  反思你尝试获取面试的过程

本篇文章将会着重讲解前者，因为无论你最终采用那种方式来得到面试，**实际上每家公司都是用你的简历来作为评估的基础**。因此，接下来我们一起仔细分析我的简历，并且着重学习如何写一篇出色的简历。

通过网申获得面试是非常有挑战性的，因为你的简历必须要经过好几步，才能到达招聘经理的手里。

这份简历必须要通过 [在线关键字过滤](https://www.themuse.com/advice/a-job-hunters-guide-to-getting-your-resume-past-the-ats-and-into-human-hands)，并且要在招聘人员那里脱颖而出，而这位招聘人员只会浏览简历大概六秒钟，最后还需要达到招聘经历的心理期望，他将决定你是否值得来面试。

尽管困难重重，我还是通过网申获取到了我所有的面试机会。**我是如何做到的呢？答案是试错**。从大二以来，我已经申请过成百个不同的软件工程师岗位。

在我一开始申请职位的时候，我也遭受了大量的拒绝，但是随着时间推移，我学会了如何适应。当我到了高年级的时候，申请的每家公司我都能进入面试。

让我成功进入面试的那份简历就**正是**本文要介绍的那篇。

我花费了**四年**的时间，反复优化并且进行实践，才达到这个程度。从这些经历中，我得出了一系列**写简历的规则**，它能帮助你写一份很好的软件工程师的简历。这些规则帮助我得到了我理想中的工作，并且我相信它们同样能帮助到你。

虽然我花费了大学**四**年的时间来琢磨出这些规则，但是你就不需要再次经历这些挫折了，因为你现在就可以从这篇文章中学到一切。

我的目标是，一站式解决你所有的关于如何获取软件工程岗位面试的问题。这样你就不需要再浪费大量时间去东拼西凑你百度出的写简历的经验，在这里你就可以得到一篇能拿到软件工程师面试资格的完美简历。

你宝贵的时间将会被更好的利用起来，去写一篇杀手级简历。

现在就从这篇文章开始吧。从我的过往经验里面获取知识，现在就让我们来慢慢剖析我的简历吧！

### 通过例子 —— 学习如何写一篇杀手级简历

> “解决问题可能有无数的方法，但是原则则只有几个。一个人只要掌握原则，就能成功选择好方法。但是如果忽略原则，只是尝试很多方法，那么他肯定就有麻烦了。”

> —— Ralph Waldo Emerson

我们再来看一眼这份简历：

![](https://cdn-images-1.medium.com/max/800/1*0ZO5y_zemdcdsaEUdrI6Vw.jpeg)

高亮显示关键部分

#### 概要一览

#### 只有一页的简历

招聘人员没有太多的时间来阅读你的简历。平均每份简历只有六秒钟。保持简历**简明扼要**。

#### 开头，教育背景，工作经历，软件项目，技能

将章节按照**重要性**从上到下排列。对于一个寻找软件工程岗位的人来说，[个人项目](https://medium.com/p/b11c91ef699d#ed02) 是独特的、必备的条件。

#### 每部分的字体和布局保持一致

确保每个部分看上去外观统一。样式一致非常重要，因为它可以提高可读性。而**可读性**是必要条件。

所以，为什么这篇简历成功呢？我们来探索以下数个关键点。

#### （1）你是谁

**目标读者：任何需要写简历的人**

![](https://cdn-images-1.medium.com/max/800/1*LXF-gnE-zVuCku6-m6kawA.jpeg)

个人姓名部分

开头很简单，只需要你的名字就可以。用一个**大号的字体**把你的名字放在简历的开头。

不需要绚丽颜色和花哨的字体。简简单单就好了。你希望招聘者远远看到时就能轻松的认出你的名字，从而让他们知道你是谁。招聘者如果仅需要他来做最简单的工作，那么他就会很乐意。而一个心情好的招聘者更有可能给你面试机会。

**总结**：让招聘者能够很容易的找到你的名字。

#### （2）联系信息

**目标读者：任何需要写简历的人**

![](https://cdn-images-1.medium.com/max/800/1*5WolbWQLpe0zXUa3WAk8uw.jpeg)

联系信息部分

你的联系信息应该和你的名字一样易于辨识。它非常重要。在世界上所有的事情当中，**千万不要忘记这一件**，否则招聘人员到底该怎么联系你呢？

**总结**：填入正确的联系信息，不然的话你可能永远没法被联系到。

#### （3）教育

**目标读者：任何一个需要写简历的并且有学历的人**

![](https://cdn-images-1.medium.com/max/800/1*hpg6j5IG6cMx95LFctHCFg.jpeg)

教育部分：标题

如果你正在上大学或者已经毕业，这段经历都应该是简历的第一部分，因为读大学是个很大的个人成就。根据美国劳工统计局的数据，仅有“百分之 66.7 的在 2017 年在 16 到 24 岁之间的高中毕业生进入了大学”。所以骄傲的加上它吧！

这条信息马上就能告诉招聘者你被大学录取并一直在学习，因为技术在不断的变化，因此这是非常关键的。并且这条消息可能是你成功获取面试的因素，请确保你加上了它。

**总结**：写下你在哪里接受过教育。

![](https://cdn-images-1.medium.com/max/800/1*BRjtOe_ZZpT4xvy_72gkLw.jpeg)

教育部分：课程

确保写上了你申请的职位**相关**的课程。尽管**意大利美食历史**这门课听上去很让人有胃口，但是当你申请计算机科学方面的工作的时候，简历上可没有它的位置。

这将会大大提高招聘者和招聘经理在审阅你的简历时决定你是否合适该岗位的可能。并且和前文提到的一样，招聘者如果心情愉悦，那就更可能给你面试机会。

**总结**：仅包括相关课程。

![](https://cdn-images-1.medium.com/max/800/1*MNnvZOFyFCuCorWiXwqMZA.jpeg)

教育部分：GPA

好吧，GPA。在讨论这个之前，我们先要提醒自己什么是一篇简历的最主要目的。

简历得主要目的是，用简洁的方式着重说明你的知识，技能和成绩。你希望你的简历涵盖那些让你骄傲的，以及会让人印象深刻的事情。你希望附上自己尽可能最好看的照片，这样招聘者和招聘经理会想面试你。

现在返回来说你的 GPA。你的 GPA 是否引人瞩目是显而易见的。如果你的 GPA 在 3.0 以下，就不要放到简历上面了。如果它可能会对你的机会造成负面影响，那么不要在简历上写 GPA 也没什么不好。

如果你的 GPA 在 3.0 - 3.2，那就需要权衡一下。以个人经验来说，我曾经和一些公司交谈过，他们的最低要求是 GPA 3.2 分，但这些主要都是金融公司或者计量公司。大多数的软件公司不怎么关注你的 GPA。如果你在 3.2 分以上，那么就写在简历上吧。

如果你的 GPA 分数比较低，别怕，因为它反而可能给你创造性的机会。我的 GPA 总分是 3.2，因为我大一的工程先修课和人文课的成绩不好。但是一旦我结束了这些课程，开始了主修课的学习，我的主修 GPA（主修课内 GPA 计算结果）就是 3.44，这是相当高的分数了。所以我就把这个写在了简历上（但是务必将其视为部门 GPA）。

有很多方式都可以尽可能地展示自己，即使有些可能看起来是不利因素。我也仅是提供一个这样的例子，但是其实还有很多方法在等着你发现。拥抱你的缺点和成就吧，因为正是它们你才是你。要诚实和真诚，并且专注于展示自己最佳的部分。

**总结**：你的 GPA 并不能定义你是谁。你简历的目的是展示你最好的一面。永远不要忘了这个！要有创意，不要说谎。

#### （4）工作经验

**目标读者：有软件工程工作经验的学生。**

![](https://cdn-images-1.medium.com/max/800/1*L7Yd5wDpNVO5hhwgv054Hw.jpeg)

工作经验部分

如果你是没有工作经验的大学生，别担心！这份就是在我高年级申请全职工作的简历。我足够幸运，在暑假实习中得到了一份相关工作的经验，但是这仍旧不足以获取面试。如果你发现你在这部分可写的比较少，可以跳转到“[个人项目](https://medium.com/p/b11c91ef699d#ed02)”部分。

![](https://cdn-images-1.medium.com/max/800/1*EXOSXDhs2gHZPiIVtpDtxg.jpeg)

工作经验部分：头部

虽然能有过往工作经验很好，但是并不是所有的工作经验都能在找软件工程工作的时候被平等的看待。请只关注对你申请工作有关的工作经验。例如，如果你有一段工作是作为零售公司的出纳员，或者食品行业的服务生，不要加上它们！不幸的是，你数钱或者提供食物的能力并不能提供给他人你将能胜任软件工程师的任何信息。

一名招聘者的目标是匹配候选人与符合候选人技能的工作。因此，只将和你正在申请的工作有些相关性的过往工作经验加入简历，是必须的。

实现这部分的目标意味着创建一个简历的集合，每个简历都是针对你感兴趣的不同工作量身定制。这就和申请大学的过程类似，你必须要为你申请的每一所大学单独写一份论文。每所大学都有自己的价值观，文化和视野，所以你几乎不可能写一篇通用的，适合所有大学的论文。因此，对于你申请的工作，你的简历也必须要定制。

最后，注释好日期。将你的工作经验按照时间排序，从最近的开始。对于本科生，这就意味着在加入工作经历的时候，要同时注意近期性和相关性。糟糕的是，没人在意你在中学或者高中的成就。如果这段经验过期了，就舍弃它不要写了。

**总结**：为你申请的每一份工作定制不同的简历版本。没有一份适合所有场景的简历。

![](https://cdn-images-1.medium.com/max/800/1*NedTfy9JUsT7Ta_6WX_Yuw.jpeg)

工作经验部分：描述

写简历最难的部分是用一种有意义并且能令人印象深刻的方式，充分总结你过往工作经历的成绩。

有意义并且令人印象深刻的描述对于你意味着什么呢？它意味着让招聘者认为：“这个人拥有的技能，正是我们寻找的。这个人在他过去的工作中有过卓著的影响力。这是我们想要面试的那个人，并且有可能录取。”

**工作经验部分最主要的目的，就是展示你在成熟机构工作时候的影响力和价值**。你的目标就是展示给招聘人员，你是一个能够搞定事情，把工作做好的候选人。

为了在我的简历中最好的展示我在过往工作中所取得的成就，我采用的是由 Google 前人力运营高级副总裁 Laszlo Bock 所提出的一个句式：

> “通过 [Z] 实现了 [X] 的效果，提高或者改善（衡量标准）[Y]” —— Laszlo Bock

你能在我的简历的第一个要点中能非常清楚的看到这一点。

**通过集成油量表传感器并设置电池节电状态，将设备的电池寿命提高了 8%**

我们拆解分析下这句话：

**实现了 [X] ——** 提高了设备的电池寿命

**提高或者改善了 [Y] ——** 百分之 8

**通过 [Z] ——** 通过集成油量表传感器并设置电池节电状态

我的简历中，几乎所有的句子都套用了这个公式。

为了帮助你完成这部分，下面是一个不错的动词词库，你可以，也应该使用：

![](https://cdn-images-1.medium.com/max/800/1*aAEYhAGQkVE7g4LP3sZgYw.png)

动词词库

下面是一些我总结出的可以填入内容的句子的例子，你可以从这儿开始：

*   通过 _____ 降低了 _____ 至 _____。
*   为了 _____ 重新设计了 _____ 。
*   为了 _____ 通过 _____ 完成了 _____。
*   通过 _____ 优化了 _____ 为 _____。
*   为了 _____ 将 _____ 应用到了 _____。
*   通过 _____ 提高了 _____ 至 _____。
*   为了 _____ 通过 _____ 将 _____ 集成。
*   为了 _____ 通过 _____ 成立了 _____ 。

**总结**：使用“通过 [Z] 实现了 [X] 的效果，提高或者改善了（衡量标准）[Y]”这样的句式。这是将你的影响力展示给招聘者或者经理的最有效和显著的方式。

![](https://cdn-images-1.medium.com/max/800/1*bn3b7uBhxySeTOCxSwqv2Q.jpeg)

工作经验部分：知识应用

最后，每段工作经验后面都会用**知识应用**这个要点作为结束。这最后一点通过清楚的说明的我在项目中使用的技术，其作用是让读者能够清楚的知道我熟悉的技术。

同样的，这让我能在简历最后，有一个精简但是清楚的“技能”部分。招聘者能够在接下来通过查看简历最后的我熟悉的计算机语言，迅速的获取我掌握的技能。如果他们寻找的是我是否知道特定技能，框架或者库的专业知识，则可以在我的每个项目下找到。

**总结**：在描述中加入你使用的技术，这将帮助你在网申的时候，通过在线关键字过滤。同样这能够给招聘者一个你的经验和知识的更清晰结论。

#### （5）个人项目

**目标读者：寻找软件工程实习或者简直的学生 + 面向软件工程申请人的特别部分**

![](https://cdn-images-1.medium.com/max/800/1*bA0WIrjSBHABk3ZOn5dOdQ.jpeg)

个人项目部分

![](https://cdn-images-1.medium.com/max/800/1*bCXKQWaNymLxQs92qbUPkw.jpeg)

如果我说了足够多次，你将会明白这部分的重要性，**特别是那些还没有工作经验的人**。

> 个人项目是能够激起招聘者和招聘经理兴趣的部分，因为它表示你对编程很有热情。

个人项目可以是任何和编程相关的，可以是 Python 脚本，Java 程序，网页，移动端应用等等。这些项目表明了，你是真的对计算机科学感兴趣，有强烈的欲望去做软件工程师的工作，因为你愿意探索学校课业之外的知识，并创建一些自己的东西。

主动创建一些你自己的东西能让人印象深刻。这表示你很热衷于扩充自己计算机科学的知识，并且也不怕投入一些额外的工作来完成它们。最终，这是一个很好的方法来说明自己在这个领域的自主性和真兴趣。

做个人项目的另一个益处，就是你肯定能获取到你实际求职所需的技能。你在学校中可能不会常做，但是你在工作中一定会做的事情，比如使用标准的框架和库，理解全栈网络研发，创造移动端应用，设置开发环境，或者使用 Vim 高效编程。

> **注**：创建一个陈列并陈述你所有个人项目的个人网站。这是一个小小的黑客手法，它让你的简历“实质上打破”了单页的限制。

最后重申一次，个人项目表示了你对于学习自己不具备工作必需技能的热衷。这是软件工程简历**必需**的部分。

> “构建一些 iPhone 应用，网络应用，什么都可以！实际上，只要你在做，构建了什么并不重要。你可以用一个周末就构建出一个相当不错的项目。这也就意味着，3 到 4 个周末的工作量，你就可以让一般水平的简历变得非常精彩。认真讲，我曾经看到过好多人这么做。”

> —— 前谷歌工程师，以及 Cracking the Coding Interview 的作者，Gayle McDowell

如果你**非常**想要到某一个公司工作，最好的引人注目的方法就是创建一个和你申请职位直接相关的个人项目。

我通过在 Udacity 报名了一个免费在线可交互计算机图形课程，获得了我在 Autodesk 的实习。这个课程教会了我使用一个名为 **three.js** 的 JavaScript 库，而事实上，在 Autodesk 开设了一个软件工程实习机构，正在寻找拥有网络全栈和 **three.js**（又名 ME）知识的人。

这种技巧需要谨慎。这种策略并不完美。只有像 Autodesk 这样没有像 Google，Facebook 和 Microsoft 那样的一般性的软件工程实习的公司，这种方法才有用。你在职业生涯起步的时候，最好概括并弄清楚计算机科学的与众不同的规律。尽管如此，如果你有某家非常想要进入的公司，这还是一个非常值得尝试的方法。

**总结**：个人项目是必须的。如果你还没有，现在就开始！你没什么可失去的，一切都可以争取。

#### （6）技能

**目标读者：任何想要申请软件工程工作的人**

![](https://cdn-images-1.medium.com/max/800/1*gexMwyf4Q94yfYEzDF2O0Q.jpeg)

技能部分

标题就解释了一切。这部分要保持易懂并且简单明了。将所有你希望招聘者知晓你具备的技能写在列表上。列表上列出的可以匹配工作职能描述中关键技术词汇的技能越多，你的机会就越大。

这将能够让你轻松通过在线关键字扫描。**但是，这并不是一个可以绕开扫描的万无一失的方法**。最终，招聘者会根据你的简历做决定，但是如果他认为你很适合这份工作，他会更倾向于给你面试机会。

技能部分不要提示的一点是，不要只是为了表明你是一个合适的人选，就列出所有职能描述里面所有的关键字。这可能反而会为难你，因为你声明自己知道的技能都会被问到。

给自己留出一些余地的部分是在简历中加入一个熟练程度标示。因为你可能并没有每天都练习你所遇到过的每一种语言，这个熟练程度就可以帮助招聘者及时了解你最扎实的语言，以及其他你所熟悉的语言。

我选择使用两条：

1.  **精通** —— 我非常熟悉的语言，使用起来很顺手，可以现在就接受面试。
2.  **熟悉** —— 我过去使用过，但是现在可能并不精通的语言，但是可以在给定的时间内熟悉起来。

其他可以的选择包括：

1.  高等的
2.  中级的
3.  基本的

或者

1.  精通的
2.  高等的
3.  中级的

或者

1.  流利
2.  精通
3.  熟悉

或者

1.  工作知识
2.  基础知识

**总结**：当网申特定的工作时，交叉引用工作智能描述并且在你的简历中加上必要的技术关键字，来提升获取面试的机会。

### 关键点

*   确保你的名字和联系信息是真实合法的
*   确保加入了你的教育信息。如果你的 GPA 比较低，就别写，或者用创造性的方法写上！
*   运用句式“通过 [Z] 实现了 [X] 的效果，提高或者改善（衡量标准）[Y]”来有效的展示出你在你过去的工作中的影响力
*   做些个人项目 —— 尤其是如果你没有技术方面工作经验的时候

### 最后的一点思考

尽管这篇简历让我获取到了无数公司的软件工程岗位的面试，也并不能保证所有我解释过的这些规则和技巧能够给你带来同样的结果。

这是我在 2017 年的高年级的简历。是一个我在软件工程方面的旅行和兴趣的展示窗。直接拷贝一份对你是没什么用的，因为技术在不断进步，而且人才搜索也是一个不断变化的过程。相反，你应该将它作为一份参考。

将我的简历和本篇文章作为一个资源，来让你成为一个更好的简历作者以及更高效的沟通者。要集中注意学习如何将你的技能和成就传递给他人知道。这本身就是一个无价的，受用一生的技能，你无论走到哪里，都需要它。

当你写自己的简历的时候，请牢记 —— 做你自己！

你的简历列举的是**你**自己的成绩和兴趣。你的目标是把你最好的一面打磨出来。最后，写得开心，并享受这个过程。

* * *

谁有兴趣使用这个简历模版，可以从 [CareerCup](https://careercup.com/resume) 获取，它是 **Cracking The Coding Interview** 的作者，Gayle Laakmann McDowell 创建的。

以个人经验来看，**最重要**的是内容。上面讨论的写简历的原则可以应用于任何模版！

* * *

10.24.18 —— 感谢，所有来自大家的支持。由于**时间有限**，我将会在每周末从我的通讯录中随机的选出**三个人**，然后给他们对于简历的**免费反馈**的机会。如果你是一名正在寻找暑期实习的学生，这对于你来说是一个好机会！

[点击此处订阅](https://goo.gl/forms/qbQrZ6LNXsnPW0j42)。

> 如果发现译文存在错误或其他需要改进的地方，欢迎到 [掘金翻译计划](https://github.com/xitu/gold-miner) 对译文进行修改并 PR，也可获得相应奖励积分。文章开头的 **本文永久链接** 即为本文在 GitHub 上的 MarkDown 链接。


---

> [掘金翻译计划](https://github.com/xitu/gold-miner) 是一个翻译优质互联网技术文章的社区，文章来源为 [掘金](https://juejin.im) 上的英文分享文章。内容覆盖 [Android](https://github.com/xitu/gold-miner#android)、[iOS](https://github.com/xitu/gold-miner#ios)、[前端](https://github.com/xitu/gold-miner#前端)、[后端](https://github.com/xitu/gold-miner#后端)、[区块链](https://github.com/xitu/gold-miner#区块链)、[产品](https://github.com/xitu/gold-miner#产品)、[设计](https://github.com/xitu/gold-miner#设计)、[人工智能](https://github.com/xitu/gold-miner#人工智能)等领域，想要查看更多优质译文请持续关注 [掘金翻译计划](https://github.com/xitu/gold-miner)、[官方微博](http://weibo.com/juejinfanyi)、[知乎专栏](https://zhuanlan.zhihu.com/juejinfanyi)。
