← 返回博客列表 Amazon NG SDE 三轮复盘:Coding + BQ 与 LP/STAR
Amazon

Amazon NG SDE 三轮复盘:Coding + BQ 与 LP/STAR

2026-07-16

一位刚结束 Amazon New Grad SDE loop 的同学来做了完整复盘。三轮结构很典型:一轮纯 Coding、一轮纯行为面(Behavioral),还有一轮 Coding + BQ 混合。题目本身都不算难,但整个 loop 下来能明显感觉到一件事——考察的深度在逐轮抬高。他们不只看你能不能做出来,更看你表达是否清晰、思考是否系统、对 Leadership Principles(LP)的理解是否真的内化。下面按轮次拆开讲,附上三道题的完整 Python 代码和一份 LP→STAR 映射表。


面试概况

项目 详情
公司 Amazon
岗位 SDE(New Grad / 应届)
轮次 3 轮:1 纯 Coding + 1 纯 BQ + 1 混合
单轮时长 40–45 分钟
题目难度 LeetCode Easy–Medium,高频标准题
核心考点 表达清晰度 + 系统化思考 + LP 内化 + STAR 结构

第一轮:纯 Coding(2 题 / 45 分钟)

非常 Amazon 的效率——寒暄两句就直接进 livecode,两道题塞进 45 分钟。

题目 1:验证回文串 II(删一个字符)

给一个字符串,问最多删除一个字符后能否变成回文串。

思路

双指针从两端向中间收缩。字符相等就继续;一旦不相等,就有两种「补救」机会——要么删左指针的字符,要么删右指针的字符。只要其中任意一段是回文,整体就成立。用一个 helper 判断某个区间是否为回文即可。

面试官追问的边界:空串(视为回文)、单字符(回文)。

Python 解法

def valid_palindrome_ii(s: str) -> bool:
    """最多删除一个字符,判断能否构成回文串。"""

    def is_palindrome(left: int, right: int) -> bool:
        while left < right:
            if s[left] != s[right]:
                return False
            left += 1
            right -= 1
        return True

    i, j = 0, len(s) - 1
    while i < j:
        if s[i] != s[j]:
            # 遇到第一处不匹配:尝试删左边字符 或 删右边字符
            return is_palindrome(i + 1, j) or is_palindrome(i, j - 1)
        i += 1
        j -= 1
    return True  # 空串 / 单字符 / 本身已是回文

时间复杂度:O(n),最多触发一次 helper 的线性扫描。 空间复杂度:O(1)。

题目 2:插入区间并合并

给一组已按起点排序、互不重叠的区间,再给一个新区间,要求把它插入并合并所有重叠部分,返回新的区间列表。

思路

一趟线性扫描,分三段处理:

  1. 把所有完全在新区间左侧end < new_start)的区间原样加入结果。
  2. 把所有与新区间重叠的区间和新区间合并:不断用 min 更新起点、max 更新终点。
  3. 把剩下完全在右侧的区间原样接上。

面试官追问「为什么不用二分查找定位插入点」——答:这题需要的是把重叠段合并掉,线性一趟扫描逻辑更直观、更稳,二分只能省下定位那一步,收益有限,反而容易在边界上出错。

Python 解法

def insert_interval(intervals, new_interval):
    """在有序不重叠区间中插入 new_interval 并合并重叠部分。"""
    result = []
    new_start, new_end = new_interval
    i, n = 0, len(intervals)

    # 1) 完全在新区间左侧的,直接加入
    while i < n and intervals[i][1] < new_start:
        result.append(intervals[i])
        i += 1

    # 2) 与新区间重叠的,逐个合并
    while i < n and intervals[i][0] <= new_end:
        new_start = min(new_start, intervals[i][0])
        new_end = max(new_end, intervals[i][1])
        i += 1
    result.append([new_start, new_end])

    # 3) 剩下完全在右侧的,直接接上
    while i < n:
        result.append(intervals[i])
        i += 1

    return result

时间复杂度:O(n),一趟扫描。 空间复杂度:O(n),用于存放结果。


