一位同学拿到 亚马逊 offer 的经历 (毫无保留)

之前分享过很多国内的互联网公司的面试心得,这几天看到一位同学面试外企的心得,写的很全面,换个视角看看国外互联网是怎么面试人才的。

从这 5 个方向进行了总结:算法刷题、简历、系统设计、面试技巧、offer沟通

希望对想去外企的小伙伴的有帮助。


作者:默罕默德 | 编辑:JackCui

https://zhuanlan.zhihu.com/p/546079576

01 

前言

本文记录了我从投亚马逊北京岗位到拿到offer的过程,将自己如何准备面试,以及关于面试流程所了解到的问题,做一个总结,希望能帮助想去亚马逊的同学,因为面试过程中也有很多人给了我帮助。

68a1b501eaf9f15410af7f2113a73f05.png

虽然最后我没有选择亚马逊,但亚马逊不论是面试体验还是offer吸引力,都是很棒的。以后有机会,还是希望能去亚马逊工作的。之后会再写一篇介绍我拿到新加坡Tik Tok offer的经验。

这次面试亚马逊,最终拿到SDE2,也就是L5的offer,薪资也很满意,不比国内大厂同级别低。

02 

拿到亚马逊offer的经历

我找了个亚马逊的员工帮我内推,他在美团干了九个月跑的,今年4月去的亚马逊。所以想去外企早点动身,不用担心当前工作不够一年。

5.20投的简历,5.24收到OA笔试邮件。SDE2 OA包含1)coding, 90分钟,两道题;2)工作模拟, 15分钟;3)工作风格调查。邮件还包含个人信息完善部分。

OA在7天内完成都行。我是在5.29做的笔试题。后来了解这个笔试题是HR随机选的,一般都是中等难度。但我遇到了一个hard,LeetCode 2281题,第一题过了,这个hard只过了一部分测试用例。担心OA都过不了,那几天还是有点失落的。同时,在网站上看到

这样的信息,以为OA挂了。不过6.14,过了半个月,通知我面试。惊喜。后来认识的亚马逊HR帮我查了,说我OA结果还不错。后来又了解到很多人都没有全部case都过,也拿到了面试邀请。

不过从OA结束到面试邀请时间不一定,有的两三天,有的半个月。做OA coding时, 还是要注意代码风格,变量命名,不要写过多无用冗余的注释,代码要简洁。

我六月初面试就基本结束了,所以把面试推到六月底开始,好有时间准备下,总共4轮,我选的是连续4天每天一轮。这期间又把算法,系统设计好好准备了下。

亚马逊面试不问八股文。就项目,coding,系统设计。总的来说,亚马逊的面试可以说是很专业,有水准,让人尊敬。

一面前半个小时问项目,后半个小时做题,加follow up。二面是系统设计。前半个小时问项目,很有水平,问道了核心难点,别的公司面试的时候问道都比较浅。

后半个小时系统设计,亚马逊的系统设计用的画图网站很难用,可以用自己的本地或者在线画图网站,屏幕共享即可。三面是BQ考察。前半个小时BQ问题。

后半个小时做一个题。两次coding都是中等难度。四面也是先聊半个小时项目。后半个小时做了一个简单的系统设计。建议换个不同的项目聊,可以更全方面的展示自己能力。

面试官都会做记录,四轮面试结束后,他们要一起讨论是否给候选人过。

亚马逊面试流程前面会很慢,尤其是投简历后到OA,OA后到面试邀请。面试后就很快了,一般两三天HR会联系你,告诉你面试结果。然后收集薪资,问你期望薪资。亚马逊Offer薪资是不可以compete的,申请下来是多少就定了。

哈哈,面试完拿到offer后,我还去卧佛寺了一趟,去还愿,不过周一去的,没有开门。

前面记录了面试流程,下面准备从以下5个方面做个总结:

  • 算法刷题

  • 简历

  • 系统设计

  • 面试技巧

  • offer沟通

03 

算法刷题

