华夏常春藤_我如何在没有常春藤大学学位的情况下从微软,亚马逊和Twitter获取报价

华夏常春藤

This is for those of you out there who are about to start your job search and who may be worried that you can’t land a top-tier tech job without a Stanford CS degree. Someone told you that you’re not good enough to get a job at Microsoft or Facebook.

这是针对那些即将开始求职的人们,可能会担心如果没有斯坦福大学CS学位就无法找到顶级技术工作。 有人告诉您,您不够出色,无法在Microsoft或Facebook找到工作。

But I’m here to tell you that you can get that job. Here’s how I landed my dream job at Twitter.

但是我在这里告诉你,你可以得到这份工作。 这就是我在Twitter上找到理想工作的方式。

Read more about my courses here to learn how I prepared.

在此处阅读有关我的课程的更多信息,以了解我的准备情况。

You can read about my experiences after a year at Twitter here.

你可以在Twitter的一年之后了解我的经验在这里 。

本文涵盖的内容: (What this article covers:)

  • My background

    我的背景
  • How I landed interviews with top tech companies in the world: Facebook Google, Amazon, LinkedIn, Microsoft, Twitter, Pinterest, Snapchat, and others.

    我如何获得对全球顶尖科技公司的采访:Facebook,谷歌,亚马逊,LinkedIn,微软,Twitter,Pinterest,Snapchat等。
  • How I landed multiple offers as a full-time software engineer

    我如何以专职软件工程师的身份获得多个职位
  • Lessons from my interview experience

    我的面试经验
  • Subscribe here for more article updates from me

    在这里订阅以获取我的更多文章更新

If you prefer to watch my story instead, I made a video here:

如果您想观看我的故事,请在此处制作一个视频:

背景 (Background)

I did not graduate from an Ivy league school. I went to a community college in Idaho for two years, and then finished my CS degree at a small Catholic university.

我没有从常春藤盟校毕业。 我去了爱达荷州的一所社区大学两年,然后在一所小型天主教大学完成了CS学位。

I started learning computer science in my junior year of college, because it sounded fun to me at the time. The only thing resembling a computer I had growing up was a Chinese copycat of the Nintendo SNES. Even then, it would break every time I put a cartridge in it.

我在大学三年级时就开始学习计算机科学,因为这对当时的我来说听起来很有趣。 唯一类似于我成长的计算机的东西是任天堂SNES的中文模仿者。 即使那样,每次我将它插入盒带时,它也会损坏。

To support myself through college, I took multiple part-time jobs like cleaning floors and working stand-up concessions.

为了支持自己上大学,我打了多个兼职工作,例如打扫地板和让步站立式工作。

When I graduated, I didn’t have a job lined up. I applied to as many big tech companies as I could, and had the good fortune of landing a few phone interviews.

毕业时,我没有一份工作。 我向尽可能多的大型科技公司提出了申请,并有幸参加了几次电话采访。

At this point, I didn’t have a single notion of what a technical screen would be like, much less how to prepare for it. I headed into these interviews thinking that the interviewer would ask me what a linked list or binary tree was.

在这一点上,我对技术屏幕的想法一无所知,更不用说如何准备了。 我进入这些采访,认为采访者会问我什么是链表或二叉树。

I didn’t pass any of those interviews.

没有通过任何采访。

向前进 (Moving forward)

I didn’t delve too much into whether I was good. I knew that I could learn things fast. I just needed an opportunity.

我并没有对自己是否优秀做过多的研究。 我知道我可以快速学习。 我只需要一个机会。

As the saying goes, cast your net far and wide. So that’s what I did.

俗话说,撒网。 这就是我所做的。

What I did next is something I’m particularly proud of. I wrote a simple Python script that scraped job listings on Craigslist with titles containing keywords from a list, and collected the emails in a spreadsheet. For the actual war story, you can read the article here.

接下来的工作让我感到特别自豪。 我编写了一个简单的Python脚本,该脚本将Craigslist上的工作清单抓到标题包含列表中关键字的标题,然后将电子邮件收集到电子表格中。 有关真实的战争故事,您可以在此处阅读该文章。

It wasn’t the smartest solution, but people who post on Craigslist are surprisingly accurate with their titles.

这不是最聪明的解决方案,但是在Craigslist上发帖的人的标题出奇地准确。

Craigslist, however, didn’t like people scraping their website. To work around this, I ran my script through a VPN, and had a timer that would pause the script every few minutes or so. It wasn’t perfect, but it worked well enough.

但是,Craigslist不喜欢人们抓取他们的网站。 要解决此问题,我通过VPN运行了脚本,并设置了一个计时器,该计时器每隔几分钟左右就会暂停脚本。 它并不完美,但是效果很好。

In the end I collected about 500 emails from around San Francisco, Portland, Spokane, and Seattle. I filtered the results by how specific and recent they were, and kept improving it by adding more and more features.

最后,我从旧金山,波特兰,斯波坎和西雅图附近收集了大约500封电子邮件。 我根据结果的具体程度和最新程度对结果进行了过滤,并通过添加越来越多的功能来不断改进结果。

As it turned out, there were a few bots in the market already that crawled Craigslist and sent out automated emails. These were mostly offshore companies that were looking to pitch their company to the US market.