第二轮:纯行为面(3 题 / 40 分钟)

这一轮由一位 EM(Engineering Manager)主导,全程 LP 驱动。Amazon 的 BQ 不是走过场,面试官会顺着你的回答一层层往下挖细节,看你讲的是不是真事、当时到底怎么判断的。

问题 1:讲一次你和同事或经理意见不合的经历

对应 LP:Have Backbone; Disagree and Commit

复盘同学讲的是「因为一个依赖没到位、坚持延后上线」的故事:用数据说明按原计划上线的风险,充分表达了反对意见;但当决策被上级推翻后,他选择 commit,全力配合执行。面试官真正在看的,是你有没有真的听进对方的观点、之后能不能协作推进,而不是一味坚持自己。

问题 2:Ownership

讲一次你主动扛起了职责范围之外的事。复盘同学讲的是一次线上事故:他排查日志、修复了脏数据,还顺手补上了监控告警。面试官追问:「你是先申请许可,还是直接就上手做了?」他的回答是:「我先把问题清楚地同步给了相关的人,确保大家都知情,然后就主动接手了。」——既体现了主人翁意识,也没有变成擅自行动。

问题 3:Failure

讲一次失败。复盘同学讲的是自己高估了负载、导致服务崩溃的经历,重点讲了事后如何做复盘(retrospective)、整理出改进的 action items。Amazon 想看的是你如何直面失败,而不是把一件失败的事包装成「其实也不算失败」。这一点很关键——试图淡化失败,反而会被扣分。


第三轮:混合(2 BQ + 1 Coding)

面试官是一位年轻、语速偏快的工程师。前半段两道 BQ,后半段一道字符串题。

BQ 1:Earn Trust

复盘同学讲的是在一个前端项目里引入类型系统的经历。起初被同事认为是过度设计(overengineering),他通过后续可维护性的提升交付效率的数据证明了价值。面试官追问:「如果他们还是不认同呢?」——他的回答很成熟:「我会先问清楚,在他们眼里成功长什么样,然后围绕这个结果去对齐,而不是纠结在具体实现方式上。」

BQ 2:Invent and Simplify

讲一次你用创新的方式简化了流程。复盘同学讲的是自己做了一个自动化工具,把 API 文档和代码生成打通。面试官追问:「你怎么衡量它的效果?」——答:对比了手动流程的耗时工具节省下来的时间,用量化指标说话。

Coding:字符串解码

这一轮的编程题是字符串展开。这里用 LeetCode 394 的经典形式:把 3[a]2[bc] 解码成 aaabcbc3[a2[c]] 解码成 accaccacc

思路

用栈来处理嵌套结构。遍历字符串:

用两个栈:一个存字符串片段,一个存重复倍数。

面试官很吃「主动写测试用例」这一套,还追问了时间/空间复杂度的权衡。

Python 解法

def decode_string(s: str) -> str:
    """解码形如 3[a]2[bc] 的编码字符串(LeetCode 394)。"""
    num_stack = []      # 存重复次数
    str_stack = []      # 存进入当前层之前已拼好的字符串
    current = ""        # 当前层正在构建的字符串
    num = 0             # 当前累计的数字(支持多位)

    for ch in s:
        if ch.isdigit():
            num = num * 10 + int(ch)   # 处理多位数字,如 12[a]
        elif ch == '[':
            num_stack.append(num)      # 保存重复次数
            str_stack.append(current)  # 保存上一层已有内容
            num = 0
            current = ""
        elif ch == ']':
            repeat = num_stack.pop()
            prev = str_stack.pop()
            current = prev + current * repeat  # 展开当前层并拼回上层
        else:
            current += ch              # 普通字母
    return current

时间复杂度:O(N),N 为解码后输出字符串的总长度(每个输出字符构建一次)。 空间复杂度:O(N),栈深度与嵌套层数、输出长度相关。


LP → STAR 映射表

