职业 | 亚麻 SDE 面试经验分享+学习材料汇总(2022年8月版)

2022 年 7-8 月在亚麻过五关斩六将的流水账记录(以及学习资料汇总)。

基友在得知我拿了 AWS 的 offer 后蠢蠢欲动表示也想试一试,遂向我取经,而我本着独乐乐不如众乐乐的原则,水了一篇博客……

本篇博客的内容来自我个人 2022 年 7-8 月面试亚麻 AWS SDE2 岗位的经验,不保证其时效性和泛用性。前半部是面试流水账,后半部是亚麻限定学习材料汇总,需要干货的可直接空降汇总区~

欢迎提问!但太过具体的信息(具体的 OA 题,面试官、recruiter 是谁等)不方便回答。

Apply

我海投简历时其实完全没考虑过去大厂,总觉得大厂超出了我的实力范围(fxxk imposter syndrome),是亚麻的一位 recruiter 小姐姐主动在 LinkedIn 上主动联系我,问我有没有兴趣来 AWS。

卧槽这可是 Amazon 哦?这是我可以申的公司吗???(震惊x1)

然后我就抱着恍恍惚惚的心情正式申了岗位。具体哪一个岗位是小姐姐在看过我的简历后帮我选的,发了一个职位链接让我让我注册 Amazon.jobs。这个网站,说实话没太大用处,后续的各种安排都是小姐姐用 email 联系,不过上面有很多实用的官方面试信息。

Online Assessment

成功申请岗位后马上就会收到 OA 的链接,链接七天有效。不知道是不是我自己的浏览器或邮箱的问题,邮件里的链接点击之后出来的是空白页面,需要我自己手动复制链接到浏览器才能正确打开。

OA 总共两个小时,内容如下:

  1. Coding challenge (2 scenarios) - 90 minutes
  2. System design items – 20 minutes
  3. Work style survey - 8 minutes
  4. Feedback survey - 3 minutes

Coding Challenge

一共两题,用的是 HackerRank 的考试系统,另外配有一个官方 Demo。

每个题目可以反复提交,取最高分,分数高低则根据通过的 test case 来算,每题配有 20+ 个 test case,基本上全是 lock 状态,换句话说没有办法知道具体的 test case 是什么。

具体题目,因为勾选了保密条约,不方便细说,总之,第一题是很简单的 array 题,第二题是 medium 往上的涉及 BFS/DFS 的 dynamic programming 题。亚麻 OA 原题都不对外公开,LeetCode 上分享题目的帖子也很快被删掉,所以不用费心去搜,搜不到的(不过 Google 快照还留有一些痕迹)。

第一题很容易就解出来了,但第二题……我没解出来,但尽可能在 comment 里把思路写出来了。

System Design

System Design 部分是情景模拟选择题,题目以员工之间的交流邮件的形式呈现,然后会给几个选项,根据这些选项是否合适按 1-5 打分,比如哪一种数据库最适合当下的场景,下一步做什么工作最合适。

这部分挺好玩的,但当时我因为两题 coding 只做出一题,以为自己肯定没戏了,所以这部分我直接摆烂随意乱选……现在后悔啊!这么有趣的题目别的地方可碰不到。

Surveys

这部分就是问一些平常求职时 HR 会问的一些很 general 的问题,填一下学历,填一个自我评价表(给一个 scenario 然后评价自己是/否的程度),提供现在的居住地址,问需不需要赞助 visa,是否接受 relocation。

Phone Screen

让我非常意外的是,第二天小姐姐就打电话来说我的 OA 过了(震惊x2)。这里学到了一件事:OA 题目解不出来不要慌,把思路写清楚也能拿到分。

接着小姐姐就跟我约第二部分的 phone screen 了,算是正式面试。

Phone screen 用的是 Amazon Chime,一个亚麻自己用的类似于 Zoom 的软件,有浏览器版本,不需要提前安装。面试官则是 recruiter 小姐姐本人。

