翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目,好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作!

我曾经在Grab工作,这是东南亚的一家共享出行公司,但我对工作感到沮丧,想要进入FAANG公司,但我不确定如何做到。经过几个月的研究、学习和练习,我面试了11家公司,最终获得了来自旧金山湾区顶级科技公司的9份工作offer,包括Facebook、Google、Airbnb、Palantir、Dropbox、Lyft以及一些初创公司。这是一个繁琐的过程,我不想再经历了。我经历了那个过程,但有了这个指南,你就不必再经历了。

本指南将为你提供关于如何准备软件工程师面试的顶级建议的快速概述 - 包括技术和非技术面试环节。在相关的情况下,你可以通过访问本概述文章中的链接或网站左侧边栏深入了解更多细节。

如何准备软件工程师面试:

  1. 最大化入选机会
  2. 弄清楚面试形式
  3. 选择一门编程语言
  4. 锻炼计算机科学基础知识
  5. 练习编程面试
  6. 为系统设计面试做准备(适用于中/高级别)
  7. 为行为面试做准备
  8. 谈判工作报价包
    在这里插入图片描述

最大化入选机会

你是否仍然在一些或所有顶级科技公司中有被筛选的困难?你的简历可能是个问题。

在像FAANG / MANGA这样的主要科技公司中,你的简历是被筛选的最重要的入口。在被筛选后,你过去的成就相对于你的编程面试技能来说变得不那么重要 - 我们知道,编程技能是可以系统地学习的。因此,能够充分描述你过去的成就,以通过筛选阶段,非常重要。

不幸的是,即使是我认识的最合格的候选人,也不知道如何写一份好的简历,从而未能入选。事实是,当我们中的许多人没有被像FAANG / MANGA这样的顶级科技公司筛选时,我们倾向于认为自己不够资格 - 但在大多数情况下,可能只是缺乏良好的表述。

如果你想学习如何写一份好的软件工程师简历,我在这里写了一份逐步指南,涵盖了为像谷歌、Facebook、亚马逊、Netflix、苹果等公司准备简历的过程,并提供了参考示例。

1. 了解面试格式

在软件工程师面试中,你可能会遇到各种不同的面试格式(从早期到晚期):

1.1. 测验

频率:偶尔

测验旨在作为第一道筛选关,是一种快速而粗糙的方法,用于筛选出极度弱(甚至非技术性)的候选人。它们是有结构的问题,并且有清晰的答案,这使得它们可以由招聘人员/非技术人员或自动评分器进行评估。通常在面试过程的早期阶段进行。

示例:

  • 4 & 5的二进制是多少?答案:4
  • 冒泡排序的时间复杂度是多少?答案:O(n2)

1.2. 在线编程评估

频率:偶尔

类似于测验,在线编程评估通常在面试过程的早期进行。给出一个算法问题,带有格式良好的输入和输出,候选人被要求在在线编程界面中编写代码来解决问题。HackerRank是进行在线编程评估的非常常见的平台。LeetCode是练习在线编程评估中问题解决方面的好方法。然而,在HackerRank上,你通常需要编写代码来从stdin读取并打印到stdout,如果候选人不熟悉API,可能会让他们感到困惑。

1.3. 家庭作业

频率:罕见

人们对是否询问算法问题是评估个人能力的好方法进行了大量辩论,因为这些问题并不是工作中最需要的技能。家庭作业是一种旨在解决算法面试不足的格式,它让候选人参与到更大的项目中,从而展示他们的软件设计技能。

然而,这种面试格式会花费更多的时间,对候选人和公司来说都是如此,因此在候选人数量较多的大公司中不太常见。这种格式在初创公司和小公司中更为常见。

示例:

  • 构建一个航班列表应用
  • 构建一个看板应用
  • 构建一个贪吃蛇游戏

1.4. 电话面试

频率:普遍

电话面试是最常见的格式,每个候选人在面试中至少会遇到一次。你将被要求与面试官进行电话或VoIP(BlueJeans/Skype/Google Hangout)通话。你将会被给出一个问题,并且你需要在在线协作编辑器(CoderPad/CodePen/Google Docs)上解决这个问题。