事实证明,市场上已经有一些机器人爬上Craigslist并发送自动电子邮件。 这些大多是希望将公司推向美国市场的离岸公司。

One of my workarounds was that I crafted emails that used keywords from their listings in the title of my emails. I then added more details using the body of the postings to make it seem more personable. I did a quick A/B test, and the replies I received had increased quite a bit from around 2–3% to 10%.

我的变通办法之一是,我设计了使用电子邮件标题中的关键字列表的电子邮件。 然后,我使用发布的正文添加了更多详细信息,以使其看起来更具风度。 我进行了快速的A / B测试,收到的答复从大约2-3%增长到10%了很多。

Out of the 500 or so emails, I received about 50 replies, and landed phone screens with a small percentage of those. I stopped at 500 because I was short on time and needed to finalize a job as soon as possible. I was optimizing for results rather than reach at that point.

在500封左右的电子邮件中,我收到了大约50封回复,并登陆了电话屏幕,其中只有很小一部分。 我因为时间紧缺而停在500号,因此需要尽快完成工作。 我当时正在优化结果,而不是在那时达到目标。

As luck would have it, I finally landed a job at a startup in Seattle as a junior software engineer. The startup was located in Kirkland at the time, so I had to take a 45-min bus ride to make it in time for the interview.

幸运的是,我终于在西雅图的一家初创公司找到了一份初级软件工程师的工作。 该公司当时位于柯克兰(Kirkland),所以我不得不坐45分钟的公交车才能赶上面试的时间。

I then stayed there for the next 3.5 years, where I learned a great deal of stuff like Amazon AWS, EC2, DynamoDB, SQS, and Docker. I grew a lot during this period. I learned how to write modular, maintainable code. I learned how to reason about software design. And I learned how to handle people problems.

然后我在那呆了3.5年,在那里我学到了很多东西,例如Amazon AWS,EC2,DynamoDB,SQS和Docker。 在此期间,我成长了很多。 我学习了如何编写模块化的,可维护的代码。 我学习了如何推理软件设计。 而且我学会了如何处理人们的问题。

I was working next to a group of smart people who held jobs at Microsoft, Amazon, and LinkedIn, and I tried to be the “sponge” in the group. I absorbed anything and everything they threw at me. I believe this made a huge impact in my career.

我当时与一群聪明的人在一起工作,这些人在Microsoft,Amazon和LinkedIn担任过工作,我试图成为该小组中的“海绵”。 我吸收了他们扔给我的任何东西。 我相信这对我的职业生涯产生了巨大影响。

启动天数 (Startup Days)

During my stint at the startup, I worked almost exclusively on backend development, with some dev-ops in between. I started out writing some functions to add/modify a feature that were mostly small in scope. But it was a great opportunity to understand the codebase and get some code reviews.

在初创公司任职期间,我几乎专门从事后端开发,中间有一些开发人员。 我开始编写一些功能来添加/修改功能,这些功能范围很小。 但这是了解代码库并获得一些代码审查的绝佳机会。

A year into it, I started owning parts of the codebase, and then I was tasked with turning a set of features into a service. That was the start of the SOA phase for the startup. We started turning various components of the site into services, and that’s how I started learning more about RESTful services, authentication, AWS services, pub-sub, distributed systems and so forth.

一年后,我开始拥有部分代码库,然后负责将一组功能转变为服务。 那是启动的SOA阶段的开始。 我们开始将网站的各个组件转变为服务,这就是我开始学习有关RESTful服务,身份验证,AWS服务,发布订阅,分布式系统等的更多信息的方式。

The interesting part here is that I didn’t learn about any of these through books or formal education. Rather, I needed to get that set of features done and there were the bottlenecks.

有趣的是, 我没有通过书籍或正规教育来了解这些知识。 相反,我需要完成一组功能,并且存在瓶颈。

So I thought, let’s go solve it!

所以我想,让我们去解决它!

There were many times where I was stuck in analysis paralysis — a state where I over-analyzed scenarios and ended up not able to make progress.

很多时候,我陷入了分析瘫痪的境地,在这种情况下,我对场景进行了过度分析,最终无法取得进展。

Those trying times were the greatest learning opportunities. I started to learn feature scoping, negotiations, monitoring, alerting, and documentation. Each step of the process revealed more things I needed to learn. I grew the most during these 2–3 years, both as an individual and software engineer.

那些艰难的时期是最大的学习机会。 我开始学习功能范围界定,协商,监视,警报和文档。 该过程的每个步骤都揭示了我需要学习的更多东西。 在这2至3年中,无论是个人还是软件工程师,我的成长都是最快的。

我如何准备面试 (How I prepared for my interviews)

After suffering through my first job search, I told myself that I must be prepared in future interviews.

在经历了第一次求职后的痛苦之后,我告诉自己必须在以后的面试中做好准备。

I started preparing for interviews by charting out an overview of what I was good at, bad at, and where I could improve. I broke it down into three categories: data structures, algorithms, and system design.

我通过概述自己的擅长,劣势以及可以改进的地方来开始准备面试。 我将其分为三类: 数据结构,算法和系统设计。

Having worked in PHP for most of my professional career, and C++ in college, I wanted to try something a little simpler and less verbose for interviewing.