我问小姐姐 phone screen 具体会问什么,她的回答是:There will be no coding, just high-level CS basic questions/ binary search tree basic questions. The phone screen will be focused on gathering information on projects you’ve contributed to in the system design space as well.

而亚麻官网上关于 phone screen 的部分也列举了很多 CS 内容,搞得我这个没有正经学过 CS 完全是野路子出身的码农非常慌……

但实际上 phone screen 问的问题比我想象中简单多了,总共三个部分:

  1. 常规问题,像是为什么换工作啦、接不接受 relocate、工作经验等。
  2. System design 相关,挑一个过去搭建的项目,询问一些 system design 问题,主要集中在 server 和数据库(这部分我非常非常不熟,全程冒冷汗),也会问问用户和 daily transaction。
  3. 数据结构相关,问了我 hashmap 和 binary tree,出乎意料的基础……hashmap 部分:解释什么是 hashmap、使用 hashmap 有什么缺陷、hashmap 的大O;binary tree 部分:解释什么是 binary tree、BFS 和 DFS 的区别、binary search 的大O。

然后问完这些问题,小姐姐当场宣布我过了 phone screen 进了 on-site(震惊x3)。就……好随意啊,随意到让我觉得亚麻是真的很缺 SDE……

On-site

Phone screen 结束两三天后小姐姐给了我几个 on-site 的时间让我自己挑,范围是一周后到半个月后。

On-site 一共四个面试,一整天面完,每个面试持续一个小时,模式是先问 2 个亚麻的 Leadership Principles 问题(以 behavioral question 的形式),再进行后半部的 tech interview。

具体四个部分是:

  1. System Design
  2. Coding: Data Structures & Algorithms
  3. Coding: Logical & Maintainable
  4. Coding: Problem Solving

面试前一两天会发来具体的时间表,这个时候就能知道 interviewer 和 shadow 是谁了。中间安排的休息时间可能有一个小时也可能只有半个小时。

On-site 的一周前有一个 group preparation call,四个 candidate + 一个亚麻 recruiter 的 virtual meeting,内容是具体介绍 on-site 的流程和内容(之前的邮件已经囊括了这些信息,所以说实话这个 prep call 不是很必要),有问题的话可以当场问 recruiter。

顺便说一句,因为目前都是 virtual on-site,如果家里没有麦克风和摄像头,可以买了之后找亚麻报销哟。

注:不排除之后会删具体题目的可能,且看且珍惜吧。

Leadership Principles

我的面试 schedule 临时出了点问题,本来应该拆开来的两个 coding interveiw 被合到了第二部分,而第一部分变成了纯粹的 LP interveiw。

倒霉的是,我刚开始的时候耳机出了问题,没能听清 interviewer 解释这部分,以为后半部还有 coding part 等着我,还特地提前结束了 behavioral part 给后半部多留一点时间,然后眼睁睁看着第一位 interviewer 直接离开了 meeting room ……(震惊x4)

第一部分(原本的第一部分+第二部分)问的 4 个 LP:

  • Invent and Simplify
  • Dive Deep
  • Ownership
  • Customer Obsession

Follow-up questions:

  • Why do you think this example fits Invent and Simplify?
  • Why do you think this example fits Dive Deep?

这部分我聊得挺差的,面试官直接在镜头前扶额+痛苦面具,还让我重新复述一个例子(他好像没听懂),两个(我记得的)follow-up 也让我觉得我的例子找的不是很好……

Coding: Data Structures and Algorithms & Coding: Logical and Maintainable

接下来就是连续两个 coding 了。

亚麻提供的 coding interview 专用 IDE LiveCode 居然不能跑程序,真的只是一个在线白板,于是难度骤降哈哈哈哈!(亚麻这部分有点欺诈啊,亚麻官方面试资料要求保证程序能跑起来,还要求有 test case,结果 LiveCode 根本跑不了程序……)

第一个问题:

Give x and y, return a list containing every number between x and y in random order.