通常情况下,即使编辑器支持执行代码,你也不允许执行代码。因此,不要依赖它来验证你解决方案的正确性。根据你申请的职位不同,格式会略有不同。许多公司喜欢使用CoderPad进行协作代码编辑。CoderPad支持程序的运行,因此可能会要求你修复你的代码,以便能够运行。对于前端面试,许多公司喜欢使用CodePen,因此熟悉这类基于Web的编码环境的用户界面将是值得的。

在你进行电话面试之前,也要查看编程面试的最佳实践,了解在电话面试之前的要做和不要做。

1.5. 现场面试

频率:几乎总是

如果你已经到了这个阶段,恭喜你!这通常是做出录取决定之前的最后阶段。进入现场面试阶段的候选人将被要求在办公室进行面对面的面试。如果你是海外候选人,公司甚至可能会安排你飞到当地,并为你的住宿支付费用!

现场面试阶段通常包括多轮(编程、系统设计、行为)面试,预计会持续几个小时。由于你在现场,可能会被要求与面试官进行白板练习,通常是解决一个算法问题或一个系统设计问题。你可能还需要携带自己的笔记本电脑,在现场解决一个项目/解决一个编码问题。

对于小型(非上市)公司的现场面试,大多数公司将允许(并偏好)你使用自己的笔记本电脑。因此,提前准备你的开发环境非常重要。

如果公司提供午餐,你可能还会与员工一起进行午餐会话,你可以在会话中了解更多关于公司文化的信息。

2. 学习和练习编程面试

下一步,也是最重要的一步是在你选择的编程语言中练习解决算法问题。虽然《Cracking the Coding Interview》是一个很好的资源,但我更喜欢通过实际解决问题来学习。

有许多平台可以用于这个目的 - 如LeetCode、HackerRank和CodeForces。根据我的个人经验,LeetCode问题最适合面试准备,而HackerRank和CodeForces更适合竞技编程。

然而,LeetCode有成千上万的问题,要知道从哪里开始,或者如何组织你的练习,可能会令人生畏。我在这里提供了推荐的准备计划和结构化资源:

2.1 编程面试学习计划

为编程面试准备的推荐时间段是3个月(每周11小时,即每天2-3小时),以便更全面地准备。我分享了我的3个月学习计划,其中提供了一周一周的编程面试主题列表,以及应该按优先顺序逐个解决的资源和练习问题。我还将很快添加推荐的1个月和1周学习计划内容。

如果你准备时间少于3个月,你可以使用由我构建的Grind 75工具生成自己的学习计划,该工具根据你剩余的时间生成推荐的编程面试学习计划。它背后的算法包括问题按优先级排名以及覆盖的主题广度和深度的平衡。

2.2 练习中使用的资源

在市场上,有很多资源竞争你的注意力,其中很多只是为了你的钱而不提供任何价值。如果我必须优先考虑 - 这些是我会同时使用的顶级编程面试准备资源:

  • 《Cracking the Coding Interview》:编程问题的模式
  • AlgoMonster
  • 我的(免费)编程面试最佳实践指南
  • 我的(免费)编程面试技术指南
  • 我的(免费)算法学习指南

3. AlgoMonster

除了通过练习和易于理解的指南帮助你掌握重要的编程面试数据结构和算法问题外,AlgoMonster还具有合成常见面试问题模式的额外优势,你可以将其应用于解决你以前从未遇到过的任何其他问题。由Google工程师制作,与LeetCode的不受结构约束相比,这绝对是一个质量平台。所有常见的编程语言都涵盖了数据结构和算法问题 - 包括Python、Java、C#、JavaScript、C++、Golang等。立即加入,享受70%的折扣 →

3.1 Grokking the Coding Interview: Patterns for Coding Questions

这个由Design Gurus推出的课程扩展了推荐练习问题上的问题,但是从问题模式的角度来练习,这是我也同意的一种方法,我个人也用它来提高编程面试水平。该课程允许你在Java、Python、C++、JavaScript中练习选定的问题,并提供这些语言的示例解决方案以及逐步可视化。学习和理解模式,而不是死记答案!立即获得终身访问权 →

3.2 我的(免费)编程面试最佳实践指南

如果你已经阅读过顶级科技公司使用的编程面试评估标准,你可能会对评估项目的数量以及如何始终展示录用行为感到不知所措。