在我的职业生涯的大部分时间里都曾在PHP工作,而在大学中则曾从事过C ++,所以我想尝试一些更简单,更省力的面试方法。

For this reason, I picked Python. It is a great language to learn, easy to pick up, supports many data structures out of the box, and can be written quickly on the whiteboard. I learned Python by going through YouTube tutorials like these, and also reading their documentation. I prefer Python 2.x, but you can go for either 2.x or 3.

因此,我选择了Python。 这是一门很棒的语言,易于学习,易于使用,支持许多数据结构,可以在白板上快速书写。 我通过阅读这些 YouTube教程并阅读了它们的文档来学习Python。 我更喜欢Python 2.x,但您可以选择2.x或3。

Also, another reason why I picked Python is that it’s highly readable and easy to write on a whiteboard. Here’s a trivial comparison between C++ and Python.

另外,我选择Python的另一个原因是它具有很高的可读性,并且易于在白板上编写。 这是C ++和Python之间的比较。

A C++ program to sort in descending order:

一个C ++程序,以降序排列:

#include 
using namespace std; 
int main() {   
    int arr[] = {1,10,0,4,5};
    int n = size(arr)/sizeof(arr[0]);   
    sort(arr, arr + n, greater());   
    for (int i = 0; i < n; i++) {       
        cout << arr[i] << " ";   
    }    
    return 0;
}

Compare that with Python’s version:

将其与Python版本进行比较:

a = [1,2,4,5,1000]
a.sort(reverse=True)
print a

I’ve received feedback from interviewers to err on the side of brevity in an interview. In a 45-minute interview, you want to use most of your time solving the actual problem.

我收到了面试官的反馈,为了简短起见在面试中犯了错误 。 在45分钟的采访中,您希望将大部分时间用于解决实际问题。

Pro tip: pick a language that’s less verbose so that you can write the code more quickly on the whiteboard.

专家提示:选择一种不太冗长的语言,以便您可以在白板上更快地编写代码。

准备方式 (Preparation mode)

I spent about a week going through simple challenges on LeetCode, HackerRank, and Project Euler to familiarize myself with their interfaces, and to get used to writing code in Python.

我花了大约一周的时间对LeetCode,HackerRank和Project Euler进行简单的挑战,以熟悉它们的接口,并习惯于用Python编写代码。

The first week gave me insights into my competence level at certain programming languages. I spent another week going through some design challenges like “design X” and went as wide and deep as I could.

第一周让我深入了解了某些编程语言的能力水平。 我又花了一个星期的时间来解决诸如“ design X”之类的设计挑战,并尽可能地深入。

This was a lot of fun for me, because I often looked at iOS apps and tried to figure out how they did it. For example, how would you build Instagram from scratch? (I was asked this at Facebook.)

这对我来说很有趣,因为我经常查看iOS应用程序并试图弄清楚它们是如何做到的。 例如,您将如何从头开始构建Instagram? (在Facebook上有人问我。)

My background is in API designs and service-oriented architecture, so I took this opportunity to show how I would design my own version of Instagram. And because I have some iOS programming experience from my side-projects, I could talk a little bit about callbacks and push/long-polls here.

我的背景是API设计和面向服务的体系结构,因此我借此机会展示了如何设计自己的Instagram版本。 而且由于我从其他项目中获得了一些iOS编程经验,所以我可以在这里谈谈回调和推/长轮询。

I started the conversation with some features I’d like to have on my own version of Instagram: likes, upload a photo, and a simple timeline. Feature scoping enabled me to build a very solid API because I know these scenarios well.

我以我希望在自己的Instagram版本上拥有的一些功能开始对话:喜欢,上传照片和简单的时间表。 功能范围界定使我能够构建一个非常可靠的API,因为我非常了解这些情况。

I then drew some pictures of a high-level design, of how the client would interact with the backend, and of how the backend would store the data.

然后,我绘制了一些高级设计图,说明了客户端如何与后端交互以及后端如何存储数据。

I started small, and then added more components where needed and proactively sought where the bottlenecks were. I made educated guesses (read educated, not blind guesses) on what the requirements would be, and how each technology would fit in well. And also equally important, what technologies would not fit well.

我从小开始,然后在需要的地方添加了更多组件,并主动寻找瓶颈所在。 我对要求是什么以及每种技术的适用性进行了有根据的猜测(阅读有根据,而不是盲目猜测 )。 同样重要的是,哪些技术不太适合。

For example, why would you use Cassandra over MySQL to store certain information (hint: scale, speed of development, schema reviews), why use OAuth over simple authentication, Redis vs Memcached for caching data, streaming vs batch processing, and so on.

例如,为什么要在MySQL上使用Cassandra来存储某些信息(提示:规模,开发速度,架构审查),为什么要在简单身份验证上使用OAuth,对缓存数据使用Redis vs Memcached,对批处理进行流式处理,等等。

There are many areas you can explore here, so typically a one-hour session is not enough. To do well on these questions, you have to read and learn about trade-offs. Pros and cons of technologies in the industry. For this, I recommend a site like HighScalability.

您可以在这里探索许多区域,因此通常一个小时的课程是不够的。 为了在这些问题上取得好的成绩,您必须阅读和学习取舍。 行业技术的利弊。 为此,我建议使用HighScalability之类的网站。

