facebook 面试_我刚刚在Facebook获得开发人员职位。 这是我准备面试的方式。

facebook 面试

by Andyy Hope

通过安迪·霍普(Andyy Hope)

我刚刚在Facebook获得开发人员职位。 这是我准备面试的方式。 (I just got a developer job at Facebook. Here’s how I prepped for my interviews.)

I just finished seven on-site interviews at Silicon Valley tech companies. I ultimately accepted an offer for a software engineering job from Facebook.

我刚刚在硅谷科技公司完成了七个现场采访。 我最终接受了来自Facebook的软件工程工作邀请。

Here’s how I prepared for these interviews, and what I learned along the way.

这是我为这些采访做准备的方法,以及我在此过程中学到的知识。

我多年的硅谷之旅 (My multi-year journey toward Silicon Valley)

When I was studying Computer Science at my university in Australia, I always envisioned my future as a software engineer in Silicon Valley.

当我在澳大利亚的大学学习计算机科学时,我总是设想着自己在硅谷担任软件工程师的未来。

I loved the idea of being in the heart of all the tech industry’s innovation — as well as its blunders. This goal kept me motivated. It kept me focused.

我喜欢成为所有技术行业创新及其错误的核心的想法。 这个目标使我充满动力。 它使我专注。

I left my post as Lead iOS Engineer at an amazing company in Melbourne and headed back to my home city of Perth in order to study. There I would prepare for the interviewing process ahead of me in Silicon Valley. I knew would be incredibly difficult and arduous.

我离开了我在墨尔本一家出色公司的首席iOS工程师职位,然后回到家乡珀斯学习。 在那我将为我在硅谷的面试过程做准备。 我知道这将是极其困难和艰巨的。

If you mention the tech interview process to a room of software engineers, many will speak out against common interviewing practices. A lot of the argument comes from the reasoning that solving algorithms on a whiteboard doesn’t actually represent, or translate to the day to day tasks of a software engineer.

如果您向软件工程师室提及技术面试过程,那么许多人会反对常见的面试做法。 许多争论源于这样的理由,即在白板上求解算法实际上并不能代表或转化为软件工程师的日常任务。

For the sake of this article, I won’t go into that conversation. Instead, I’ll explore these different types of interview practices from a candidate’s perspective, I’ll also focus on what I learned from the process.

为了本文的目的,我将不进行讨论。 取而代之的是,我将从应聘者的角度探讨这些不同类型的面试实践,还将重点介绍从该过程中学到的知识。

面试是一种技巧 (Interviewing is a skill)

During my preparation, I always knew that interviewing would be challenging. But I honestly had no idea how hard it would be until I was knee-deep into my first interview.

在准备过程中,我始终知道面试会充满挑战。 但老实说,直到我深陷第一次面试之前,我才知道会有多困难。

In the lead-up to the interviews, I had used both paid and free services, which simulated coding and whiteboarding interviews over the phone with people who had industry experience interviewing candidates. Those practice interviews were essential for priming me for the pressure involved. But as I later realized, they only amounted to a fraction of what a real interview consists of.

在面试之前,我同时使用了付费和免费服务,这些服务通过电话模拟了具有行业经验的候选人的编码和白板面试。 这些实习面试对于激发我所涉及的压力至关重要。 但是,正如我后来意识到的那样,它们只相当于一次真实采访的一小部分。

I’d advise against interviewing at your dream job without having a few mock or real interviews under your belt. The nervousness can be incredibly overwhelming, and it can only be dulled through practice.

我建议您不要在梦dream以求的工作中进行面试,而要进行一些模拟或真实的面试。 神经质会令人难以置信地压倒一切,只有通过练习才能消除它。

As with many other things in life, practice will improve your confidence.

与生活中的许多其他事情一样,练习会增强您的自信心。

我遇到的不同类型的面试 (The different types of interview I encountered)

If you prepare and perform well enough in the preliminary phone screens, you’ll be given the opportunity to come on site and conduct full days worth of interviews. These interviews will typically last four to six hours depending on the company for which you’re interviewing with.

如果您在初步的电话屏幕中做好准备并表现得足够好,则将有机会来现场并进行整天的采访。 这些面试通常会持续4到6个小时,具体取决于您所面试的公司。

During my trip to Silicon Valley, I managed to line up seven on-site interviews in total. This gave me a unique perspective of the current landscape for interviewing.

在前往硅谷的旅途中,我总共安排了七个现场采访。 这给了我关于当前采访面貌的独特视角。

Typically, an on-site will cover three main subjects: algorithm, architecture design, and behavioral, which is what I had studied and prepared for. However, there are some companies which seem to be bucking this trend and expanding their interviews to cover more practical skills.

通常,一个现场将涵盖三个主要主题:算法,体系结构设计和行为,这是我研究和准备的。 但是,有些公司似乎正在逆转这一趋势,并扩大了采访范围,以涵盖更多实用技能。