这份编程面试最佳实践指南综合了在编程面试中展示录用信号的行动建议。

我建议在练习编程面试问题时将这个指南内化并使用作为辅助工具 - 以确保你从一开始就养成良好的面试习惯和肌肉记忆。

3.3 我的(免费)编程面试技术指南

是否有一种结构化方法可以增加你找到编程面试问题良好解决方案的机会?如何优化你的方法的时间和空间复杂度?我的编程面试技术指南教你一些处理你以前从未遇到过的问题的技术 - 比如问题可视化、手动解决、将问题分解成子问题等。

3.4 我的(免费)算法学习速查表

我不确定这些是否符合深入指南的标准 - 它们更像是“学习速查表”的一页纸,列出了最佳学习资源、最佳LeetCode练习问题和需要记住的事项。然而,它们确保你涵盖了所有最重要的方面,特别是当你没有时间时。因为这些也是帮助我拿到顶级科技公司offer的笔记 - 它们绝对有效。

更多关于编程面试准备的提示,请参阅我的完整编程面试准备指南。

3.5 尝试模拟编程面试(与Google和Facebook工程师)

在面试官面前编码可能是一种令人紧张的经历,特别是如果你以前从未这样做过 - 这就是为什么获得实践经验如此重要的原因。

interviewing.io目前是市场上最好的模拟技术面试资源。它允许你预约与真实的Google和Facebook工程师进行模拟编程面试,尽管是匿名的。你甚至可以为特定角色(如移动、前端、工程管理)预约面试。更好的是 - 如果你想更轻松地过渡到真实世界的编程面试 - 你可以观看录制的面试,看看电话面试是什么样子的。

此外,如果你在模拟面试中表现良好,你将能够解锁“工作页面”,从而可以直接预约顶级公司如Uber、Lyft、Quora、Asana等的面试。我既是面试官也是面试者,发现interviewing.io的体验非常好。

4. 准备系统设计面试

如果你是一名中级或高级候选人,你可能期望在技术面试中遇到系统设计问题。它们在LeetCode上没有得到充分的覆盖,而且好的资源仍然很难找到。

系统设计面试的目标是评估候选人设计涉及多个组件的真实软件系统的能力。

利用最佳的系统设计面试准备资源

一些最佳的系统设计面试准备资源包括:

  1. ByteByteGo - 这是由Alex Xu开发的新的系统设计课程,他是《系统设计面试》系列书籍的作者,这些书在亚马逊上畅销。该课程涵盖了系统设计基础知识,然后深入讲解了超过10个常见产品的设计(例如,设计YouTube、Facebook新闻源等)和多个大数据和存储系统的设计(例如,设计聊天系统)。对于每个深入讲解,概念都有解释,并使用了综合性的图表,使其对任何高级别的人都很容易理解。

  2. “Grokking the System Design Interview” by Design Gurus - 这可能是互联网上最著名的系统设计面试课程,与大多数其他课程的不同之处在于,它完全基于文本,这对于更喜欢阅读而不是观看视频的人(比如我自己!)是非常棒的。它包含了流行的系统设计问题的仓库,以及系统设计基础知识的词汇表。我个人已经完成了这个课程,并推荐许多其他人使用它。强烈推荐!

  3. “System Design Interview Course” by Exponent - 该课程涵盖了系统设计基础知识,并具有大量流行系统设计问题的视频模拟面试。一些问题有文本答案以及数据库模式和API的参考(我觉得这很有帮助)。虽然订阅价格可能对于仅仅涵盖系统设计面试内容的课程来说有点昂贵,但他们还提供质量很高的数据结构、算法和行为面试的技术内容。一站式平台的便利性,覆盖了技术面试准备的所有方面,非常诱人。

  4. “Grokking the Advanced System Design Interview” by Design Gurus - 我还没有尝试过这个,但它是由创建《系统设计面试课程》的同一团队制作的,所以应该很不错!在我看来,除非你是非常高级的候选人或者是专业职位,否则你可能不需要这个。

在这里查看其他系统设计准备指南和资源。

5. 准备行为面试

每家顶级科技公司都至少有一轮软件工程师的行为面试。通常,软件工程师的行为面试包括:分享简历上过往经历的细节,提供过去展示某些行为属性的情况和行为示例(例如,冲突管理、数据驱动)分享抱负和职业规划。

