Skip to main content

如何成功拿下 Google 等顶尖科技公司的 offer?

我曾在我个人的YouTube编程教育频道(名为CS Dojo)视频中讨论过,我是如何拿下Google软件工程师工作的。
本文中我将做更详细的介绍。下面让我们开始吧!

第1步:学习编程

这是成为软件工程师的最低要求。
为此,我建议你从一些交互式教学网站着手,你可以从这些网站学习到最基本的编程知识。例如Codecademy、freeCodeCamp、SoloLearn等。
之后,我会看视频教程来学习更多高级的主题。我推荐YouTube、Pluralsight、Lynda.com和Udemy等网站。在这些网站上,你可以找到的教程包括:Web开发;移动开发;游戏开发。
请根据个人兴趣选择。
但我应该先学习哪种编程语言呢?
简单的答案是:选择JavaScript或Python,但实际上取决于你的个人兴趣。我在以下的视频中有做更加详细的介绍。

第2步:建立一些个人项目

在学习了编程教程之后,你应该建立一些个人项目来练习学到的知识。
为此,你应该找到你感兴趣的东西来创建。
例如,如果你喜欢摄影,那么或许你可以创建一个所有照片的作品集。如果你喜欢炒股,那么也许你可以创建一个系统,来为你分析股票图表。又或者你喜欢解决问题,那么可以尝试参加编程大赛。
在创建自己的项目的时候,首先建立尽可能多的内容。如果遇到困难,可以利用在线或线下资源寻求帮助。例如,如果你遇到与编程相关的问题,那么可以在Stack Overflow询问具体的技术问题。

第3步:找到第一份编程工作或实习机会

在创建了一些个人项目之后,你应该可以获得第一份编程工作或实习机会了。这可以为你今后面试顶级科技公司积累工作经验。
第一份工作就进入顶级科技公司也是有可能的,但是有点操之过急,一般来说首先在不知名的公司获得第一份工作的情况更加常见。
申请软件工程师工作的最佳方式
简单地在线申请工作不一定是最好的策略,因为差不多别人都会这么做。
相反,我建议你使用LinkedIn和实名网络找到第一份编程工作。
在LinkedIn上,首先找到你感兴趣的公司的招聘人员。然后,问问他们你是否有资格获得你感兴趣的职位。如果你不够格,那么你也应该问问怎样更好地做准备。
对于实名网络,我推荐你通过Meetup等网站,与当地公司的工程师和招聘人员会面。
不过这些还不够
如果你想申请小型或中型的公司,你可以使用LinkedIn和实名网络。但是,我发现对于Google和Facecbook等大受欢迎的公司来说,这种策略效果很差。
对于这些大公司,我建议你结合以下三种策略:
  • 参加附近大学的招聘会和招聘活动;
  • 找就职于这些公司的朋友,让他们推荐你;
  • 只需在线申请。
结合上述策略可以增加拿到这些顶级科技公司面试的机会。
顺便说一句,我不清楚为什么这些大公司在LinkedIn上的效率会这么低,但我觉得可能是因为申请的人太多了。毕竟他们太受欢迎了:P

第4步:学习数据结构和算法

在与Google和微软等顶级科技公司面试中,经常会遇到有关数据结构和算法的问题。所以,你应该学一学这些内容。
我推荐你观看我的这个关于数据结构和算法的视频来学习基础知识。通过这些视频,可以让你更加简单地学习这个主题。
由于这个系列只有7个视频,所以你需要更多资料来学习更高级的主题。
下面是几种流行的选择:
  • 斯坦福大学的课程:
    https://www.coursera.org/specializations/algorithms
  • 麻省理工学院的YouTube课程:
    https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb
  • 《算法设计手册》(The Algorithm Design Manual),作者Skiena;
  • 《算法》第四版 (Algorithms),作者:Robert Sedgewick,Kevin Wayne。
你应该看看上述的资源,然后选择个人最喜欢的学习。

第5步:准备编程面试

