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

news2025/1/18 3:30:42

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

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

相关文章

编译好的C++应用程序拷贝到其它电脑,提示dll未找到依赖项的解决方法。

编译好的C应用程序拷贝到其它电脑上,运行时出现提示dll未找到依赖项。 由于dll依赖于其它dll,在开发用电脑上的环境不能完全与其它电脑相同。 解决办法是找到调用到的dll依赖的所有dll,拷贝到运行目录下。 在开发电脑上: 1、开…

一款功能强大且易于使用的视频剪辑应用程序

一款功能强大且易于使用的视频剪辑应用程序,它提供了丰富多样的转场特效和滤镜,让用户能够轻松地为视频添加各种炫酷的效果。与其他视频编辑软件相比,剪映国际版的最大亮点在于其完全免费使用。首先,剪映国际版为用户提供了丰富的…

ChatGPT/GPT4科研应用与绘图技术及论文写作

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

初识MySQL(中篇)

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法,看完代码自己敲一遍,十分有用 目录 1.SQL语言 1.1 SQL语言组成部分 2.MySQL数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 3.创建数据表 3.1 创建数据表方法1 …

Lan仿朋友圈系统开源源码 表白墙 打造朋友圈工具 仿朋友圈界面 朋友圈模拟器在线

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) Lan仿朋友圈系统开源,可用于表白墙等…

【DA-CLIP】test.py解读,调用DA-CLIP和IRSDE模型复原计算复原图与GT图SSIM、PSNR、LPIPS

文件路径daclip-uir-main/universal-image-restoration/config/daclip-sde/test.py 代码有部分修改 导包 import argparse import logging import os.path import sys import time from collections import OrderedDict import torchvision.utils as tvutilsimport numpy as…

clickhouse 源码编译部署

clickhouse 源码编译部署 版本 21.7.9.7 点击build project,编译工程,经过一定时间(第一次编译可能几个小时,后续再编译,只编译有改动的文件)生成release目录 在cmake-build-release → programs目录下…

CATIA软件 焊点坐标(BiW Welding SpotPoint)导出txt文本的操作方法

通常我们客户给的工件是带焊点球的形式,且可导出焊点坐标。如下图所示的焊点位置标识及坐标,即是CATIA中Automotive BiW Fastening模块下的BiW Welding SpotPoint焊点定义。 遇到这样的形式,要导出焊点坐标txt文本,可按如下图片找…

C语言—用EasyX实现反弹球消砖块游戏

代码效果如下 #undef UNICODE #undef _UNICODE #include<graphics.h> #include<conio.h> #include<time.h> #include<stdio.h>#define width 640 #define high 480 #define brick_num 10int ball_x, ball_y; int ball_vx, ball_vy; int radius; int ba…

Chatgpt掘金之旅—有爱AI商业实战篇|语言翻译|(五)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 引言 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着AI技术的快速发展和应用领域的不断拓展&#xf…

《QT实用小工具·十二》邮件批量发送工具

1、概述 源码放在文章末尾 该项目实现了邮件的批量发送&#xff0c;如下图所示&#xff1a; 项目部分代码如下所示&#xff1a; #ifndef SMTPCLIENT_H #define SMTPCLIENT_H#include <QtGui> #include <QtNetwork> #if (QT_VERSION > QT_VERSION_CHECK(5,0,…

AcWing-游戏

1388. 游戏 - AcWing题库 所需知识&#xff1a;博弈论&#xff0c;区间dp 由于双方都采取最优的策略来取数字&#xff0c;所以结果为确定的&#xff0c;有可能会有多个不同的过程&#xff0c;但是我们只需要关注最终结果就行了。 方法一&#xff1a; 定义dp[i][j] 表示区间…

从“量子”到分子:探索计算的无限可能 | 综述荐读

在2023年年末&#xff0c;两篇划时代的研究报告在《科学》&#xff08;Science&#xff09;杂志上引发了广泛关注。这两篇论文分别来自两个研究小组&#xff0c;它们共同揭示了单氟化钙分子间相互作用的研究成果&#xff0c;成功地在这些分子间创造出了分子量子比特。这一成就不…

AI大模型与网球运动结合的应用场景及案例分析

AI大模型与网球运动结合的未来前景是广阔的&#xff0c;它不仅能够提升运动员的训练和比赛表现&#xff0c;还能改善教练的策略制定、增强观众的观赛体验以及优化网球赛事的管理。以下是几个具体的应用场景&#xff1a; 1. 运动员技能和表现分析 AI大模型可以通过分析高速摄像…

ROS 2边学边练(12)-- 创建一个工作空间

上一篇我们已经接触过工作空间的概念&#xff0c;并简单了解体验了一点构建包、测试包的流程&#xff0c;此篇会深入一点学习工作空间相关内容。 前言 一个工作空间是包含了ROS 2的功能包的目录&#xff08;文件夹&#xff09;&#xff0c;在使用ROS 2之前我们得激活一下目标工…

希尔排序和快排里的小区间优化

希尔排序 希尔排序是插入排序的优化。 当一串数是逆序时&#xff0c;那么每插入一个数&#xff0c;前面的数都会向后面挪动。 那么这是插入排序的时间复杂度&#xff0c;就会达到O(n^2) 希尔排序是对数组里的数进行预排序。 防止插入排序出现最坏的情况。 预排序&#xf…

2014最新AI学法减分交管12123小程序源码最新玩法

2014最新AI学法减分交管12123小程序源码最新玩法利用ChatGPT实现拍照搜题 利用ChatGPT实现拍照搜题 学法减分这个项目是几年之前的项目&#xff0c;老朋友都知道&#xff0c;以前我用Python实现了向量检索&#xff0c;也就是当时和大家说到的AI题库&#xff0c;那时候国内还没…

[lesson05]引用的本质分析

引用的本质分析 引用的意义 引用作为变量别名而存在&#xff0c;因此在一些场合可以代替指针 引用相对于指针来说具有更好的可读性和实用性 注意&#xff1a; 函数中的引用形参不需要进行初始化&#xff01;&#xff01; 特殊的引用 const引用 在C中可以声明const引用 cons…

957: 逆置单链表

学习版 【C语言】 #include<iostream> using namespace std; typedef struct LNode {char data;struct LNode* next;LNode(char x) :data(x), next(nullptr) {} }LNode; void creatlist(LNode *&L) {int n;char e;cin >> n;LNode* p1, * p2;p1 L;for (int i…

基于SpringBoot和Vue的教务网络管理系统的设计与实现【附源码】

1、系统演示视频&#xff08;演示视频&#xff09; 2、需要交流和学习请联系