尽管这些面试看起来“空洞”或者没有结构,但实际上有一种结构化的方法可以为行为面试做准备:

  1. 了解STAR格式来回答问题
    STAR格式帮助你组织回答行为问题。这最适用于需要叙述过去经历或行为的问题。

    • 情境(Situation):分享引发任务的情况的详细信息
    • 任务(Task):解释你需要实现的目标或你需要解决的问题;侧重于范围、严重程度、具体的基准/结果要求
    • 行动(Action):解释你为实现目标所做的事情,描述你的选择和决策过程
    • 结果(Results):描述你行动的结果以及你学到了什么
    • :行为问题的STAR格式回答方式
  2. 练习软件工程师最常见的行为问题
    参考软件工程师最常见的30个行为问题

有关更多行为面试准备的提示,请参阅我的完整行为面试准备指南。

6. 为软件工程师的职位报价包进行协商

最后,在面试之前,你绝对需要准备的是对软件工程师的薪资谈判。在面试过程的任何时候,关于薪资的谈话都可能出现。我们还有关于谈判策略和软件工程师薪酬的深入指南。

这就是我所能提供的一切 - 对于软件工程师面试准备过程的每个步骤的更多细节,请通过侧边栏或导航到下一页中的每个主题进行深入了解!

参考

https://www.techinterviewhandbook.org/software-engineering-interview-guide/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/784148.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局 导读 这篇文章开始&#xff0c;依次学习鸿蒙的八大布局&#xff0c;这是第一篇&#xff0c;所以顺带也会聊聊通用属性。 文档地址 文档地址 如何定义一个线性布局 Android中是使用LinearLayout来构建线性布局的&#xff0c…

ChatGPT chrome扩展下载与安装

官方下载地址 https://chromewebstore.google.com/detail/lpbhmlbicmgjpacbofijdfpcplfhakeo 截图 安装 离线安装 下载地址 https://static.xutongbao.top/app/chatgpt-chrome-crx-v0.0.7.zip 打开链接 chrome://extensions/ 人工智能学习网站 https://chat.xutongbao.to…

谷粒商城——RabbitMQ

0. 消息中间件 1.RabbitMQ的核心概念 2. 工作流程 整体架构&#xff1a; 相关细节&#xff1a; 上述要注意的是&#xff1a; 路由键包含在message的头中&#xff0c;其作用是用于指定该消息存储与哪个消息队列中。 信道是客户端&#xff08;包括生产者和消费者&#xff09;用…

Vue 组件化编程