Amazon 的 BQ 本质是「用一个真实故事,证明你身上有某条 LP」。建议每条 LP 至少准备 1–2 个故事,并严格按 STAR 结构组织:Situation(背景)→ Task(任务)→ Action(行动)→ Result(结果,最好带量化指标)

面试问题 对应 LP STAR 关键点
和同事/经理意见不合 Have Backbone; Disagree and Commit Situation:依赖未就绪风险;Action:用数据表达反对,被推翻后全力 commit;Result:如期协作落地
主动扛起分外之事 Ownership Situation:线上事故;Action:查日志、修脏数据、补监控,先同步再接手;Result:恢复并预防复发
一次失败 Learn and Be Curious / Deliver Results Situation:高估负载致崩溃;Action:做复盘、列 action items;Result:直面问题并沉淀改进
说服他人接受你的方案 Earn Trust Situation:引入类型系统被质疑过度设计;Action:用可维护性 + 交付效率的数据证明;Result:对齐「结果」而非「实现」
用创新简化流程 Invent and Simplify Situation:文档与代码脱节;Action:做自动化工具打通生成;Result:对比手动 vs 工具耗时,量化收益

备考策略

Amazon 的题型这些年变化不大,但细节的深度、推理的完整度、以及对 LP 的内化程度在持续抬高。三点建议:

  1. BQ 不是讲故事,是结构化思考。 很多人以为行为面就是把经历讲得动听,但 Amazon 想看的是 STAR + 量化指标——用结构去解释你的选择、行为和判断。每条 LP 备 1–2 个故事,先写 bullet,再练口述,最后模拟被追问的场景(「你当时为什么这么判断?」「怎么衡量效果?」)。
  2. Coding 是标准化高频题。 双指针、区间、栈这类 pattern 反复出现。做出来只是底线,真正加分的是:能讲清逻辑、能主动说改进方向、能报出时间/空间复杂度、能主动写测试用例覆盖边界。
  3. 主动覆盖边界。 空串、单字符、多位数字、空区间——面试官几乎一定会问。与其等他问,不如你先说出来。

FAQ

Q1:Amazon New Grad SDE 一般几轮?难度如何?

通常是 3–4 轮的 loop(本次是 3 轮),常见结构是纯 Coding、纯 BQ、以及 Coding+BQ 混合。题目多为 LeetCode Easy–Medium 的高频标准题,纯难度并不高,但对表达清晰度和 LP 理解的要求逐轮上升。

Q2:Amazon 的 BQ 到底在考什么?

考的是你身上有没有对应的 Leadership Principles,以及你能不能用结构化的方式把真实经历讲清楚。面试官会顺着回答往下挖细节,判断故事是否真实、你当时的判断依据是什么。用 STAR 组织、带上量化结果,比把故事讲得华丽重要得多。

Q3:讲「失败」的时候,是不是应该挑一个「其实还好」的例子?

不建议。Amazon 明确想看你如何直面真正的失败——如何复盘、如何沉淀改进。把失败包装成「其实不算失败」反而暴露了你不愿正视问题,通常会被扣分。选一个你真的搞砸过、但事后有实质改进的例子。

Q4:Coding 题做出来了,为什么还可能被拒?

因为「做出来」只是底线。面试官同时在评估:思路表达是否清晰、有没有主动分析复杂度、有没有主动写测试用例覆盖边界、面对 follow-up(比如「为什么不用二分」)能不能给出有说服力的权衡。沟通和工程判断力和正确性同等重要。

Q5:区间插入这种题,用二分查找会更好吗?

定位插入点确实可以用二分,但这题的核心是把重叠区间合并掉,仍然要线性扫描一遍重叠段。线性一趟扫描逻辑更直观、边界更稳;二分只省下定位那一步,整体复杂度没变,还更容易写错。面试里能讲清这个权衡,本身就是加分项。


正在准备 Amazon SDE 的面试? 如果你想在 Coding 的表达细节和 BQ 的 STAR 结构上更从容,我们可以帮你做针对性的模拟面试和 LP 故事打磨。

立即添加微信 Coding0201获取 Amazon 高频题库与 LP/STAR 精修

联系方式