From 6933b34ed7f53db4cbcb18c6f2eddb1fa960a763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=88=E8=90=BD=E6=98=9F=E6=B2=B3Tsukistar?= Date: Wed, 19 Jun 2024 21:30:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E4=BD=95=E8=BD=AC=E8=A1=8C=E6=89=BE?= =?UTF-8?q?=E5=88=B0=E7=90=86=E6=83=B3=E7=9A=84=E6=8A=80=E6=9C=AF=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=20(#1248)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md 62行的翻译我不确定 * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md * Update career-switchers-guide-to-your-dream-tech-job.md --- ...-switchers-guide-to-your-dream-tech-job.md | 750 +++++++++--------- 1 file changed, 377 insertions(+), 373 deletions(-) diff --git a/chinese/articles/career-switchers-guide-to-your-dream-tech-job.md b/chinese/articles/career-switchers-guide-to-your-dream-tech-job.md index a91e59644..9e6b9fd08 100644 --- a/chinese/articles/career-switchers-guide-to-your-dream-tech-job.md +++ b/chinese/articles/career-switchers-guide-to-your-dream-tech-job.md @@ -1,789 +1,792 @@ > - 原文地址:[A Career Switcher’s Guide to Landing Your Dream Tech Job](https://www.freecodecamp.org/news/career-switchers-guide-to-your-dream-tech-job/) > - 原文作者:David Tian -> - 译者: +> - 译者:Tsukistar > - 校对者: ![A Career Switcher’s Guide to Landing Your Dream Tech Job](https://www.freecodecamp.org/news/content/images/size/w2000/2019/11/googleplex.jpg) -In this article, I'll discuss some pro tips that'll help you ace your interviews at your dream companies and get the most out of your job offers. +在这篇文章中,我将探讨一些能够帮助你在理想公司的面试中取得好成绩,并最大限度地获得工作机会的专业建议。 -# Introduction — From Wall Street to Googleplex +# 自我介绍 — 从华尔街到谷歌总部 -On March 31, 2019, I was downsized by a startup hedge fund. Having been a quantitative software developer in the finance industry for the last 10+ years, I didn’t want another job doing more of the same. I set out to follow my passion and find my next job in Artificial Intelligence/Machine Learning/Deep Learning (AI/ML/DL). +2019年3月31日,我我被一家初创对冲基金公司裁员了。在过去的10多年里,我一直是金融行业的一名量化软件开发人员,但我不想再做一份同样的工作。我开始追寻自己热切想去做的事,在人工智能/机器学习/深度学习(AI/ML/DL)领域寻找我的下一份工作。 -Over the next 6 months, I worked very hard towards that goal. By September 2019, I had multiple ML related on-site interviews and offers, including offers from both Google and Facebook. +在接下来的六个月里,我我为了这个目标付出了非常大的努力。到2019年9月时,我已经有了多个与机器学习相关的现场面试和offer,包括来自谷歌和Facebook的offer。 -Here is how I did it. Hopefully it will encourage and help other potential career switchers to make this transition. Your reward for switching could be two fold, both intellectually and financially. +这篇文章讲述了我是如何做到这件事的,希望它能鼓励和帮助其他潜在的想要换工作的人完成这种转变。通过这种转变,你可能会获得能力上和经济上的双重回报。 ![](https://miro.medium.com/max/3264/1*nhcfyWkKLu_q4mBTetSHyw.jpeg) -Googleplex: Google’s Worldwide Headquarters +Googleplex:谷歌的全球总部 -# Article Summary +# 文章概览 -If you are short on time, here is the quick 5 step recipe that worked for me. +如果你时间不够,这里有一个对我很有效的五大秘诀: -- \***\*Curate\*\***: Work on a project that you are passionate about and showcase it online -- \***\*Study\*\***: Practice Algorithms and Data Structures coding and System Design problems intensively -- \***\*Apply\*\***: Leverage multiple channels to land interviews -- \***\*Interview\*\***: Keep your cool during Phone and On-site Interviews -- \***\*Negotiate\*\***: Know what you want as you negotiate offers and match with teams +- **展示**: 做一个你感兴趣的项目,并在网上展示出来 +- **学习**: 集中练习算法与数据结构的程序设计问题和系统设计问题的解答方法 +- **应用**: 利用多种渠道获得面试机会 +- **面试**: 在电话面试和现场面试中保持冷静 +- **谈判**: 在工作机会谈判与匹配团队时,知道自己想要什么 -As you can see, this is a very SIMPLE 5 steps recipe. However, completing each step takes a lot of HARD WORK. Read on for details. +如你所见,这是一个非常常见的五步秘诀,然而完成每一步都需要付出很多努力。如果想了解更多细节的话,就继续读下去吧。 -# [About Me][1] +# [关于我][1] -Here is a little about me, because I think this guide would be most helpful for someone with a similar background as myself. Namely, I'm an experienced software engineer/developer in a non-tech industry who wished to switch to a top tech company on the west coast (Bay Area or Seattle). If you have no software engineering work experience, the recipe above should still work for you - you just have to work A LOT harder than someone with the coding experience. +这里有一些关于我的介绍,因为我认为这个指南对和我有相似背景的人最有帮助。也就是说,我是一名非科技行业经验丰富的软件工程师/开发人员,希望跳槽到西海岸(湾区或西雅图)的一家顶级科技公司。如果你没有软件工程的工作经验,上面的方法应该仍然适用于你,你只需要比那些有编程经验的人更加努力。 -I graduated from the University of Waterloo in Canada as a computer engineer. In my earlier career, I worked as a software engineer for Microsoft and Oracle. Then I switched into the Quantitative Finance industry after my MBA. +我毕业于加拿大滑铁卢大学,是一名计算机工程师。在我早期的职业生涯中,我曾在微软和甲骨文担任软件工程师。MBA毕业后,我进入了量化金融行业。 -For the last 10+ years, I worked as a quantitative developer/analyst for Bank of America, UBS, Citadel, and a few smaller firms. But since 2016, when I first stumbled upon machine learning/deep learning, I fell in love with it. I knew I wanted a job in the AI/ML field eventually. +在过去的10多年里,我曾在美国银行、瑞银集团、Citadel和一些较小的公司担任量化软件开发人员/量化分析师。但当我在2016年第一次偶然发现机器学习/深度学习时,我就爱上了它。我知道我最终想要在AI/ML领域找到一份工作。 -In April 2019, I started my full-time preparation for this career switch. And I will be moving to the Bay Area next week to join Google, one of the leaders in AI and ML. +2019年4月,我开始为转行做全职准备。下周我将搬到旧金山湾区加入谷歌,它是人工智能和机器学习领域的领导者之一。 ![](https://www.freecodecamp.org/news/content/images/2019/11/image-4.png) [https://www.linkedin.com/in/dctian][2] -# 5 Simple Steps to Success +# 迈向成功的五个简单步骤 -## Step 1. Curate: Work on a Cool Project and Showcase it +## 第一步,展示: 做一个你感兴趣的项目,并在网上展示出来 -In Feb 2019, my good friend, Igor, encouraged me to create a cool project and write about it. At the time, I didn’t have any good ideas, had never published anything online and didn’t know where to begin. +2019年2月,我最好的朋友Igor鼓励我创造一个很酷的项目并写些东西记录它。那时候我没有任何好的想法,同时我从未在网上发表过任何东西,也不知道怎么开始做这些事。 -But in early April, while I was vacationing with my family in Mexico, one night I suddenly had a revelation that I wanted to build a self-driving car. Given that I had no prior experience with robotics or electronics, I set out to build a [Deep Learning/Self-Driving Robotic Car, DeepPiCar][3], that could run in my living room. +但是在四月初,当我在墨西哥和我的家庭一起度假时,某天晚上我突然有一个“我想造一辆自动驾驶汽车”的想法。考虑到我之前没有机器人技术或电子技术方面的经验,我决定先开始建造一辆可以在我的客厅里跑的[深度学习/自动驾驶机器人汽车,DeepPiCar][3]。 -One month later, after successfully built the self-driving car, I started to write a 6 part blog post on Towards Data Science to teach others how to build one. Within weeks, my blogs received over 10,000 views, and the reaction from readers worldwide was overwhelming. I felt my 2 months hard work — one month to build the car, and another month to write the blogs — was well worth it. +一个月后,当我成功造出来了这辆自动驾驶汽车时,我开始在“[Towards Data Science](https://towardsdatascience.com/)”上写一篇一共六个部分的博文来教其他人如何造一辆这样的车。我的博文在几周的时间内获得了超过10000次的阅读量,世界各地的读者对这篇文章的回应非常热烈。我感觉我两周的努力(一周用来造车,一周用来写博文)都是值得的。 ![](https://miro.medium.com/max/1776/0*PqGFISPKqUjwc_Ki.jpeg) -DeepPiCar running in my living room +在我的客厅里跑的DeepPiCar -However, I did not realize its full impact on my professional career until my interviews and offer team-matching calls, when interviewers asked me “Why are you looking to switch from your current industry?” I was ready with talking points! +然而,直到我参加面试和获得团队匹配的要求前,我一直没有意识到这件事对我的职业生涯产生了全面的影响。当面试官问我:“你为什么想从目前的行业转行?”时,我已经准备好了回答这个问题的话题! -Not only was I able to tell them how passionate I feel about AI/ML, but when I pulled out my car (yes, the ACTUAL robotics car) from my backpack and put it in the hands of the interviewers, I could see the excitement from their eyes! Many of them even said they would love to build such a car with their kids. I then told them that I had published the full step-by-step instructions with source code online (with links in my resume) for them to follow. I was pretty sure they wouldn't file my resume in the recycle bins afterward. ;-) +我不仅能够告诉他们我对AI/ML的热情,而且当我从背包里拿出我的车(是的,真正的机器人车)并把它放在面试官手中时,我可以从他们的眼睛里看到兴奋!他们中的许多人甚至说,他们很想和自己的孩子一起造一辆这样的车。然后我告诉他们,我已经在网上发布了完整的步骤说明和源代码(我的简历中有链接),供他们参考。我很确定他们不会把我的简历扔进回收箱。: -) -Some of my friends ask me to recommend good projects to work on. Here are some of my suggestions: +我的一些朋友们想让我推荐一些可以开展的好的项目,这是我给出的一些建议: -- If you want to transition into front-end development, create a cool website with a lot of interactivity with popular open-source frameworks, such as [React][4] and [Angular][5]. -- If you are interested in server-side development, try to create a web crawler or search engine using distributed server technology such as [Cassandra][6], [ZooKeeper][7], [Memcached][8], and [Elastic Search][9], etc -- If you are into mobile devices, try to create and publish an Apple/Android app. Note that publishing an app on Apple’s App Store takes much longer than Google’s Play Store. -- If you are interested in AI/ML, take one of the existing Computer Vision or Natural Language Processing deep learning models, and try to make a product out of it. For example, I took a pre-trained [object detection model, SSD][10], and adapted it to be a traffic sign detector for my DeepPiCar. If you are new to AI/ML, be sure to read [Part 1 of DeepPiCar][11], where I list several ML courses and resources to get you started. -- If you are into robotics, try to build some cool robots using a Raspberry Pi or an Nvidia Jetson Nano. Be sure to use either the new [Raspberry Pi 4][12] or [Jetson Nano][13]. Raspberry is more widely used by makers and enjoys better support, while Jetson Nano has a GPU onboard, so it may be better for [Deep Learning projects][14]. -- If you don’t have any project ideas, do not despair. You can always contribute to one of the open-source projects mentioned above, as well as [TensorFlow][15] or [PyTorch][16] if you are into AI/ML. You may think you need to be an expert to contribute to these well-known open-source projects. You do NOT. Actually, in each open source project, there are quite a few small features and easy bug fixes designated for noobs to get their hands dirty first. This way, you can be familiar with the code base and submission process before tackling more complex issues. +- 如果你想转职去做前端开发,那就用流行的开源框架(例如[React][4]、[Angular][5]或[Vue][61]等)搭建一个炫酷的网站。 +- 如果你对服务端开发感兴趣,尝试使用分布式服务技术创建网络爬虫或搜索引擎,如[Cassandra][6], [ZooKeeper][7], [Memcached][8],和[Elastic search][9]等。 +- 如果你想做移动端开发,尝试创建并发布一个苹果/安卓应用。请注意,在苹果的App Store上发布应用比在谷歌的Play Store上发布应用要花费更长的时间。 +- 如果你对人工智能/机器学习感兴趣,尝试使用现有的计算机视觉或自然语言处理深度学习模型之一,并尝试从中制作产品。例如,我使用了一个预训练的[目标检测模型,SSD][10],并将其改编为我的DeepPiCar的交通标志检测器。如果您是AI / ML新手,请务必阅读[DeepPiCar的第一部分][11],在那里我列出了几个ML课程和资源,以帮助您开始学习。 +- 如果你对机器人技术感兴趣,试着用树莓派或英伟达Jetson Nano制造一些很酷的机器人。一定要使用新的[Raspberry Pi 4][12]或[Jetson Nano][13]。树莓派更被制造商广泛使用,因此具有更好的技术支持,而Jetson Nano自带GPU,因此可能更适合[深度学习项目][14]。 +- 如果你没有任何有关项目的想法,不要绝望。如果你对人工智能/机器学习感兴趣,你可以为上面提到的开源项目之一做出贡献,也可以为[TensorFlow][15]或[PyTorch][16]做出贡献。你可能认为您需要成为一名专家才能为这些知名的开源项目做出贡献,但实际上并不需要。每个开源项目中都有相当多的小特性和简单的错误修复是专门为新手准备的,他们可以优先发现这些,并做出相应的贡献。这样,你就可以在处理更复杂的问题之前熟悉代码库和提交流程。 ![](https://miro.medium.com/max/1688/0*Ch5vkdlhxP1uRsbe.png) -Top Open-Source Projects +顶尖的开源项目 -Once you finish your project, be sure to let the world know about it! Is it enough that you just publish your finished code on GitHub and be done with it? No! Because most people prefer to read blogs about what your code does first. +一旦你完成了你的项目,一定要让全世界都知道!你只是在GitHub上发布完成的代码并完成它就足够了吗?不!因为大多数人更喜欢先阅读博客来了解代码的功能。 -Nice, well-polished blogs are great marketing material for your project, and more importantly, for YOU! Yes, writing polished blogs with nice pictures and graphs takes a long time. It took me about all of May to write 6 articles. I estimate about 200 total hours or 30 hours/article. If you are working full time, maybe write one well-written blog, which serves as an overview of your project. +优秀的、精心设计的博文对于你的项目,更进一步来讲对于你来说,是一份很好的营销材料。是的,用漂亮的图片和图表写精致的博客需要很长时间。我花了整整一个五月写了6篇文章。我估计我总共花费了200个小时或每篇文章花费了大约30个小时。如果你是全职工作,也许可以写一篇写得很好的博文,作为你项目的概述。 ![](https://miro.medium.com/max/1080/1*blXkdzZ0Z2T9cezJmmX96g.png) -DeepPiCar’s Blog Series +DeepPiCar的博客系列 -One thing to remember is that you HAVE TO enjoy what you are doing, instead of doing the project just to land a job. If you do have a passion for what you build, it will shine through when you talk to interviewers. +有一件事你需要牢记:你**必须**享受你正在做的事情,而不是仅仅为了找到一份工作而做这个项目。如果你真的对自己所做的事情充满激情,那么当你和面试官交谈时,这件事情就会成为一个亮点。 -## Step 2. Study Hard and Study Smart +## 第二步:聪明并努力地学习 -### Algorithms and Data Structures +### 算法与数据结构 -If there is one single skill you need to master for tech interviews, it is Algorithm and Data Structures (A&DS) coding skills. No matter which big or small tech firms you interview with, they will grill you on your coding skills, although most firms won’t care which programming language you use. +如果你需要掌握一项技术面试技能,那就是算法和数据结构(A&DS)编码技能。无论你面试的是大公司还是小公司,他们都会详细询问你的编程技能,尽管大多数公司并不关心你使用哪种编程语言。 -My favorite programming languages are C++ and Python, but for coding interviews, I recommend Python. It is so concise and you can do so much with so few lines compared to C++, which is very verbose. There are tons of resources that prepare you for A&DS. I used the following resources: +我最喜欢的编程语言是C++和Python,但对于编码面试,我推荐Python。它是如此简洁,与C++相比,你可以用这么少的行做这么多的事情,C++是非常冗长的。有很多资源可以让你为算法和数据结构(A&DS)做准备。我使用了以下资源: -[\***\*Cracking the Coding Interview Book** **(CtCI)\*\***][17]: this book is about 700 pages, and only costs \$30. If you need a refresher on A&DS concept, this is an excellent starting point. In addition to concepts, it gives a series of easy to medium level practice questions with full solutions. I spent about 2 to 3 weeks full time on it, spending 1–2 full days on each A&DS related chapter. I skipped chapters on math/brain teasers/OOD/C++/Java/SQL, as they are not related to A&DS. +[**Cracking the Coding Interview Book** **(CtCI)**][17]: 这本书大约有700页,并且只卖30美元。如果你需要复习A&DS的概念,这是一个很好的起点。除了概念之外,它还提供了一系列简单到中等水平的练习题和完整的答案。我花了2 - 3周的时间,花了1-2天的时间在每个A&DS相关章节上。我跳过了关于数学/脑筋急转弯/OOD/C++/Java/SQL的章节,因为它们与A&DS无关。 ![](https://miro.medium.com/max/350/0*AGWwwLapmQvGVQ6o.jpg) -[\***\*LeetCode.com\*\***][18]: I also used LeetCode (LC) heavily, as I felt CtCI did not give me enough practice. Leetcode is probably the most comprehensive and organized online database of coding interview questions, with over 1000 easy, medium and hard questions. Each question has a unique number. (e.g. LC#1 is TwoSum) Many online posts simply refer to their interview questions as LC #xxx instead of typing out the whole question. +[**LeetCode.com**][18]: 我也大量使用LeetCode (LC),因为我觉得CtCI没有给我足够的练习。Leetcode可能是最全面和有组织的编程面试问题在线数据库,有1000多个简单,中等和困难的问题。每个问题都有一个唯一的数字(例如,LC#1是TwoSum)。许多网上帖子只是简单地把他们的面试问题称为LC# xxx,而不是把整个问题打出来。 -I highly recommend spending $30/month to sign up for LeetCode Premium, as it gives you access to ALL of the LC questions and solutions. I felt that it was so helpful, I signed up for the annual membership for $99, as I think of it as a “gym membership fee for my brain”. +我强烈建议每月花30美元注册LeetCode高级版,因为它可以让你访问所有的LC问题和解决方案。我觉得这很有帮助,我以99美元的价格注册了年度会员,因为我认为这是“我大脑的健身房会员费”。 -I completed over 100 LeetCode questions (35 easy, 60 medium, 14 hard). About 90% of my actual interview questions, or their slight variants, could be found on LeetCode. In most cases, I didn’t know they were from Leetcode until after the fact. But since I practiced enough of the LC medium questions, I was able to solve questions around the same difficulty. In the end, I felt I could NEVER do enough LC medium questions, because to this day, I still struggle with some of the LC medium questions. +我完成了100多个LeetCode问题(35个简单,60个中等,14个困难)。我实际面试中90%的问题,或者它们的细微变化,都可以在LeetCode上找到。在大多数情况下,我直到事后才知道它们来自Leetcode。但是由于我练习了足够多的LC中等难度的问题,所以我能够解决相同难度的问题。最后,我觉得我永远不能做足够的LC中等难度的问题,因为直到今天,我仍然与一些LC中等难度的问题斗争。 ![](https://miro.medium.com/max/1360/0*nS7N-kMs_oFwiTcG.png) -[\***\*Tushar Roy’s LeetCode Hard Solutions\*\***][19]: Tushar is actually an Engineering Manager at Apple. He made these videos when he was just a software engineer. I would say that watching his videos taught me not only these algorithms but also how to \***\*present\*\*** complex ideas/algorithms clearly. This helped me immensely when I was doing whiteboard coding during on-site interviews. +[**Tushar Roy’s LeetCode Hard Solutions**][19]: Tushar实际上是苹果公司的工程师经理。他做这些视频的时候还是个软件工程师。我想说,看他的视频不仅教会了我这些算法,还教会了我如何清晰地呈现复杂的想法/算法。当我在现场面试时用白板写代码时,这给了我很大的帮助。 ![](https://miro.medium.com/max/1280/0*sTf-RyIfjStnTdf1.jpg) -Note that most interviewers will give LC medium level questions, as it is pretty fair to ask someone to solve a medium problem in 20–30 minutes. I would suggest doing at least 20 easy, and 30 medium LC questions before your first phone interviews. I did my first phone interview after I finished the CtCI book and before starting on LC, and was promptly slaughtered. +请注意,大多数面试官会给LC中等水平的问题,因为要求某人在20-30分钟内解决中等水平的问题是相当公平的。我建议你在第一次电话面试前至少做20个简单的问题和30个中等的LC问题。我第一次电话面试是在我写完CtCI的书之后,在我开始写LC之前的时候,而我很快就被淘汰了。 -Also, I timed myself on each practice problem, as if I was in an interview. However, I used an IDE, with auto-completion and a debugger. You won’t get these in an actual interview, so I usually set a tighter time constraint when I practiced, at about 30 min/question, instead of 45 min. You may choose to mimic the real test environment by using a regular text editor only or even a whiteboard. It's up to your personal preference. +同时,我在每个练习题上计时,就好像我在面试一样。但是,我使用的是带有自动完成和调试器的IDE。你不会在实际的面试中得到这些,所以我在练习时通常会把时间限制得更紧,每道题大约30分钟,而不是45分钟。你可以选择只使用常规的文本编辑器,甚至是白板来模拟真实的考试环境。这取决于你的个人喜好。 -### System Design +### 系统设计 -The second most important skill you need to master is System Design. Usually, one on-site interview session will ask you to design a large scale distributed system, such as the Netflix video serving system, or WhatsApp instant-messaging system, or Instagram stories, and so on. +你需要掌握的第二最重要的技能是系统设计。通常来说,一个现场面试环节会让你设计一个大型分布式系统,比如Netflix视频服务系统,或者WhatsApp即时通讯系统,或者Instagram故事等等。 -This test is a mixture of both hard and soft skills. It is a hard skill test because you need to understand a lot of the commonly used distributed system components, such as a distributed database, distributed in-memory cache, distributed configuration manager, distributed file storage, and distributed search engine, etc., along with when is the right time to use each of them. +这是一项同时测试你的硬实力与软实力的技能测试。对于硬实力的部分,你需要了解许多常用的分布式系统组件,例如分布式数据库、分布式内存缓存、分布式配置管理器、分布式文件存储和分布式搜索引擎等,以及何时使用它们是正确的。而对于软实力的部分,你需要能够画出清晰的图表来说明你的设计,并口头讨论和维护你的设计。有人告诉我,如果你通过了现场面试,系统设计面试会严重影响你获得的职级评定结果(也就是说,它可能决定你得到的是4级还是5级工程职位)。 -It is also a soft skill test because you need to be able to draw a clear diagram to illustrate your design and verbally discuss and defend your design. I was told that system design interviews heavily influence the level you are offered if you pass the on-site interview (that is, it may decide whether you are offered a Level 4 or Level 5 engineering position, for example). +下面是我在准备这一部分的过程中使用的一些资料: -Here are the resources that I used: - -- [\***\*Cracking the Coding Interview Book(CtCI)\*\***][20]: There is a chapter that discussed system design, but it is covered at a pretty basic level -- [\***\*Gaurav Sen’s System Design YouTube Channel\*\***][21]: I felt unfulfilled after reading CtCI’s system design chapter. Then I stumbled upon Gaurav’s channel, which has 22 videos. I downloaded all his videos onto my laptop and watched them on a long plane ride. Man, this guy is so GOOD (and funny) and explains things so clearly! About 10 videos are in-depth descriptions of individual distributed system components, the rest are actual use case discussion on how to build NetFlix, or Tinder, or Facebook systems, etc. +- [**Cracking the Coding Interview Book(CtCI)**][20]: 书中有一章讨论了系统设计,但这只包括了系统设计中最基础的部分。 +- [**Gaurav Sen 的系统设计 YouTube 频道**][21]: 在阅读了CtCI的系统设计章节后,我不满足于其中包含的知识。然后我偶然发现了 Gaurav Sen 的YouTube频道,里面有22个视频。我把他所有的视频都下载到我的笔记本电脑上,以便在长途飞机上观看。哦我的老天爷呐,这个兄弟的视频真的很棒,其中对于系统设计知识的讲解非常清楚!这些视频中大约有10个视频是对单个分布式系统组件的深入描述,其余的是关于如何构建NetFlix, Tinder或Facebook系统等的实际用例讨论。 ![](https://miro.medium.com/max/1280/0*rIMPbQS57T_u5U-R.jpg) -- [\***\*Tushar Roy’s System Design Videos\*\***][22]\***\*:\*\*** While Tushar is very good in LC Hard questions, he also has 5 great System Design videos. I recommend watching these videos after Gaurav’s, as Gaurav gives you a solid foundation in system design, and Tushar’s videos assume some of that knowledge. +- [**Tushar Roy 的系统设计视频**][22]**:** 虽然Tushar非常擅长LeetCode上的难题,但他也有5个很棒的系统设计视频。我建议在Gaurav的视频之后再看这些视频,因为Gaurav为你提供了系统设计的坚实基础,而Tushar的视频则提供了一些进阶知识。 -For me personally, since I had worked on quite a few distributed systems before, I was able to grasp the general idea pretty quickly even though I had not used some of the new technology mentioned in the videos above. After watching enough videos, I was able to generalize most distributed system into the following layers: +就我个人而言,由于我之前从事过相当多的分布式系统,所以即使我没有使用上面视频中提到的一些新技术,我也能够很快地掌握总体思想。在看了足够多的视频后,我能够将大多数分布式系统概括为以下几层: -- Clients (PC/Mobile apps, browser) -- A distributed Load Balancer to handle client requests -- Location-based Content Delivery Network (CDN) or In-memory Cache to quickly deliver large and relatively static content (videos and images) to clients that are geographically closer to the CDN/Cache. -- A series of microservices to handle various business logic, such as authentication, serving/saving user content, deliver messages between users. -- Communications between microservices are sent via a distributed messaging system. -- A distributed database to save user content and messages. Optionally, add a distributed caching layer before the database to improve read/write throughput. +- 客户端(PC端/移动端应用程序,浏览器)。 +- 一个用来处理客户端请求的分布式负载均衡器。 +- 基于位置的内容分发网络(CDN)或内存缓存,快速交付大型和相对静态的内容(视频和图像)到地理上更接近CDN/缓存的客户端。 +- 一系列微服务来处理各种业务逻辑,如认证、服务/保存用户内容、在用户之间传递消息。微服务之间的通信是通过分布式消息系统发送的。 +- 用于保存用户内容和消息的分布式数据库。你可以选择在数据库之前添加分布式缓存层,以提高读/写吞吐量。 -### Behavior Questions +### 行为型问题 -I think behavior questions are the easiest part of the interview. Unfortunately, they also carry the least amount of weight in an interview evaluation. Sure enough, tech companies know that it is easy to put on a “nice person” personality and say the right thing in a behavioral interview. But it is much harder to train yourself to be a good coder. +我认为行为型问题是面试中最简单的部分。不幸的是,它们在面试评估中所占的比重也是最小的。科技公司当然知道,在行为面试中“表现得很好”和“说正确的话”是很容易的,但要训练自己成为一个优秀的程序员却要困难得多。 -For a career switcher, the most important question to prepare for is, of course, “Why are you looking to switch industries?” Hopefully, with the project you built in Step 1, you can probably knock this question out of the park by showcasing your project and your passion for the new industry and the company you are applying for. +对于一个跨行找工作的人来说,最重要的问题当然是“你为什么想换行业?”希望你在步骤1中完成的项目可以帮助你通过展示你的项目和你对新行业以及你申请的公司的热情来完美回答这个问题。 ![](https://miro.medium.com/max/1280/0*7R7K7tRug6GBHdfT.jpg) -Here are some other behavioral questions to prepare for: +以下是一些其他需要准备的行为型问题: -- Why do you want to work for my company/my group? -- Give an example of a goal you reached and tell me how you achieved it. -- Give an example of a goal you didn’t meet and how you handled it. -- Describe a stressful situation at work and how you handled it. -- Have you been in a situation where you didn’t have enough work to do? -- Have you ever made a mistake? How did you handle it? -- Describe a situation when you had a disagreement with your coworker/boss/subordinate, and how did you handle it? +- 你为什么想为我的公司/我的团队工作? +- 举一个你达到目标的例子,并告诉我你是如何实现的。 +- 举一个你未能达到目标的例子,并告诉我你是如何处理的。 +- 描述一个你在工作中遇到的压力情况,以及你是如何处理的。 +- 你是否曾遇到过没有足够工作可做的情况? +- 你是否曾犯过错误?你是如何处理的? +- 描述一个你与同事/老板/下属有分歧的情况,以及你是如何处理的? -The key to all behavioral questions is to end on a positive note. For example, even if you are asked about a disagreement with a co-worker or a failure in your career, truthfully describe what happened, but more importantly mention what you learned from it. Talk about how it helped you become a more effective team member/engineer when similar situations arose again. +所有回答行为型问题的关键是以积极的态度结束。例如,即使你被问到与同事发生分歧或职业生涯中的失败,也要如实描述发生了什么,但更重要的是提到你从中学到了什么。谈谈当类似情况再次出现时,它如何帮助你成为一个更有效的团队成员/工程师。 -## Step 3. Apply via Multiple Channels +## 第三步:通过多个渠道申请 -I started to monitor the ML Engineer job market in the Bay Area closely at the start of June, right after I published my blogs on DeepPiCar. At the same time, I started my one month of intensive full-time coding preparation (about 200 hours total). +我在六月初(在我发布DeepPiCar博客之后的那段时间)开始密切关注湾区的机器学习工程师职位市场。同时,我开始了一个月的全职高强度编码准备(总计约200小时)。 -By the end of June, even though I didn’t feel quite ready, I started to apply to companies. The reason is that there is a 1–2 week lead time between when I sent in my resumes and the phone interviews. Via multiple channels, I made contact with over 20 companies and did over 30 phone interviews. Sometimes multiple phone interviews with the same company. +到六月底,尽管我感觉自己还没完全准备好,但我开始向公司投递简历。原因是从我递交简历到电话面试之间需要有1-2周的准备时间。通过多个渠道,我联系了超过20家公司,并进行了超过30次电话面试。有时同一家公司会进行多次电话面试。 -### Resume — List the relevant stuff first +### 简历 —— 把相关的内容放在前面 -I won’t discuss resume writing too much, as there are already many great articles on it. My focus is on how to do it from a career switcher’s point of view so that recruiters will be able to quickly identify you as a good fit for the new industry/job function. +我不会详细讨论简历写作,因为已经有很多优秀的文章讨论过这个话题。我的重点是从跨行找工作的人的角度出发,这样招聘人员才能快速识别你是否适合新的行业/职位。 -Remember that I was changing from a quant developer in Finance to an ML Engineer in Tech - so it was doubly tricky, as it was both a role shift and industry shift. Again, my projects came to the rescue. I listed them at the top of my work experience, as “Personal Projects”. Yes, even though they are not exactly “Work”, they were my work, and were highly relevant to what I wanted to do as my next job. +记住,我是从金融领域的量化开发人员转到科技领域的机器学习工程师——这是一个天大的困难,因为这个跨度既有角色的转变也有行业的转变。再次强调,我的项目帮了我大忙。我把它们作为“个人项目”列在我的工作经历的顶部。尽管它们不完全是“工作”,但它们是我的工作,并且与我想要的下一份工作高度相关。 -You should know that most recruiters don’t read past the first page of a resume. If they can’t spot the keywords they are looking for in 10–20 sec, your resume is tossed aside. I also listed the skill sets (and all the keywords) relevant to the new job at the top half of the first page of my resume. See below. +你应该知道,大多数招聘人员不会阅读超过一页的简历。如果他们在10-20秒内找不到他们想要的关键词,你的简历就会被抛到一边。我还在简历的第一页上半部分列出了与新工作相关的技能(以及所有关键词)。见下图。 ![](https://miro.medium.com/max/937/1*a-pon57rs0aflAfiOj86lw.png) -LinkedIn — Let them come to You! +### LinkedIn —— 让他们来找你! -The best job applications are the ones you never have to send out. After I posted my DeepPiCar blog posts on LinkedIn, I was excited to receive so many messages/calls from recruiters, including from some huge self-driving companies, asking me if I would be interested in their ML Engineer roles. +最好的工作申请是不需要你主动发出的。在我在LinkedIn上发布DeepPiCar博客文章后,我很高兴收到许多招聘人员的消息和电话,其中包括一些大型自动驾驶公司,问我是否对他们的机器学习工程师职位感兴趣。 -I was surprised by the power of Medium blogs and LinkedIn posts. But be sure to mark yourself as “open to opportunities” in the LinkedIn Privacy Settings, so that recruiters can easily find you. When recruiters contacted me, I almost always got a phone interview. +我对Medium博客和LinkedIn帖子带来的影响力感到惊讶。但请确保在LinkedIn隐私设置中标记自己为“在找工作”,这样招聘人员可以轻松找到你。当招聘人员联系我时,我几乎总能得到电话面试。 ![](https://miro.medium.com/max/1176/1*wZtT-iVYzKI26gNohTXAhw.png) -Internal Referrals — Have a strong advocate +### 内部推荐 —— 有一个强有力的推荐人 ![](https://miro.medium.com/max/700/0*07v0u9hdLQjmnQ00.jpg) -I would say the 2nd best job applications are the ones submitted by internal referrals. I had an internal referral at both Facebook and Google. I failed my first Facebook interview badly, but because my referral gave me a strong recommendation, Facebook offered to let me try again. Luckily, I passed the 2nd phone screen a month later. +我认为第二好的工作申请是通过内部推荐提交的。我在Facebook和Google都有内部推荐。我第一次在Facebook的面试表现很差,但由于我的推荐人给了我强烈推荐,Facebook允许我再试一次。幸运的是,一个月后我通过了第二次电话面试。 -With Google, it was even more surprising. Partly because of my strong referral, and partly because I told them I had other on-sites coming, they skipped me directly to on-site interviews, even though I was a remote candidate (I live in Chicago, BTW). +在Google的情况更加令人惊讶。尽管我是远程候选人(顺便说一下,我住在芝加哥),他们直接跳过了电话面试,安排了现场面试,其中一部分是因为我有很棒的推荐人,一部分是因为我告诉他们我有其他现场面试。 -So I recommend that you find any of your family member/friends/classmates that work in one of the tech companies that you want to join. If none of them work there, maybe they know someone who does. Please ask your friends to introduce you to them, and maybe have them submit your resume via internal referral. Your chances of getting a phone interview are much higher that way. +所以我建议你找到在你想加入的科技公司工作的家庭成员/朋友/同学。如果他们没有在那工作,也许他们认识在那里工作的人。请你的朋友介绍你们认识,并让他们通过内部推荐提交你的简历。这样你获得电话面试的机会会高很多。 -Another way is to use your LinkedIn network wisely. You can search for people that work for a specific company, and ask one of your mutual friends to introduce you two. If not, send the person a LinkedIn Mail. +另一种方法是明智地使用你的LinkedIn网络。你可以搜索在特定公司工作的人,并请你的共同朋友介绍你们认识。如果没有,给那个人发送LinkedIn Mail。 -Note that if you send a lot of LinkedIn Mail, you need LinkedIn Premium. I signed up for about 3 months of LinkedIn Premium (about \$30/month) and was able to connect with a lot more people directly. Some of the connections lead to interviews. As a side benefit, I received many more recruiter messages than before, because I believe that the LinkedIn algorithm ranked me ahead of non-paying users. +注意,如果你发送很多LinkedIn Mail,你需要LinkedIn Premium。我订阅了大约3个月的LinkedIn Premium(大约每月30美元),并能直接与更多的人联系。有些联系导致了面试。附带的好处是,我收到的招聘人员信息比以前多得多,因为我相信LinkedIn的推荐算法将我排在了非付费用户之前。 -### 3rd Party Recruiting Agencies +### 第三方招聘机构 -Overall, I felt that most 3rd party agencies didn’t work well for my job search this time. As a reference, when I looked for finance jobs in the past, I exclusively used executive search firms, and the results were great. But most of the tech giants don’t use 3rd party recruiting agencies. The only agencies that worked well for me were [TripleByte][23] and [DeepLearning.ai][24], which I will discuss below. +总体而言,我觉得大多数第三方招聘机构在这次求职过程中并没有起到很大作用。作为参考,以前我寻找金融工作时,主要依赖高管猎头公司,并且这样做的效果非常好。但大多数科技巨头并不使用第三方招聘机构。对我来说,唯一有效的机构是 [TripleByte][23] 和 [DeepLearning.ai][24],我将在下面详细介绍。 -### [TripleByte][25] — Skip the phone interviews +### [TripleByte][25] — 免去电话面试 ![](https://miro.medium.com/max/1067/1*N8n2DoEP57Wpmtb0xmKF6w.png) -TripleByte is a unique recruiting agency. Its appeal to the candidate is that once the candidate passes TripleByte’s comprehensive 2-hour live tech screening test, they can go directly on-site with many companies. It is also appealing to companies because TripleByte weeds out most of the weak candidates for them, saving their engineers hours of phone screening time. +TripleByte 是一家独特的招聘机构。它对候选人的吸引力在于,一旦候选人通过了 TripleByte 综合的2小时现场技术筛选测试,就可以直接进入多家公司的现场面试。对公司来说,它的吸引力在于 TripleByte 为他们筛选掉了大多数不合格的候选人,节省了工程师大量的电话筛选时间。 -When I passed TripleByte’s test, I could choose from about 200 companies. They were mostly small startups, but with quite a few large companies, such as Apple, Adobe, American Express, etc. I ended up interviewing with the [Apple Siri group][26] (Huge), [Zoox][27] (Medium), and [Determined.ai][28] (small) on-site. All of them are doing amazing engineering work. +当我通过 TripleByte 的测试后,可以选择约200家公司。这些公司主要是小型初创公司,但也有不少大公司,如 Apple、Adobe、American Express 等。我最终与 [Apple Siri 团队][26](大公司)、[Zoox][27](中型公司)和 [Determined.ai][28](小公司)进行了现场面试。所有这些公司都在令人惊叹的工程中工作。 -I highly recommend going through the TripleByte process, as it identified my weak points and saved me from many hours of phone screening and related headaches. [Take TripleByte’s online test here][29]. +我强烈推荐通过 TripleByte 的流程,因为它识别到了我薄弱的地方,并为我节省了许多电话筛选和相关的麻烦。[点击这里参加 TripleByte 的在线测试][29]。 -### [DeepLearning.ai][30] and [Workera.ai][31] — The Gospel for Aspiring Data Scientists/ML Engineers +### [DeepLearning.ai][30] 和 [Workera.ai][31] — 数据科学家/机器学习工程师的福音 ![](https://miro.medium.com/max/1171/1*I5gI_cSrZLdT3fFf4N_cYQ.png) -If you are an aspiring Data Scientist/ML Engineer, you must have heard or taken one of Andrew Ng’s Machine Learning/Deep Learning courses, offered by Coursera/Deep Learning.ai. +如果你是一个有志成为数据科学家或机器学习工程师的人,你一定听说过或参加过 Andrew Ng 在 Coursera/Deep Learning.ai 上提供的机器学习/深度学习课程。 -Actually, DeepLeaning.ai has two parts: one part is education, which is very well known, and the other part ([Workera.ai][32]) is recruiting, which is lesser-known. That’s because Workera.ai is quite new, only started mid-2019. They don’t have nearly as many affiliated firms as TripleByte, but I believe they are quickly ramping up this effort. They also make you take a test. +实际上,DeepLearning.ai 有两部分:一部分广为流传的是教育板块;另一部分相对较少人知道的是招聘板块,即 [Workera.ai][32]。这是因为 Workera.ai 在2019年中期创立,成立时间很短。他们没有像 TripleByte 那样多的合作公司,但我相信他们正在迅速扩展这方面的努力。他们也会让你参加一个测试。 -The differences between Workera.ai’s and TripleByte’s tests are two folds. First, it is a test designed for Data Scientists(DS)/ML Engineers, where TripleByte has tests for general software engineers as well as ML engineers — the ML engineer test is brand new. +Workera.ai 的测试与 TripleByte 的测试有两点不同。首先,它是为数据科学家(DS)/机器学习工程师(ML)设计的测试,而 TripleByte 有为通用软件工程师以及 ML 工程师设计的测试——ML 工程师测试是全新的。 -Second, the Workera.ai test is non-binding, meaning passing its test does NOT skip you straight to on-site interviews. Instead, Workera.ai refers you to DS/ML groups in a few of their affiliated companies, and essentially brings you to the front of the queue. But you still have to go through the whole phone/on-site interview process. +其次,Workera.ai 的测试是非约束性的,这意味着通过测试并不能让你直接进入现场面试。相反,Workera.ai 会将你推荐给其少数合作公司的 DS/ML 团队,并基本上让你排在前列。但你仍然需要经过完整的电话/现场面试过程。 -I feel it is still very valuable as Andrew Ng’s reputation and network in Deep Learning space in the Bay Area are quite wide-reaching. I ended up interviewing with [Pinterest][33] and [Scale.ai][34]’s ML groups. I don’t think I would’ve gotten interviews from either company had I just applied directly. [Click here to apply to Workera.ai’s AI Program for Experienced Engineers][35]. +我认为这仍然非常有价值,因为 Andrew Ng 在深度学习领域及其在湾区的网络非常广泛。我最终与 [Pinterest][33] 和 [Scale.ai][34] 的 ML 团队进行了面试。如果我只是直接申请,我不认为我会得到这两家公司的面试机会。[点击这里申请 Workera.ai 的高级工程师 AI 项目][35]。 -### Online Job Boards — Don’t rely heavily on them +### 在线招聘平台——不要过于依赖它们 ![](https://miro.medium.com/max/870/0*13Twl2pnw3RyDtFu.jpg) -To widen my search, I had also set up job search alerts at a few online job boards, such as LinkedIn, GlassDoor, Indeed and ZipRecruiter, so they would notify me of any new job postings matching my search criteria. Over time, I did receive a few phone interviews after applying. +为了扩大我的求职范围,我在一些在线招聘平台上设置了职位搜索提醒,例如 LinkedIn、GlassDoor、Indeed 和 ZipRecruiter,这样它们会在有符合我搜索条件的新职位发布时通知我。随着时间的推移,我在申请后确实收到了一些电话面试。 -Overall, I have found the signal-to-noise ratio to be somewhat low, meaning I would get a lot of daily emails, but very few good job functions from top companies. But don’t ignore this channel altogether. You need to cast your net wide initially, and maybe you will catch some fish via this channel +总体而言,我发现信噪比有点低,也就是说,我每天会收到很多邮件,但来自顶尖公司的好职位却很少。不过,不要完全忽视这个渠道。你需要在一开始就广撒网,或许你会通过这个渠道捕捉到一些机会。 -### Direct Apply — Doesn’t really work +### 直接申请——效果并不好 -In the old days, people would send a nice cover letter with a resume to the companies, and they would expect to hear back from someone from the HR department. But this time around, this approach didn’t work for me at all! +过去,人们会附上一封漂亮的求职信和简历寄给公司,期待着人力资源部门的回复。但这次,这种方法对我来说完全不起作用! -I identified about 10 companies (mostly autonomous vehicle companies) that I wanted to work for, and directly applied on their company websites, under the career page. To my surprise, I didn’t hear back from ANY of them, not even a rejection email! +我找了大约10家公司(主要是自动驾驶公司),并在它们的官网上的招聘页面直接申请了职位。让我惊讶的是,我没有收到任何一家的回复,连拒绝邮件都没有! -Luckily, applying to each company online didn’t take that long. I would say, still apply to any companies that are interesting to you but do not hold your breath to hear back. +幸运的是,在线申请每家公司并没有花费太多时间。我认为,还是要申请你感兴趣的公司,但不要指望一定会收到回复。 -### Apply for Jobs in Phases +### 分阶段申请工作 -Try to apply to a few companies that you are not so excited about or that you think are easier to get into in your first phase. Then apply to your dream job/companies in a later phase. You can use your first phase to practice, improve, if you get offers, even leverage those for better offers from your dream companies. +尝试在第一阶段申请一些你不太感兴趣或者你认为更容易进入的公司。然后在后续阶段申请你的梦想工作/公司。你可以利用第一阶段来练习和提高,如果得到Offer,还可以用这些Offer来争取更好的梦想公司的Offer。 -This may sound quite controversial and may seem like a very “materialistic” approach, but think about it: many people would work at a less prestigious company, with the plan to gain experience and then move into a more prestigious company a few years later. And who knows, if you don’t land your dream job, at least you have a few offers to choose from among your first phase companies. +这似乎是种非常“功利”的方法,听起来可能有些争议,但想一想:许多人会先在一家不那么知名的公司工作,计划积累经验后再跳槽到更知名的公司。而且谁知道结果会怎么样呢,如果你没有得到梦想工作,至少你在第一阶段的公司中有一些选择。 -### Get Organized: Keep a log book +### 将信息组织起来:持续更新一个日志本 -When you are applying via so many channels, it is hard to keep track of which companies you applied to, and which stages you are at with each company. +通过这么多渠道申请工作后,你很难跟踪你申请了哪些公司,以及对于每个公司你目前位于哪个阶段。 -To help with this, I maintain a detailed interview log book. It's organized by interview stages (Applied, Interview, Offer, Rejected, etc) and then by companies. Each company is essentially a page, with background information and a list of events in chronological order, such as phone calls and interviews. This way, I can see which companies that I have applied and interviewed with so that I can do the proper follow up. +为了帮助解决这个问题,我维护了一个详细的面试日志本。它按面试阶段(已申请、面试中、已录取、被拒绝等)和公司进行分类。每家公司本质上是一页包含背景信息和按时间顺序排列的事件列表(例如电话和面试)的日志。这样,我可以看到我申请和面试过的公司,以便进行适当的跟进。 ![](https://miro.medium.com/max/528/1*LCR7hMBbjU3yzZGuze_sNw.png) -# Step 4. Interviews +# 第四步:面试 -## 4.1 Phone Interviews +## 4.1 电话面试 -### Initial HR Calls +### 初步与HR电话交流 -Usually, the first contact with a company is a recruiter’s email. The recruiter asks you for a time for an initial phone call, which is usually a “fit” call, where you discuss your interests and background and why you would be a good fit for the role. Don’t stress too much over the detail. This will most likely be a short call, and the recruiter will want to move you to the next stage, which is the Technical Phone Interview. +你与公司的第一次接触通常是通过与招聘人员的邮件往来。招聘人员会询问你的时间进而安排何时进行初步电话交流,这通常是一次“适配”电话,你们在电话中会讨论你的兴趣、背景以及为什么你适合这个职位。不必过于担心各种细节,这通电话通常很短,招聘人员会希望把你推进到下一个阶段,即技术电话面试。 -### Before the Technical Phone Interview +### 技术电话面试前 ![](https://miro.medium.com/max/485/0*vN0RSfOWzKkGulG7.jpg) -One or two days before the technical phone interview, be sure to read up on [Glassdoor][36] and [Leetcode][37] for previously asked interview questions for this company. For big companies, such a Google and Facebook, this does NOT work well, as there are hundreds of previously asked questions. +在技术电话面试前的一两天,请务必在 [Glassdoor][36] 和 [Leetcode][37] 上查阅该公司以前的面试题目。对于谷歌和Facebook这样的大公司,这样做效果可能不会很好,因为有成百上千的面试题目。 -But for smaller companies, this is somewhat effective. I would scroll through many posts on Glassdoor and copy down any specific technical questions. Then I would try to solve all of them. During the phone interviews, it is pretty rare to bump into the exact questions posted online, but doing this company’s past problems better prepares you for this company’s phone interview. +但对于较小的公司,这种方法还是比较有效的。我会浏览Glassdoor上的许多帖子,记录下具体的技术问题,然后尝试解决所有这些问题。在电话面试中,遇到与网上发布的题目完全相同的情况非常少见,但做这些公司的过去问题能更好地为该公司的电话面试做好准备。 -This is analogous to practicing past years’ final questions before taking the final exam of the same professor — the questions may be different, but the style and type of questions would be similar. +这类似于在参加同一教授的期末考试之前练习往年的期末题目——问题可能会有所不同,但问题的风格和类型会相似。 -### Technical Phone Interviews +### 技术电话面试 ![](https://miro.medium.com/max/1280/0*P4QVsG3vBNfY6UhY.jpg) -Technical phone interviews are where the rubber meets the road. The stage is designed to separate the capable candidates from the less-capable candidates. I have read that only about 10–20% of the candidates can pass the technical phone screens of top tech companies. +技术电话面试是展示实力的关键阶段。这个阶段的目的是区分有能力的候选人和能力较弱的候选人。据说只有大约10%至20%的候选人能够通过顶级科技公司的技术电话面试。 -The measuring stick is simply a coding test, NOT how well you talk, NOT how experienced you are at your current job, NOT how many programming languages you know, NOT even your personal projects. Most interviewers simply want you to complete a coding exercise in whatever programming language you are most comfortable in. +评价的标准只有一个编码测试,而不是你的口才、当前工作的经验、掌握的编程语言数量,甚至不是你的个人项目。大多数面试官只想让你在你最熟悉的编程语言中完成一个编码练习。 -Personally, I don’t quite agree that this is the best way to find the best engineers. For example, I've worked with many very experienced software engineers. Some are expert GUI/app developers, some are C++ experts, others are low-level Linux gurus, but many of them tell me that they would fail miserably in a timed Algorithms and Data Structures (A&DS) coding test. +个人而言,我并不认为这是发现最佳工程师的最佳方式。例如,我与许多非常有经验的软件工程师合作过。有些是GUI/应用开发专家,有些是C++专家,还有些是低级Linux专家,但他们中的许多人告诉我,他们会在限时的算法和数据结构(A&DS)编码测试中表现得很差。 -But since this is the only game in town, in order to break into the tech industry, \***\*you have to “Crack the Coding Interview”\*\***…… +但既然这是唯一的途径,想要进入科技行业,**你必须“破解编码面试”**…… ![](https://miro.medium.com/max/940/0*ZPXWlO_1OlBQa5fw.jpg) -The coding exercise is always done via a shared online notepad, such as CoderPad or Google Docs, where both you and the interviewer can type at the same time. +编码练习通常通过共享在线记事本进行,例如CoderPad或Google Docs,面试官和你可以同时在共享文档中进行输入。 -While some companies, like Google and Facebook, only ask you to write down the correct algorithms and won’t ask you to run your code, many companies expect you to come up with fully working code within the 45–60 minutes time window. +虽然一些公司(比如Google和Facebook)只要求你写出正确的算法,不要求你运行代码,但许多公司期望你在45-60分钟的时间内完成可以正确运行的代码。 -In addition to the shared notepad, most companies conduct voice-only calls, while some companies conduct phone interviews via Zoom/Skype video calls. +除了共享记事本,大多数公司采用语音通话进行面试,而一些公司则通过Zoom/Skype视频通话进行。 -Personally, phone screens are the hardest part of the interview process for me. For reference, I passed about only 50% of my technical phone screens. They are difficult because: +对我来说,电话面试是面试过程中最困难的部分。作为参考,我大约只有50%的技术电话面试通过率。它们困难的原因包括: -- The 45–60 min time window is usually tight for me, as I am not fast at typing. (Believe it or not, I am faster at whiteboard coding for reasons I will discuss in the on-site interview section.) -- You need to code while talking with the interviewer throughout the call. Most people, including myself, prefer to discuss a design/approach first, and then type the code and debug in silence. But if you don’t talk for 20–30 min during your implementation stage, it would be very awkward. -- Online notepad is text-based and is not a whiteboard. So it is hard to draw a diagram or illustrate your code workflow graphically. -- Online notepads are NOT IDEs. While most of the online notepads, such as CoderPad, can do decent syntax highlighting and indentation, they are not full-blown IDEs. For example, they can not do word auto-completion. They can not highlight obvious syntax errors while you type and they certainly don’t support line-by-line debugging. So a lot of times, I had to resort to the “old faithful” print statements for debugging, which is very slow and clumsy. -- Voice calls are non-visual. As I tried to explain my approach over the phone, I couldn't draw a picture and couldn't look at the interviewer’s facial expression or body language to gauge if I was on the right track. +- 45-60分钟的时间窗口通常对我来说很紧张,因为我打字速度不快。(无论你是否相信,我在白板编码时更快,原因将在现场面试部分讨论。) +- 你需要在整个通话过程中与面试官保持交流的同时编写代码。大多数人更喜欢先讨论设计/方法,然后在安静中编写代码和调试,包括我自己。但如果在实现阶段你有20-30分钟不说话,会显得很尴尬。 +- 在线记事本是基于文本的,不是白板。因此很难画图或图解代码工作流程。 +- 在线记事本不是集成开发环境(IDE)。虽然大多数在线记事本,如CoderPad,可以做不错的语法高亮和缩进,但它们不是全功能的IDE。例如,它们不能做自动补全,也不能在你输入时高亮明显的语法错误,更不能支持逐行调试。所以很多时候,我不得不依靠“老实可靠”的print语句进行调试,这非常慢且笨拙。 +- 语音通话是非视觉的。当我试图在电话中解释我的方法时,我不能画图,也不能通过面试官的面部表情或肢体语言来判断我的表述是否正确。 -Here are what I did to combat the above difficulties: +为了应对上述困难,我采取了以下措施: -- \***\*Use a good phone headset.\*\*** This should be very obvious because you want to free both of your hands to code! So invest in a good Bluetooth headset and make sure it is fully charged before phone interviews. -- \***\*Keep “Chit-chat” to a minimum\*\***. In my first couple of interviews, I would try to give the interviewer a good impression of myself. So I would spend about 5–7 min talking about my background, my experiences, and then my self-driving car. Sometimes, the interviewer would ask me a few questions, and it could drag on to the first 10 minutes! What I quickly discovered was that all this “chit-chat” time ate into the total 45 min allotted for my interview, which meant I had less time to work on the coding problem. In fact, most interviewers are there to gauge your coding skills ONLY, and your strong work experience is not relevant to them at this time. So I learned to shorten the “chit-chat” to about less than 2 min at the beginning, and leave my questions to the end of the interview. In fact, if I finished the coding problem successfully, the interviewers usually are more willing to talk with me a bit longer than the 45 min slot. On the other hand, if you “bombed” the coding interview, chatting won’t change the outcome of the interview, anyways. Note that this tip applies to on-site interviews as well. +- **使用一个好的电话耳机**。这是显而易见的,因为你需要解放双手来编码!所以买一个好的蓝牙耳机,并确保在电话面试前充满电。 +- **把闲聊时间降到最低**。在我的前几次面试中,我会试图给面试官留下好印象。所以我会花大约5-7分钟谈论我的背景、经验,然后是我的自动驾驶汽车。有时面试官会问我一些问题,这可能会拖延到前10分钟!我很快发现所有这些闲聊时间都占用了面试分配的45分钟,这意味着我有更少的时间来处理编码问题。事实上,大多数面试官只想评估你的编码技能,你的强大工作经验此时对他们来说并不重要。所以我学会了在开始时将闲聊时间缩短到2分钟以内,并将我的问题留到面试结束。如果我成功完成了编码问题,面试官通常更愿意和我多聊一会儿。相反,如果你在编码面试中表现不佳,聊天也不会改变面试结果。同样的建议也适用于现场面试。 ![](https://miro.medium.com/max/600/1*HOQJzGbrCYQrXMZoIPl3UQ.png) -- \***\*Use two monitors.\*\*** One monitor would be for the shared notepad, and the other monitors would be for googling and IDE, etc. Most laptops nowadays have ports for external monitors. Be sure you connect your laptop to at least one external monitor when you code, so you won’t have to flip back and forth between windows. -- \***\*Use an external mouse\*\***. If you use a laptop, be sure to invest in an external mouse. For me, using an external mouse significantly improves my ability to select, copy and paste code. +- **使用两个显示器**。一个显示器用于共享记事本,另一个显示器用于搜索和IDE等。现在大多数笔记本电脑都有外接显示器的端口。确保在编写代码时将笔记本电脑连接到至少一个外接显示器,这样你就不必在窗口之间来回切换。 +- **使用外接鼠标**。如果你使用笔记本电脑,务必购买一个外接鼠标。对我来说,使用外接鼠标显著提高了选择、复制和粘贴代码的能力。 ![](https://miro.medium.com/max/650/0*_KphaQpx9VCemE2C.jpg) -- \***\*Use an IDE\*\***. Even though you are coding in the shared notepad, sometimes, to troubleshoot, it may be better to copy-paste the code into your IDE, fix syntax errors and bugs, and then copy the working code back into the shared notepad. Most interviewers won’t mind, as long as you can get the code working within the allocated time. They want to see you succeed as well! Before your phone interview, be sure to set up an empty project where you can quickly paste in code and run. You don’t want to spend precious interview time creating a project and setting up run parameters. Having an IDE open also means that you can directly paste in your code at the end of the interview so you can save a copy of the questions and your solution for further analysis. +- **使用IDE**。尽管你在共享记事本中编写代码,有时为了排除故障,最好将代码复制粘贴到IDE中,修复语法错误和错误,然后将可以正常运行的代码复制回共享记事本。大多数面试官不会介意,只要你能在规定时间内完成代码。他们也希望看到你成功!在电话面试前,确保设置一个空项目,方便快速粘贴代码并运行。你不想在宝贵的面试时间内创建项目和设置运行参数。打开IDE还意味着你可以在面试结束时直接粘贴代码,这样你可以保存问题和解决方案以供进一步分析。 ![](https://miro.medium.com/max/2000/0*4QQMQfLgKT0Y7XLV.png) -- \***\*Use a programming language that saves you from typing\*\***. Most of the tips here are designed to help you save time TYPING, so you can spend more time THINKING about the solution. So try to \***\*choose a language that can do a lot with very little typing\*\***. My best languages are C++ and Python. I choose Python for all my interviews, unless an interviewer specifically requests C++, because it is so much more expressive compared with C++. -- \***\*Make good use of Google.\*\*** This is one advantage of a phone interview over an on-site interview because you can google! If you are not too familiar with the API of a function, or certain syntax of a language, feel free to google it. It is understood you can google during a phone interview. Heck, if your interviewer is lazy and grabbed a problem verbatim from LC, then congratulations! ;-) -- \***\*Talk through your approach\*\*** thoroughly with the interviewer BEFORE you start implementation. For my first few interviews, I would start coding after having a rough idea of what to do, thinking I could flesh out the details as I coded. This was NOT a good idea. \***\*Try to fl**e**sh out as much as detail during your initial discussion with the interviewer**. This **will actually save you lots of time later on\*\***. The interviewer is, of course, very familiar with all the good and bad approaches to the problem. If you present a suboptimal or incorrect approach, they may steer you towards a more optimal one and/or may point out bugs/corner cases you forgot to consider. This can save you tons of implementation time down the road. But be sure to cover as many corner cases as possible on your own, as you will get points deducted if the interviewer has to point out the missing corner cases. -- \***\*Solving the problem is better than not solving the problem\*\***. This statement may not be that obvious when you are searching for the most optimal solution. Sometimes, if I couldn’t conjure up the most optimal solution, I would propose and finish implementing a suboptimal solution. In any case, the fact that I came up with some working solution (albeit suboptimal) gave the interviewer a decent data point to compare me to others. In some instances, the interviewers told me, after the fact, that the “optimal” solution that I thought was possible does not exist! As I learned from my own failed experiences, not coming up with a working solution would certainly be a FAILED interview. +- **使用节省打字的编程语言**。这里的大多数技巧都是为了帮助你节省打字时间,以便你可以花更多时间思考解决方案。因此,尝试选择一种打字量少的语言。我的最佳语言是C++和Python。除非面试官特别要求C++,否则我在所有面试中都选择Python,因为与C++相比,它更加简洁。 +- **善用Google**。这是电话面试相对于现场面试的一个优势,因为你可以搜索。如果你不太熟悉某个函数的API或某种语言的语法,随时可以搜索。大家都理解你可以在电话面试中使用Google。如果你的面试官懒得从LeetCode上直接拿问题,那么恭喜你!;-) +- **在开始实现前与面试官彻底讨论你的方法**。在我的前几次面试中,我会在大致了解该做什么后开始编码,想着可以在编码时细化细节。这不是一个好主意。尝试在与你的面试官的初步讨论中尽量细化细节。这实际上可以为你节省很多后续实施时间。面试官当然非常熟悉这个问题的所有优缺点。如果你提出一个次优或不正确的方法,他们可能会引导你走向更优的方向,并可能指出你忘记考虑的错误/角落案例。这可以为你节省大量的实现时间。但务必尽可能多地涵盖角落案例,因为如果面试官必须指出缺少的角落案例,你会被扣分。 +- **解决问题比不解决问题更好**。当你在寻找最优解决方案时,这一点可能不太明显。有时,如果我无法想到最优解决方案,我会提出并完成一个次优解决方案。无论如何,提出某个工作方案(尽管次优)能给面试官提供一个不错的比较数据点。在某些情况下,面试官在事后告诉我,我认为可能的“最优”解决方案实际上并不存在!根据我的失败经验,如果没有提出工作方案,面试肯定会失败。 ![](https://miro.medium.com/max/516/0*zYwn2rtIyq9npuS_.png) -Remember, at this point, you should NOT be focusing on Systems Design questions, as they are only asked during on-site interviews because it requires a whiteboard to draw diagrams. +记住,在这个阶段,你不应该专注于系统设计问题,因为这些问题只会在现场面试中提问,因为它需要白板来画图。 -### Online Coding Tests +### 在线编程能力测试 ![](https://miro.medium.com/max/1386/0*ZQjHTN8X0xZw0A1J.jpg) -I have encountered very few tech companies that still give online coding tests, such as HackerRank or Codility, although quite a few finance companies still give those. The reason to give these tests is to save hiring companies’ manpower. +我很少遇到还给在线编码测试(如 HackerRank 或 Codility)的科技公司,虽然很多金融公司仍然会给这些测试。这些测试的目的是节省招聘公司的人工成本。 -Usually, you would get a link to an online test from a company’s recruiter. There are usually 3–5 coding questions, which you need to complete within a 2–3 hours window. You need to complete it anytime within 7–10 days of the recruiter’s email. No human is overlooking you while you take the test, and you need to pass most test cases to pass this stage. +通常,你会从公司的招聘人员那里收到一个在线测试的链接。在线测试通常有 3-5 道编码题,你需要在 2-3 小时内完成。在收到招聘人员的邮件后的 7-10 天内,你可以随时完成这个测试。在你进行测试时,没有人监视你,你需要通过大部分测试用例才能通过这一阶段。 -Here are some tips for online coding tests: +以下是一些关于在线编码测试的建议: -- \***\*Use an IDE\*\***: you can write and test your code entirely in your favorite IDE and then paste into the online test page to run the official test cases. -- \***\*Read all the problems before you start\*\***. Some online tests are designed so that most people can’t complete all questions within the allotted time. So be sure to read all the questions before you start any problems and start on the easier questions first so that you can finish as many questions as possible. -- \***\*Get it working first\*\***. For most of the online tests, time is a scarce resource. So the goal is generally to pass as many test cases as possible, not necessarily ALL the test cases. If you have a working solution, it should pass most of the test cases. If your solution is not the most time-optimized, you may time out on a few test cases, which is fine. Just move on to solve the next problem, come back if you have more time left. (Note: DO NOT do this when you are writing production-level code. For production-level code, DO spend the time to get your algorithms right and cleaned up, and add enough documentation so that you and others can maintain your code in the future.) -- \***\*Save a copy of the questions and your solutions\*\*** for future analysis. This should be routine that you save ALL your interview questions regardless of whether they are phone/online/on-site questions. +- **使用 IDE**: 你可以在你喜欢的 IDE 中完全编写和测试你的代码,然后将其粘贴到在线测试页面以运行正式的测试用例。 +- **在开始之前阅读所有问题**: 有些在线测试的设计是让大多数人在规定时间内无法完成所有问题。因此,在开始做题之前,一定要先阅读所有问题,先从简单的问题开始,这样你可以尽可能多地完成问题。 +- **首先让代码运行起来**: 对于大多数在线测试来说,时间是一种稀缺资源。所以目标是尽可能通过更多的测试用例,而不是所有的测试用例。如果你有一个可行的解决方案,它应该能通过大部分测试用例。如果你的解决方案不是时间优化最好的,你可能会在一些测试用例上超时,这没关系。继续解决下一个问题,如果有时间再回来。(注意:编写生产级别代码时不要这样做。对于生产级别代码,一定要花时间把算法搞对、整理干净,并添加足够的文档,以便你和其他人将来能维护你的代码。) +- **保存问题和你的解决方案的副本** 以便日后分析。不管是电话面试、在线面试还是现场面试的题目,都应养成保存所有面试题目的习惯。 -### Take-Home Projects +### 居家项目 -A few companies give take-home projects before, or in lieu of, a technical phone screen. I had two companies that gave me take-home projects, both of which were Machine Learning related. I have found these projects to be much more enjoyable and more relevant to the job that I was applying for. So I wish more companies would give take-home projects in lieu of technical phone screens. +一些公司在技术电话面试之前或代替技术电话面试给求职者布置居家项目。我有两家公司给我布置了居家项目,这两个项目都是与机器学习相关的。我发现这些项目比技术电话面试更有趣,也更贴近我申请的职位。因此我希望更多公司能用居家项目代替技术电话面试。 -But I do understand that it may not be as effective or as fair because +但我也理解这样做可能不是那么有效或公平,因为 -1. companies don’t know if you or your ML expert friend did the project, and -2. even if you did it yourself, how long did it take you? +1. 公司不知道是你还是你的机器学习专家朋友完成了这个项目, +2. 即使是你自己完成的,公司也不知道你花了多长时间。 ![](https://miro.medium.com/max/750/0*2DB9c6E9xy1Hsu_e) -For take-home projects, since you typically need to spend a lot of time on them, make sure you are using your time wisely. +由于居家项目通常需要花费大量时间,请确保你在明智地使用你的时间。 -For a company that you are really excited about, yes, do spend the 8–10 hours do a nice job coding and documenting your approach and design decisions. For [Scale.ai][38]’s project, I spent at least 10 hours working on their project — even though the instruction told me to only spend about 2–3 hours. I did this because I thought it was fun and I learned a lot by exploring different ML approaches. +对于你非常感兴趣的公司,居家项目确实需要花8-10小时好好编写代码并记录你的方法和设计决策。例如,我为 [Scale.ai][38] 的项目花了至少10小时,尽管说明中让我只花大约2-3小时。我这样做是因为我觉得很有趣,并且通过探索不同的机器学习方法学到了很多。 -For companies you are not so excited about, don’t spend that much time, and save the time for more LC problems, so you can be better prepared for coding interviews in general. +对于你不太感兴趣的公司,不要花费太多时间,把时间留给更多的 LeetCode 问题,这样你可以更好地准备编码面试。 -### Interview Scheduling +### 面试安排 ![](https://miro.medium.com/max/400/0*XF9LDZeQZ6_GVE0J) -Once you have done a few phone interviews, you should be getting some on-site interview invitations. In the beginning stages of your phone interviews, your success rate will be somewhat low. I literally failed all of my first 4–5 phone interviews. Then I realized that I needed to focus on practicing more dynamic programming and recursive algorithms. +当你完成了几次电话面试后,你应该会收到一些现场面试的邀请。在电话面试的初期阶段,你的成功率可能会比较低。我在前4-5次电话面试中都失败了。后来我意识到需要更多地练习动态规划和递归算法。 -Your experience may be different, but don’t be discouraged when you get rejection emails in your interview process. Ask the recruiters for feedback and study more. There are a lot of companies out there for you to try. +你的经历可能不同,但在面试过程中收到拒绝邮件时不要气馁。向招聘人员请求反馈并继续学习,还有很多公司等着你去尝试。 -Here are some interview scheduling tips: +以下是一些面试安排的建议: -- \***\*Keep a detailed interview log\*\***: This is the same log mentioned in Step 2. Now is the time to start to keep track of when and what was discussed in each interview. -- \***\*Put all interviews in your calendar and set reminders/alerts\*\***. You don’t want to miss a single interview because you forgot about it. Also, make sure you confirm the interview time zone. For simplicity, I always communicate to recruiters in their time zone (usually this is Pacific Time). -- \***\*Schedule back-to-back phone interviews with at least 30 mins in between\*\***. This is because some interviewers may call 5–10 min late, and some interviewers may allow the interview to go over the time limit by 5–10 min. So if you set two phone interviews back-to-back, you may have to cut one short or miss the other call. Plus you need a 5–10 min break to clear your head and write down the interview notes. -- \***\*Ask for a Second Chance.\*\*** This may be a little known fact. If you fail the first phone interview, many companies will allow you to have a second chance. Most won’t offer it automatically, but would if you ask nicely. So always ask, but schedule it a few weeks after the first interview, so you have enough time to study. There usually won’t be a third chance unless you wait for 6 months. -- \***\*Stagger your interviews.\*\*** I staggered my interviews in phases. I put the companies I believed were easier to pass in the earlier phase, and the harder-to-pass and more well-known ones in the later phases, which was about 2–3 weeks later. This way, if you discover you are weak in some topics, you have 2–3 weeks to study them. -- \***\*Cluster your on-site interviews.\*\*** Because most of the companies that I interviewed with are in the Bay Area, I tried to schedule all of the on-site interviews within a 1–2 weeks span, so I could fly out once and get all these on-site interviews done. For example, my Bay Area on-site interviews lasted 2 full weeks, during which I interviewed with 6 companies — 3 interviews per week. Some companies would be more willing to bring you on-site if they know you would be in town for other interviews. Also, they don’t have to pay for your plane ticket. Various companies paid for some of the hotel nights, and I had to cover the other nights. This was fine for me, since it saved me a lot of time, and I was able to cluster all on-site interviews together, so I could hear back the decisions from all of them around the same time. +- **保持详细的面试日志**: 这与第2步提到的日志相同。现在是时候开始记录每次面试的时间和讨论内容。 +- **将所有面试放入日历并设置提醒/警报**。你不想因为忘记面试而错过任何一个面试。此外,确保确认面试的时区,为简便起见,我总是按招聘人员所在的时区(通常是太平洋时间)与他们沟通。 +- **安排某一时段的多场电话面试时至少间隔30分钟**。这是因为有些面试官可能会晚打5-10分钟电话,有些面试官可能会允许面试超时5-10分钟。如果你把两个电话面试安排得太近,可能会不得不缩短一个或错过另一个。此外,你还需要5-10分钟的时间来清理思绪并记下面试笔记。 +- **请求第二次机会**。这可能是一个鲜为人知的事实。如果你第一次电话面试失败,很多公司会允许你有第二次机会。大多数公司不会自动提供第二次机会,但如果你礼貌地请求,它们通常会同意。因此你每次都要尝试请求它们再给一次机会,但将它安排在第一次面试后的几周,这样你有足够的时间学习。除非你等6个月,否则通常不会有第三次机会。 +- **错开你的面试**。我将面试分阶段进行。把认为较容易通过的公司安排在早期阶段,把较难通过且更知名的公司安排在2-3周后的后期阶段。这样,如果你发现自己在某些主题上较弱,还有2-3周的时间来学习。 +- **集中安排你的现场面试**。因为我面试的大多数公司都在湾区,我尝试在1-2周内安排所有的现场面试,这样我只需要飞一次就能完成所有的现场面试。例如,我的湾区现场面试持续了整整两周,其间我面试了6家公司,每周3次面试。如果公司知道你会在城里进行其他面试,他们更愿意安排你进行现场面试。此外,他们不需要支付你的机票。不同公司支付了一些酒店费用,剩下的酒店费用由我自己承担。这样对我来说没问题,因为它为我节省了很多时间,我能够集中安排所有的现场面试,这样可以在同一时间段内收到所有的面试结果。 -## 4.2 On-Site Interviews +## 4.2 现场面试 ![](https://miro.medium.com/max/696/0*C5eicXplRRZIxXk3.png) -2–3 weeks before the on-site interview, start to focus on System Design questions. Many companies allow you to schedule on-site interviews up to 4–6 weeks after you pass the phone interview. This should give you ample time to prepare for both A&DS and System Design questions. +在现场面试前的2-3周,你需要开始专注于系统设计问题。许多公司允许你在通过电话面试后安排4-6周内的现场面试,这应该能给你足够的时间准备算法与数据结构(A&DS)和系统设计问题。 -Normally, there are 4–5 45 min interview sessions for each company’s onsite interview — 2 in the morning, lunch, and 2–3 in the afternoon. There will be 1 System Design, 1 Behavior and 2–3 A&DS coding interviews. Very few companies will ask you about math or brain teasers, so I wouldn’t spend a lot of time preparing for them. +通常每个公司的现场面试包含4-5个45分钟的面试环节——上午2个,午餐时间,然后下午2-3个。面试内容一般包括1个系统设计面试,1个行为面试和2-3个算法与数据结构(A&DS)编码面试。很少有公司会问到数学或脑筋急转弯问题,所以我不会花太多时间准备这些。 -### System Design Interviews +### 系统设计面试 ![](https://miro.medium.com/max/1280/0*Vnhf3KUToEKuUIGV.jpg) -Gaurav Sen Designing WhatsApp +Gaurav Sen 正在设计 WhatsApp + +这一阶段被包含在第二步(面试准备)中。如果你看了所有我推荐的所有系统设计YouTube视频,并能够将其概括为一个类似于我所概述的框架,说明你掌握得非常好。 + +#### 明确需求规范 -This was covered in Step 2: Interview preparation. If you watched all the system design YouTube videos I recommended and can generalize it to a framework similar to what I outlined, you will be in pretty good shape. +在系统设计问题中,一个重要的技巧就是及早明确系统的功能和特点。你需要定义一组既不太简单也不太复杂的功能,以便在45分钟的时间内完成。 -\***\*Clarify the spec.\*\*** One important technique of the System Design question is to clarify the features and functionality of the system early on. You want to define a set of features that is not too trivial and not too complex that you can’t finish within the 45 min time frame. +例如,在被要求设计一个即时通讯应用时,请确保提及以下基本功能: -For example, when asked to design an Instant Messaging App, be sure to mention essential features such as: +- 用户认证(这是大多数系统中应有的) +- 一对一消息 +- 群组消息 +- 用户在线状态 +- 离线消息(如果有时间) -- User authentication (this should be in most systems) -- One-to-one messaging -- Group messaging -- User active status -- Offline messages (if you have time) +对于一个45分钟的面试,我不会提及以下非基本功能: -For a 45 min session, I would not mention these non-essential features: +- 语音通话 +- 视频通话 +- 多人通话 +- 个人时间线(如Facebook Stories) -- voice calls -- video calls -- multi-person calls -- personal timelines (i.e. Facebook Stories) +当然,如果你被要求设计Skype,你必须设计语音和视频通话,但我不会在设计的功能中包括共享计算机桌面,这样做是为了将已有功能限制在可管控的范围内。 -Of course, if you are asked to design Skype, you would have to design for voice and video calls, but I wouldn’t include sharing computer desktops just to limit the feature set to a manageable scope. +#### 注意意外事件 -\***\*Watch for curveballs.\*\*** During the interview, watch out for odd questions and be able to respond intelligently. +在面试中,你需要注意面试官提出的一些奇怪的问题,并能做出聪明的回应。 ![](https://miro.medium.com/max/1000/0*FuUaWBV2H26hOdIy.jpg) -For example, when I was at the Facebook interview, I was asked how to design a simplified version of Google Search. I proceeded by drawing a pretty good high-level design on the whiteboard. Then the interviewer threw me a curveball: +例如,在Facebook的面试中,我被要求设计一个简化版的Google搜索。我在白板上画了一个相当不错的高层设计。然后面试官抛出一个意外的问题: -Interviewer: “So how many servers do you think you need?” +面试官:“你认为需要多少台服务器?” -Me: “Well, this depends on how many people are using it and how beefy the servers are……” +我:“嗯,这取决于有多少人在使用它以及服务器的性能如何……” -Interviewer: “Why do you need to know how beefy the servers are?” +面试官:“你为什么需要知道服务器的性能?” -Me: “My thinking is that the actual usage is sort of like the numerator, the server hardware capability is like the denominator, and the number of servers depends on these two numbers.” +我:“我的想法是,实际使用情况就像分子,服务器硬件的能力就像分母,所需的服务器数量取决于这两个数字。” -Interviewer: “NOPE, the hardware spec of a server is irrelevant.” +面试官:“不,服务器的硬件规格是无关紧要的。” -Me: “Surely hardware spec matters. If I can host a service with 10 beefy servers, I would probably need 100 laptops to host the same service” +我:“当然硬件规格很重要。如果我可以用10台高性能服务器托管一个服务,我可能需要100台笔记本电脑来托管相同的服务。” -Interviewer: “Hardware spec is irrelevant.” +面试官:“硬件规格无关紧要。” -At this point, I was at a loss, because I thought he was being quite unreasonable. After a long and awkward pause, I almost gave up. +此时,我感到困惑,因为我觉得他有点不讲理。在长时间的尴尬停顿后,我几乎要放弃了。 -Me: “So what do you mean by hardware specs don’t matter” +我:“所以你的意思是硬件规格不重要?” -Interviewer: “Pretend you don’t know the hardware spec of a server, how do you figure out how many servers you need?” +面试官:“假装你不知道服务器的硬件规格,你怎么确定需要多少台服务器?” -OH, THAT’S WHAT HE MEANT??!! He didn’t mean hardware spec is irrelevant, he just meant we don’t know the exact hardware spec. +哦,他的意思是这样!!他不是说硬件规格无关紧要,而是说我们不知道确切的硬件规格。 -Me: “Oh, in that case, I would have to benchmark the throughput of the servers, and the number of servers required is roughly the maximum usage divided by the throughput of a single server. Am I on the right track here?” +我:“哦,在这种情况下,我需要基准测试服务器的吞吐量,所需的服务器数量大致是最大使用量除以单台服务器的吞吐量。我这样说对吗?” -I could see him slightly nodding his head. +我看到他微微点头。 -This moral of the story is to illustrate how important it is to clarify what the interviewer is asking/telling you. You can do this by repeating the question/statement back to them in your own words. If you are really stuck, ask them what they meant by what they just said. Maybe they will rephrase the questions/statements in a different way, so you can understand and proceed. +我讲这个故事的意思是,在面试中进行补充说明从而明确面试官的问题/陈述有多么重要。你可以通过用自己的话复述问题/陈述来做到这一点。如果你真的卡住了,问他们刚才说的是什么意思。也许他们会以不同的方式重述问题/陈述,以便你理解并继续。 -Remember many interviewers are not native English speakers, so \***\*what they say\*\*** and \***\*what they mean to say\*\*** may not exactly match. Similarly, many interviewees (yours truly included) are not native English speakers either, so \***\*what they hear\*\*** and \***\*what they think they hear\*\*** also may not exactly match. +记住,许多面试官不是母语为英语的人,所以**他们说的**和**他们想说的**可能不完全一致。同样,许多面试者(包括我在内)也不是母语为英语的人,所以**他们听到的**和**他们以为听到的**也可能不完全一致。 -Having the interviewers say the same thing in different ways may greatly help interviewees understand what the interviewers truly mean. +让面试官以不同的方式重复同样的话,可能会大大帮助面试者理解面试官的真正意思。 -### Whiteboard A&DS Coding Interviews +### 在白板上进行的算法和数据结构编码面试 ![](https://miro.medium.com/max/1280/0*zrHrbhiBz6Mfv79F.jpg) -Tushar Roy talking about Trie Data Structure +Tushar Roy 讲解 Trie 数据结构 -On-site A&DS questions are almost exclusively done on whiteboards. Many people, including myself, are scared of whiteboard coding initially, because who in a real work setting writes detailed code on a whiteboard?! +现场面试中的算法和数据结构(A&DS)问题几乎都是在白板上完成的。包括我自己在内,许多人最初都对白板编码感到害怕,因为在实际工作环境中,谁会在白板上写详细的代码呢? -But as I went through all these onsite interviews, I have found that whiteboard coding is, in some sense, easier than phone interviews. I will cover some techniques specifically for whiteboard coding below. +但在经历了所有这些现场面试之后,我发现白板编码在某种程度上比电话面试更容易。我将在下面介绍一些专门针对白板编码的技巧。 -\***\*Illustrate your algorithm with diagrams/charts/tables.\*\*** There is an old saying, “A picture is worth a thousand lines of code”, or something like that. Before you write code, try to illustrate how your code would work with diagrams/charts/tables. This will give your interviewer a road map of what your code might look like, and will allow them to point out any potential issues that they see. +**用图表/表格来说明你的算法**。有句老话说,“一张图胜过千行代码”,或者类似的说法。在写代码之前,尝试用图表/表格来说明你的代码如何工作。这会给面试官一个你代码可能是什么样子的路线图,并允许他们指出他们看到的任何潜在问题。 -Once you are done coding, try to walk through your code line-by-line with the diagrams on the side, so that you can show the interviewer that your implementation matches what you intended to do. Be sure to watch [\***\*Tushar Roy’s LeetCode Hard Solutions\*\***][39] YouTube videos to learn how to present ideas on a whiteboard. +一旦你写完代码,尝试逐行检查代码,并在旁边放上图表,这样你就可以向面试官展示你的实现与你的意图是一致的。一定要观看[Tushar Roy的LeetCode高难度解决方案](https://www.youtube.com/playlist?list=PLrmLmBdmIlpv0b07yUFtY8eN5odlw1Pse)的YouTube视频,学习如何在白板上展示想法。 -\***\*Split the whiteboard into sections\*\***. For reasons mentioned in the previous tip, I recommend splitting the whiteboard into at least 2–3 vertical sections. One section is reserved for diagrams, and other sections are for code. This way, you can always refer to the diagrams before/during/after you code. +**将白板分成几个部分**。出于前一条提示提到的原因,我建议将白板至少分成2-3个垂直部分。一部分用于图表,其他部分用于代码。这样,你可以在编写代码的整个过程中随时参考图表。 -\***\*Don’t sweat the syntactic details\*\***. If you are allowed to code in any programming language (as this is the norm), then the interviewer should not be very picky on the syntax of your code. For example, if you miss a trailing semicolon in C++/Java, or trailing colon in Python, it is not a big deal, as long as your indentation is correct. Or if you misspell or shorten the name of a built-in function, it is also not a big deal, as long as the interviewer understands what your intentions are. On the contrary, you are not afforded the same luxury in phone interviews. +**不要纠结于语法细节**。如果允许你使用任何编程语言(这是常态),那么面试官不应该对你的代码语法太挑剔。例如,如果你漏掉了C++/Java中的分号,或Python中的冒号,只要你的缩进正确,就没关系。或者如果你拼错或缩短了内置函数的名称,只要面试官理解你的意图,也没关系。相反,在电话面试中你没有这样奢侈的宽容度。 -\***\*Use shortened variable/function names\*\***. Because writing out long names with a marker can take a long time and a lot of space, tell your interviewer the full name and meaning of a variable, and then use the shortened name in your code. This will save you a lot of precious time as well as precious whiteboard space. +**使用简化的变量/函数名称**。因为用记号笔写长名称需要很长时间和很多空间,告诉面试官变量的全名和含义,然后在代码中使用简化的名称。这会节省你很多宝贵的时间和白板空间。 -\***\*Constantly Seek Feedback\*\***. This is one of the many benefits of an on-site interview because you can quite easily gauge the feedback of an interviewer. When I present my design or approach, I regularly check the facial expressions of the interviewer and ask casually, “Am I on the right track?” or “How does it look?” Usually, the interviewers are pretty helpful and give you some feedback, or at least nod or frown. If you are way off, they surely let you know, if you ask. +**不断寻求反馈**。这是现场面试的一个重要好处,因为你可以很容易地判断面试官的反馈。当我展示我的设计或方法时,我会定期检查面试官的面部表情,并随口问,“我这样做是正确的吗?”或“看起来怎么样?”通常,面试官都很乐于提供一些反馈,或者至少点头或皱眉。在你偏离正确答案太远的时候,如果你问的话他们肯定会告诉你。 -As I found out the hard way a few times, when I didn’t seek feedback, some interviewers would let me finish the whole implementation and then point out some major flaws in the end. As a result, I failed all those interviews miserably. So try to \***\*fl**e**sh out your design as much as possible before coding\*\*** and \***\*seek feedback\*\***. +正如我几次惨痛的经历告诉我的那样,当我不寻求反馈时,一些面试官会先让我完成整个实现,然后在最后指出一些重大缺陷。结果,我惨败了所有那些面试。所以尽量在编码前尽量细化你的设计并寻求反馈。 ![](https://miro.medium.com/max/400/0*VOO-nVdsgXIbDUr5.png) -### Other On-site Interview Tips +### 其他的在线面试技巧 -Some of these non-technical tips may be common sense, but I will list them as a reminder. +其中一些非技术技巧可能是常识,但我将它们列出来作为提醒。 -\***\*Ask good questions at the end\*\***. You probably won’t have a lot of time to ask questions at the end of each interview session. So keep these questions short and impactful. The interview is a two-way process - companies are trying to extract information from you for their evaluation process, and you need to do the same to these companies, so you can make the most informed decisions when you get offers. +**在结尾提出好的问题**。在每次面试结束时,你可能没有太多的时间来提问。所以这些问题要简短而有影响力。面试是一个双向的过程——公司在评估过程中试图从你身上提取信息,你也需要对这些公司做同样的事情,这样当你得到工作机会时,你就可以做出最明智的决定。 ![](https://miro.medium.com/max/998/0*rvbji0M2GsMoD0CW.png) -Here are the typical questions I like to ask: +以下是我喜欢问的经典问题: -- Can you tell me about your background and what you do in your current group? -- Can you tell me about the technology stack and development process in your group/company? Once the interviewer mentions a few programming languages or tools, you can echo by saying you also have worked with these technologies. -- What would be an ideal candidate for your group/company? Once the interviewer mentions a few characteristics of the ideal candidate, you can echo by saying you also have some of these characteristics and give a quick example to back it up. -- Sell yourself a bit. This may not work for everyone. I also used the “questions” time at the end of the interview to show my self-driving robotic car and a couple of YouTube videos of the car to the interviewers. I think it worked out surprisingly well because I saw most interviewers were quite pleasantly surprised when they held the actual car in their hands. +- 你能告诉我你的工作背景和你现在的工作吗? +- 你能告诉我贵集团/公司的技术栈和开发方式吗?一旦面试官提到一些编程语言或工具,你可以回应说你也使用过这些技术。 +- 谁是贵集团/公司的理想人选?一旦面试官提到了理想候选人的一些特征,你可以回应说你也有这些特征,并给出一个快速的例子来支持它。 +- 推销一下自己。这可能并不适用于所有人。我还利用面试结束时的“提问”时间,向面试官展示了我的自动驾驶机器人汽车和几段关于这辆汽车的YouTube视频。我觉得效果出奇的好,因为我看到大多数面试官在拿着车的时候都非常惊喜。 -\***\*Stay hydrated\*\***. You will be talking a lot during the interview, and you will be sweating a lot (unconsciously), so you always want to be hydrated at all times. This means refilling your cup after every interview session, and taking a sip whenever you are not writing on the whiteboard. I find caffeine (coffee/tea/Coke) to be quite effective at keeping me at peak performance. +**保持充足的水分**. 在面试过程中你会说很多话,你会(无意识地)出汗很多,所以你总是想要随时补充水分。这意味着每次面试结束后都要把杯子重新斟满,不在白板上写字的时候就喝一小口。我发现咖啡因(咖啡/茶/可乐)在让我保持最佳状态方面非常有效。 ![](https://miro.medium.com/max/2000/0*VsgMcMV6BniWLJgN.jpg) -\***\*Take washroom breaks\*\***. After each interview session, be sure to take a washroom break. Unfortunately, these 45–60 min interview sessions are usually back-to-back with no breaks in between. So be sure to ask for one before the next session starts. You want to be able to walk and stretch your legs a bit and more importantly, wash your hands and face, so you can go to the next interview refreshed. Don’t take too long a break though, because the break time eats into your next 45 minutes. +**记笔记**. 我总是详细记录我的面试。因为大多数面试都是连续进行的,所以你唯一能做笔记的时间就是上厕所的时候。带上你的手机,快速记下一些面试时收到的提问和你的解决方法,这样你就可以在完成一天的面试后让自己回想起来这些。这应该不超过1分钟。 -\***\*Take notes\*\***. I always keep a detailed log of my interviews. Since most of your interview sessions are back-to-back, the only time you can take notes is during bathroom breaks. :) Bring your phone and quickly jot down a few notes of the questions and your approach so you can remind yourself after you are done for the day. This should take no more than 1 min. +**吃一顿清淡的午餐.** 午餐时不吃得过多是很难的,因为许多顶级科技公司都有很棒的免费食物!Facebook甚至还有免费的冰淇淋!虽然你很想在那里品尝所有的免费食物,但你需要记住,**你去那里不是只为了吃一次很棒的免费午餐**,而是去面试,然后**得到这份工作,这样你就可以每天都在那里吃饭了**。 -\***\*Eat a light lunch.\*\*** It is pretty hard not to overeat at lunch because many top tech companies have awesome free food! Facebook even has free ice cream! While it is tempting to try all the free food while you are there, you need to remember \***\*you are not there to eat just once\*\*** but to interview and \***\*get the job, so that you can eat there every single day\*\***! +不要暴饮暴食的两个原因:第一,你需要在下午的会议上保持清醒,而不是感到昏昏欲睡。第二,你需要花大部分时间和你的午餐伙伴聊天。虽然在一些公司(谷歌/Facebook),你的午餐伙伴的反馈不是决定offer的一部分,但很多时候,他们是公司的高层,所以他们的意见可能很重要,而你需要给他们留下好印象。 -Two reasons to not overeat: first, you want to stay alert in the afternoon session and not feel drowsy. Second, you want to spend most of the time chatting with your lunch buddy. While for some companies (Google/Facebook), your lunch buddy’s feedback is not part of the offer decision, many times, they are senior folks in the firms so their opinions may matter and you want to leave a good impression. +**上厕所**。每次面试结束后,一定要去一下洗手间。不幸的是,这些45-60分钟的面试通常是连续的,中间没有休息时间。所以你一定要在下次面试开始前去一趟卫生间。你想要能够走路和伸展一下你的腿,更重要的是,洗干净你的手和脸,这样你就可以神清气爽地去参加下一次面试。不要休息太久,因为休息时间会占用你接下来的45分钟。 ![](https://miro.medium.com/max/1024/0*TBXEsZ8Nnx8eWzk-.jpg) -\***\*Pack some snacks\*\***. On the flip side to the last point, for some of my on-site interviews, either by design or due to time conflicts, the lunch is scheduled at 1:30–2 pm or skipped altogether! I would be so hungry by then and would be running on fumes. So I learned to always pack a granola bar and a few pieces of chocolate with me so that I could take a few quick bites in between interviews. +### 带些零食 + +与上一点相反,在我参加的一些现场面试中,不管是有意安排还是因为时间冲突,午餐时间有时会被安排在下午1:30-2:00,有时甚至会被直接跳过!那时我会饿到几乎撑不住了,所以我学会了随身带一根麦片棒和几块巧克力,这样可以在面试间隙快速吃几口。 + +### 带几份简历 -\***\*Bring a few resumes\*\***: Yes, most interviewers would indeed bring a copy of your resume with them. However, occasionally I encountered interviewers who didn’t bring a copy of my resume with them, so I just gave them a copy. For tech interviews, it probably doesn’t matter that much, but it is a nice gesture. +虽然大多数面试官确实会带上一份你的简历,但偶尔我会遇到没带简历的面试官,所以我会递给他们一份。对于技术面试,这可能并不是特别重要,但这是一个贴心的举动。 -\***\*Post mortem analysis\*\***. After you are done with the interviews for the day, don’t relax right away. While your memory is still fresh, go back to the hotel/home and immediately jot down as much detail about the interviews as you can, including interviewers’ names/background, all the questions asked, your approaches, interviewers’ answers to your questions, etc. Do this electronically (not on a paper notepad) so it is easier to search and archive later. +### 事后分析 -Also, at a later time, revisit all the interview questions, get optimized solutions, and think about how you can improve your performance next time. If you find the interview questions on LC, be sure to tag the questions with the company names, so others can benefit from your experience. +当天的面试结束后不要马上放松,你需要在回到酒店或家里后,趁着记忆还比较新,立刻尽可能详细地记录面试情况,包括面试官的姓名/背景、所有提问、你的应对方法、面试官对你提问的回答等。用电子方式记录(而不是纸质笔记),这样以后更容易搜索和存档。 + +之后,你需要再次回顾所有的面试问题,找到优化的解决方案,并思考如何在下次面试中提升自己的表现。如果在LeetCode上找到相应的面试问题,务必将问题标注上公司名称,以便其他人从你的经验中受益。 ![](https://miro.medium.com/max/2000/0*m4TbZx-yWlVl0HCy.jpg) -The above are just tips and tricks that help you tip the scale in your favor a little. You still need to practice the A&DS problem intensively and learn to quickly identify an approach to each problem. +以上只是一些小技巧,可以稍微增加你的胜算。你仍然需要大量练习算法和数据结构问题,学习快速识别每个问题的解决方法。 -For example, know when do use BFS or DFS in a tree/graph, when to use recursive vs iterative algorithms, when to sort or index data before processing, etc. And ALWAYS know the big O time and space complexity of your algorithms. I started interview preparation in late May, did my first phone interview in late June and finished my last onsite interviews in late-August — three of the most intensive months of my life. +例如,了解在树/图中何时使用BFS或DFS,何时使用递归与迭代算法,何时在处理数据之前进行排序或建立索引等。并且一定要熟知你使用的算法的时间和空间复杂度。我从5月底开始准备面试,6月底进行了第一次电话面试,8月底完成了最后的现场面试——这是我生命中最紧张的三个月。 -If any of you ask me for specific interview questions that I encountered, unfortunately, I can’t disclose them here. But I have tagged all relevant interview questions on LeetCode, as a way to give back to the online community anonymously. I hope you will do this as well after your interviews. +如果你们中有人问我遇到的具体面试问题,很遗憾,我不能在这里透露。但我已经在LeetCode上将所有相关的面试问题标注了公司名称,作为对在线社区的匿名回馈。我希望你们在面试后也能这样做。 -# Step 5. Offer Negotiation and Team Matching +# Step 5. Offer谈判和团队匹配 -## 5.1 Offer Negotiation +## 5.1 Offer谈判 -If you are reading this, you probably have received at least one offer. Wow, congratulations! (If you have not received any offers yet, stop reading right now, and go back to do more LC and interviews! 😜 ) +如果你在阅读这部分,说明你可能已经收到至少一个 offer 了。哇,恭喜!(如果你还没有收到任何邀请,立即停止阅读,回去继续做更多的LeetCode练习和面试吧!😜) ![](https://miro.medium.com/max/480/0*cU5XEYWCmu9FJg8u) -### Components of an Offer Package +### Offer薪酬包的组成部分 ![](https://miro.medium.com/max/624/0*mU6OkvJojAbaIaV5.png) -Source: levels.fyi - -These are the typical components of an offer package of a tech company. I will give a sample of a mid-level software engineer (SWE), typically 3–5 years of experience (YoE). +来源: levels.fyi -- \***\*Sign-on Bonus\*\***: This is the money you get right after you start work, NOT when you sign the offer letter. For example, \$30,000 one time payment. -- \***\*Base Salary\*\***: This is the money that goes into your bank account every month. For example, \$150,000/year. -- \***\*Annual Bonus\*\***: This is a percentage of your base salary, usually 10–30%, given every year. For example, 20%, which is $30,000 for a base salary of $150,000. -- \***\*Stock Options or Stock Grants\*\***: bigger companies tend to give Stocks (called Restricted Stock Units, RSUs) which are worth something at the time of the grant. Startup companies tend to give stock options, which are worth very little at the time of the grant but may have big potential. For example, $300,000 worth of Stock Grant vested over 4 years, so $75,000 is vested every year. -- \***\*Relocation package\*\*** (If you need to relocate): This usually includes - 1. a few weeks of corporate housing for your family - 2. moving of all your belongings - 3. help with selling and buying houses, and optionally - 4. some cash to help with other relocation-related expenses. The relocation package is based on your family composition, location, and level. It is not usually negotiable. +以下是科技公司Offer薪酬包的典型组成部分。我将举一个通常有3-5年的工作经验(YoE)的中级软件工程师(SWE)的例子。 -\***\*Annualized Total Compensation (TC)\*\*** This is the one number that makes all the offer packages comparable. +- 签约奖金: 这是你开始工作后立即得到的钱,而不是在你签署聘用合同时。例如,一次性支付$30,000。 +- 基本工资: 这是每个月进入你银行账户的钱。例如,每年$150,000。 +- 年度奖金: 这是你基本工资的一个百分比,通常为10-30%,每年发放一次。例如,20%,对于$150,000的基本工资来说就是$30,000。 +- 股票期权或股票奖励: 大公司倾向于给予股票(称为受限制股票单位,RSUs),在授予时有一定价值。初创公司倾向于给予股票期权,在授予时价值较低但有很大潜力。例如,价值$300,000的股票奖励,分四年归属,每年归属$75,000。 +- 搬迁补助(如果你需要搬迁): 通常包括: + 1. 几周的公司住房供你和你的家庭使用 + 2. 搬运你所有的物品 + 3. 帮助买卖房屋,并且可选地 + 4. 一些现金以帮助其他搬迁相关的费用。搬迁补助取决于你的家庭构成、位置和级别。通常是不可协商的。 +- 年度总薪酬(TC): 这是使所有Offer薪酬包可以进行对比的一个数字。 -TC = Base Salary + Annual Bonus + Annual Stock Grants+ amortized Sign-on bonus (Assume you amortize the sign-on bonus over 3 years) +TC = 基本工资 + 年度奖金 + 年度股票奖励 + 分摊的签约奖金(假设你将签约奖金在3年内分摊) -TC of our mid-level SWE +我们中级SWE的TC = $150k + $30K + $75K + $30K / 3 = $265,000 -\= $150k + $30K + $75K + $30K / 3 = \$265,000 +注意,搬迁补助不被视为TC计算的一部分,因为在预期情况下你大概会花掉大部分(如果不是全部)搬迁补助。 -Note that the relocation package is not considered part of TC calculation, as it is expected you will be spending most, if not all, of the relocation package. +### 知道你的技术水平所对应的等级 -### Know Your Level +即使你知道自己的求职目标,公司也可能会根据公司的具体情况对你进行面试。例如,一个4级工程师可能会选择谷歌的L3或L4级、Facebook的E3或E4级或者微软的59-62级的面试。 -Even though you know your YoE, the company may interview you at a certain level that is company-specific. For example, a 4 YoE engineer may interview at L3 or L4 at Google, E3 or E4 at Facebook, and Level 59–62 at Microsoft. - -\***\*Ask the recruiter what level are you interviewing\*\*** for. But this may not be the level you will be offered the job at. For example, you may interview at Facebook at E4, in the end, the hiring committee may decide that your performance is not stellar enough for an E4, but good enough to receive an offer for E3. So \***\*ask the recruiter again what level is your job offer for\*\***. With this level, you can find out the expected value and range of TC. (see below) +**询问招聘人员你面试的是哪个级别的岗位**,但这可能不是你得到这份工作的水平。例如,你可能在Facebook的E4面试,最终,招聘委员会可能会认为你的表现不足以达到E4,但足以获得E3的offer。 所以**再次询问招聘人员**你的工作offer是什么级别。通过这一层,你可以找到TC的期望值和范围。(见下文) ![](https://miro.medium.com/max/1025/1*iSvZ60-cnf0qTPfwEGDHCw.png) -### Know Your Market Value +### 知道你自己在市场上的价值 -You can’t negotiate if you don’t know your prevailing market value. For years, companies have kept compensation information very secretive, so the candidates have suffered HUGE information disadvantage. +如果你不知道你的市场价值,你就无法有效和目标公司进行谈判。多年来,公司一直对薪酬信息保密,因此候选人在信息方面处于巨大的劣势。 -Fortunately, in recent years, the compensation information has been democratized, with many websites crowdsourcing from many candidates and then presenting the anonymized compensation data by level, job function and location. One well-known site is [levels.fyi][40]. +幸运的是,近年来薪酬信息已经逐渐透明化,许多网站从许多候选人中收集到必要的信息,然后按级别、工作职能和地点呈现匿名的薪酬数据。一个著名的网站是[levels.fyi][40]。 ![](https://miro.medium.com/max/917/1*LCu-2A8IXNYVfe-m9t5AFQ.png) -Top Compensation for 3–5 YoE SWE. Source: levels.fyi +3-5年SWE工作经验的最高薪酬。来源:levels.fyi ![](https://miro.medium.com/max/912/1*9pETieZ01nFFBNkjoz7MbA.png) -Top Compensation for 5+ YoE SWE. Source: levels.fyi +5年以上SWE工作经验的最高薪酬。来源:levels.fyi -As you can see above, all the top-paying jobs are in the San Francisco Bay Area (Bay Area). SWEs with 3–5 YoE can earn as high as $290,000 TC, and SWEs with 5+ YoE can earn over $400,000. +正如你在上面看到的,所有高薪工作都在旧金山湾区(Bay Area)。拥有3-5年工作经验的SWEs可以获得高达29万美元的TC,拥有5年以上工作经验的SWEs可以获得超过40万美元的TC。 -For any non-Bay Area engineers, total compensation of $300,000–$400,000 may be eye-popping. But remember that Bay area housing is THE most expensive metro area in the US. The median housing price of Palo Alto, CA is $2.8M (source: Zillow.com), and of San Francisco Metro Area (source: [censusreporter.com][41]) is $1.1M. For preciously this reason — lots of people are paid at a much higher rate. +对于任何非湾区的工程师来说,30万至40万美元的总薪酬可能令人瞠目结舌。但请记住,湾区是美国房价最高的区,因为很多人的工资要高得多。加州帕洛阿尔托的房价中位数为280万美元(资料来源:Zillow.com),旧金山都会区(资料来源:[censusreporter.com][41])为110万美元。 -As a comparison, the median home prices of Manhattan, NY is $1.2M (source: Zillow.com), and that of New York/New Jersey Metro Area is only $440K. (source: [censusreporter.com][42]) +相比之下,纽约曼哈顿的房价中位数为120万美元(数据来源:Zillow.com),而纽约/新泽西都会区的房价中位数仅为44万美元。(来源:[censusreporter.com] [42]) -Armed with levels.fyi, your level (obtained from the previous step) and the company name, you can clearly see the average reported TC as well as its range. For example, for the Google L4 SWE in the Bay Area, the average reported TC is about $260K, with a range from $200K to $320K. So if you received a Google L4 offer in the low $200K, then you know you have room to negotiate. +结合在levels.fyi上筛选出你的水平(从上一步获得)和公司名称,你可以清楚地看到offer的平均TC及其范围。例如,对于旧金山湾区的谷歌L4 SWE,offer的平均TC约为26万美元,范围从20万美元到32万美元。所以,如果你收到了只有20万美元的谷歌L4的offer,那么你就知道你还有讨价还价的空间。 ![](https://miro.medium.com/max/1055/1*de6XA2-BzEbzRDASwdWEXA.png) -### Startups +### 初创公司 ![](https://miro.medium.com/max/285/0*m0izqd9brSBsnkdr) -Levels.fyi is a great tool to compare offers between more mature companies (public or private), as the equity component of the comp can be evaluated in dollar terms with higher certainty. +Levels.fyi 是一个很好的用来比较更成熟公司的offer(无论是上市公司还是私营公司)的工具,因为这些公司的薪酬中的股票部分可以更有把握地用美元来评估。 -But for early-stage startup companies, you can not find reliable data points on Levels.fyi. Very often you are given either +但是对于早期的初创公司,你在 Levels.fyi 上通常找不到可靠的数据,这往往是因为以下两种情况: -1. a percentage of the company stocks or -2. given a certain number of stock options. The company recruiter or the CEO may tell you that even though the value of your equity component is worth very little right now, it may work 20x–50x more if the company goes IPO in 3–5 years. +1. 一定比例的公司股票,或者 +2. 一定数量的股票期权。公司招聘人员或CEO可能会告诉你,虽然你现在的股权价值很低,但如果公司在3-5年内上市,它的价值可能会增长20-50倍。 -In reality, these equity components are hard to evaluate, are extremely non-liquid with no monetary value for years to come, and indeed go to zero value when [90% of all startups fail][43]. (source: Forbes). +实际上,这些股权成分很难评估,极其缺乏流动性,多年来没有任何货币价值,实际上当[90%的初创公司失败时][43](来源:福布斯),它们的价值确实会归零。 -I received a few offers from early-stage startup companies. The typical package is light on cash (i.e. low base salary and bonus) and heavy on equity (lots of options with a huge potential payout…… or nothing). This makes sense, as most early-stage startups do not make a profit, and any cash salary/bonus they pay out depletes their cash on hand or, in Venture Capital (VC) speak, burns up their runway. +我收到了一些来自早期初创公司的offer,他们大多存在典型的薪酬包现金部分较少(即基本工资和奖金较低),而股权部分较重(很多期权,潜在回报巨大……或者一无所有)的特点。这很符合常理,因为大多数早期初创公司并不盈利,他们支付的任何现金工资/奖金都会消耗他们手头的现金,或者用风险投资(VC)的术语来说,烧光他们的资金。 -Even though the startups I received offers from do really exciting work and the prospects look very promising — one had Google Ventures as a backer — I ended up choosing Google because I need the certainty and stability of a large company. After all, I'll have a college-bound kid soon. I can’t afford to join a startup for a few years only to see it fail and have my equity component wiped out. +虽然我收到的这些初创公司offer确实做着令人兴奋的工作,前景看起来非常有希望——其中一个公司还有谷歌风投的支持——但最终我选择了谷歌,因为我需要大公司的确定性和稳定性。毕竟,我的孩子即将上大学。我不能承担加入初创公司几年后看到它失败而我的股权部分被抹去的风险。 -However, if I were younger and had no kids, I would certainly work for a startup and try to hit a home run. If I failed, I wouldn't be under pressure to support the family and still have enough time to start over. If my wife made enough income to support the expenses of our entire family, then I could also work for startups for its potential upside. In finance speak, this is called [diversification][44] — by combining risky stocks with safer stocks or bonds, you can actually achieve higher [risk-adjusted returns][45]. +然而,如果我年轻且没有孩子,我肯定会去初创公司工作,尝试一鸣惊人。如果我失败了,我不会有养家的压力,还有足够的时间重新开始。如果我的妻子赚的钱足以支付我们全家的开销,那么我也可以去初创公司工作,追求其潜在的上升空间。在金融术语中,这称为[多元化][44]——通过将风险较高的股票与较安全的股票或债券结合起来,你实际上可以实现更高的[风险调整后收益][45]。 -### Don’t Accept an Offer on the First Call +### 不要在第一次电话联系中接受Offer ![](https://miro.medium.com/max/740/0*dhK83JNgpbSsRcI-.jpg) -When you are first offered a position, the recruiter always tells you the offer details (base salary, bonus, equity grants, etc) over the phone. This is called a “Verbal Offer”. What you want to do on the first call is to thank the recruiter, write down all the offer details, repeat it back to the recruiter to confirm, and ask them to send you this offer details in an email. Then hang up. +当你第一次通过面试被发放Offer时,招聘人员通常会通过电话告诉你 Offer 的详细信息(基本工资、奖金、股权奖励等)。这被称为“口头 Offer”。你在第一次电话中需要做的是感谢招聘人员,记下这个 Offer 所有的详细信息,重复一遍以确认,并请他们通过电子邮件发送这些详细信息。然后挂断电话。 -Remember, DO NOT accept the job on the spot. (If this is your dream job, you can jump up and down AFTER you hang up the phone.) Sometimes, the recruiter will refuse to send you anything in writing or email. If this is the case, then email them with the offer details you just wrote down and ask them to confirm whether what you heard is correct. They'll usually respond affirmatively. +记住,不要当场接受工作。(如果这是你的梦想工作,可以在挂断电话后跳起来庆祝。)有时候,招聘人员会拒绝以书面或电子邮件形式发送给你。如果是这样,那么请你将刚刚写下的 Offer 详细信息发送给他们,并询问你所听到的是否正确。他们通常会确认。 -This is important because after something is in writing, the recruiter can not easily back out of what they just told you over the phone. +这很重要,因为一旦有书面记录,招聘人员就不容易收回他们在电话中告诉你的内容。 -Many times, recruiters will push you to verbally accept the offer right away over the phone or give you a 24-hour deadline to accept. DO NOT BITE! You should always try to negotiate for a better offer. +很多时候,招聘人员会催促你立即在电话中口头接受 Offer,或者给你一个 24 小时的接受期限。不要上钩!你应该总是尝试争取更好的 Offer。 -### Offer Negotiation — Multiple Offers +### Offer 谈判——当你有多个Offer的时候 ![](https://miro.medium.com/max/293/1*I3BYbnGWZCkQOJKaxwGSdA.png) -Offer negotiation is like playing high stakes poker — indeed, we are talking about tens of thousands of dollars here — and it is both exciting and stressful. For some people like myself, it can also be scary. However, armed with information from level.fyi, you can call a recruiter’s offer bluff, if that offer is too low. - -To have leverage in the offer negotiation process, it helps to have another strong offer, or in poker speak, a strong hand. Many recruiters are very willing to try to match competing offers. They can present the competing offer to the hiring/compensation committee as strong justifications for putting together a better offer for you. +Offer 谈判就像玩高赌注的扑克——毕竟,我们谈的是成千上万的美元——这既令人兴奋又有压力。对于像我这样的人来说,这也可能很让人害怕。不过有了 levels.fyi 的信息后,如果那个 Offer 太低的话,你可以揭穿招聘人员的虚张声势。 -In this case, you can try to let these companies bid up your compensation. This is quite normal, as bidding happens every day around us when a commodity is in demand, such as in the stock markets, eBay, and Google Ads. The bidding process ensures the commodity is valued at a fair market price. +在 Offer 谈判过程中,有一个强有力的 Offer 或者说一副强有力的底牌是有帮助的。很多招聘人员很愿意尝试匹配竞争对手的 Offer。他们可以将竞争对手的 Offer 呈递给招聘/薪酬委员会,作为提出更好 Offer 的强有力理由。 -### Offer Negotiation — Just One Offer +在这种情况下,你可以尝试让这些公司竞标你的薪酬。竞标每天都在我们身边发生,比如在股票市场、eBay 和 Google Ads 中,当某种商品有需求时,这很正常。竞标过程确保商品以公平的市场价格展示它的价值。 -Even if you don’t have a strong hand — i.e. only one offer or only low offers — you can tell the recruiter that you are really excited about the company, but your salary expectation is actually $XYZ. The recruiter will probably ask you to justify this figure, and you can say it is based on figures from levels.fyi, or your friends/co-workers who have similar YoE and their TC is $XYZ. +### Offer 谈判——当你只有一个Offer -If you present yourself professionally, it is very likely the initial offer will be bumped up somewhat. It is highly unlikely that the company will retract its original offer simply because you try to negotiate. After all, the company invests a lot of effort to find a qualified candidate, so it doesn’t want to lose a good candidate over a small increase. So \***\*you have nothing to lose by asking for more comp, nicely\*\***. +即使你没有底牌——即只有一个 Offer 或者仅有比这个 Offer 更低的 Offer——你也可以告诉招聘人员你对这家公司非常感兴趣,但你的薪资期望实际上是 $XYZ。招聘人员可能会要求你证明这个数字,你可以说这是基于 levels.fyi 的数据,或者是你朋友/同事的相似年资和他们的总薪资是 $XYZ。 -### Offer Negotiation — Money is Not the Only Thing on the Table +如果你表现得专业,很有可能最初的 Offer 会有所提高。公司很不可能因为你试图谈判就收回其原始 Offer。毕竟,公司投入了大量精力寻找合格的候选人,所以他们不想因为小幅增加而失去好候选人。所以你礼貌地要求更多薪酬是没有任何损失的。 -Remember \***\*money is not the only thing you can negotiate\*\***. Anything that the company can offer you is on the negotiation table. +### Offer 谈判——可以不只是谈钱 +记住,**不仅仅是薪酬可以谈判**。公司可以提供的任何东西都在谈判桌上。 -For example, you can ask to work for a different group (say a core group rather than support related group), a different title (say Senior Software Engineer instead of Software Engineer), a different job function (say a research engineer rather than a software engineer), more Paid Time Off days, flex time to work from home, or a better relocation package. +例如,你可以要求在不同的组工作(比如核心组而不是支持组)、不同的职称(比如高级软件工程师而不是软件工程师)、不同的工作职能(比如研究工程师而不是软件工程师)、更多的带薪休假天数、灵活的在家办公时间,或更好的搬迁打包。 -Of course, this varies heavily from company to company. Larger companies may be less flexible, but smaller companies that may not be able to match the monetary compensation of larger companies may be more willing to consider these alternative demands. Again, it doesn’t hurt to ask, if you do it nicely. +当然,这在不同公司之间差异很大。大公司可能不那么灵活,但较小的公司可能无法匹配大公司的货币补偿,可能更愿意考虑这些替代要求。再次强调,如果你礼貌地提出要求,是没有坏处的。 -### Offer Negotiation — Don’t Be Too Greedy +### Offer 谈判——不要太贪心 -After a few rounds of back-and-forth with the recruiter, if you sense that there is not much more room to negotiate, stop asking for more. Recruiters at larger firms see this every day, and probably won't mind too much. For smaller firms, the recruiter may be working directly with your hiring manager or even the owner/founder. If you drive your bargain too hard, you may be perceived as too greedy. So even if they hire you, they may view you negatively. \***\*Know when to be content\*\***. +经过几轮与招聘人员的来回交谈后,如果你感觉没有太多空间可以谈判了,就停止要求更多。大公司中的招聘人员每天都会见到这种情况,可能不会太介意。但对于较小的公司,招聘人员可能直接与你的招聘经理甚至是老板/创始人合作。如果你讨价还价太激烈,可能会被认为太贪婪。因此,即使他们雇用你,他们可能会对你产生负面看法。**知道何时收手。** -### Offer Stalling Tactics +### Offer 拖延策略 ![](https://miro.medium.com/max/650/0*m5gcnqcx9RKhAzZj.png) -If you are not quite happy with any of the offers after negotiation, you should try to delay the acceptance of the offers. This can happen if some offers’ job functions are very attractive, but comps are too low, while other offers’ comps are nice, but you don’t like the job functions. +如果在谈判后你对任何 Offer 都不太满意,你应该尝试推迟接受这些 Offer。这可能发生在某些 Offer 的工作职能非常有吸引力,但薪酬太低,而其他 Offer 的薪酬很好,但你不喜欢工作职能的情况下。 -Delaying an offer allows you more time to interview and land that perfect offer. But it does have risks, as the open position may be filled anytime. But for large tech firms, that risk is minimal, as they are always hiring. If you need to delay an offer, here are some tactics to try. (Disclaimer: I have not tried all of them, some of them have been suggested to me.) +推迟一个 Offer 可以让你有更多时间进行面试,获得那个完美的 Offer。但这确实有风险,因为职位可能随时被填满。但对于大科技公司,这种风险很小,因为他们总是在招聘。如果你需要推迟一个 Offer,以下是一些策略。(免责声明:我没有尝试过所有这些策略,有些是别人建议的。) -- Meet with the team/peers: Request a call, coffee, or dinner to meet the rest of the team or learn more from peers. This is a great way to not only show interest but also get a strong signal on the company/team culture. -- Request Product Demos: Requesting a product demo is another great way to show interest. It’s also a good way to assess the technical challenges, the product roadmap, and how product-oriented the company is. You can usually combine this with meeting the team for lunch. -- Ask various Stock/Option related questions, such as the company’s current valuation, last funding round, company’s exit plans/strategies, and option exercise schedule, etc +- 与团队/同事见面:请求一次通话、一起喝咖啡或共进晚餐,以了解团队其他成员或同事的更多信息。这不仅是展示兴趣的好方法,也是了解公司/团队文化的有力信号。 +- 请求产品演示:请求对方进行产品演示是展示兴趣的另一种好方法。这也是评估技术挑战、产品路线图以及公司产品导向程度的好方法。你通常可以将此与团队共进午餐结合起来。 +- 询问各种股票/期权相关问题,例如公司的当前估值、最近的融资轮次、公司的退出计划/策略以及期权行权计划等。 -These above strategies work best for most companies. For some large tech companies, once they decide to give you an offer, the offer is usually good for at least a few months, because you have met their technical bar, and they would be happy to hire a good SWE anytime. Your recruiter may not be willing to tell you this, as they want to close on you ASAP, but you can find out from other sources, i.e. Google Search and Blind App. +这些策略对大多数公司都很有效。对于一些大科技公司,一旦他们决定给你 Offer,通常这个 Offer 至少会有效几个月,因为你达到了他们的技术门槛,他们会随时愿意雇佣一个优秀的软件工程师。你的招聘人员可能不愿意告诉你这一点,因为他们希望尽快敲定你,但你可以通过其他渠道了解,例如 Google 搜索和 Blind App。 -Lastly, remember all recruiters want to see you get hired by the company. Being able to close on a candidate (i.e. convert a qualified candidate to an employee) is one of their performance metrics, which is tied to a recruiter’s performance bonus. So \***\*treat your recruiter as your advocate, not your adversary\*\***. +最后,记住所有招聘人员都希望你被公司录用。能够敲定一个候选人(即将合格的候选人转化为员工)是他们的绩效指标之一,与招聘人员的绩效奖金挂钩。所以**把你的招聘人员视为你的支持者,而不是对手**。 -## 5.2 Team Matching/Selection +## 5.2 团队匹配/选择 -\***\*Don’t choose a job simply because it pays the most right now.\*\*** While compensation is an important factor in your offer decision process, what may be more important is how a job impacts your career. I will discuss how to select a company/team that will maximize your career potential in the long run. +**不要仅仅因为一份工作现在支付最高工资就选择它。** 虽然在你决定是否接受offer的过程中薪酬是一个重要因素,但更重要的可能是这份工作对你职业生涯的影响。我将在下面讨论如何选择一家公司/团队,以最大化你职业生涯的潜力。 -### Team Matching Process +### 团队匹配过程 ![](https://miro.medium.com/max/922/0*tD7uB2HX3Adlzhsm.png) -For many companies (including Apple/Microsoft/many other companies), you will be interviewing with a few specific teams. And when you are offered the job, it will be for one of those teams. +对于许多公司(包括苹果、微软和许多其他公司),你将与几个特定的团队进行面试。当你获得这份工作时,你将只会参与其中一个团队的工作。 -However, for some companies such as Google and Facebook, they interview most candidates as general SWEs and only try to match a candidate to a team after that candidate is extended an offer. Since I have only experienced the team matching process with these two companies, I will discuss my experience below. +然而,对于一些公司,如谷歌和Facebook,他们会将大多数候选人作为通用的软件工程师(SWE)进行面试,并且只有在决定向该候选人发放offer后才尝试将其匹配到一个团队。由于我只经历过这两家公司的团队匹配过程,下面我将谈一谈我的经验。 -Facebook extends a firm written offer first and then match you to a team. Team matching can also happen before you join, as you take calls from hiring managers, or after you join, during the first 4–6 weeks of orientation/boot camp stage. The pro of this process is that the candidate knows that their offer is firm. The con is that you run the risk of joining then not being able to find a team you like during boot camp. But I was told by my Facebook friends that this situation is highly unlikely. +Facebook会先发出一个正式的书面offer,然后再将你匹配到一个团队。团队匹配可以在你加入之前进行,例如你与招聘经理通话时,或者在你加入后,在前4-6周的培训/入职阶段进行。这一过程的优点是候选人知道他们的offer是确定的。缺点是你可能会面临在入职培训期间找不到喜欢的团队的风险。不过我在Facebook的朋友告诉我,这种情况极不可能发生。 -Google, on the other hand, works very differently. They do not run a long orientation/boot camp like Facebook. They first extend you a verbal offer and then require you to be matched to a team \***\*before\*\*** extending a formal written offer. Even after you are matched with a team, this offer can be rejected/modified by the hiring committee. Even the final comp can be revised from the initial verbal offer by the compensation committee. +谷歌的做法则非常不同。他们不像Facebook那样进行长时间的培训/入职流程。他们首先会给你一个口头offer,然后要求你在**发出正式的书面offer之前**匹配到一个团队。即使在你被匹配到一个团队之后,这个offer也可能会被招聘委员会拒绝或修改,甚至是最终的薪酬,也可能由薪酬委员会在最初的口头offer基础上进行调整。 -I have read, from many online posts, that this is a long and arduous process. As I found out personally, the team matching process was indeed long and frustrating and took 1.5 months. At one point, I seriously thought it would not work out and wanted to join another company instead. +我从许多帖子中了解到,这个过程既漫长又艰难。就我个人经历来看,团队匹配过程花了我1.5个月,这确实漫长且令人沮丧。有时候我真的认为我无法完成团队匹配过程,并想加入另一家公司。 -Had Google extended me a firm written offer first like Facebook, it would’ve been much less stressful, because I would've known for certain I was going to work for Google and all I had to do was to find a team. Luckily, things worked out for me as I was finally matched with a group of my choice, and the offer was approved by various committees shortly after that. +如果谷歌像Facebook那样先给我一个正式的书面offer,这会为我减少很多压力,因为我会明确知道自己将要为谷歌工作,只需找到一个团队即可。幸运的是,事情最终对我来说很顺利,我终于与一个自己选择的小组匹配,之后不久offer也被各个委员会批准了。 -### How to Select a Team +### 如何选择一个团队 ![](https://miro.medium.com/max/1540/0*QValU2nlepbet2yU) -Here are the questions that I ask myself during the interview or offer stage. You don’t need to ask these exact questions to the interviewers, but you want to somehow extract the answers to these questions from your interviews/conversations with the companies/groups. +这里有一些我在面试期间或录用阶段问自己的一些问题。你不需要问面试官这些问题,但你需要从你的面试中,或者从与公司和团体的对话中提取出这些问题的答案。 -1. \***\*Which group will I be joining?\*\*** I wanted to join one of the “core” groups of a company – a group that the company had put a lot of commitment and resources behind. These are often its flagship product groups or high growth groups. Working in these groups offers stability and/or growth. -2. \***\*What types of work will I be doing for this company/group?\*\*** I looked for work experiences that were transferable in my later career. I would prefer to work with publicly available tools and technologies, and not so much with the company’s proprietary technologies. For example, if I was to work on an ad recommendation machine learning system, I am sure I could easily find another company that also wanted to improve its ad/product recommendation system. However, I would not be so interested to work on automating some internal processes with a company's proprietary scripting language. -3. \***\*What will I be learning by working for this company/group?\*\*** Work is a two-way street. I wanted to be able to contribute a lot to my company. At the same time, I wanted to learn a ton from my work, so that my skill sets could be in high demand whenever I look for my next job. I believe AI/ML, Computer Vision, Cloud computing, Self-driving car, and AR/VR skills will be in high demand in the future, so I wanted to learn some of these skills in my next job. -4. \***\*Do I have a passion for this job?\*\*** If you don’t have a passion for what you do, it doesn’t matter how much the job pays – you won’t be happy and won’t be putting in that 120%. I was passionate about quantitative finance because it was cool to see math and technology transforming a whole industry. But after 10+ years, my passion is now in AI/ML. It is really awesome and magical that you don’t have to tell a computer exactly how to do something. All you have to do is to feed it data and it will figure out how to do it better than someone would with code. -5. \***\*Do I like my manager and my peers? And do they like me?\*\*** You want a manager that appreciates you and will support you in your new job. You also want to enjoy being around your teammates, since you will be with them for 8+ hours every single day, even longer than when you are with your family! +1. **我将加入哪个组?** 我想加入公司的一个“核心”小组——公司为这个小组大量投入资源,这样的小组通常是它的旗舰产品集团或高增长集团。在这些团队中工作可以得到稳定性和成长。 +2. **我将为公司或小组做什么类型的工作?** 我寻找的是能在我以后的职业生涯中应用的工作经验。我更喜欢使用公开可用的工具和技术,而不是使用公司的专有技术。举个例子,如果我在做一个广告推荐机器学习系统,我相信我很容易就能找到另一家想要改进其广告/产品推荐系统的公司。但是,我对使用公司专有的脚本语言自动化一些内部流程不太感兴趣。 +3. **我能在这家公司/小组里学到什么?** 工作是双向选择,能为双方都带来价值的。我希望能够为我的公司做出很大贡献,与此同时,我想从工作中学到很多东西,这样当我找下一份工作的时候,我掌握的技能就能让我很受欢迎。我相信AI/ML、计算机视觉、云计算、自动驾驶汽车和AR/VR技能在未来会有很大的需求,所以我想在下一份工作中学习这些技能。 +4. **我对这份工作有热情和激情吗?** 如果你对自己的工作没有激情,那么不管这份工作给你多少薪水,你都不会快乐,也不会投入120%的精力。我对量化金融充满热情,因为看到数学和技术改变整个行业是很酷的。但在10多年后,我现在对AI/ML充满热情。你不需要告诉电脑该怎么做,这真是太棒了,太神奇了。你所要做的就是给它提供数据,它会找出比别人用代码做得更好的方法。 +5. **我喜欢我的领导和同事吗?他们喜欢我吗?** 想要一个欣赏你并在新工作中支持你的领导。你也想享受和队友在一起的时光,因为你每天和他们在一起的时间超过8个小时,甚至比和家人在一起的时间还要长! -Many times, not all of the above can be satisfied. Then you have to weigh the pros and cons of each. But if one of the above gives you a red flag, I would seriously consider passing on that position. +很多时候并不是所有这些问题都能得到让你满意的答案,然后你必须权衡利弊。但如果以上任何一项给了你一个危险的信号,我会认真考虑放弃那个职位。 -I ended up choosing to go to Google’s Pixel Phone’s camera group because it offers three things that I am very passionate about: Computer Vision, Machine Learning, and Hardware. These are exactly what my robotic self-driving car project was all about! Also from what I learned, Google is now deeply committed to its hardware and smart home strategies, where the Pixel Phone will be a central part of that ecosystem. +我最终选择了谷歌Pixel Phone的相机组,因为它提供了我非常感兴趣的三样东西:计算机视觉、机器学习和硬件,这正是我的机器人自动驾驶汽车项目的全部内容!此外据我所知,谷歌现在正致力于其硬件和智能家居战略,Pixel手机将成为该生态系统的核心部分。 -## Final Thoughts +## 结语 ![](https://miro.medium.com/max/445/1*ehMi2Z73NL4MxN6alUr1yw.png) -Thanks for reading this far. It was quite a journey for me these last 6 months. Through my personal projects and intensive interview preparation, I believe I am now a better engineer (or at least a better interviewee. ;-) What I presented are my own lessons and experiences. +感谢你读到这里。在过去的6个月里,我经历了一段漫长的旅程。通过我的个人项目和密集的面试准备,我相信我现在是一个更好的工程师(或者至少是一个更好的面试者 ;-)。在这篇文章中,我讲述了自己的经验和教训。 -I have found that A&DS questions are the core of any tech interview, and there is no shortcut to getting better at them except through practicing more LC questions. Once you are decent at A&DS and System Design questions, the suggestions that I presented in this article should help you tip the scale in your favor. +我发现数据结构和算法是任何科技面试的核心,除了练习更多的LeetCode上的问题外,没有捷径可以做得更好。一旦你对数据结构与算法和系统设计问题有了良好的了解,我在这篇文章中提出的建议应该会帮助你做些更有利于你的事情。 -I recommend bookmarking this article as you will need to refer back to it in the next 2–6 months as your job search progresses. Some of the tips in the later stages won’t make much sense until you actually get to that stage. For example, you may need to do a few phone interviews to appreciate the tips presented in Step 4, and you certainly shouldn’t be thinking about Step 5 offer negotiation before you get any offers. +我建议你把这篇文章收藏起来,因为在接下来的2-6个月里,随着你找工作的进展,你会需要回顾这篇文章。在你真正进入某一阶段之前,那之后的阶段中所需要的一些技巧并没有多大意义。例如,你可能需要进行几次电话面试来理解第四步中提出的建议,在你得到任何offer之前,你当然不应该考虑第五步的offer谈判。 -If you are going through interviews, please let me know which of my tips worked well or not so well by leaving a comment below, so that others will benefit as well. Please also suggest new tips in the comments as well. Thanks! +如果你正在参加面试,请在下面留言,让我知道我的建议哪些有效,哪些不太有效,这样其他人也会受益。也欢迎在评论中提出新的建议,谢谢! -## Resources +## 一些使用到的资源 -Here is an appendix of resources (in alphabetical order) that I used in my job hunting process. Hope you will find them helpful as well. +以下是我在求职过程中使用过的资源的附录(按字母顺序排列)。希望你也会发现它们对你有帮助。 -[\***\*Blind\*\***][46]: This is an app that allows employees of varies companies (mostly tech) to post questions and answers anonymously. People generally discuss career decisions, company culture, interviews, and compensation, etc. +[**Blind**][46]: 这是一个允许不同公司(主要是科技公司)的员工匿名发布问题和答案的应用程序。人们通常会讨论职业决策、公司文化、面试和薪酬等问题。 -I found this platform to be both good and bad. It is good because you get more candid answers/responses and sometimes inside information. It is bad because some people write offensive responses due to the anonymity, and the environment can be toxic at times. You have been warned. +我发现这个平台有好有坏。好的地方是你会得到更坦诚的回答/回应,有时还会得到内幕消息。坏的地方是有些人会因为匿名而写下冒犯性的回复,这样的环境有时可能是有害的。我已经警告过你了。 ![](https://miro.medium.com/max/730/0*r7S6egJR6P9O9WP7) -[\***\*Coursera\*\***][47]: Learn about the subjects you are passionate about. It is free or for a very nominal fee. I took both ML and DL courses there. +[**Coursera**][47]: 学习你感兴趣的科目。它是免费的,或者只收取象征性的费用。我在那里学了ML和DL课程。 ![](https://miro.medium.com/max/512/0*EcegqF8UG1uE9qGO) -[\***\*DeepLearning.ai\*\***][48] \***\*and** [Workera**.ai**][49]\*\* +[**DeepLearning.ai**][48] **and** [**Workera.ai**][49] -- Take the 5 course Deep Learning series, if you are interested in Deep Learning techniques in computer vision (CV) or natural language processing (NLP) -- Pass their screening test to be referred to hiring managers in ML groups in top tech companies +- 如果你对计算机视觉(CV)或自然语言处理(NLP)中的深度学习技术感兴趣,参加5门课程的深度学习系列课程。 +- 通过筛选测试,被推荐给顶尖科技公司ML团队的招聘经理 -[\***\*Elements of Programming Interviews\*\***][50] \***\*Book:\*\*** This is another excellent interview preparation book, similar to the CtCI book. But it is more geared towards experienced engineers, while CtCI can be read by beginners who have little algorithms background. +[**Elements of Programming Interviews**][50] **Book:** 这是另一本优秀的面试准备书,类似于CtCI书。但它更适合有经验的工程师,而CtCI可以被没有多少算法背景的初学者阅读。 ![](https://miro.medium.com/max/350/0*5aU2C4jyITY0A8-D.jpg) -[\***\*GeeksForGeeks\*\***][51]: Like LeetCode, this is another website with very comprehensive A&DS questions and solutions. This site is free, and sometimes contains interview questions not found in LeetCode. +[**GeeksForGeeks**][51]: 这是另一个与LeetCode类似的有非常全面的A&DS问题和解决方案的网站。这个网站是免费的,有时会包含在LeetCode中找不到的面试问题。 ![](https://miro.medium.com/max/667/0*ZTMjAXFNZJnxw5wM.png) -[\***\*Glassdoor\*\***][52] +[**Glassdoor**][52] ![](https://miro.medium.com/max/589/1*qVt2_-4lyAnBgBxpQ7JV5A.png) -- Check a company’s employee reviews -- Find previous interview questions -- Set up job alerts to receive new job updates +- 查看公司的员工评价 +- 找到之前的面试问题 +- 设置工作提醒以接收新的工作更新 -[\***\*Google Search\*\***][53]: The starting point for ANY question in life. Do I need to say more? +[**Google Search**][53]: 生活中**任何**问题的起点。我还需要多说吗? ![](https://miro.medium.com/max/1280/0*foG6evRh08Khr-wZ.jpg) -\***\*Internal Employees:\*\*** Always try to reach out to your friends, or friends of friends, that work in the companies you want to apply to. They will be your most effective informants as well as advocates. [Connect with me on LinkedIn][54], and if you are a good fit, I would be happy to refer you to Google myself, or one of my friends who work at other top tech firms. +[**Internal Employees:**] 总是试着联系你的朋友或者朋友的朋友,如果他们在你想申请的公司工作。他们将是你最有效的线人和支持者。如果你适合这份工作,[在领英上联系我][54], 我很乐意把你推荐给谷歌,或者我在其他顶尖科技公司工作的朋友。 -[\***\*LeetCode\*\***][55] +[**LeetCode**][55] -- Practice A&DS questions -- Use LeetCode Premium ($35/month or $99/year with coupon) to find past interview questions asked by a given company. I recommend paying for the annual membership. Just think of it as a gym membership for your coding brain. +- 练习A&DS问题 +- 使用LeetCode高级版(35美元/月或99美元/年带优惠券)查找给定公司过去的面试问题。我建议你付年费。就把它想象成你的编程大脑的健身房会员吧。 -[\***\*Level.fyi\*\***][56]: This site lists crowdsourced salary information by company, by seniority levels, by location, and by job function, so you will know if you are getting a fair offer from the companies. Of course, this works well only for larger companies, as there are more data points. +[**Level.fyi**][56]: 这个网站按公司、资历级别、地点和工作职能列出了众包工资信息,这样你就知道你是否从公司得到了一个公平的报价。当然,这只适用于大公司,因为大公司往往有更多的数据来源。 ![](https://miro.medium.com/max/560/0*y6YcevhJEHIeMO0-.jpg) -[\***\*LinkedIn\*\***][57]: +[**LinkedIn**][57]: -- Lookup people’s professional and educational background -- Turn on “Open to new opportunities” setting so that recruiters can find you. -- Use LinkedIn Premium to connect to people who interest you -- Set up job alerts to receive new job updates +- 查找人员的专业和教育背景 +- 打开“Open to new opportunities”设置,这样招聘人员就能找到你。 +- 使用领英高级连接到谁感兴趣的人你 +- 设置职位提醒以接收新的职位更新 -[\***\*Medium**/**Blog Sites\*\***][58]: +[**Medium**/**Blog Sites**][58]: -- Read tutorials and how-tos to help with your personal projects -- Blog on Medium or elsewhere to showcase your own personal projects +- 阅读教程和操作指南来帮助你的个人项目 +- 在媒体或其他地方写博客,展示你自己的个人项目 ![](https://miro.medium.com/max/590/1*YNzUC78SPulsAznKTeUyNw.png) -[\***\*TripleByte\*\***][59]: Skip the phone interviews and directly go to on-sites if you pass their tech screening. See detailed description above +[**TripleByte**][59]: 如果你通过了他们的技术筛选,你就可以跳过电话面试,直接去现场面试。详情请参阅上面的详细说明。 -[\***\*YouTube\*\***][60] +[**YouTube**][60] ![](https://miro.medium.com/max/491/1*lVrmEfw_VMiq51OoZNKVkw.png) -- Watch tutorials and how-tos when you work on your personal projects -- Watch System Design and algorithm videos -- CAUTION: Do NOT get distracted and watch hours of videos for fun during your interview prep time! +- 当你在做个人项目时,观看教程和操作指南 +- 观看系统设计和算法视频 +- 警告:不要在准备面试期间分心,看几个小时的视频摸鱼取乐! [1]: https://www.linkedin.com/in/dctian [2]: https://www.linkedin.com/in/dctian @@ -845,3 +848,4 @@ I found this platform to be both good and bad. It is good because you get more c [58]: https://medium.com/ [59]: https://triplebyte.com/iv/Wzwz8pq/cp/header [60]: https://youtube.com/ +[61]: https://vuejs.org/