Take it like a typical brainstorming session with a coworker, so explore as widely and as deeply as you can.

就像与同事进行的典型头脑风暴会议一样,因此请尽可能广泛和深入地进行探索。

It’s crucial to know that these design interviews are meant to explore how much you know and how well you know it, and it’s an opportunity for you to shine. I watched this YouTube video from an ex-Facebook engineer about how to solve design problems, and it gave me insights that helped me tremendously with my design interviews. My two main lessons from it: drive the design conversation, and show what you know.

至关重要的是要知道这些设计访谈旨在探究您的了解程度和了解程度,这是一个让您大放异彩的机会。 我观看了来自前Facebook工程师的YouTube 视频 ,了解如何解决设计问题,它为我提供了一些见解,这些见解对我的设计访谈大有帮助。 我从中得到的两个主要教训是: 推动设计对话,展示您所知道的知识

I listed out my competency level for: data structures (linked list, hash map, binary tree, binary search tree, heap, array), algorithms (binary search, hashing, dynamic programming, sorting), and language-specific syntax and libraries (like sort, lambda for Python, appending, indexing).

我列出了以下方面的能力水平: 数据结构 (链接列表,哈希图,二进制树,二进制搜索树,堆,数组), 算法 (二进制搜索,哈希,动态编程,排序)以及特定于语言的语法和库 (例如sort,用于Python的lambda,附加,建立索引)。

I picked the area I was worst at, and started working on it: algorithms.

我选择了我最擅长的领域,并开始着手研究: 算法

Algorithms have never been my forte. It’s been a while since my college days, and I didn’t spend much time doing binary search in my day-to-day career. I had an inkling of how each algorithm would perform, and in what scenarios to use them. But I wasn’t 100% comfortable with writing a binary search in under 10 mins. On a whiteboard. In front of an interviewer.

算法从来都不是我的专长。 自从上大学以来已经有一段时间了,在我的日常工作中,我没有花费太多时间进行二进制搜索。 我对每种算法的执行方式以及在何种情况下使用它们的情况有所了解。 但是我在10分钟内编写二进制搜索并不十分满意。 在白板上。 在面试官面前。

I also picked up a bunch of fine-point markers from Amazon, which work amazingly well. Perhaps it’s just me, but the fine-point markers in interviewing rooms usually don’t work at all. I’d usually scramble for 2–3 mins looking for a working pen, and that’s 2–3 mins you can’t afford to waste. Plus, fine-point markers allow you to write 5–8 more lines of code on a typical whiteboard vs. thicker ones. :)

我还从亚马逊那里买了一堆细点标记,它们工作得非常好。 也许只有我一个人,但是采访室中的细微标记通常根本不起作用。 我通常会花2-3分钟寻找一支工作笔,而这是您不能浪费的2-3分钟。 此外,细点标记使您可以在普通白板上多写5–8行代码,而在较厚的白板上写的代码行多。 :)

Pro tip: Get your own set of fine-point markers.

专家提示:获取自己的一组细点标记。

I got a whiteboard from Costco for $50, some books from Amazon (listed in the tools I recommend section below), and started practicing. I made sure I ramped up on binary search, recursion, dynamic programming, BFS and DFS. A lot of interviewing questions revolved around recursion and binary search or some variations of it.

我从Costco买了一张白板,价格为50美元,从亚马逊买了一些书(列在我在下面推荐的工具中列出),然后开始练习。 我确保提高了二进制搜索,递归,动态编程,BFS和DFS的速度。 许多访谈问题都围绕着递归和二进制搜索或它的一些变体。

The best interviewing questions I’ve seen had many different solutions to them, and there’s an additional layer added on top as you progress through.

我见过的最好的面试问题为他们提供了许多不同的解决方案,并且在您逐步学习的过程中,还会增加一个附加层。

One Google question I had was related to file-system directories, and how to traverse them (hint: recursion). I solved that relatively quickly, and the interviewer asked how to identify a missing file in that directory. That was a little more difficult, but I got through it. And we then moved into how to rebuild the directory, how to serialize/deserialize it, and we spent a good chunk of time debating how file directories work underneath the hood. It was a very enjoyable session for me.

我遇到的一个Google问题与文件系统目录以及如何遍历它们有关(提示:递归)。 我很快就解决了,面试官问如何在该目录中识别丢失的文件。 那有点困难,但是我解决了。 然后,我们进入了如何重建目录,如何对其进行序列化/反序列化的工作,并且花了很多时间来讨论文件目录在后台的工作方式。 对我来说这是一次非常愉快的会议。

顶级公司访谈 (Interviewing at top-tier companies)

It was a nerve-wracking experience, to say the least, and a real roller-coaster.

至少可以说,这是一次令人不安的经历,也是一次真正的过山车。

I allocated my time in the following manner: 20% resume, 20% research and 60% interview preparation.

我按照以下方式分配时间:20%的简历,20%的研究和60%的面试准备。

I spent 20% of my time fixing up my resume, which hadn’t been updated in at least three years. I took a hard look at the stuff I’ve done in the past, and picked projects I handled end-to-end, regardless of complexity.

我花了20%的时间整理简历,至少三年没有更新过。 我认真研究了过去所做的工作,并选择了我端到端处理的项目, 而不论其复杂性如何。