我是今年四月底开始准备换工作,准备到五月中旬开始投简历。作为程序员,面试必须是要做题的,我从今年年初断断续续开始刷题,之前总共LeetCode刷了有300道,今年面试前又进行总结复习,总共刷了470道,算是刷的数量少的。不过够用了。

刷够300多道,多总结,保持熟练度,大厂面试基本都没问题了。况且,我从去年换工作,大小厂面试也有二三十家了,基本没遇到过hard,细心,保持镇定,基本都能做出来。

做题量来说,300可以出去面试了,500多比较稳,不慌。我认识很多去面外企的都刷了六七百道了。平时刷题,超过10分钟还没有思路直接看LeetCode上面的优质答案,刷的题少不会做题很正常,关键是自己一定弄明白,然后自己写写出来。自己写出来是重点。

而且经典问题要用自己的话总结一遍。比如二分查找,一般二分查找怎么写, 改变一下,如果问题是在有重复的数组中找到最后一个target,或者找到第一个target,那判断条件怎么写?一定要参考优质答案,然后自己总结并实践。

还有一点是,要细心,一定要处理好边界条件。初级阶段是,很多题指导思路,但对于细节把握不牢,因为没有仔细去思考细节这样写的原因。

虽然大部分面试不用上级运行出来,但我遇到的大部分面试管还是能注意到关键细节问题的。比如,快速排序,原理很简单,但不好好准备,没几个人能写出来无bug的代码。刷的题多了,思路基本都有了,就需要在做题的时候,把细节问题想清楚了再写。负责很难让面试官满意。

常见算法题有:数组、字符串、链表。LRU被问过4次,后来可以bugfree 直接写出来了。图,最小生成树,prim,Kruskal,Dijkstra,朋友圈算法等, 二叉树,DP,我都有好好准备,但是面试都没有遇到过。

所以准备算法题的时候,可以先把 HotTop100 刷的明明白白,然后再逐步将不常见的算法类型也攻克。labaladong 和 宫水三叶的题解都不错。算法题是不能有失误的,这也是最基本的。而且一般面试都不会出hard,基本都是mid。

04 

简历

之前帮公司招人收集简历的时候,基本都是社招简历,真是见识了各种风格的简历。不是hr,有些简历我也是一眼就像Pass掉的,主要项目不清晰,简历写的很乱,花样很多,这一看就不专业。

程序员的简历,要干净,重点突出,才显得专业。一般都不放照片,民族,籍贯这些也都是多余信息,电话,邮箱即可。教育背景,专业技能,工作经历,个人评价这四部分即可。

重点在工作经历里面,社招的不局限与简历是一页还是两页,把重点项目按照STAR原则写就好。我写简历前,会按照STAR原则,将项目好好梳理一下,尤其是我做了什么,难点是什么,以及成就。

最后还要加一点反思,之前方案有什么问题,这个很多公司都要问的。项目整理好了后,再往简历上写。之后面试的时候,介绍时,也比较有条理。

我的简历问过一些猎头,以及大厂公司的HR,说算是还不错的。当然,我也见过更漂亮的简历,用的是LaTeX写的,很简洁。

外企一般要准备英文简历,不过我投的是北京的亚马逊,只有中文简历也可以。

05 

系统设计

社招三年以上都要考系统设计的。我买了grokking the system design interview z这个门课程,挺不错的。国内价格599,开VPN后,海外价格会不同,香港最便宜,好像是三四百。

上面这门课程将基本的系统设计要考虑到的点,常见系统设计的核心问题思路都有很好的讲解,且全都是英文的,不过并不难,也能锻炼阅读英语的能力。

看过三四个章节后,建议YouTube上面搜一下System design视频,面试时候的表达,条理也很重要。之前我面试没有条理,只将核心问题给了解决办法,看过是视频后,会更有条理。

06 

面试技巧

后端开发程序员面试外企,硬实力部分主要是算法、系统设计,有的还要求英语。不过硬实力有了,不一定发挥好,或者说错话,导致被Pass。