Edge cases(所有条件都要自己问面试官):

  • x, y 的范围
  • x 是否一定比 y 大
  • 是否都是整数

Follow-up questions:

  • Can you explain a little bit about switching places? (我当时提供的一个思路是把数组里的元素随机调换位置)
  • Time and space complexity of each function.

之前所有我能找到的 coding interview 面经都表示要先弄出一个可以执行的 brute force solution 再去优化,所以这题我先用随机 pop 原数组元素到新数组里的思路写了个答案,time complexity 是 O(n^2),明显不是最优解。

谁知道,面试官到这里就叫停了,没让我继续……(震惊x5)

第二个问题:

Implement a music playlist system. If the playlist is full (max: 100), the least-recent song will be removed from the playlist. Songs in the playlist can be played.

Edge cases:

  • Empty playlist.
  • The least-recent song is playing when it’s about to be removed.

Follow-up questions:

  • Implement a play-next-song function. (edge cases: no song is playing, playing the last song, empty playlist)
  • Time and space complexity of each function.

这题我的解法是根据 OOP 写了 Playlist 和 Song 的 class。

Coding: Problem-Solving

这一部分问的 2 个 LP:

  • Deliver Results
  • Learn and Be Curious

题目:

Implement an event notification system. A publisher can create an event with a piece of data attached. When an event is created, all subscribers are notified about this event with that piece of data.

Follow-up questions:

  • What would you do if one of the subscribers keeps getting exceptions when receiving notifications?
  • Time and space complexity of each function.

没看出这题和上面那题有什么区别,我的解法也是写几个 class,所以也有可能这是 Logical and Maintainable 的题目(或者亚麻漏了 Problem-Solving 然后给了我 2 题 Logical and Maintainable?不至于吧)。

System Design

终于面到最后一部分啦!

LP:

  • Earn Trust
  • Have Backbone; Disagree and Commit

题目:

Design a flight ticket booking website.

这部分的面试官挺不按理出牌的。我问这个网站目标用户是谁,他让我自己决定,然后我就自顾自决定这是一个加拿大的机票网站;问使用范围有多大(后来问 daily transaction 有多少),面试官让我自己随便估……(震惊x6)

Follow-up questions:

  • Describe what each component does in your system (CDN, DNS, cache, database, etc.).
  • Why would you choose to use a relational database?
  • How would you implement a function which allows users to search airports based on airport code?
  • Which part in your system would you modify if we are expanding this website to a global scale?

Questions To Ask

每个面试最后都会留个十分钟左右让 candidate 提问题。

我问过的问题:

  • Which one is your favorite leadership principle?(提名最多次的是 bias for action, ownership, customer obsession)
  • Which leadership principle do you feel is the most difficult to keep up with?(提名最多的是 hire the best)
  • What is the most surprising thing you found working at Amazon?(提名最多的是 freedom 和 fast-pace)
  • Amazon SDE 的一天是怎么样的?(没有什么有价值的回答,后面我都不问这个问题了)

Offer

之前说是 5 个工作日内给结果,但实际上隔天不到 24 小时,小姐姐就联系我说我拿到 offer 了。

震惊xN!!!

这个 offer 极大增强了我的自信心,成功让我摘下了对大厂的滤镜,现在有了“只要老娘愿意随时能去大厂当螺丝钉”的底气,感觉自己超厉害超牛逼的!

另一个结论是,亚麻现在真的缺 SDE。我个人建议任何想跳槽或找工作的开发人员,都可以去试试申亚马逊 SDE 岗位,感觉亚麻现在非常热情,非常不挑剔……

换个思路想,亚麻的 OA mockup 在网上可以买 $89 美刀,也就是说,哪怕只进了 OA 轮,做过免费的正版的 OA,也是赚了。而且亚麻的面试比想象得容易不少,像我,一个月前只是出于体验大厂招聘的炮灰心态递了申请,万万没想到一路杀到了 boss 关,还居然通关了,所以,你也可以的!