The reason for doing this is two-fold. Taking a project from start to completion demands discipline and leadership — two of the traits I’d like to be identified with.

这样做的原因有两个。 从开始到完成一个项目都需要纪律和领导才能,这是我想认同的两个特征。

Secondly, ownership of a project end-to-end means I can talk about each aspect of the project at length and in depth. This proved critical in helping me navigate my design round at Twitter, where they grilled me hard on not only the designs of my projects, but also the decisions behind them.

其次,端到端项目的所有权意味着我可以深入和深入地讨论项目的各个方面 事实证明,这对帮助我在Twitter上进行设计导航至关重要,在Twitter上,他们不仅对我的项目设计,还对其背后的决策进行了严格的审查。

20% of my time was used for research. Research in this case meant doing due diligence on companies I was interested in and reaching out for referrals. Having referrals helps with return calls.

我有20%的时间用于研究。 在这种情况下,进行研究意味着对我感兴趣的公司进行尽职调查,并寻求引荐。 进行推荐有助于回电。

From my experience, I sent out 20 or so cold messages to startups and mid-stage companies, and only heard back from a handful. But, almost all the companies I was referred to by an existing employee sent me a message within a week. This is anecdotal, but there’s value to be had there.

根据我的经验,我向初创公司和中级公司发送了大约20条冷消息,但只收到了很少的回音。 但是,几乎所有现有雇员介绍我的公司都在一周内给我发送了一条消息。 这是轶事,但那里是有价值的。

I am not that sociable, and I didn’t know many people who’d be able to refer me to a company I was interested in. To solve that problem, I went on LinkedIn. They have a search functionality that I used to search for 1st and 2nd-level connections. 2nd-level connections are people who’re one hop away from your immediate circle. In other words, we have mutual friends who can vouch for my credibility.

我不那么善于交际,而且我不认识很多人,他们可以将我推荐给我感兴趣的公司。为了解决这个问题,我去了LinkedIn。 它们具有我用来搜索第一级和第二级连接的搜索功能。 第2级关系是与您的直交圈子相距一跳的人。 换句话说,我们有共同的朋友,可以保证我的信誉

This is incredibly important, because cold-calling someone for a job is very, very hard, especially in today’s market. People tend to err on the side of caution when it comes to cold-callers. Using LinkedIn was super helpful for my research phase.

这非常重要,因为冷打电话给某人找工作非常非常困难,尤其是在当今的市场中。 当涉及到冷遇者时,人们倾向于在谨慎方面犯错。 使用LinkedIn对我的研究阶段非常有帮助。

Looking back at all the companies I interviewed at, here are my thoughts on each of them:

回顾我采访过的所有公司,以下是我对每个公司的看法:

  • Facebook/Google — very mechanical. The standard interviewing process, and I didn’t feel any personal connection to them.

    Facebook / Google-非常机械。 标准的面试过程,我觉得与他们没有任何个人联系。

  • Pinterest — not the best interviewing experience, but a cool product and company.

    Pinterest-不是最好的面试经验,而是很棒的产品和公司。

  • Microsoft — loved the team and especially the manager and her manager. Standard interviewing questions, but very personable. Close-second choice. Your mileage may vary, though — each team at Microsoft interviews differently.

    微软 -非常喜欢团队,尤其是经理和经理。 标准的面试问题,但是非常有风度。 近距离选择。 但是,您的里程可能会有所不同-Microsoft的每个团队的采访方式都不相同。

  • Amazon — standard interviewing process. About 50% of the people love it, the others don’t.

    亚马逊 -标准面试流程。 大约50%的人喜欢它,其他人则不喜欢。

  • Twitter — incredibly fun and personal. Loved the interviewing process, gave a lot of emphasis on the individual and what I’d done in the past.

    Twitter-令人难以置信的有趣和个性化。 热爱面试过程,非常重视个人和我过去所做的事情。

  • Snapchat — cool office in LA, great bunch of people who decided to jump on the startup bandwagon. Felt like things were shrouded under a cloud of secrecy.

    Snapchat-洛杉矶很酷的办公室,很多人决定加入创业潮流。 感觉就像被密云笼罩一样。

  • Lyft — near to where I live, nice office, standard interviewing process. No strong feelings about it.

    Lyft-在我住的地方附近,不错的办公室,标准的面试过程。 没有强烈的感觉。

让我们谈谈我的最爱 (Let’s talk about my favorite)

In many ways, I’d say Twitter’s interviewing style was hard. But at the same time, it was more interesting and personable than other companies I’ve interviewed at.

从很多方面来说,我会说Twitter的采访风格很难。 但与此同时,它比我采访过的其他公司更有趣,更风趣。

Their interviewing process starts with an introductory phone call with an engineering manager. That’s followed up by one or two technical phone screens, depending on how you perform. If you do well, they’ll fly you out to the office you’re interviewing for, which was Seattle in my case. There are three 1-hour-and-15-minute rounds, each with two interviewers.

他们的采访过程始于与工程经理的介绍性电话。 接下来是一两个技术电话屏幕,具体取决于您的演奏方式。 如果做得好,他们会带您到您要面试的办公室,就我而言就是西雅图。 共有3个1小时15分钟的回合,每个回合都有两名面试官。

