Amazon OA 不到二十分钟做完——题目在这里
两道题,70 分钟,我二十分钟不到交卷。
不是因为特别厉害,是题目本身就是这个难度。只要知道考什么、细节在哪里,做起来不会很慢。完整记录一下。
先说流程
很多人不清楚国内 Amazon 的招聘节奏,简单梳理:
简历投递 ↓ 1-2 周 OA 邀请(5-7 天有效期) ↓ 提交后 1-2 周 HR 电话初筛(15-30 分钟) ↓ 技术面 ↓ Bar Raiser 面(Leadership Principles 专场) ↓ HC 审批 ↓ OfferOA 是第一道门槛,过了才有后续。题目难度不高,但细节处理不好照样挂。
第一题:Bug 报告优先级排序
给一个 Bug 代码数组,有重复。排序规则:出现频率低的优先,频率一样按代码数值升序。最终输出完整数组,保留重复元素。
直接对原数组排序是错的。
正确做法:哈希表统计频率,对唯一 Bug 码按(频率,数值)排序,再按顺序展开。
python
from collections import Counter def sortBugReportFrequencies(bugs): freq = Counter(bugs) unique_bugs = sorted(freq.keys(), key=lambda x: (freq[x], x)) result = [] for bug in unique_bugs: result.extend([bug] * freq[bug]) return result时间复杂度 O(n log n)。
容易踩的坑:排序的是唯一 Bug 码,不是每个元素。搞混这个,输出结构就错了。
第二题:商品搜索分页展示
商品列表,三个字段:名称、星级、价格,全部是字符串格式。给你排序列、排序方向、每页数量、页码,返回对应页的商品名称。
看起来简单,坑在数据类型。
星级和价格要按整数比较,不能用字符串排序。字符串排序下"17"会排在"3"前面,因为"1" < "3",结果全错。
python
def fetchProductsToDisplay(products, sortParameter, sortDirection, productsPerPage, pageNumber): def sort_key(p): val = p[sortParameter] return int(val) if sortParameter in (1, 2) else val sorted_p = sorted(products, key=sort_key, reverse=(sortDirection == 1)) start = pageNumber * productsPerPage return [p[0] for p in sorted_p[start:start + productsPerPage]]Python 的 sorted 是稳定排序,同值元素保持原始顺序,这道题刚好需要这个性质。分页切片超出范围也不会报错,直接返回剩余的就行。
这两道题在考什么
表面上是两道不同的题,本质上考的是同一件事:能不能发现让朴素解法失效的那个细节。
第一题:排序的对象是唯一码,不是每个元素。 第二题:比较的类型是整数,不是字符串。
细节对了,两道题都能很快做完。细节错了,sample cases 可能过,hidden tests 大概率挂。
OA 之后怎么准备
过了 OA 才会有 HR 电话,之后进入技术面和 Bar Raiser 面。
Bar Raiser 是亚马逊独有的面试轮次,专门考 Leadership Principles。很多人技术面过了在这里折。
高频 LP 和考察方向:
| LP | 面试官实际在问什么 |
|---|---|
| Customer Obsession | 技术决策里怎么体现用户优先 |
| Dive Deep | 遇到问题你挖了多深,有没有数据支撑 |
| Deliver Results | 资源有限的情况下怎么交付 |
| Bias for Action | 信息不全的时候怎么推进 |
| Invent and Simplify | 有没有把复杂的东西简化过 |
每条 LP 准备 1-2 个真实故事,STAR 格式,结果要有具体数字,不要只说"我们最终解决了问题"。
关于 Interview Aid
OA 前找了Interview Aid做了OA 辅助。
第二题整数比较那个坑,我第一次练习的时候漏掉了,他们在 review 的时候直接指出来了。国内外 OA / VO 他们都做过,题库积累比较全。
