In the second half of 2021, I interviewed with Amazon and Microsoft, but unfortunately was rejected after virtual onsite interviews. The positions I applied for were software engineer in machine learning. Here I would like to share my interview experience and preparation methods.
Microsoft
Day 0: Submitted resume on the official website: Software Development Engineer 2 - ML.
Day 2: Received a call from the recruiter and was told that the interview would be scheduled. As I had just started practicing coding problems at that time, I requested to have the interview in two weeks later. Later that day, another Microsoft colleague responsible for scheduling interviews strongly recommended that I not wait two weeks, and suggested scheduling the interview for the following week instead.
Day 6: Online interview, where the first half-hour was about my work experience on my resume, and the second half-hour was a Leetcode medium problem.
Day 8, 9: Three rounds of interview, all in Mandarin. The first round, the first half hour I was asked a ML case and the second half hour was asked a medium Leetcode problem. I have to say that the ML case was quite deep, I felt that the person who interviewed me was definitely an expert. The second round, the first half hour I was asekd about work experience on the resume, and the second half hour I was asked a medium Leetcode problem. The third round is the hiring manager, the first half hour I was asked about work experience on the resume and behavioral questions, and the second half hour I was asked on a medium Leetcode problem.
Day 8, 9: Three rounds of online interviews, all conducted in Mandarin. In the first round, the first half-hour was a ML case and the second half-hour was a Leetcode medium problem. I have to say that the ML questions in this round were quite in-depth, and the interviewer was very knowledgeable. In the second round, the first half-hour was about my work experience on my resume, and the second half-hour was a Leetcode medium problem. The third round was with the hiring manager, where the first half-hour was about my resume and behavioral questions, and the second half-hour was a Leetcode medium problem.
Day 15: Received rejection.
Microsoft moves quickly and keeps following up with you. If you plan on applying, it’s okay to do it a bit later, as they mentioned that there is a risk of closing the position if they find someone suitable. If you apply to multiple companies, be careful with scheduling your interviews.
Amazon
I applied for a job at Amazon Sidewalk. Frankly speaking, I have never heard of what this is, and I don’t know much even after listening to the recruiter’s introduction. Anyway, it’s an IOT-related team, and it’s main market is in Europe and America.
Day 0: Submitted resume on the official website: Software Development Engineer, Machine Learning - Amazon Sidewalk.
Day 7: Received email from the recruiter for the call arrangement.
Day 16: Had a phone call with a recruiter who was very helpful and answered all my questions. They emphasized that Amazon places great importance on leadership principles and provided examples of candidates who were rejected due to poor responses on these principles or saved by their strong performance in this area despite weak technical skills. The recruiter also advised me to prepare for the interviews in English since all interviews are conducted with employees in the US office, though this position was based in Taiwan.
Day 28: Online interview. The first half-hour and a programming question for the second half-hour. The programming question was not found on Leetcode, but I thought it was easy. In fact, I think I will not pass the interview, English speaking was a bit stuck, and I also asked him to speak the question again two or three times. I also not answered very well on the easy coding problem.
Day 35: I received a letter from Amazon saying that I had passed the interview, I was surprised. Amazon’s loop interview is a five-hour interview, half-hour for leadership principles, half-hour for technical questions for five rounds. And a 30-minute candidate chat, allowing interviewees to ask any questions. I think it’s good that this chat will not affect the interview results, so you can ask anything you want.
Day 43, 44, 45: Because I was the interview with employees in the U.S. office, so the time I could choose is 23:00~9:00 in Taiwan. The loop interview finally was split into three days. The first half-hour of the first round was behavioral questions, followed by a half-hour of a Leetcode medium question. I wrote the code pretty smoothly, but had some difficulty explaining it in English and ended up going a little over time. The second round was a half-hour of behavioral questions and a half-hour ML case study. The ML questions were much simpler than I expected, so it didn’t feel like Amazon. The third round was with a Technical Program Manager, and they only asked half-hour of behavioral questions before letting me ask questions. That round didn’t have any technical questions. The fourth round consisted of two Leetcode questions, one easy and one medium, which took half an hour to complete. The remaining half-hour was spent on behavioral questions. The first half-hour of the final round was behavioral questions, followed by system design questions in the second half-hour. I didn’t know anything about system design and hadn’t prepared for it at all. I didn’t expect a machine learning engineer to be asked about system design, so I ended up rambling.
Day 55: Received rejection.
Preparing Behavioral Questions
Because Amazon’s behavioral questions are the most difficult in all companies, I prepared for Amazon only. Amazon recruiter provided a blog, which analyzes 14 leadership principles and corresponding sample questions in detail. Because the interview were conducted in English, I wrote an English script based on my past experience and tried to memorize it. The interview questions was answered by my relevant work experiences.
Preparing Leetcode
I’ve been practice Leetcode problems intensively for about two months, and I’ve submitted about 900 solutions. I did not open a new session, so it’s difficult to determine the exact number of problems I solved. I have participated in almost every weekly and biweekly contest, and my rank usually falls between 200 and 500. I can consistently solve the first three problems, which consist of one easy and two medium difficulty questions, within 40 minutes, but not always solve the hard ones. I have purchased a premium membership for one month, but I don’t think it’s necessary for preparing interviews. So I suggest only buy a month before interviews. If you’re confident in your coding, not buying it won’t make much of a difference.
Leetcode has a great feature called assessment, which is placed under the interview tab. It will randomly picked problems to simulate a mock interview. If you have a premium membership, you can pick problems from your target company. There are 3 kinds of “assessment”: online assessment, phone interview and onsite interview. Online assessment has 2 easy problems, phone interview has 1 ~ 2 easy + 1 medium, onsite interview is 3 to 4 problems, usually 1 easy + 2 medium + 1 hard. It will give you a score based on your speed of solving the problems and the number of submissions, which is not important nor informative. There is an “insight” feature, this is a great feature because you don’t know the topic when you write the question, it is the same with the interview. But after the assessment finishes, it will tell you which topic you perform better then you can practice less, and which topic you perform worse that you should practice more. As mentioned in Peak: Secrets from the New Science of Expertise, the most efficient way to improve skills is to practice slightly beyond your ability, and then gradually increase the difficulty after you have become familiar with it. Repeatedly practicing in a comfort zone is just a waste of time. The assessment insight is to help you find the appropriate difficulty for each topic.
If I have more time on a given day, I will start by doing an onsite interview assessment. If I found that I cannot solve the hard problem during the assessment, I will stop the assessment early. After the assessment, I will look at the discussion for each problem to see if there are a better or more concise solutions. If there are, I will write the solution on my own. If I feel like I may forget the solution later, I will write down the problem and revisit it in one or two weeks. Then, depending on the mood, sometimes I will practice the problems of target company by frequency, to avoid reducing the difficulty by knowing the category of the problem beforehand. Or I will practice the topics according to the assessment insight. I will practice the topics of “Looking Good” only hard problems, and the topics of “Getting There” from medium problems. Regardless of whether I can solve the problem or not, I will look at the discussions for better solutions and make a note to review the problem later if necessary.
Some people say that there is never a day when you are ready for coding interviews, but I don’t think so. I think the performance in the weekly contest is a good standard to see how well you prepared. If you can solve the first three problems, 1 easy + 2 medium, consistently in 40 minutes, then you are ready for the coding interviews. And, you always need a mock interview, coding interview is much different from writing code on the Leetcode IDE.
Preparing Domain Interview
I didn’t prepare for machine learning interview, but I still want to mention domain interview. The scope of machine learning is so broad and varied that I honestly don’t know how to prepare for it. In addition, I didn’t expect machine learning engineer to be asked about system design, but I had been asked it in the interview with Amazon. Actually, in the email from Amazon confirming the interview time, they told me the interview topic for each round, so I knew there was system design a week early, but I didn’t know how to prepare for it. I only watched Amazon’s Youtube video and assumed I was prepared. So even if you are interviewing for a machine learning engineer, you still need to confirm with the recruiter that you will be asked system design problems or not. As for whether to prepare …… I don’t think it’s a good idea to spend too much time on it because most of the companies don’t ask it, unless Amazon is your first choice, or you are on the top of the leaderboard of Leetcode weekly contests. Otherwise it’s better to spend more time practicing coding questions.