I’ll briefly go over each of the topics I encountered.

我将简要介绍我遇到的每个主题。

算法面试 (Algorithm Interviews)

The most common type of interview you will encounter. The interviewer will ask you to solve a problem on a whiteboard which will assess your knowledge of data structures, sorting algorithms, recursion, time/space complexity analysis as well as pattern and edge-case recognition. In this interview, you will most typically come up with a brute-force solution, and then try to improve upon that solution and discuss the tradeoffs, if there are any, with the different solutions you propose.

您将遇到的最常见的面试类型。 面试官将要求您在白板上解决问题,该白板将评估您对数据结构,排序算法,递归,时间/空间复杂性分析以及模式和边缘情况识别的了解。 在本次采访中,您通常会提出一个蛮力解决方案,然后尝试对该解决方案进行改进,并讨论您建议的不同解决方案之间的权衡(如果有)。

This was the bread and butter of my preparation, every day for six weeks, I solved algorithms on a cheap hang-up whiteboard, analysed their time/space complexity as well as really trying to understand what happens at each line of code.

这就是我的准备工作,每天六周,我在便宜的挂断式白板上求解算法,分析了它们的时间/空间复杂性,并真正试图了解每行代码会发生什么。

Personally, I really enjoy whiteboard algorithms because I don’t necessarily have to worry about writing compilable syntax (most of the time), which lets me focus solely on the problem at hand. Other people may dislike whiteboarding, but to them I’d say to practice it consistently and it may change their mind.

就我个人而言,我真的很喜欢白板算法,因为我不必担心(大多数时候)编写可编译语法,这使我可以只专注于手头的问题。 其他人可能不喜欢白板,但对他们来说,我要坚持实践,这可能会改变他们的想法。

建筑设计访谈 (Architecture Design Interviews)

This is an interesting interview and one that I sorely underestimated. The interviewer will ask you to design a system (on a whiteboard of course) such as a car park ticketing system, chat messenger, twitter feed, amongst other common systems.

这是一次有趣的采访,我非常低估了这一采访。 面试官会要求您设计一个系统(当然是在白板上),例如停车场售票系统,聊天程序,Twitter提要以及其他常见系统。

What you’re being assessed on is how you take a broad concept and design a system which meets all the requirements and constraints. But it’s up to the candidate to ask the right questions, which define the requirements and constraints. This interview is more of a conversation mixed in with some drawing diagrams and perhaps even class structuring. Everything is quite high-level, so you won’t be writing any actual implementation code.

您正在评估的是您如何采用一个宽泛的概念并设计一个满足所有要求和约束的系统。 但是,应由候选人提出正确的问题,以定义要求和约束。 这次面试更多是与一些绘图甚至是课堂结构相结合的对话。 一切都是相当高级的,因此您不会编写任何实际的实现代码。

Naturally, you should steer the conversation to cover your knowledge of how systems work. If you’re a backend engineer, you wouldn’t really go into the mechanics of the client application details unless you had some previous expertise in that area. I’m an iOS engineer, so I talked about architecture patterns, modularisation of functionality, design patterns instead of how to scale the API endpoints, adding workers, AWS and such.

自然,您应该引导对话以涵盖系统的工作原理。 如果您是一名后端工程师,除非您以前在该领域有一些专业知识,否则您将不会真正研究客户端应用程序细节的机制。 我是一名iOS工程师,所以我谈到了架构模式,功能模块化,设计模式,而不是如何扩展API端点,添加worker,AWS等。

行为面试 (Behavioral Interviews)

The interviewer will ask you questions about yourself and how you deal with certain types of situations. The preparation for this one isn’t as difficult as the others but does require a lot of introspection on your own behalf.

面试官会问您有关自己的问题,以及您如何处理某些类型的情况。 准备这个程序并不像其他程序那样困难,但是确实需要您自己进行许多内省。

The questions are typically along the lines of:・How do you deal with failure?What is your biggest weakness?How do you resolve conflicts?What would you do differently?

这些问题通常具有以下特点:・如何处理失败?最大的弱点是什么?如何解决冲突?・有什么不同之处?

I feel it would be pretty hard to screw this one up but I’ve heard a lot of people do. They try to disguise their strengths as weaknesses, engineer their response to something that they think the interviewer would want to hear or even just pass the blame of failed projects onto other people.・“My weakness is that I’m too focussed”“It was all Jerry’s fault, he was sick for most of the project”

我觉得很难解决这个问题,但是我听说很多人都这样做。 他们试图掩饰自己的长处为弱点,设计他们的东西回应,他们认为面试官希望听到的,甚至只是通过项目失败的责任推到其他人。·“我的缺点是我太专注”·“ 都是杰里的错,他在大部分项目中都病了”

