Master plan to crack your next software interview
So, you are planning to start interviewing for your next job and you don’t know where to start. Here’s the quick guide on how to plan for the preparation.
Also, find all the resource you will need to read, revise and practice mainly focusing on following areas -
- Data Structures
- Problem Solving
- System Design (If preparing for senior SDE role)
Start planning backwards. When is your next important interview? Let's say you have 3 months for the interview, plan to invest half of the time (6 weeks) for revising and practicing questions on focused areas. For the second half you can focus on general problem solving on mixed concepts and solve past coding interview questions of the companies you are appearing for.
If you are a working professional, put aside at least 2–4 hours daily on weekdays and 4–6 hours on weekends. If you are student, you can plan your day around your class schedules and can put more hours into reading books and get in depth of each and every topic. Solve at least 15 problems on each topic (5 each in easy, medium and hard).
For me, reading first thing in the morning help, as I found this is the best time to absorb the concepts. Then practice few simple questions on those concepts (just get pseudo code or solutions in mind). You can put any time between you wake up and go to office. If you are not a morning person you can put this at the end of the day when its quiet outside, which will help you focus better.
Use another slot in a day of around 1–2 hours for coding those solutions on computer and test it.
For weekends, focus on coding marathons, challenges and timed competitive programming. book focus blocks of 3-4 hours to get the most out of it.
Start with what you are most comfortable in and has some context on the concepts. Pickup your notes for reading summary of all those DS Algos or take help of books and YouTube videos. Examples to start with are Arrays, Linked Lists, Sorting and Searching Algos.
Then level up to the topics where you need more revisions. cover more difficult but important questions which are popular in interviews based on Trees, Graphs and Dynamic Programming.
Once you got good hold of concepts and some comfort with problem solving, you can start interviewing with the companies. Learn from each interview and ask for feedbacks. Find out your weakness from the experiences and practice more on those, if needed go deeper into the concepts, read more about it in books. You can also refer to question from the company’s past interview questions which will give you better idea about the of the level of the question.
If you have notes then you can revise from those, if you don’t have one this might be the great time to start so that you can use it for your next preparations. It's a onetime investment and will help tremendously in the future. You can either use OneNote/Evernote to write digitally or use a physical note book (old schools is the best :P).
Write very concisely all the concepts from your understanding. For taking notes don’t copy sentences and paras directly from the source, instead close the source and try to remember what you read and write it in your own words. This way you will retain it longer in the memory and have better clarity. It also helps in revising the concepts faster when those are written in your own words.
If you feel you have time to take notes then you can always use online articles and videos for quicker revisions.
Resources on data structures and algorithms
15 Data structures in 5–10 mins each by Gayle Laakmann McDowell
15 Algorithms in 7–8 mins each by Gayle Laakmann McDowell
15 Algorithms in 7–8 mins each by Gayle Laakmann McDowell
Learning path with topic wise concepts and problems
1-D Tutorials & Notes | Data Structures | HackerEarth
An array is a sequential collection of elements of same data type and stores data elements in a continuous memory…
Linear Search Tutorials & Notes | Algorithms | HackerEarth
Linear search is used on a collections of items. It relies on the technique of traversing a list from start to end by…
A book that cover all concepts and types problems for interviews
Once you have got good hold on basic concepts on DS and Algo after revising and solving questions on individual topics, its time start preparing problem solving. In this step you will practice problems in general which can be based on multiple areas at the same time and with varied complexities. More you practice the better and faster you get.
3 step method to solve any problem
After reading and understanding the question completely, start figuring out the solution in your head. Use notebook to write the assumptions and come up with most simple solution which might be brute force. Create 2–3 sample data to test through your solution.
- Think of solution, check if it works logically and write pseudo code quickly (language agnostic). Find out the complexity (space and time) and check if you can make it better in any way. Iterate this step until you come up with the best possible solution. Finally test your solution with some sample data.
- Write the actual code using pen and paper referring pseudo code from last step using any preferred language. Writing on paper is important as it makes you think of all edge cases and nuances of problem which you might have missed in solutioning phase. You won’t get help of IDEs and Intellisense, this emulates online coding interviews where you have to write code on word doc (like in google).
- Write the code on your computer and run it through all test cases you created. this is where you will find out if there are any build or run time issues. this will help in machine coding rounds, which are common in start-ups as qualifiers round.
Follow this method for every problem you solve. this way you can never forget the strategy you used to solve the question, which can also be applied to other similar problems.
Sources to practice
Great place to start problem solving with this as it covers all topics with gradual increases in difficulty.
Explore - LeetCode
LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a…
Course | Data Structures and Algorithms
This course is a complete package that helps you learn Data Structures and Algorithms from basic to an advanced level…
Company wise Questions
If you have interview scheduled for a company you can then go through previous interview experiences and question of that company. this will help you gauge the level and gain confidence.
Company Preparation - GeeksforGeeks
Company Specific Preparation Pages : You may also check our latest online course series to learn DS & Algo is named…
Interview Prep- Prepare for tech interviews
Prepare for your technical interviews by solving questions that are asked in interviews of various companies…
Coding hackathons and challenges
On weekends you can do timed problem solving to emulate interview experience. Pick up any live challenge or from the archives. Some of them also offer interviews/jobs if you clear the bench mark.
Contests | HackerRank
Code and compete globally with thousands of developers on our popular contest platform
Programming Challenges, and Coding Competitions on HackerEarth
Please refresh the page to see the time in your system timezone uh oh! too few challenges in the result set. Please…
System design preparation
If you have 2+ years of experience and appearing for Senior positions like SDE 2/ SDE3 then you will also need to prepare for design rounds. It's necessary to have good understanding of design systems, patterns and scalability. If you have some experience of design in your current company then you might already know few things and it will help you in the interviews
Refer to below sources for more examples and concepts related to system design.
System design playlist by Gaurav Sen (29 videos, each 10–20 mins)
Tech dummies Narendra playlist (30 videos, each around 30–40 mins)
These video covers majorly used examples of system design. You will learn how each system is designed differently according to the needs of the system while applying same basic principles. If you are interested in more theory and concepts behind then please refer books in other references.
To practice for system design interviews, schedule time to have discussions with people with similar interests and brainstorm system design of any app or website you like or use.
- Start preparing 1–3 months before the major interview, plan in reverse from interview date to today.
- Create a daily schedule and stick to it as much as possible, put 2 slots in a day. On weekends do coding marathons/challenges of 3–4 hours each.
- Read and revise the basic concepts, use your notes or read online summaries.
- Practice as many as possible. Solve the problem using 3 step methods. Iterate till you get the best solution
- Prepare for design interviews using sample design videos on YouTube. Practice with your friends and brainstorm ideas.
Disclaimer: I have no association with any links or sources mentioned here and credit goes to the creator of those sources.
For in depth learning
- UC Berkely classroom lectures on Data Structures (39 videos, 1 hour each)
- MIT classroom lectures on Algorithms (24 videos, 1 hour each)
- Data Structures and Program Design in C (Robert Kruse and Tondo)
- Introduction to Algorithms (CLRS)
- Designing Data-Intensive Applications (For system Design)
- Design Patterns (For System Design)