学习材料汇总(亚麻面试限定)

先说一点,亚麻官网上提供的学习范围(Software development topics),说实话,没有什么用,因为那涵盖了几乎所有 CS 和 Software Development 的内容,真照着学估计得去重新上一个本科。

也不用去研究特别刁钻特别难的题目(LeetCode hard 级别的题),99% 不会碰到。On-site 每一个部分一小时,讲完 LP 后基本只剩 30 分钟了,没时间解决太复杂的题目(但 OA 足有 90 minutes,所以 OA 第二题必然比较难)。

注意:下面的资料仅限于应付亚麻面试,并不能让人系统学习 CS!

Data Structures and Algorithm

  1. 《算法图解/Grokking Algorithms》:浅显易懂,可以快速从头到尾系统复习一遍算法和数据结构。
  2. Binary Tree Algorithms for Technical Interviews - Full Course:YouTube 视频,《算法图解》里没包括的 binary tree 方面的复习。
  3. Tech Interview Cheat Sheet:以上两者的超级精简版,没时间的可以直接看这个。
  4. Grind 75:经典的 Blind 75(Curated List of Top 75 LeetCode Questions to Save Your Time)的新版本,配有相应的 Coding interview study plan,而且可以根据需要调整题目的数量。
  5. Top Interview Questions:LeetCode 上的官方问题集,可以用这个替换 Grind 75。
  6. 然后就是刷题,刷题,刷题。尤其要注意总结套路。下面是我刷题的汇总,可以看到最后一列总结了各个题目的解题思路,平常可以隐藏起来,最后复习再显示:

Logical and Maintainable (OOP)

这部分没什么好说的,OOP 算是 SDE 的本能了吧。

  1. SOLID: The First 5 Principles of Object Oriented Design:标准 OOP 设计。
  2. Design Patterns:复习 OOP Design Patterns,非必须,放在这里只是不想让这一块太过单薄。
  3. 挑选一个最顺手的 programming language。这个没有限定,选自己最顺手的就行。PHP 不在 LiveCode 的可选范围内,但我用 PHP 写 OOP,两场的面试官也都没说什么(至于有没有偷偷扣分就不知道了哈哈哈)。

System Design

  1. 《System Desgin Interview》:专门针对系统设计面试的一本书,适合速通。
  2. System Design Primer:如果不想看上面那本书,看这个 repo 也可以。
  3. System Design Cheatsheet:适合最后的 brush-up,也可以在面试时放在旁边当 cheat sheet。
  4. Excalidraw:在线白板。Coding 和 system design 都会用到,平常刷题的时候用一用,上手非常快。可以换一个自己更喜欢的 app。

On-site/LP

LP 在亚麻很重要,每一个我接触过的亚麻 recruiter 和面试官都这么强调,主持 group prep call 的 recruiter 甚至说亚麻会更倾向于招募 LP 答得好但代码写得一般的程序员(然后同一个 meeting 里的大哥就吐槽说 sounds like your guys are hiring programmers who can talk,笑死)。

  1. 官方指导Interview prep for Software Development Engineer (SDE)):必看,对整个 on-site 流程有一个了解,而且提供了模范回答,可以参考。
  2. Leadership Principle interview questions by principle:列举了每个 LP 对应的 behavioral question。
  3. 熟练掌握 STAR method:多准备几个可以套多个 LP 的万能例子。如果实在没有适合的例子,可以重复使用同一个案例,注意不要前后矛盾。
  4. LP worksheet:自己弄一个表格,一个 LP 对应 1-3 个例子,以及相应的 behavioral question。搞这个 worksheet 很痛苦,但很有用。

我的 Leadership Principles Worksheet 是小姐姐发给我的 interview preparation material 里的一部分,内容如下:

Licensed under CC BY-NC-SA 4.0
最后更新于 2022年08月06日
Built with Hugo
Theme Stack designed by Jimmy