These interviewers are trained and calibrated to identify crappy people and have an acute attention to bullshit. It’s a quick way to get your candidacy thrown out the window. Just be genuine, show passion for your work, own your flaws, show initiative for improvement and you’ll do fine.

这些访调员经过培训和校准,可以识别cr脚的人,并对胡说八道非常注意。 这是使您的候选人资格被抛诸脑后的快速方法。 只要是真诚的人,对工作表现出热情,拥有自己的缺点,表现出改进的积极性,就可以做到。

文化契合 (Culture Fit)

This is usually paired with the Behavioural interview and is focused on finding whether you are aligned with the company’s values. For example, Facebook follows the hacker-like culture of being bold and shipping new ideas, trial by experimentation, not being afraid to break things. Whereas Airbnb wants to create a world where people feel like they belong anywhere they go, so they look for people with great hospitality skills.

通常,这与“行为”访谈相结合,重点在于确定您是否符合公司的价值观。 例如,Facebook遵循了一种类似于黑客的文化,即大胆并通过实验进行试验,提出新的想法,而不惧怕破坏事物。 而Airbnb希望创造一个让人们觉得自己归属于任何地方的世界,因此他们寻找具有出色接待技巧的人。

A lot of the big tech companies put a lot of emphasis on the culture and hire people based on that person’s alignment with their values. If you’re interviewing at one of these companies, it’s important that you look up their values and find past experiences which you’re able to relate and communicate to your interviewer.

许多大型科技公司都非常重视文化,并根据该人的价值观与他们相吻合来雇用他们。 如果您正在这些公司之一中进行面试,那么重要的是您要了解他们的价值观并找到能够与面试官联系并交流的过去的经验。

配对编程 (Pair Programming)

An interesting category for which you will be paired with another engineer in front of a computer which has been set up with a development environment, much like what you would be using in the real world. You’re given a basic task with a list of requirements which you must complete, as you finish each task the interviewer will ask you to implement more functionality until the time limit is reached. You’re free to use whichever resources you want, such as Stack Overflow or online documentation.

一个有趣的类别,您将在已设置开发环境的计算机前与另一位工程师配对,这与您在现实世界中使用的计算机非常相似。 您将获得一个基本任务,其中包含必须完成的要求列表,在完成每个任务时,面试官会要求您实现更多功能,直到达到时限为止。 您可以随意使用所需的任何资源,例如Stack Overflow或在线文档。

I feel like a lot of a candidate’s success in this interview would be determined by exposure to real-world experiences. Unlike whiteboarding, writing syntactically correct code is required, so you should know your language and environment inside and out because you don’t want to be spending too much time on the internet or documentation searching for answers.

我觉得应聘者在这次面试中的成功很大程度上取决于对现实世界的了解。 与白板不同,需要编写语法正确的代码,因此您应该从内到外了解您的语言和环境,因为您不想花太多时间在互联网或寻找答案的文档上。

During my previous role, I would write clean code while I was working on a task, followed by optimisation once I felt the task was complete. This kind of workflow was not beneficial to this type of interview. I managed to clean-code myself into a corner by optimising too early which made it trickier to recover from. I found that writing scrappy code and mentioning to the interviewer that I would do it differently in production was considered sufficient than writing clean and optimised.

在上一个职位期间,我将在执行任务时编写干净的代码,并在感到任务完成后进行优化。 这种工作流程对这种面试没有好处。 我通过过早优化而使自己陷入困境,这使恢复工作变得更加棘手。 我发现编写草率的代码并向面试官提到我会在生产中以不同的方式进行写作,这比编写整洁和优化的代码已足够。

查找和修补错误 (Finding and Patching Bugs)

A lot of what we do as engineers centers around finding and patching bugs which are reported to us from various sources. In this interview, you will be given a list of bugs to find and patch as well as identifying other potentially problematic code along the way.

作为工程师,我们所做的很多工作都围绕查找和修补从各种来源报告给我们的错误。 在这次采访中,您将获得一个错误列表,以查找和修补以及在此过程中识别其他可能有问题的代码。

I only saw one instance of this type of interview and I feel it would be quite difficult for someone to truly prepare for, especially if they’re a junior. Each coding environment has its own little quirks and nuances, a lot of the patchwork I did came from previous experiences with the IDE (Integrated development environment) and the related frameworks which I had accumulated over the years.

我只看到过这种面试的一个实例,而且我觉得某人要真正做好准备非常困难,尤其是如果他们是大三学生。 每种编码环境都有自己的小怪癖和细微差别,我所做的许多修补工作都来自以前对IDE(集成开发环境)和我多年来积累的相关框架的经验。

测试领​​域知识 (Testing Domain Knowledge)

Programming is fundamentally the same across most of the common languages we see today. Chances are if you know object-oriented programming in one language, those skills will mostly transfer to another.