The first two technical phone screens are the standard, run-of-the-mill technical screens where you solve coding problems on a shared coding doc.

前两个技术电话屏幕是标准的常规技术屏幕,您可以在其中解决共享编码文档上的编码问题。

The onsite rounds, however, are much more conversational and feel much less intimidating. The interviewers will ask you in-depth questions about your past projects, and they’ll grill you on what you’ve done in the past. If you claim ownership of a project, you should expect some questions about it. You’re encouraged to use them for references and to bounce ideas off of.

然而,现场巡回更多地是对话性的,并且没有那么吓人。 面试官将向您询问有关您过去的项目的深入问题,他们将为您回顾过去的工作。 如果您主张某个项目的所有权,则应该对此有一些疑问。 鼓励您使用它们作为参考并跳出主意。

I never felt any pressure to magically come up with a fully working solution, and it felt highly collaborative.

我从来没有感到过任何神奇地提出完全可行的解决方案的压力,并且感到高度协作。

其他 (The others)

In comparison, interviewing at Facebook and Google felt much more mechanical. They have one or two technical phone screens, and five to six onsite coding rounds. Each round involves some coding on a whiteboard, and you’re expected to come up with a near-perfect solution in a reasonable amount of time.

相比之下,在Facebook和Google进行采访时感觉更加机械。 他们有一两个技术电话屏幕,以及五到六个现场编码回合。 每个回合都需要在白板上进行一些编码,因此您应该在合理的时间内提出接近完美的解决方案。

Facebook has two coding rounds, one design round, and one behavioral round.

Facebook有两轮编码,一轮设计和一轮行为。

I went through an additional shadow round at the end of the day, which didn’t count towards my overall score.

一天结束时,我又进行了一次阴影回合,这并未计入我的总成绩。

Google had five coding rounds, none of which focused on designs, and not a single interviewer asked about my previous projects. I don’t necessarily think this is bad. But I think it felt very mechanical and didn’t give much opportunity for the engineer to show what they’re capable of. Some people do well in these scenarios, much like some students do well in exams.

Google进行了五轮编码,没有一轮是针对设计的,没有一个采访者问过我以前的项目。 我不一定认为这很糟糕。 但是我认为这非常机械,并且工程师没有太多机会展示他们的能力。 在某些情况下,有些人表现出色,就像某些学生在考试中表现出色一样。

I did not enjoy my interview with Pinterest. I think the product itself is interesting, and their engineering team seems to be working on very cool technical problems. But I definitely had a negative experience during my interview there.

Pinterest采访不满意。 我认为产品本身很有趣,他们的工程团队似乎正在研究非常酷的技术问题 。 但是我在那里接受采访时肯定有负面的经历。

Pinterest has three coding rounds and one design round. Of those four rounds, the design round was most disappointing to me. Here’s why:

Pinterest具有三轮编码和一轮设计。 在那四轮比赛中,设计比赛令我最失望。 原因如下:

The interviewer came in late, and he spent a few minutes glancing over my resume before proceeding to draw some APIs on the board. He gave a short description of what he expected the API to do, and asked how I would solve it. We clarified the features of the API, and I started describing my solution using the whiteboard. About 5 minutes into it, I turned around and saw him taking a nap!

面试官来晚了,他花了几分钟浏览我的简历,然后才开始在板上画一些API。 他简短描述了他希望API做什么的事情,并询问我将如何解决它。 我们阐明了API的功能,然后开始使用白板描述解决方案。 大约5分钟后,我转身看到他小睡了!

Not cool.

不酷

I gave the recruiter my feedback in a survey, and I didn’t hear back from them after that.

我在调查中向招聘者提供了我的反馈,但此后我没有再收到他们的回音。

I won’t delve into specifics of the questions I was asked during all the interviews. Instead, I’ll share some of the insights and useful tips I learned from my preparation process.

在所有面试中我都不会深入探讨我所提出的问题。 相反,我将分享我从准备过程中学到的一些见解和有用的技巧。

我学到的是: (What I learned:)

  • Be honest on your resume. Most companies will ask you questions about your resume, and they can tell if you made it up. It’s better to be able to know 100% about one project than to know 10% about 10 different projects.

    对简历诚实 。 大多数公司都会向您询问有关履历的问题,他们可以告诉您您是否准备好了。 能够了解一个项目的100%胜过了解10个不同项目的10%更好

  • One-page resumes are recommended. This is especially true for tech companies, and it seems that the wisdom within the tech sphere is that you should reserve two pages and longer for post-doctoral work, or if you’ve done a lot of projects that you know and care deeply about. A friend of mine runs a company called Jobscan that scans resumes and makes specific, actionable improvements on them. They’re pretty awesome, so try them out :)

    建议使用一页简历。 对于科技公司而言尤其如此,并且看来科技领域的智慧在于您应该为博士后工作预留两页或更长的时间,或者如果您做了很多您知道并深切关心的项目。 我的一个朋友经营一家名为Jobscan的公司 ,该公司扫描简历并对其进行具体,可行的改进。 他们很棒,所以尝试一下:)

  • Socialize and establish a network. There’s a lot of competition for software engineering jobs, and these top tech companies are filtering through thousands of resumes a day. Having a referral will help you get some eyes on your resume.

    社交并建立网络 。 软件工程工作竞争激烈,这些顶尖的高科技公司每天都要过滤掉数千份简历。 推荐会帮助您关注简历。

  • Nail your pitch. Every company that’s interested in you wants to know why you’re interested in them. A bad answer: I just need a job right now to pay bills. A less-bad answer: I was browsing online and found you guys. Sounds like you’re working on interesting things. A good answer: I know you’re doing some interesting work in X to achieve Y. I’ve done some work in the past and here’s what I learned about A, B, C that might be related to X. I am passionate about Y because blah. (Don’t use this as a template. Instead, you should see the pattern here — do your research, use your background, and show the company why both of you would fit well together.)

    你的脚。 每个对您感兴趣的公司都想知道您为什么对它们感兴趣。 一个不好的答案 :我现在只需要一份工作来支付账单。 一个不太糟糕的答案 :我在网上浏览,发现你们。 听起来您正在做有趣的事情。 一个很好的答案 :我知道您正在X中做一些有趣的工作来实现Y。我过去做过一些工作,这是我对A,B,C可能与X相关的知识。我对此充满热情是的,等等。 ( 不要将其用作模板。相反,您应该在这里看到这种模式-做研究,使用背景并向公司展示为什么两个人都能很好地融合在一起。)

