两道题,70 分钟,我二十分钟不到交卷。

不是因为特别厉害,是题目本身就是这个难度。只要知道考什么、细节在哪里,做起来不会很慢。完整记录一下。


先说流程

很多人不清楚国内 Amazon 的招聘节奏,简单梳理:

简历投递
↓ 1-2 周
OA 邀请(5-7 天有效期)
↓ 提交后 1-2 周
HR 电话初筛(15-30 分钟)
↓
技术面
↓
Bar Raiser 面(Leadership Principles 专场)
↓
HC 审批
↓
Offer

OA 是第一道门槛,过了才有后续。题目难度不高,但细节处理不好照样挂。


第一题: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 他们都做过,题库积累比较全。

更多推荐