Shakti Mani Tripathi

Shakti Mani Tripathi



I cleared @amazon Interview rounds for Software Development Engineer 2 (SDE 2) position a few months ago. Sharing a COMPLETE practical guide on how to prepare for the interviews from SCRATCH and do wonders ๐Ÿคฉ A thread ๐Ÿงต

Firstly, let me tell you, the interview pattern for both the SDE 1 and SDE 2 roles are a bit different. If you've applied for SDE 2, then you already must be prepared for SDE 1 as well. In other words, rounds for SDE 2 = rounds for SDE 1 + some other rounds as well.

For SDE 1, they mostly emphasise on your problem solving, coding skills that has mostly to do with data structures and algorithms. For SDE 2, same skills will be tested. But apart from that, they will also focus on testing your design skills as well as knowledge around it.

So for SDE 2, a total of 5 rounds will happen at max. 1 Online Coding Test 1 DS/Algorithm Round 1 Low Level Design Round 1 High Level Design Round 1 Bar Raiser Round Let me explain you how and what all to prepare for each one of these rounds step by step.

In the Online Coding Test, it will mostly judge you on the basis of your: 1. Basic DS/Algo coding skills 2. Debugging skills 3. General personality assessment.

Btw, this round mostly happens when the recruiter reaches out to you directly or you apply via careers page. In case of referrals, mostly this round gets skipped and directly onsite rounds happen for the team for which you were referred to by your friend. So try to get referrals!

Before I explain you on how to prepare for this online round, let me tell you that if you qualify this round, you will be eligible for the next 3 onsite rounds as mentioned in the above tweets.

Out of which, the first one will also be focusing on your DS/Algo skills where you'll have 50 mins to solve 2 DS/Algo problems and in the next 10 mins, they will ask you leadership principle questions.

I will explain you how to prepare for leadership principle questions as well as general personality assessment in the very end. Firstly, let me explain you how to approach these two DS/Algo rounds.

Before jumping onto preparing for DS/Algo, I'll recommend you to revise the programming language in which you're gonna code in the rounds. For ex. C++, Java, Python etc.

I preferred C++. So, I revised all the main concepts related to pointers, diff b/w reference and value, structs, classes, application of STLs and basics of memory allocation.

Side by side also solve some debugging problems so that to get a better grasp of the language syntax. You may find these syntax based debugging problems in any of the book from which you learn that coding language. I did it from here (for C++):

Now once thats done, we can now start preparing for DS/Algo problems. Let me tell you, in both the rounds, they DO NOT ask too difficult problems.

In the online test, both the given problems' logic will be quite easy but can be implementation heavy. I would suggest you to solve a lot of string problems as they focus a lot on that. Also don't expect problems based on heavy data structures to be asked in this round.

You might also have to write a short description of each of your solution that you've implemented along with the time and space complexity after you've submitted these 2 questions in this online test. So do learn about how to calculate time and space complexities of the solution.

Now in the first onsite round, the DS/Algo problems might have easy-medium difficulty level which focus mainly on your basic data structures and pretty standard coding problems. For ex. dfs/bfs related standard problems, maximum area of histogram, 2D matrices and stuff like that.

Thus, I would suggest you to go through all the below algorithms (and data structures needed to implement it). PS: Just deeply go through their theory and do 1-2 standard problems of it. Watch multiple theory videos on YouTube for each algorithm to understand it accurately.

Now once that's done. I would suggest you to solve all the questions from this Interview Bit platform till Level 7. Link: All these problems are popular and EPIC! They cover basic complexities of all the algorithms and build a solid foundation for you.

These are the DS/Algo problems that have been asked in Amazon before. Many times these questions get repeated in the rounds so try to practice the frequently asked ones.

DISCLAIMER: In the worst case, you might be asked the below questions which can be tough for you to implement under the given time frame, so do revise them thoroughly- 1. Implement LRU Cache 2. Solve problems using heap instead of STL 3. Implement AVL tree and so on...

Also a good thing is, unlike @google coding rounds, if you're able to provide the solution that interviewer wants under the given time frame, then mostly they will give you a +ve feedback There's not as such strict checking of code quality, code verbosity in Amazon DS/Algo rounds