有个朋友面试亚马逊,面试官文离职原因,说领导不行,这个不能这么说啊。可能就是一时嘴快说漏嘴了。这个问题也很常见,面外企就说希望WLB被,向多陪陪家人,想多点自己学习时间。

面试国内大厂,就说想换个环境,想要更多挑战。如果不是面试官不想要你,就不会再继续为难你。

在做算法时,一定要提前和面试管沟通好问题,以及边界case。我一般是在快速思考后,然后面试官提问,不明白的,以及特殊case怎么处理提前问清楚。然后就是快速把代码写出来。

写完代码后,不要着急说写完了,一定要在检查一遍,一般都会有小的问题。不要被面试官发现了再指出来。

面系统设计时,提前明确需求更重要。面试官很看重沟通能力。提前把问题,以及可能面试官都没想到的关键点提出来,会增加好感。后来亚马逊hr和我说过,面试官评价里面有个沟通很好,提前明确了需求。如果遇到没做过的设计题,也不能慌,总得给个答案不是,总不能说不会吧。

先把问题简化,模型简化,再一步步去解决。面试Tik Tok让我设计一个打车系统,这个真没遇到过。司机和乘客都在地理位置上不断移动,这怎么搞。想了几分钟后,我按最原始的思路,将地图分隔成很多小块,然后打车是,找乘客所在小块周围8个小块的司机,进行通知,匹配打车。

还有一点就是及时观察面试官态度,自我介绍是不是说的太细太多了,方案是不是面试官不太喜欢,及时调整。BQ行为考察的问题,在基于自己实际情况下,慢一点回答,多想想,朝着有利,真诚真实的方向说。

07 

offer沟通

如果幸运走到这一步,谈薪真的是很重要了。

对于dream company,我一般先找几个小公司练手,然后找几家开工资比较高的好好面,拿到较高的工资,最后去面试想去的公司,走到最后谈薪时,会问你当前薪资,以及手里offer的薪资。这两个都会参考的。要把握好面试进度。

问我期望薪资是多少时,我一般说30%左右,不过不绝对,根据我的面试表现和公司薪酬体系来。

想拿到好的薪资,主要还是两点,面试表现好,当前薪资较高,另外有其他offer也是一个因素。最重要的是,缺不缺人,缺人面试好薪资就开的好。

今年大厂小厂都在裁员,面试环境很严峻,我前后投了八九家,小公司练手的基本都给我挂了,最后拿到offer的只有亚马逊,和新加坡TikTok。

还有一个走完流程不发offer的,两家主动终止面试。去年投的国内大厂,除了腾讯没有拿offer也都拿到了,有个搜狗offer,后来被合并入腾讯。面试挂了不要否定自己。

要好好刷题,好好准备基础知识,面试常问的知识点要用自己的话总结下来;不要广撒网,这样很浪费时间,要好好准备然后拿两三个练手后直接去面大公司。

好好准备,你也可以拿到外企的offer。。

08 

絮叨

这篇文章的作者,最后选择了去 TikTok,去新加坡工作了。

春招已经开始,想要找工作的小伙伴,记得提前准备。

祝在座的各位,都能找到满意的工作。

-END-


往期推荐:点击图片即可跳转阅读

b091df80633edb1cfee25af9c7c3a43d.jpeg

多么卑微的硬件,干了多年还打杂。

40f10e0589fd8d9dace41eec7fa0c3d4.png

快来,教你如何注册并使用ChatGPT。

6c7b771579d0c4d737e29c193d5bdd23.jpeg

