Amazon intern | Amazon summer oa | Programhelp協助亞麻實習offer

3,463Views
Amazon 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)。每輛車可以運送多次包裹(只要滿足條件)。每輛車的初始容量固定。 Q:用這些車能否運送完所有包裹(包裹任意分配給車,每輛車按順序運送包裹時容量會下降)。

想法:每個場景把所有卡車容量放進一個最大堆(用 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支援,請與我們聯絡

author avatar
Jack Xu MLE | 微軟人工智慧技術人員
Princeton University博士,人在海外,曾在Google、蘋果等多家大廠工作。深度學習NLP方向擁有多篇SCI,機器學習方向擁有Github千星⭐️專案。
END
 0