Vue 组件化编程 非单文件组件 定义组件 使用Vue.extend(options&#xff09;创建 不要写eldata要写成函数&#xff0c;避免组件被复用时&#xff0c;数据存在引用关系 注册组件 局部注册&#xff1a;new Vue()的时候&#xff0c;options传入components全局注册&#xff1a;V…

回收站删除以后还能撤销吗 回收站删除以后怎么找回 回收站清空了怎么恢复 easyrecovery数据恢复软件

回收站删除以后能撤销吗&#xff1f;有不少网友前一秒清空回收站&#xff0c;后一秒就开始在网上疯狂搜寻如何撤销删除回收站的办法。实际上&#xff0c;清空回收站并不可怕&#xff0c;被删除的数据仍然保存在我们的电脑硬盘中。今天我为大家介绍回收站删除以后怎么找回数据的…

HTTP 常见面试题(计算机网络)

HTTP 基本概念 一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本…

苍穹外卖04 (新增内表的外键id获取,多表分页查询,多表批量删除,修改先查在改内表外键id用主表的,起售时包含了“停售”状态的外关联表)

1. 新增套餐 1 需求分析和设计 业务规则&#xff1a; 套餐名称唯一 套餐必须属于某个分类 套餐必须包含菜品 名称、分类、价格、图片为必填项 添加菜品窗口需要根据分类类型来展示菜品 新增的套餐默认为停售状态 2 代码实现 1 根据分类id查询菜品 DishControllerGetMa…

【C语言环境】Sublime中运行C语言时MinGW环境的安装

要知道&#xff0c;GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的&#xff0c;如果我们想在 Windows 平台使用 GCC 编译器&#xff0c;可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种&#xff0c;分别为 MinGW 和 Cygwin…

数据分析之POWER BI Desktop可视化应用案列

在power bi中导入数据 导入前期建好的模型 简单介绍&#xff08;power bi desktop&#xff09; 将右边字段全部展开 各类数据 所作的模型 在excel中是单向的&#xff0c;power bi 中可以是双向的 右键单击----点击属性 选择两个---在两个方向上应用安全筛选器 变为双向的…

每日面经分享(pytest入门)

1. pytest具有什么功能 a. 自动发现和执行测试用例&#xff1a;pytest可以自动发现项目中的测试文件和测试函数&#xff0c;无需手动编写测试套件或测试运行器。 b. 丰富的断言函数&#xff1a;pytest提供了丰富的断言函数&#xff0c;方便地验证测试结果是否符合预期。断言函…

flask的使用学习笔记1

跟着b站学的1-06 用户编辑示例_哔哩哔哩_bilibili flask是一个轻量级&#xff0c;短小精悍&#xff0c;django大而全 创建&#xff1a; manage.py和一个和项目名称相同的目录&#xff08;static&#xff08;前端生成的dist&#xff09;、templates&#xff08;html文件&…

【吴恩达机器学习笔记】神经网络初探

前言 传统机器学习不足 【例】预测房价&#xff0c;不同的房子有上百个特征 如果要包含所有的二次项&#xff08;即使只是二次&#xff09;&#xff0c;最终也有很多项&#xff0c; 每个参数都有 n 个变量&#xff0c;那二次项数量将会是 n^2 /2 级别的量级&#xff0c;模型…

并查集

本文用于个人算法竞赛学习&#xff0c;仅供参考 目录 一.什么是并查集 二.并查集实现 三.路径优化 四.时间复杂度 五.并查集路径压缩 模板 五.题目 一.什么是并查集 并查集&#xff08;Disjoint Set&#xff09;是一种数据结构&#xff0c;用于处理一系列不相交的集合的合…

一文了解JAVA的常用API

目录 常用kpimathSystemRuntimeObjectObjectsBigIntegerBigDecima正则表达式包装类 常用kpi 学习目的&#xff1a; 了解类名和类的作用养成查阅api文档的习惯 math 工具类。因为是工具类&#xff0c;因此直接通过类名.方法名(形参)即可直接调用 abs&#xff1a;获取参数绝对…

Linux学习:进程(4)程序地址空间(笔记)

目录 1. Linux下各种资源的内存分布2. 物理地址与虚拟(线性)地址3. 程序地址空间的区域划分4. 地址映射与页表5. 缺页中断 1. Linux下各种资源的内存分布 2. 物理地址与虚拟(线性)地址 在有关进程创建的初步学习中&#xff0c;我们了解了fork函数创建子进程的方式。此种进程的创…

Spring Boot 一.基础和项目搭建(上)

之前也自学过SSM框架&#xff0c;Spring Boot框架&#xff0c;也动手写过几个项目&#xff0c;但是这是第一次完整的记录。从0开始&#xff0c;把一些细节整理了一下。 大概会分为十几小节&#xff0c;这是一个学习的过程&#xff0c;更是一个思考的过程&#xff0c;废话不多说…

金融汽车科技LLM

汇丰银行 众安保险 1. AIGC重塑保险价值链 小额高频 2.构建智能应用的技术方案演进 增加微服务 长记忆&#xff1a;向量库短记忆&#xff1a;对话历史&#xff0c;思考路径&#xff0c;执行历史 中台架构设计 蔚来汽车在大模型的应用实践 公司介绍 应用架构 应用实践 4.大…

Django框架之DRF(武沛齐全)

一、FBV和CBV FBV&#xff0c;function base views&#xff0c;其实就是编写函数来处理业务请求。 from django.contrib import admin from django.urls import path from app01 import views urlpatterns [path(users/, views.users), ] from django.http import JsonResp…

快速排序---算法

1、算法概念 快速排序&#xff1a;通过一趟排序将待排记录分隔成独立的两部分&#xff0c;其中一部分记录的数据均比另一部分的数据小&#xff0c;则可分别对这两部分记录继续进行排序&#xff0c;以达到震哥哥序列有序。 快速排序的最坏运行情况是O()&#xff0c;比如说顺序数…