PRO TIP: Most of the time, it's hard to come up with most optimal solutions of two coding problems under 45 mins So sometimes, the interviewer just wants a naive solution instead of the optimal one. So do clear that in the beginning like how good of a solution they want from you.

Now, coming onto the Low Level Design (LLD) round. I would first suggest you to master a coding language of which you find the OOPs concepts easier to implement.

For example: in my case, even though I use C++ as my go to language for solving DS/Algo problems, I use Python language for solving the LLD problems. You might like using Java, it's on you. Whichever language you chose, revise OOPs concepts specific to it and it's applications.

For example, how and when to create child classes, interfaces, abstract classes, how does polymorphism works here, etc. Once it's done, open this repository and SOLVE ALL THE PROBLEMS in this: FOR LLD, YOU DON'T NEED ANYTHING ELSE EXCEPT THIS LINK!

It won't take more than 20 days even if you solve one problem each day. TIP: Don't just learn to code LLD, but also learn to create class diagrams, use case diagrams, i.e. everything that's mentioned in this repository!

PRO TIP #1: In LLD rounds, the interviewer will always give you a vague problem statement. It's your job to sync with him regarding problem clarity. Also interviewer will mostly judge you for how you enumerate the various system requirements from that vague problem.

PRO TIP #2: Remember, writing the LLD code for the entire problem statement is impossible under 50 mins. So, I'd suggest you to explain the overall components of the system using class and use case diagrams. Showcasing what all classes and interfaces will be present.

And then asking the interviewer about which component he wants you to deep dive. And hence, implement a working solution for that component only. Rest you can explain verbally.

In short, how I utilised my time in LLD rounds was like this: 1. Problem statement clarification - 2 mins 2. System requirements clarification - 8 mins 3. Explaining all classes & their fields, interfaces, components of system - 15 mins 4. Working solution of 1 component - 20 min

Now for High Level Design (HLD)/System Design round, I think it's the most important & the toughest round for SDE 2 selection process. It can make or break your deal! Also because this round is generally taken by the hiring manager of the team your application is getting reviewed

So you have to give at least 1.5 months of your time to prepare for it! Even if your last 2 onsite rounds went average but if this goes great, then there's a high chance of your selection!

But don't worry! I have a COMPLETE Practical guide on how to ace it. Let me explain it step by step. Also remember, based on your years of experience, the expectations from your end may vary.

For example: if you are currently SDE 1 in your current company and applying for SDE 2, then they don't expect you to be very good at it. But if you already are SDE 2 and have 5+ years of experience, then they might expect you to have in-depth knowledge.

Firstly, I would RECOMMEND you to learn: 1. Basics of networking (How internet works, what is TCP/IP, 3 Way handshake, how IP address, masking etc. works) 2. Basics of Operating System (OS) (What is threading, boot, RAM, ROM, processes, mutex, semaphore etc.) 3. Basics of DBMS.

OS and Networking don't have much to do with System design but might help you to understand the System better. And hence, even if the interviewer tries to trap you somewhere with things related to these topics, you will be confident enough to at least give an explanation for it!

Then I would also suggest you to go through these below mentioned topics. THESE ARE MUST! You may learn them on Youtube. There are many sources. I hope this searching part you can handle on your own :)

Then I would also suggest you to go through these below mentioned topics. THESE ARE MUST! You may learn them on Youtube. There are many sources. I hope this searching part you can handle on your own :)

Now, the BEST part - Complete the Grokking System Design course. Link: I know it might cost you around $60. But believe me, ITS WORTH IT! If you throughly complete this course, then you don't need anything else to prepare for HLD rounds like ever!

I also think, somewhere the free version of this course is always available. I think on github probably. You can also ask a friend to buy this course for you and share the expenses. BELIEVE ME, THIS COURSE IS THE GOAT FOR HLD!

So, after purchasing it, just read and try to understand this complete course at least 4-5 times. It is only of 180 pages. So reading it 5 times is not a big deal!

What I did was first completing all the glossary HLD concepts that were mentioned in the course and also watching Youtube videos for it side by side so as to strengthen the concept as much as I can. I watched a lot of his videos on system design -

Post that, I read this book once, without trying to apply too much of my brain on how to solve the questions on my own. It helped me to understand how I need to approach these problems and basically the framework of system design interviews.

