How I cracked my SDE Interview at Amazon and how you can too.
How to get SDE job opportunity at Amazon ?
What is the interview process at Amazon ?
What should I prepare for Amazon interviews?
Should I do competitive programming or should I focus on creating projects ?
If these are some of the questions that you have in mind, then this post is a must read.
Hi there, I am Software development engineer at Amazon and Ex-Samsung. I have been asked these questions multiple times in my webinars or on linkedIn, so I thought to put it in a post so that it benefits all my readers. In order to make whatever I suggest relatable, I will be relating all the suggestions to my own preparation and interview experience at Amazon.
Before I begin, I will ask you to remember this, no matter for what company you are preparing for, you need to have knowledge of data structures and algorithms. I am talking about big companies.Also, I can only provide you path to crack the interviews, however it will depend on you to walk down that path and achieve success.
Interview Process
First of all, let me layout the over all interview process so its easier to follow.
1. Coding Test round : 1 online round (1 hour 30 minutes)
2. Technical round - 2 rounds (1 hour/round)
3. Managerial round(Technical+behavioural) -1 round (1 hour)
4. Bar raiser round - 1 round (1 hour to 1 hour 30 minutes)
All the rounds are elimination round. ( Based on personal experience, Number of rounds and elimination criteria will depend on drives conducted for hiring)
Once all the rounds are completed, you receive result over mail after few days.
Now, let's start deep diving on each of the rounds and also I will write what questions I faced during the interviews. I will write links to posts which have this question explained, since explaining the specific question is not my intention here but to give you overall perspective of you should prepare and what you should expect.
Coding Test
Amazon's online coding test is generally of 1 hour 30 minutes, there are two coding questions which evaluate your problem solving skills. Though there is some additional variation in the tests, like I have encountered one which consists of 20 extra questions based on C, object oriented language, operating systems, etc and one in which you have to additionally explain the logic you used to solve the two coding questions. So it's good to have your concepts clear in core computer science subjects.
To give general overview, the questions can be based on Strings, Trees, Stacks, Queues. Graphs and dynamic programming is uncommon. You are allowed to you libraries like STL or Collections, so it's good to learn those in the respective language.
I consider the level of coding problems in the range of easy to easy-medium, considering the level of questions I have encountered while giving contests on codechef, codeforces and other platform. If you have been doing competitive programming for a while now and score decent ranks in contest, these questions will be a piece of cake.
If you are not much into competitive coding, also if you are aiming for any other company Start with searching for previous year questions asked in the company test. See the experiences of people, also if you are unable to find. Reach out to your connections on linkedIn asking for help. This will help you in understanding the level of questions you can expect.Mainly this will help you understand whether you have to go for advance data structures or not.
Once you are clear about this, start preparing accordingly. You need to study data structures and algorithms, there is no escaping in that. I will try to cover all of these in my beginning with competitive programming series, since it will be too much for one post.
As for me, I started coding around 2nd year of my engineering. I did not took a proper path to do it, so I wasted lot of time in practising easy questions which were not worth the time, or study hard topics which I never used. I would say this is where a proper course like prepbytes would come into help. They help you in studying according to a proper strategy so that you do not waste time. Having said that, if you want to prepare on your own there are lots of blogs and video channels which will help you achieve it (including mine).
Technical Interviews
There are generally two technical interview rounds where you are asked two coding problems per round. Additionally you can be asked questions on operating systems, SQL queries, Object oriented concepts. I was asked question related to Operating system in one of the rounds. The second round was taken by a senior developer and he focussed only on the two coding question.
The questions I faced were based on LinkedList, prefix-sum, binary tree, binary search in these rounds. Some other applicants were also asked question related to dynamic programming. So you can expect questions from all the basic data structure and algorithms. Graphs is still. bit uncommon, having knowledge is always a plus.
In order to prepare for these interviews, the best way is to look for previously asked questions GeeksforGeeks has whole archive of previously asked questions, the more questions you practise, more you will understand what you can expect. Obviously once you have gone through lot of questions, the chances of getting a question you have already solved increases. However, this should be done only after you have studied basics of DSA, since this will help only after you have already studied a topic.
I actually followed this in third year of my graduation to understand level of questions asked in different companies. I made a list of questions topic wise and used to solve them. This gave me a good grasp of all the questions asked in various companies, including Samsung in which I got first placed. However, this takes time and consistent effort. So go for it mostly if you are still in college. If you are already doing a job, and have less time to spare always go for a course in Prepbytes, or any other platform.
The preparation for technical questions in the successive rounds is same so I will not be adding explanation in the successive rounds
Technical + Behavioural round
I was basically asked two questions and this would differ from person to person, so I strongly suggest to read other experiences before jumping to interviews.
First one, was not asked particular coding problem, but a general question on storing values in a data structure such that they can be queried easier. It was mostly discussion on Trie, HashMap and binary search trees, which should be used when. For this it is important to have knowledge of implementation of the data structures, generally you do not have to study advance data structures but knowing theory at-least always helps.
Second one was related to the internship I had done, the interviewer asked me to explain the work I have done on board. Discussion went to leadership principles of Amazon and how have dealt with any situation during my internship. For this, I have only read the leadership principles of Amazon, but most of it was impromptu. From explaining the internship project on board to explaining examples based on the leadership principles. So I would suggest to go through leadership principles of Amazon, and have good knowledge of the work you have done. Know what you have written in resume Do not let yourself be caught in a situation where you do not know what you have written in your resume. It will really create a bad impact. And I am emphasising on this fact, since I have seen people adding technologies and work just for the sake of filling the resume. Do not be one of them,
Bar raiser round
Bar raiser round is similar to technical round, but Amazon has a different perspective for this round, you can read it on the amazon blog.
There were two questions one was a coding problem based on Sorting and map, other was question related to Java heap, since I told I do coding in Java. You can expect two coding problems in this round as well, and question related to leadership principle.
Once you have read the above blog. you can understand the importance of this round. There is no specific preparation for this round, have good grasp of data structures and do practise of questions as much you can.
Now, what good is the preparation if you do not get opportunity to showcase your skills so I have ended explaining some methods which will help you get a shot at interview at Amazon or other companies. I have written it ending, since this is something you should worry about after you have done some amount of preparation, since you will not be wanting to waste a golden opportunity
Job opportunity
I had registered on Instahyre around May 2019, and shown interest for couple of jobs. Around June 2019, I got a notification that one of the recruiters at Amazon was interested in my profile so I went ahead with it. Soon I got test link followed by interview dates on email.
Yeah, so that was how I got a shot at SDE role. Now I will summarise some of the methods you can utilise in order to get job opportunities at Amazon or any company for that matter.
1. Campus placements
This is specifically for college students. One of the easiest ways to get into Amazon or any other company is through campus placements. If any company visits your college, value the opportunity, work hard for it. The good thing about this, the competition is limited to your batch.
2. Pool campus for freshers
If the company you are aiming for does not visit your college then look out for pool campus placements which occur for final year students specifically. For this you need to be aware of any contests which are going on for large scale hiring for freshers. One such event is AmazonWow, also some are conducted by universities.So watch out for these events as well.
3. Apply through official careers portal
One of the best ways to begin with your job search is to look for all the openings, present in the company's official website. For instance, for Amazon it is amazon.jobs, for Google it is careers.google.com and so on. This gives you transparency over the job openings and you can apply, if you think you meet the job criteria.
The only downside of this transparency is that for each job, there will be hundreds of applicants and it becomes difficult for the recruiters to go through each of the resumes, so chances become quite less.
4. Register on Job websites
Another way is to register on websites like LinkedInjobs, Instahyre, MonsterIndia, CareerBuilder, AngeList and so on. There are lots of sites dedicated to connect aspirants with company.Register on these websites, apply for relevant jobs. They look over your resume before passing it to the respective company, so that gives you good chances to get a shot for interviews. Moreover, if you do not get opportunity for the job you applied do not get disheartened, generally these sites, match to other companies based on your resume.
5. Sign up for courses which help you with job opportunities
There are many other websites, which help you with preparation and provide referrals along the way or at the completion of the course. Some of these websites include scalar academy, coding ninjas, and obviously prepbytes. This option comprises of both preparation and applying for jobs, preparing through a course has its own pros, you get a structured syllabus, you get mentors who help you with any problems, instead of searching on the internet and so on.However, this depends on your preference whether you want to prepare on your own or not.
6. Emails recruiters
It's worth mentioning that if you can get emails of recruiters, you can email them directly, always mention the job post you want to apply for. Though it is difficult to email, and has less chances of getting noticed, since mostly its not a formal channel for applying.But I have seen it work for some people.
7. Ask for referrals
Well, one of the surest ways to get opportunity for a role, is by asking someone to apply your referral. I have mentioned it in last, since you depend on someone else to recommend you for a job, however that pretty much guarantees that you will get a chance to give coding test or interview for that matter. For this, build your linkedIn connections, explain your skills and preparation to person you are asking resume.
Don't go for messages like,
Hi, I am final year student at XYZ college and want to be part of XYZ company, Can you give referral.
Such messages are very vague and mostly people ignore them. The reason being, every student (even I) wants to work in a good company. Does this message show what skills I have that I deserve to be part of the company. And not just that, not mentioning the job post in which you want to apply for shows that you are not serious and not have done your research.
So be cautious while writing messages while asking for referral, it all depends on your communication and tech skills whether the person will refer you or not, and either way respect that decision.
I hope all this information helps you land a job at good company.
In my next post, I will continue with beginning with competitive coding series, check out the blog for all previous posts.
Keep coding!
All the best!!