ChatGPT发展历程、原理、技术架构详解和产业未来

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一份使用C++亚马逊SDK和线程池实现vstor传输到亚马逊云s3的示例代码: ```c++ #include <iostream> #include <fstream> #include <sstream> #include <thread> #include <mutex> #include <condition_variable> #include <aws/core/Aws.h> #include <aws/s3/S3Client.h> #include <aws/s3/model/PutObjectRequest.h> #include <aws/core/utils/memory/stl/AWSStringStream.h> #include <aws/core/utils/StringUtils.h> #include <aws/core/utils/threading/Executor.h> #include <aws/core/utils/threading/ThreadPool.h> using namespace std; using namespace Aws::S3; using namespace Aws::S3::Model; using namespace Aws::Utils; using namespace Aws::Utils::Threading; // 亚马逊s3存储桶名称和文件名 static const char* BUCKET_NAME = "my-bucket"; static const char* OBJECT_KEY = "my-object-key"; // 读取vstor文件的线程任务类 class FileReaderTask : public Runnable { public: FileReaderTask(const char* file_path, char* buffer, int buffer_size) : m_file_path(file_path), m_buffer(buffer), m_buffer_size(buffer_size) {} void Run() override { ifstream file(m_file_path, ios::binary); if (!file) { cerr << "Failed to open file: " << m_file_path << endl; return; } // 读取文件到缓冲区中 file.read(m_buffer, m_buffer_size); if (!file) { cerr << "Failed to read file: " << m_file_path << endl; return; } m_read_size = static_cast<int>(file.gcount()); } int GetReadSize() const { return m_read_size; } private: const char* m_file_path; char* m_buffer; int m_buffer_size; int m_read_size = 0; }; // 上传vstor文件的线程任务类 class UploadTask : public Runnable { public: UploadTask(S3Client* s3_client, const char* buffer, int buffer_size) : m_s3_client(s3_client), m_buffer(buffer), m_buffer_size(buffer_size) {} void Run() override { Aws::StringStream sstream; sstream << "bytes=" << m_uploaded_size << "-" << (m_buffer_size - 1); Aws::String range_str = sstream.str(); // 构造上传请求 PutObjectRequest request; request.SetBucket(BUCKET_NAME); request.SetKey(OBJECT_KEY); request.SetBody(&(m_buffer[m_uploaded_size]), m_buffer_size - m_uploaded_size); request.SetContentLength(m_buffer_size - m_uploaded_size); request.SetContentRange(range_str); // 执行上传请求 auto outcome = m_s3_client->PutObject(request); if (!outcome.IsSuccess()) { cerr << "Failed to upload object: " << outcome.GetError().GetMessage() << endl; return; } m_uploaded_size = m_buffer_size; } private: S3Client* m_s3_client; const char* m_buffer; int m_buffer_size; int m_uploaded_size = 0; }; int main(int argc, char** argv) { if (argc != 2) { cerr << "Usage: " << argv[0] << " file_path" << endl; return 1; } // 初始化亚马逊SDK Aws::SDKOptions options; Aws::InitAPI(options); // 创建s3客户端 S3Client s3_client; // 创建线程池 ThreadPool thread_pool(4); // 读取vstor文件 const int BUFFER_SIZE = 1024 * 1024; // 缓冲区大小为1MB char buffer[BUFFER_SIZE]; FileReaderTask file_reader_task(argv[1], buffer, BUFFER_SIZE); thread_pool.SubmitRunnable(file_reader_task); file_reader_task.WaitUntilFinished(); // 上传vstor文件 int read_size = file_reader_task.GetReadSize(); for (int uploaded_size = 0; uploaded_size < read_size; ) { UploadTask upload_task(&s3_client, buffer, read_size); thread_pool.SubmitRunnable(upload_task); upload_task.WaitUntilFinished(); uploaded_size = upload_task.GetUploadedSize(); } // 关闭线程池 thread_pool.Shutdown(); // 关闭亚马逊SDK Aws::ShutdownAPI(options); return 0; } ``` 该示例代码中,首先使用C++亚马逊SDK和线程池读取vstor文件到缓冲区中,然后使用线程池上传缓冲区中的数据到亚马逊s3存储桶中。上传过程中,将缓冲区分为若干段,每段使用一个线程来上传。当上传完一段数据后,再上传下一段数据,直至上传完整个缓冲区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值