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個有序鍊錶 。
思路:首先,可以用一个最小堆来帮忙。然后把所有链表的头节点都先扔进堆里。接着,每次从堆里弹出最小的那个节点,把它接到结果链表上,然后把这个节点的下一个节点再塞回堆里。最后,等堆里空了,所有链表就合并好啦。
第二輪: BQ+Code
BQ :
1. 請描述一個你曾經優化過的系統模組,你是如何辨識瓶頸、設計方案並驗證效果的?
2. 如果在高並發場景下實現一個即時排行榜,你會如何設計資料儲存與更新策略?
3. 你如何保證你寫的程式碼在長期迭代中依然可維護、可測試?請結合具體項目說明。
Coding:要設計能支援數組單點更新和區間求和兩種操作的資料結構。
思路:先把数组建成二叉树,叶子是单个元素,非叶子存子节点和,更新时从叶子往上更父节点,求和时拆成几个完整节点相加,也能选更简洁的树状数组。 Follow-up: 1.除了线段树,还有没有更简洁的实现? 2.如果数组长度动态变化怎么办? 这一轮明显更侧重数据结构的实现细节与工程实用性。面试官不仅期待能写出正确的代码,还希望能比较不同方案的优劣,并能在白板或共享编辑器上清晰地组织代码结构。
寫在最後
准备Amazon的BQ时,必须使用STAR模型来组织你的回答,并且在“Result”部分尽量用提升了多少效率、节省了多少成本、减少了多少客户投诉来展示你的影响力。每个故事最好能体现1-2个领导力准则,这样面试官也会对你表示肯定的。
我們提供OA代做、VO代面服務,如果你也需要Amazon SWE Intern的面試、OA支援,請與我們聯絡。