Google和微软等公司的编程面试非常难,但是准备这些面试很简单。
在你对数据结构和算法有了深刻的理解后,我会推荐下列三种资源:
  • Leetcode:练习编程面试问题的互动平台;
  • Cracking the Coding Interview (攻克编程面试): 一本关于编程面试的流行书籍;
  • Daily Coding Problem (每日编码问题):一个邮件列表,每天都会给你一个问题。
练习几周后,你应该开始模拟面试。
怎么进行模拟面试?
基本上,你可以让你朋友根据上述资源提问你。然后,在纸上或Google文档上解决每个额外难题,并向你的朋友解释解决方案。你需要从面试者和被面试者两个角度做练习,如此你就可以感受一下面试官。
在做大约20次左右的模拟面试后,你就可以开始面试你想去的公司了。

第6步:申请,申请并再次申请

在申请顶级科技公司的时候,请利用上述三种策略:
  • 参加附近大学的招聘会和招聘活动;
  • 找就职于这些公司的朋友,让他们推荐你;
  • 只需在线申请。
如果一次申请不成功,也不要灰心。事实上,这些公司的竞争十分激烈,失败也是意料之中的事。
就我个人而言,我申请了5次,才拿到了Google软件工程师的工作。

总结

  • 第1步:学习编程;
  • 第2步:建立一些个人项目;
  • 第3步:找到第一份编程工作或实习机会;
  • 第4步:学习数据结构和算法;
  • 第5步:准备编程面试;
  • 第6步:申请,申请并再次申请:)
真的就这么简单吗?没错,就这么简单。尽管如此,想要完成以上六个步骤还是花费大量的时间和精力。
那么补充一个问题:我需要获得计算机科学学位吗?
简单的答案是:不。但是,计算机科学学位的帮助性非常大。如果你读完计算机科学,那么就会掌握第1-4步的大部分内容(学习编程、做个人项目、找到第一份编程工作或实习机会以及学习数据结构和算法)。
如果没有计算机科学学位,你只能自学。
此外,请注意,即使拥有计算机科学学位,想要在顶级科技公司找到一份软件工程师的工作也需要很多准备工作。
我需要就读麻省理工学院、斯坦福大学、卡内基梅隆大学等顶尖大学吗?
同样,简单的答案是:不。这些大学毕业会有所帮助,但远非必要。
Google的前任人事高级副总裁Laszlo Bock也同意这一观点。
他曾在他的著作《重新定义团队:谷歌如何工作》(Work Rules!)中写道:与麻省理工学院等顶尖学校中表现平平的学生相比,Google更加喜欢知名度较低的学校毕业表现优异的学生。
我认为这是有道理的,因为如果你聪明而专注,那么去哪所学校并不重要。
我需要很漂亮的成绩单吗?
简单的答案依然是:不。
拥有高分可能对面试有点帮助,但是在简历中展示扎实的实践经验和有趣的项目更为重要。
事实上,《重新定义团队:谷歌如何工作》(Work Rules!)一书中提到:过去Google比较关注候选人的成绩单。然而,他们发现高分与长期在工作中有良好表现并没有太大关系。之后,他们不再强调成绩单。
那么我需要什么?
基本上,你所需要的只是强大的编程技术和解决问题的能力,对计算机科学知识良好的理解,以及在简历中展示有趣的项目和经验。
通过以上我介绍的6个步骤,你可以具备所有这些能力。
那么怎样才能写一份好简历?
以下是我在申请Google时的简历模板,你可以参考:
这是我过去申请Google的软件工程师时,使用的简历。它应该只有一页,所以我会说我的简历太长了。仅作参考吧。
其他关于写简历的资源
  • CareerCup很好地概述了该主题:
    https://www.careercup.com/resume;
  • 我朋友Zhia Hwa Chong是Twitter的软件工程师,他写了一篇很好的文章进行了介绍:
    https://medium.freecodecamp.org/how-to-write-a-great-resume-for-software-engineers-75d514dd8322
谢谢你阅读这篇文章,祝你好运!
原文:https://medium.freecodecamp.org/how-to-get-a-software-engineer-job-at-google-and-other-top-tech-companies-efa235a33a6d
作者:YK Sugi,CS Dojo创始人。
译者:弯月,责编:郭芮

Comments

Popular posts from this blog

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into ...

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checkin...