Amazon New Grad Applied Scientist Interview Experience — A Month of Recruiter Ghosting Before One Chaotic Phone Screen
Company: Amazon
Role: Applied Scientist
Round: Technical Screen
Seniority: New Grad
Outcome: Rejected
Company: Amazon
Role: Applied Scientist
Round: Technical Screen
Seniority: New Grad
Outcome: Rejected
3/13 - recruiter call scheduled, system email assigned recruiter 1
3/15 - rejected, me: ???
3/16 - recruiter call with recruiter 2, very nice person, said I could set up a mock interview with them, we scheduled a time, then they ghosted
3/17-4/13 - I kept providing my availability, kept hearing "does not meet team calendar," this kept repeating...
4/14 - recruiter 2 was out of office, recruiter call with recruiter 3, said they'd send detailed information, then also ghosted
4/28 - phone screen
The interviewer let me choose between "science" or "coding" - I picked science.
For that last question the interviewer said that out of the roughly 100 people they've interviewed with it, only one or two got it right. I got it right and explained it, and then we happily moved on to a DP problem the interviewer made up themselves.
Implement bucket batching. Suppose we have K documents and G GPUs, find the optimal batching that minimizes the padding needed. Constraints: 0 <= K < G.
I'd run into this problem before, back in my PhD - I knew the idea was to bucket inputs of similar length into the same batch, but I didn't actually know the algorithm. The interviewer hinted at considering the G = 2 case and I still couldn't work it out. In the end they said honestly, if your coding is strong you could just brute force it.
Claude's solution:
def optimal_buckets(lengths, G):
L = sorted(lengths)
K = len(L)
INF = float('inf')
dp = [[INF]*(G+1) for _ in range(K+1)]
par = [[0]*(G+1) for _ in range(K+1)]
dp[0][0] = 0
for i in range(1, K+1):
for g in range(1, min(G, i)+1):
# last batch is L[j..i-1], cost (i-j) * L[i-1]
for j in range(g-1, i):
c = dp[j][g-1] + (i - j) * L[i-1]
if c < dp[i][g]:
dp[i][g] = c
par[i][g] = j
# reconstruct
buckets, i, g = [], K, G
while g > 0:
j = par[i][g]
buckets.append(L[j:i])
i, g = j, g-1
return buckets[::-1], dp[K][G]
Overall the whole process felt really chaotic and the experience was bad. The recruiter had told me the phone screen would just be ML fundamentals, some light leadership, and LC easy-medium, so I wasn't expecting a DP problem - especially one the interviewer came up with on their own. Probably failed.