In the next 4 revisions, I basically looked at the question first and tried to come up with the solution on my own by verbally explaining the solution first and then simultaneously checking the solution from course just to be sure I am on the correct path or not.

I also practised a lot on how to draw the system design architecture of the problems, i.e. its various components and stuff like where to add load balancer, where to add redundancy. And took the approach of drawing the components and side by side verbally explaining the solution

I used to draw the HLD flowchart. In interviews also, it is better to explain it diagrammatically instead of just writing or verbally explaining the solution.

As you continue your practice, a time will come, when you'll start feeling comfortable in at least giving an average solution to any design problem (which is not even in this course). Because most of your design problems have components similar to what is here in this course.

PRO TIP #1: In this round, the interviewer might try to pressurise you, pin point ur mistakes in a lot of aspects related to CAP theorem, load balancing, system requirements section, etc. But u shouldn't lose ur temper. It's just to check if u can perform under pressure or not

PRO TIP #2: Try to show the interviewer, that you don't just know about the designing the architecture but also have a lot of understanding of the product you are making.

For ex. If u are told to make an online movie ticket booking app, then u must tell them, what the customer facing app will behave like and what the theatre facing app that will update the seat configs and shows availability will behave like. U must know its end to end working.

PRO TIP #3: Communicate effectively and smartly! Don't try to touch a topic on which you don't have much command/confidence. Otherwise the interviewer might ask u to deep dive in it and u may fail to answer his questions. Focus on presenting a solution based on ur strong aspects.

PRO TIP #4: Very important! Please learn DBMS in depth! Many times they'll ask you why you are choosing SQL over NOSQL and vice versa. Also do read about various databases like DynamoDB, MongoDB, Cassandra etc. and which is better on which place.

For example: if they ask you to design an online chatting system. You might tell them that you'll prefer NOSQL db. Tell them why and also which NOSQL db you will use. Telling that shows that you just don't have theoretical knowledge but you know its practical application too.

So, the last round is Bar Raiser. What is asked in this round depends on ur feedback of the last 3 rounds. For ex: if your DS/Algo and HLD rounds went well but LLD round went below average, then LLD might be asked in the bar raiser round. Basically whichever round went weakest.

Also, if more than one of your last 3 rounds went bad, then maybe even Bar Raiser round might also not be able to save you and you might get rejected or get downgraded to SDE 1 (from SDE2) despite performing well in Bar Raiser. So prepare as well as you can!

Now, one thing I forgot to mention.. All these last 4 rounds will be of 1 hour. But you'll have only 50 mins to do the problem solving. In the 10 mins, in each round, the interviewer will ask you Leadership principle questions or might do your general personality assessment.

From general personality assessment, they might want to know how you basically approach your work. Do u love solving complex problems? Are u a procrastinator? Do u love to follow a time table? Are u open to accepting your mistakes? Are u open to learn something new? And so on...

Amazon also has certain leadership principles which they are very strict about. You can see it here - You will be asked questioned based on these leadership principles only! So please go through it!

Questions might include: What initiative u took on your own? What could have been improved? What feedback u got from manager? How did u tackle any miscommunication b/w u and a team member? How did u respond to a negative feedback by manager? Have u ever failed to deliver on time?

Please practise such questions before hand. DO NOT take it lightly! You might do great in all the technical part of your interviews but if you don't answer these questions well, then you might get REJECTED! It has this much weightage in Amazon.

In the end, based on these round, you will hear from recruiter whether you're selected or not. I know the preparation might be intense, especially the design part, but with proper strategy I believe anyone can crack it. A total of 3-4 months of preparation might be enough!

I hope you all liked this thread. Don't forget to retweet it so that it reaches thousands of others in need. Do follow my twitter account for similar insights. I'll be sharing tips/tricks on how to improve your coding skills efficiently and crack job interviews! Stay tuned ๐Ÿ˜

Also you can check out how I prepared and cleared @google interview rounds for L4 position in this below tweet:

Follow us on Twitter

to be informed of the latest developments and updates!

You can easily use to @tivitikothread bot for create more readable thread!
Donate ๐Ÿ’ฒ

You can keep this app free of charge by supporting ๐Ÿ˜Š

for server charges...