Interview with Amazon - The Online Assessment
Hello! This is part 2 of my Amazon Interview series. If you would like to read from the beginning, you can go to part 1 here.
Please note that I cannot disclose any interview questions, as I have signed an NDA.
Due to my interview experience with Google, this wasn’t my first time preparing for an online assessment with a Big-N company. I knew what did and didn’t work, the topics I had to study, and how to study them.
My plan for the online assessment prep? Do as many questions as possible.
I used Leetcode as my main way of studying. I had an annual Leetcode premium subscription which allowed me to maximize the utility of the platform. I also had the Cracking the Coding Interview book, but wouldn’t use it as much. I had already solved the majority of the questions on it while preparing for the Google interview. So I ended up using it mainly just for some bedtime reading.
I planned to cover the following topics:
- Arrays and strings
- Trees and Graphs
- Dynamic Programming
- Sorting and Searching
And I got right into it.
I spent a week on other obligations and couldn’t sufficiently prepare. I asked the HR if I could extend the assessment by a week, which he was super cool with.
So after a total of 3 weeks, I had solved a bunch of questions. I didn’t feel like it was enough, but will I ever? Life moves on, and now it’s time to focus on the online assessment!
Amazon’s online assessment was carried on a third-party platform called AMCAT. The procedures were pretty similar to Google’s - you get a tour, you can take a sample test, then jump into the actual test.
Once I got comfortable with the website, I started my test. The first question was relatively easy for me. It was a Leetcode Medium. It was somewhat similar to a question that I had solved during my prep. I coded out the solution and passed all test cases within 10 minutes. I felt like I solved it too quickly, so I spent 5 more minutes looking over everything.
The next question was a little bit tougher. The question was long and I spent a good 15 minutes reading and understanding the question and coming up with test cases to validate my ideas. I hadn’t seen a question like this before.
Since I was told by Amazon that neither clean code nor performance will be a factor in my candidacy, I had the benefit of being able to simply think about a working solution. I broke down the question and came up with a couple of high-level approaches.
I chose the one that seemed like the most straightforward to implement. The code wasn’t short. I kept coding away while the timer ticked itself down to 80… 70… 60… I took more time than I would like in writing my first solution. I kept running into edge cases within my code while writing the solution, which took up more time to fix.
When I finally wrote down a full solution, a good majority of the test cases passed, but an alarming number of them failed too. Sh**.
Since these test cases were hidden, I had to figure out myself what the problem was. RIP me.
I walked through my code again. Thought about some edge cases. Walked through with an example. Found a bug. Fixed it. Ran the code.
Some additional tests were now green, but a few were still failing.
I’m down to 15 minutes. Running out of time with a bug I couldn’t find… Oh god, this experience is just like my online assessment with Google, repeating itself.
Fortunately, I had practiced with a timer when doing Leetcode, so I didn’t panic as I did with Google.
I kept my cool and walked through a couple more edge case examples. They all seemed good. By this point, I had my own testing script that would allow me to quickly check the outputs of test cases. But I still couldn’t find the problem.
The timer was now below 10 minutes. I had looked and looked but was starting to give up hope. I was thinking to myself “You know what, maybe I’m just hopeless for these kinds of interviews. Maybe I just don’t have what it takes to make it to a Big-N company. I prepped so mu- wait a minute.” I looked at the input requirements again. There was a minor detail that I missed. I quickly ran another test and bam, I found the problem. It wasn’t a bug. I just misunderstood the question and had the wrong implementation.
I had 7 minutes left. I needed to re-write a huge chunk of my solution. This is a dangerous thing to do with so little time left. What if some other test cases fail after re-writing the solution?
No time to waste. I immediately jump to it. I re-write everything in 5 minutes on my local IDE. Ran local tests. They seem okay, hopefully no regressions. I paste the code on the website and click Run.
Everything’s green. All tests pass.
I brief over my answers a bit before the timer runs out.
What I learned
- practicing with a timer really helps you not get anxious when the timer is running low. I practiced with my 2nd monitor showing a full-screen timer. It was really in-my-face and I just got a little bit stoic to it.
- reading and understanding the question sounds simple, but harder than I thought. I need to improve my attention to detail.
Some notable-but-not-important tips
- you have 15 minutes to explain your thought process for both questions. Try to split the time accordingly. I spent 10 minutes on the first one and frantically rushed for 5 minutes to explain the latter.
- the AMCAT platform takes around 30 seconds to run test cases against your code. This eats up your time. Instead, try to write and test your solution on your local IDE. Come up with your own testing script so you can easily add and remove test cases. I was already using my own testing scripts while practicing, so I simply copy-pasted mine during the assessment to test my code.
Online Assessment Result
Literally within a few hours, I get the following:
This is very welcome news. I’m starting to see the light in my job search.
On-site interviews. The real deal. A formidable obstacle standing before me and an offer from Amazon.
In my next post, I will go through my on-site prep.