更多建议 (Some more advice)

Technical interviews are incredibly difficult, and sometimes it’s a hit-or-miss. The best opportunities, however, are reserved for those who are prepared.

技术面试非常困难,有时甚至是命中注定的。 但是,最好的机会留给有准备的人。

  • Prepare early, prepare well. Everyone knows that they should prepare for an interview, but most don’t know how to do it well. As with anything worth doing, it takes deliberate practice to do well at something. And deliberate practice means you need to have a system.

    早做准备, 做好准备 。 大家都知道,他们应该准备面试,但大多数人不知道如何把它做好 。 与任何值得做的事情一样,需要认真练习才能做好某件事。 刻意的练习意味着您需要一个系统。

  • Build a system to practice technical skills. I started by rating myself from 1–10 on how good I was, and worked on the ones I was worst at. I spent days on different types of questions until I fully mastered each concept. And I wrote notes daily on Evernote. I had a note that serves as a brain dump for all things programming. It is full of programming tips & tricks, common errors and misconceptions, frameworks for solving specific types of questions, and much more.

    建立一个练习技术技能的系统 。 我从1到10对自己的好坏进行评分,然后开始研究最差的一项。 我花了数天时间讨论不同类型的问题,直到我完全掌握了每个概念。 我每天在Evernote上写笔记 。 我有一条便条,它是所有编程工作的头脑转储。 它充满了编程技巧和窍门,常见的错误和误解,解决特定类型问题的框架等等。

  • Keep a notebook of the things you’ve learned. I use both Evernote and OneNote to keep track of things. OneNote for technical stuff/code, because I like that I can easily format the note any way I like. I use Evernote for essays/thoughts. The image above shows a note I keep on architecture and system designs.

    下您所学到的东西。 我同时使用Evernote和OneNote来跟踪情况。 用于技术资料/代码的OneNote,因为我喜欢我可以轻松地以自己喜欢的方式格式化便笺。 我使用Evernote撰写论文/发表思想。 上图显示了我对体系结构和系统设计的说明。

  • Jot everything down, even if you don’t think you’ll use it. I tend to forget very easily, so anything that I learn I write it down, including shell commands. I read technical blogs from time-to-time, and if I find anything interesting I jot it down on Evernote right away. I’ll revise it every week or month and reorganize accordingly. This has helped me tremendously over my career.

    记下所有内容 ,即使您不认为会使用它也是如此。 我往往会很容易忘记,所以我学到的任何东西都会写下来,包括shell命令。 我不时阅读技术博客,如果发现有趣的事情,我会立即在Evernote上写下来。 我会每周或每月对其进行修改,并进行相应的重组。 这极大地帮助了我的职业生涯。

  • Get mock interviews. This was definitely very valuable and I highly advise it. I had mock interviews with friends and tried to practice as much as I could. If you can’t find friends to practice with, then I recommend Refdash, which is an Interview-As-A-Service. They have a group of interviewers who work at big tech companies like Google, Facebook, and Microsoft. These interviewers will assess you on your coding and design skills. The best part of it is they’ll give you a score at the end of it with specific actionable items on how to improve.

    进行模拟面试 。 这绝对是非常有价值的,我强烈建议。 我与朋友进行了模拟采访,并尝试了尽可能多的练习。 如果您找不到可以与之练习的朋友,那么我推荐Refdash,这是一项Interview-As-A-Service服务。 他们有一群面试官,他们在Google,Facebook和Microsoft等大型科技公司工作。 这些面试官将评估您的编码和设计技能。 最好的部分是他们会在评分的最后给您一个分数,其中包含有关如何改进的具体可行项目。

  • It’s OK to fail. I failed multiple interviews during this whole process. Sometimes you just have a bad day. It’s not the end of the world if you fail. Companies are biased towards saying no because it’s a lower risk for them. A false positive costs more than a false negative in the long run. The first few rejections definitely stung the most. I failed multiple phone screens when I first started interviewing, and my confidence level sunk. I had doubts in my mind about my abilities and started fearing that my skills weren’t relevant in today’s job market. However, I gave myself a tip: If you fail 10 times, then try 10 times more. All you need is one success. That reassurance gave me a lot of confidence to keep pushing through and when my first offer came through, the other offers came much more easily.

    失败是可以的。 在整个过程中,我多次面试都失败了。 有时候,您的日子不好过。 如果失败,这不是世界末日。 公司倾向于拒绝,因为这对他们来说风险较低。 从长远来看,误报的成本要高于误报的成本。 前几个拒绝肯定是最刺痛的。 当我第一次开始面试时,我在多个电话屏幕上都失败了,我的信心也下降了。 我对自己的能力感到怀疑,并开始担心自己的技能与当今的就业市场无关。 但是,我给自己一个提示:如果失败10次,请尝试10次以上。 您需要的只是一项成功。 这样的放心使我有足够的信心继续前进,当我的第一个报价通过时,其他报价就容易得多。

