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

没有人有时间去做成百上千道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.rhkb.cn/news/296806.html

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

相关文章

Linux------一篇博客了解Linux最常用的指令

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:Linux 🤝希望本文对您有所裨益,如有不足之处&#…

LeetCode-199. 二叉树的右视图【树 深度优先搜索 广度优先搜索 二叉树】

LeetCode-199. 二叉树的右视图【树 深度优先搜索 广度优先搜索 二叉树】 题目描述:解题思路一:广度优先搜索解题思路二:深度优先搜索解题思路三:0 题目描述: 给定一个二叉树的 根节点 root,想象自己站在它…

基于顺序表的学生成绩管理系统

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示, 包括创建、测量(onMeasure)、布局(onLayout)、绘制(onDraw)以及销毁等流程。 自定义View主要涉及到onMeasure、…

设置asp.net core WebApi函数请求参数可空的两种方式

以下面定义的asp.net core WebApi函数为例,客户端发送申请时,默认三个参数均为必填项,不填会报错,如下图所示: [HttpGet] public string GetSpecifyValue(string param1,string param2,string param3) {return $"…

LeetCode-108. 将有序数组转换为二叉搜索树【树 二叉搜索树 数组 分治 二叉树】

LeetCode-108. 将有序数组转换为二叉搜索树【树 二叉搜索树 数组 分治 二叉树】 题目描述:解题思路一:中序遍历,总是选择中间位置左边的数字作为根节点解题思路二:0解题思路三:0 题目描述: 给你一个整数数…

【软件工程】概要设计

1. 导言 1.1 目的 该文档的目的是描述学生成绩管理系统的概要设计,其主要内容包括: 系统功能简介 系统结构简介 系统接口设计 数据设计 模块设计 界面设计 本文的预期读者是: 项目开发人员 项目管理人员 项目评测人员(…

利用开源AI引擎:打造安全生产作业人员穿戴检测应用平台

在电力行业中,作业人员的安全是至关重要的。为了确保工作人员在进行电力设施操作时的个人安全,需要对作业人员的安全穿戴情况进行严格监控。随着计算视觉技术的发展,特别是图像处理和目标检测技术的进步,我们可以通过自动化的方式…

扫雷(蓝桥杯)

题目描述 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下, 在一个二维平面上放置着 n 个炸雷,第 i 个炸雷 (xi , yi ,ri) 表示在坐标 (xi , yi) 处存在一个炸雷,它的爆炸范围是以半径为 ri 的一个圆。 为了顺利通过这片土…

链路追踪原理

分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务、服务内缓存变为分布式缓存、服务组件通…

网络原理 - HTTP / HTTPS(3)——http响应

目录 一、认识 “状态码”(status code) 常见的状态码 (1)200 OK (2)404 Not Found (3)403 ForBidden (4)405 Method Not Allowed (5&…

Linux系统Docker搭建Wiki.Js应用程序并结合cpolar实现公网访问内网知识库

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

Matlab梁单元有限元编程:铁木辛柯梁VS欧拉梁

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…

我与C++的爱恋:内联函数,auto

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:我与C的爱恋 ​ 一、内联函数 1.内联函数的概念 内联函数目的是减少函数调用的开销,通过将每个调用点将函数展开来实现。这种方法仅适用于那些函数体小、调用频繁的函数。 …

【JavaWeb】百度地图API SDK导入

百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com) 登录注册,创建应用,获取AK 地理编码 | 百度地图API SDK (baidu.com) 需要的接口一:获取店铺/用户 所在地址的经纬度坐标 轻量级路线规划 | 百度地图API SDK (baidu.com) 需要的…

java-ssm-jsp-旅游景点数据库管理系统

java-ssm-jsp-旅游景点数据库管理系统 获取源码——》哔站搜:计算机专业毕设大全 获取源码——》哔站搜:计算机专业毕设大全

自定义树形筛选选择组件

先上效果图 思路:刚开始最上面我用了el-input,选择框里面内容用了el-inputel-tree使用,但后面发现最上面那个可以输入,那岂不是可以不需要下拉就可以使用,岂不是违背了写这个组件的初衷,所以后面改成div自定…

5.vector容器的使用

文章目录 vector容器1.构造函数代码工程运行结果 2.赋值代码工程运行结果 3.容量和大小代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.互换容器代码工程运行结果 7.预留空间代码工程运行结果 vector容器 1.构造函数 /*1.默认构造-无参构造*/ …

StarRocks实战——携程火车票指标平台建设

目录 前言 一、早期OLAP架构与痛点 二、指标平台重构整体设计 2.1 指标查询过程 2.1.1 明细类子查询 2.1.2 汇总类子查询 2.1.3 “缓存” 2.2 数据同步 三、Starrocks使用经验分享 3.1 建表经验 3.2 数据查询 3.3 函数问题 四、查询性能大幅提升 五、 后续优化方…

C++实现二叉搜索树的增删查改(非递归玩法)

文章目录 一、二叉搜索树的概念结构和时间复杂度二、二叉搜索树的插入三、二叉搜索树的查找四、二叉搜索树的删除(最麻烦,情况最多,一一分析)3.1首先我们按照一般情况下写,不考虑特殊情况下4.1.1左为空的情况&#xff…