Amazon intern | Amazon summer oa | Programhelp助力亚麻实习offer

2,045Times read
No Comments
Amazon swe intern | Amazon summer oa |Programhelp助力亚麻实习offer

Amazon intern Programs 招聘是亚马逊为在校学生和应届毕业生提供的实习和全职岗位机会,旨在吸引具有创新精神、解决问题能力和领导潜力的年轻人才。

TimeLine

10/27- application submitted

11/26- oa

12/18- 保温邮件

1/27- 保温邮件2

2/4- recruiter reach out

2/5- vo invitation

2/18- 面试 back to back 60min*2

3-5- offer

Amazon SWE Intern OA

Q1:分发包裹

题目:有 t 个测试场景。每个场景有 truckCapacities(数组长度 n)和 packageWeights(数组长度 m)。一辆车能运送包裹的条件:当前容量 >= 包裹重量,运送后容量 = floor(当前容量 / 2)。每辆车可以运送多次包裹(只要满足条件)。每辆车的初始容量固定。问:用这些车能否运送完所有包裹(包裹任意分配给车,每辆车按顺序运送包裹时容量会下降)。

思路:每个场景把所有卡车容量放进一个最大堆(用 Python 的最小堆存负数实现),把包裹重量按从大到小排序,每次都用当前最大容量的卡车去送最重包裹。如果最大容量都送不了当前包裹,直接失败;否则送完后把该卡车容量更新为 cap // 2 再放回堆里,全部部包裹都能送完则返回 1,否则返回 0。

代码

import heapq
def canAllPackagesBeDelivered(truckCapacities, packageWeights):
    ans = []
    for caps, pkgs in zip(truckCapacities, packageWeights):
        h = [-c for c in caps]
        heapq.heapify(h)
        ok = True
        for w in sorted(pkgs, reverse=True):
            if not h:
                ok = False
                break
            c = -heapq.heappop(h)
            if c < w:
                ok = False
                break
            heapq.heappush(h, -(c // 2))
        ans.append(1 if ok else 0)
    return ans

Q2:Usage 达到阈值的最早时间

题目:给定多个用户的 活跃时间区间 [start, end],每个用户每秒贡献 1 usage,usage 是按时间累计的总和,求 累计 usage 第一次 ≥ max_usage 的时间点。

思路:把“某一时刻的用量”看作所有用户在该时刻之前(含该时刻)的活跃秒数之和,即对每个区间 [s, e] 贡献 max(0, min(t, e) - s + 1)。先用 r = max(end_time) 作为时间上界,若到 r 的累计用量仍达不到 max_usage,说明永远达不到,返回 -1。在区间 [1, r] 二分最小的时刻 t,每次用一次线性扫描计算到 t 的累计用量并与 max_usage 比较,决定收缩左/右边界。

代码

def get_min_time(start_time, end_time, max_usage):
    n = len(start_time)
    if n == 0:
        return -1
    r = max(end_time) if end_time else 0
    if r == 0:
        return -1
    total_at_r = 0
    for s, e in zip(start_time, end_time):
        if r >= s:
            end_here = min(e, r)
            add = end_here - s + 1
            if add > 0:
                total_at_r += add
    if total_at_r < max_usage:
        return -1
    l = 1
    while l < r:
        mid = l + (r - l) // 2
        cur = 0
        for s, e in zip(start_time, end_time):
            if mid >= s:
                end_here = min(e, mid)
                add = end_here - s + 1
                if add > 0:
                    cur += add
        if cur >= max_usage:
            r = mid
        else:
            l = mid + 1
    return l

Amazon SWE Intern VO

第一轮: BQ+Code

BQ:

1. Tell me about a time when you went above and beyond for a customer.

2. Describe a time when you had to take ownership of something outside of your direct responsibility.

3. Tell me about a time when you had to work with a large amount of data or details to solve a problem.

Coding:题目要求是合并K个有序链表 。

思路:首先,可以用最小堆,然后把所有链表的头节点都先扔进堆里。接着,每次从堆里弹出最小的那个节点,把它接到结果链表上,然后把这个节点的下一个节点再塞回堆里。最后,等堆里空了,所有链表就合并好啦。 follow up: 1.:如果链表数量非常大,或者链表很长,这个解法有什么优缺点?如何优化? 2.如果不允许使用堆,你还能怎么做?

第二轮: BQ+Code

BQ :

1. 请描述一个你曾经优化过的系统模块,你是如何识别瓶颈、设计方案并验证效果的?

2. 如果在高并发场景下实现一个实时排行榜,你会如何设计数据存储与更新策略?

3. 你如何保证你编写的代码在长期迭代中依然可维护、可测试?请结合具体项目说明。

Coding:要设计能支持数组单点更新和区间求和两种操作的数据结构。

思路:先把数组建成二叉树,叶子是单个元素,非叶子存子节点和,更新时从叶子往上更父节点,求和时拆成几个完整节点相加,也能选更简洁的树状数组。 Follow-up: 1.除了线段树,还有没有更简洁的实现? 2.如果数组长度动态变化怎么办? 这一轮明显更侧重数据结构的实现细节与工程实用性。面试官不仅期待能写出正确的代码,还希望能比较不同方案的优劣,并能在白板或共享编辑器上清晰地组织代码结构。

写在最后

准备Amazon的BQ时,必须使用STAR模型来组织你的回答,并且在“Result”部分尽量用提升了多少效率、节省了多少成本、减少了多少客户投诉来展示你的影响力。每个故事最好能体现1-2个领导力准则,这样面试官也会对你表示肯定的。

我们提供OA代做、VO代面服务,如果你也需要Amazon SWE Intern的面试、OA支援,请与我们联系

author avatar
Jack Xu MLE | 微软人工智能技术人员
Princeton University博士,人在海外,曾在谷歌、苹果等多家大厂工作。深度学习NLP方向拥有多篇SCI,机器学习方向拥有Github千星⭐️项目。
End of text
 0
Comment(No Comments)