It took me about 2 months of deliberate practice and preparation for my interviews. I spent about 20 hours/week, or 80 hours/month, learning and writing notes on top of a full time job.

我花了大约2个月的刻苦练习和准备面试。 我每周花大约20个小时,或者每月80个小时,在全职工作的基础上学习和写作笔记。

To build up my resume, it took 3.5 years of focused, deliberate work. I intentionally picked things that were tough and icky so that I could learn more than anyone else. Even though I don’t have a brand name university or top-tier tech company on my resume, I made up for it with a clear, thorough understanding of the projects I worked on. And this was possible because I researched and wrote down notes of everything I learned, and have a system to review them.

为了建立我的简历,花了3.5年的重点工作。 我特意挑了一些棘手的东西,这样我可以比其他任何人学习更多。 即使我的履历上没有一家名牌大学或顶级科技公司,我还是对自己从事的项目有清晰而透彻的了解,以弥补这一不足。 之所以能够做到这一点,是因为我研究并写下了我所学到的一切笔记,并且拥有一个可以对其进行审查的系统。

Remember: the strong survives, the tough thrives.

记住:强者生存,强者生存。

TL;DR: Don’t give up, set yourself up for opportunities, practice a lot, and stay hopeful. Focus on the process, and take a disciplined, dedicated approach to the process.

TL; DR:不要放弃,为机会做好准备,多做一些练习,并保持充满希望。 专注于流程,并对流程采取纪律严明的专用方法。

我推荐的工具 (Tools I Recommend)

  • Designing Data-Intensive Applications: Awesome book for learning about scaling distributed systems! Highly recommended.

    设计数据密集型应用程序 :很棒的书,用于学习有关扩展分布式系统的知识! 强烈推荐。

  • Elements of Programming Interviews: Great for solving coding problems.

    编程面试的要素 :非常适合解决编码问题。

  • Cracking The Coding Interview: Great for covering foundational CS coding problems.

    破解编码面试 :非常适合解决基础CS编码问题。

  • Daily Coding Problem.com: This is a free-to-try website that offers free daily coding problems. You can sign up for interesting daily coding challenges, and you can pay for solutions if you want.

    Daily Coding Problem.com :这是一个免费试用的网站,提供免费的每日编码问题。 您可以报名参加有趣的日常编码挑战,也可以为解决方案付费。

  • Dropbox: I keep all my files, pictures, resume here. Easy access, installed once and available everywhere. Love it ❤️ (If you sign up thru this link, both of us will get free 500MB!

    Dropbox :我保留所有文件,图片,并在此处继续。 易于访问,一次安装即可随处使用。 喜欢它❤️(如果您通过此链接注册,我们俩将免费获得500MB!

  • CodeRunner: I love this Mac app! I used this multiple times to run ad-hoc Python scripts/functions and it just works amazingly well.

    CodeRunner :我喜欢这个Mac应用程序! 我多次使用它来运行特定的Python脚本/函数,并且效果非常好。

  • Kafka the Guide: I used this book as a reference guide, and enjoyed it for the high-level description.

    Kafka指南 :我将本书用作参考指南,并从高层次的介绍中受益。

(I share more resources I personally have used and recommend on zhiachong.com, if you’re interested in learning more.)

(如果您有兴趣了解更多信息,我会分享更多我个人使用的资源,并在zhiachong.com上推荐。)

Thanks for reading my story! You can find me on Twitter and LinkedIn. I would love to connect and talk more about tech, startups, travel :D

感谢您阅读我的故事! 您可以在Twitter和LinkedIn上找到我。 我很想联系并更多地谈论技术,创业公司,旅行:D

Credits:

学分:

Brandon O’brien, my mentor and good friend, for proof-reading and providing valuable feedback on how to improve this article.

我的导师和好朋友Brandon O'brien进行了校对并提供了有关改进本文的宝贵反馈。

YK Sugishita, an up-and-coming Youtube star who left his job at Google to pursue his dreams, for proof-reading and giving critical feedback.

YK Sugishita是一位新兴的Youtube明星,他辞去了Google的工作去追求自己的梦想,以便进行校对并提供重要反馈。

翻译自: https://www.freecodecamp.org/news/how-i-landed-offers-from-microsoft-amazon-and-twitter-without-an-ivy-league-degree/

华夏常春藤

你可能感兴趣的:(编程语言,python,人工智能,面试,java)