I present to you the translation of my article Amazon software engineer interview , originally published in English on sobit.me .
Not so long ago, I was contacted by a technical Amazon recruiter. The company organized a three-day onsight interview for hiring programmers in their Berlin office.
The whole process, starting with how they contacted me and ending with signing the contract, took about two months. I would like to share my experience, how it went, and what, in my opinion, helped me get a job.
If I did not mention something important in the article, ask in the comments. I will try to answer as detailed as possible.
The recruiter contacted me through LinkedIn . She wrote that they needed programmers in the Berlin office, and asked to send her an updated resume if I was interested. With my habit of constantly keeping my resume updated, I sent it the very next day.
In response, I received some information about the position itself and how the interview will take place. On the same day I received a link to the Hackerrank specification . The first step was to solve it.
The assignment was given two hours, and the recruiter asked to finish it before May 5th. I decided not to hurry and wait until the weekend.
Hackerrank has a platform for company technical interviews called Hackerrank for Work . It was to her that I got by following the link from the letter. The platform offers a built-in time counter, a web editor with basic auto-completion capabilities for Java, direct problem formulation and the ability to test its solution with various sets of input data, including your own.
Neither the recruiter nor the platform told me about the programming languages ​​available at the interview before I proceeded to solve the problems. All I could choose from was C, C ++, Java and a couple of others. It went against my plans to use Go or PHP , and in the end I chose Java .
The interview consisted of three tasks. Technically, it was possible to solve them in any order.
The first task was about object-oriented programming. Several classes were given with their methods, and it was necessary to provide an effective solution, while maintaining an easily readable and clean code.
The second task was the algorithms. The advice that helped me personally: start by solving the problem manually and visualize your solution - this will help you look at the problem from a wider angle and understand exactly which data structures and algorithms are suitable for it . I solved the problem on paper. The solution turned out to be quite simple, and I just transferred it to the code.
Not without errors: instead of concentrating on the last task, I continued to optimize the already working solution and refactor the code to look prettier. Incorrectly prioritized. Lesson learned.
The last task required an analysis of the complexity of solving the previous problem, as well as explaining one’s choice. Due to lack of time, I had to confine myself to analysis.
The next day, the recruiter congratulated me in an e-mail about the passage of the first stage. Before inviting me to an onsite interview at the Berlin office, she wanted to phone and talk about my technical skills. We agreed on May 4th.
I had only two days to prepare. I ran through the main algorithms and data structures from the following list:
In addition to general knowledge, you also need to be able to justify the complexity of algorithms and standard operations on data structures . Wikipedia helped me a lot in this.
The girl on the other end of the line was very friendly: we started a conversation with abstract topics such as the weather and life in our cities. After that we went directly to discuss my technical skills. She touched on almost everything from the list above, and also asked a few questions about dynamic programming and recursion . A couple of times I stumbled upon the exact definitions of certain terms, as I used to call them differently. Typically, recruiters cannot go deep into technical topics, but she wondered exactly how I called them and why.
In the end she turned to behavioral questions. I did not prepare for them in advance, and I had to go right through in my head the appropriate stories for each question.
We ended the conversation with her positivity about my candidacy and confidence that I would have the same good impression on the on-site interview with her colleagues. Immediately after that, I ordered a book to prepare for a technical interview (listed in the References section). And ordered it, by the way, through Amazon.
After some time, I received two letters from the recruiter: in one I was provided with materials to prepare for the interview, and in the second - a form with questions to fill out. The questions were mainly about my current position, how Amazon can (and should) help me with the move, about my current working conditions in terms of wages and bonuses, and what day and time I would like to be interviewed.
After sending the completed form on the fourth day, I received confirmation of the interview from the new recruiters from the office in Berlin. A week later, she sent me a detailed schedule with the names and positions of those with whom I had to speak. It was useful to find their profiles on LinkedIn in order to get acquainted in absentia closer.
I had a little less than a month to prepare. I understood that I would not be able to master the book I bought completely, so I decided to devote time to three tasks from each chapter. I described the whole course of thought and iteration of the solution on paper and compared them with the solutions at the end of the book. With a black pen I solved problems, and with a red pen I corrected errors. The goal was to see less red with each subsequent task .
An interesting resource for practice that I discovered for myself is LeetCode . It so happened that my friend also decided to do this, and we devoted two hours every Thursday after work to joint problem solving.
Two weeks before the interview, I began to prepare answers to behavioral questions. Many candidates underestimate the importance of such questions and prepare only for the technical part. You can not do it this way! It is important for interviewers to recognize you as a person and to understand whether they want to work with you as a team . I was comfortable writing answers in the form of stories in the style of STAR . I covered the following situations: mistakes and failures, conflicts, examples of leadership. As a piece of advice, try to talk in your stories more about yourself and not about the team you worked with . Thus, it will be easier for the interviewer to evaluate your personal contribution.
You need to clearly know why you want to work in Amazon . If you cannot honestly answer this question, then consider whether this place is suitable for you. It will not be possible to deceive the interviewers, and this will be a waste of time for everyone. After all, why try to waste precious years of your life on something that does not interest you?
You should be able to talk about yourself . Ideally, you should be prepared to talk about your education, aspirations, key moments in your career, as well as strengths and weaknesses of character. It would be equally useful to prepare a list of questions about the company and the team with which to work.
Candidates were asked to take their passports with them and come up 10 minutes before the appointed time to register and sign a non-disclosure agreement. Then one of the workers escorted me to the room where my interviews were to take place.
There were a total of four interviews of 50 minutes with 10-minute breaks in between and an additional 15 minutes before the last. Each interview consisted of 40 minutes to solve problems and 10 minutes for behavioral questions.
At the first interview I was asked to design an object-oriented system. It was necessary to build an interface that would be used by other developers to create libraries based on it. Everything was simple at the beginning, but along the way, the interviewer complicated the task with new requirements. The interview ended with a discussion of the situation where I did not cope with the task on time.
The most important thing at this stage: do not start solving problems until you have a complete understanding of what is expected of you. Behave on these interviews as brainstorming: communicate with the interviewer, ask questions, discuss solutions, and when it will be clear to everyone what to do, pick up a marker and do it .
Not less important advice: if you are stuck somewhere, do not hesitate and ask for help . The worst thing a candidate can do in such a situation is to look silently at the board without any idea what to do next.
At the second interview there was a technical challenge within the product. It was necessary to find the right approach to the solution, determine the appropriate data structures and algorithms and write the solution on the board. In the last 10 minutes we talked about how I behaved in a conflict situation with a colleague.
In the third interview, I designed systems for various user scenarios. I drew the components on the board, explaining which one is responsible for what and how the communication between them takes place. In the end, I was asked to talk about a situation where I decided to work on something without the consent of my supervisor.
The last task was entirely about algorithms. The simplest solution was obvious, so I started by asking whether I should spend time on it or focus on a more optimal one. He asked, nevertheless, to start with the simplest, after which, of course, a series of optimization iterations followed until we ran out of time. Then he asked me if I made a decision that I regretted later. And if so, how would I act in a similar situation today.
After the interview, there was an unpleasant aftertaste, as if everything had piled up, since none of the solutions to the problems were answered: "Great! This is the perfect solution!". Do not rush to get upset - this is normal! No one expects you to find this "perfect solution." Tasks for interviews are prepared in such a way that it is not possible to fully solve them in 40 minutes. All the interviewers pay attention to is how far and with which way you can go .
Amazon took eight days to make a decision. On Friday, a recruiter from the Berlin office wrote that they had chosen me for the position. We discussed the details by phone on Monday, and three days later, on June 16, I received an offer with all the numbers.
The next day, we clarified some of the questions that I had prepared, as well as a few additional ones that I needed for my dismissal from the current company. And at the end of the same day, I sent the official YES to Amazon.
Anton Popov acted as a mentor in the hiring process and discussed the draft version of this article along with Sherzod Abdujabborov and Umed Khudoiberdiev .
Source: https://habr.com/ru/post/305340/
All Articles