在我们今天看到的大多数常见语言中,编程基本上是相同的。 如果您知道一种语言的面向对象程序设计,这些技能通常会转移到另一种语言。

However, this interview focuses on the aspects that cannot be transferred between languages or frameworks. You will be interviewed on environment specificities relating to API, memory management, capabilities, constraints, history and so forth.

但是,本次访谈的重点是无法在语言或框架之间转移的方面。 您将接受有关API,内存管理,功能,约束,历史记录等环境特性的采访。

Practicing can be challenging for this particular topic. Similar to the Bug finding and patching interview, I feel a lot of the answers would stem from previous experiences. Depending on the level of the role you’re applying for, the answers you provide may be weighted differently. For example, if someone applying for a junior role doesn’t know the history of why an API is structured a particular way, they may be given a concession. However, if a candidate applying for a senior role doesn’t know, then they may be marked against more harshly.

对于这个特定主题,练习可能具有挑战性。 类似于Bug查找和补丁采访,我认为很多答案都来自以前的经验。 根据您所申请职位的级别,您提供的答案的权重可能会有所不同。 例如,如果某人申请初级职位,但不知道API为何以特定方式构造的历史,则可以给予他们让步。 但是,如果申请高级职位的候选人不知道,那么他们可能会受到更严厉的反对。

了解操作系统 (Understanding Operating Systems)

Depending on the role or team you’re interviewing for, you may have an interview which focuses solely on operating systems. In this interview, you’ll be asked questions which will assess your understanding of the lower-level mechanics of a computer’s operating system.

根据您要面试的角色或团队,您的面试可能只针对操作系统。 在这次采访中,您将被问到一些问题,这些问题将评估您对计算机操作系统的底层机制的理解。

Admittedly, this interview caught me off-guard. Operating systems was something I had learned during early years at university, but my knowledge has since become hazy on the subject which was reflected in my performance.

诚然,这次采访使我措手不及。 操作系统是我在大学的早期学习的东西,但是从那以后我的知识就变得模糊了,这反映在我的表现上。

你应该如何准备 (How you should prepare)

As I wrote earlier, interviewing is a skill of its own. Even if you’re already a great programmer in your day job or getting great grades in your studies, those skills won’t exactly transfer 1:1 when you’re in a tiny interview room. Persistence, repetition, and consistency with interview preparation and practice will be the key determining factors of your outcome.

正如我之前所写,面试是一种技巧。 即使您已经是日常工作中出色的程序员或在学习中取得了优异的成绩,当您在一个很小的面试室中时,这些技能也不会完全按照1:1的比例迁移。 坚持,重复和与面试准备和练习的一致性将是决定您结果的关键因素。

基本知识 (Minimum knowledge)

If anyone were to ask me what I felt would be areas to focus on, I’d suggest the following:

如果有人要问我,我觉得应该重点关注什么,我建议以下几点:

  • Learn to write code by hand on paper and a whiteboard first and then throw it into an IDE for syntax highlighting, this should become second nature to you.

    首先学习在纸上和白板上手工编写代码 ,然后将其扔到IDE中以突出显示语法,这对您来说应该成为第二自然。

  • Develop deep knowledge of data structures, their strengths, and weaknesses in comparison to each other. I discovered that implementing data structures and their behaviours from scratch taught me so much more than what I knew from their abstract concepts.

    与其他人相比, 对数据结构 ,优点和缺点有深入的了解 。 我发现,从头开始实现数据结构及其行为比从抽象概念中学到的知识要多得多。

  • Completely understand Big O notation for both time and space complexities, this will pair perfectly with your algorithm and sorting questions.

    完全了解Big O符号在时间和空间上的复杂性,这将与您的算法和排序问题完美匹配。

  • Grasp all major sorting algorithms because the difference in time/space complexities have the potential to derail your optimum solution for an algorithm you’re trying to solve.

    掌握所有主要的排序算法,因为时间/空间复杂度的差异可能会破坏您要解决的算法的最佳解决方案。

什么时候开始 (When to start)

Depending on your timeline, you may want to start sooner than later. A lot of the companies I interviewed with had a 12 month cooling period before a failed candidate could reapply. On the flip side, if you know you won’t be ready within a year, you may as well start the process now and get a small taste of what it’s like to go through the interview process so when you are ready, it won’t be nearly as scary.

根据您的时间轴,您可能希望早于晚开始。 我采访过的许多公司都有12个月的冷却期,然后才能重新申请失败的候选人。 另一方面,如果您知道一年内还没准备好,您不妨现在就开始该过程,并略微了解一下面试过程的感觉,这样当您准备好时,就可以了。几乎一样可怕。

不用担心 (Don’t worry)

You’ve got this.

你有这个

翻译自: https://www.freecodecamp.org/news/software-engineering-interviews-744380f4f2af/

facebook 面试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值