What you should study for a successful interview loop

Fortune favors the prepared mind.

This gets asked a lot. There are hundreds of resources available today to study from, what everything does one need to study? 

Here is my take on this – the preparation never ends and there is no limit to how much you can study. Computer Science has so many different branches – software engineering, operating systems, data structures and algorithms, computer networking, database management, machine learning, and so on – that it’s impossible to limit your preparation. On top of that, any question related to computer science is a fair game in an interview, because believe it or not – you do need knowledge of most of these things for the job when working on a project. Although it’s not feasible to study everything, you can be strategic about the preparation and prioritize one thing over the other depending upon how much time you have for your next interview. Once you are done studying, check this post out to see if you are ready for the interview.

Generally, the interview process at top tech companies consists of –

  1. A recruiter call
  2. Online Coding Challenge (usually on HackerRank)
  3. Coding Interview
  4. System Design Interview
  5. Behavioral Interview
  6. Project deep-dive

The slight variations like no system design interview for new grads, or behavioral questions as a part of other interviews (5-10 minutes per interview) – is possible. All these interviews are equally important, so you must be well prepared for all the above interviews.

Let’s see each type of interview in detail. I will also discuss a typical timeline of these interviews.

  1. Recruiter call
    This is the first step in the interview process. You apply online (or a recruiter reaches out to you in the best case), communicate your availability with the recruiter, and finally set up the time to talk.
    From the moment you apply online to the time you actually talk to the recruiter, you generally get at least 2 weeks.

    This is one of the easiest steps, but it is possible to mess up here if you are unprepared. The recruiter has set up a call to hear from you about your background and tell you about the position that they have available. The outcome of this step depends on whether the recruiter believes that you are a good fit for the job or not. These calls are generally short and questions asked at this step are fairly common. Here is what you want to prepare for the interview –

    1. Read your resume once.
      You want to answer the questions with the most relevant experiences and going through the resume might just remind you of some one-off experience or a project that you had completely forgotten about.

    2. Know what the job description for the position is.
      The recruiter is going to ask you about your professional experience and they want to be sure that you are worth moving forward with. Check the job description and see how it aligns with your past experiences, what similar technologies have you worked with.

    3. Be ready to introduce yourself (“Tell me about yourself”).
      Don’t go very deep into any role or project. Simply let them know about what you have been doing in the last 3-4 years. Maybe tell where you went to school for your most recent education if it is a first or second job. This should ideally be 4-5 sentences. The recruiter is looking to make you feel comfortable and get you to talk.

    4. Be ready to talk about your most recent experience. 
      If you are a professional software engineer, talk about your current role, responsibility, and importantly the technologies you use. If the current role is not very similar to what you are looking for, in addition to the current role, also talk about your past experiences and projects that align well with the new job description. Mention what your role was and what technologies did you use. If you are a student, talk about academic project experience where you collaborated with other team members, what problem did you solve?

      In addition to knowing more about yourself, the recruiter is also going to talk about the company, the team (if it is not a generic software engineering role), the job, etc. If there is a good mutual match the process will naturally move forward. If the recruiter thinks that you are a better fit for some other position, they will recommend you for that.

  2. The second step in the process is a phone screen – Coding Interview.
    This is the step from where it starts to get a bit harder. Again, the recruiter asks for your availability and the interview is set up. Generally, you will get 1-2 weeks to prepare for this interview after the call with the recruiter.
    Coding interviews are generally 45 to 60 minutes of interviews conducted over the phone and a shared coding editor like Coderpad. The format of the interview is simple – the interviewer has a problem or two in mind that they would like you to solve with runnable code. Sometimes interviewers ask a problem that takes the entire time of the interview, sometimes they ask a simple question to begin with and then the second question, or they ask a problem that can be extended by adding more constraints. Before the interview, I strongly recommend reading another post where I discuss how to navigate in a coding interview and what to do if you hit a wall on some problem.

    How would you prepare for the coding interview? 
    1. Decide the programming language you are going to use in the interview and know it well.
      Knowing the right in-built library method can save you 10-15 minutes, knowing the right method names can save you anywhere between 2-5 minutes, and knowing the right syntax will save you in the interview. So for major data-structures/containers like the array, hashmap, set, linked-list, stack, queue – it is extremely important to know the syntax of insertion, removal, etc. I have listed down all the things that you should know in your programming language for the interview, must check that post out to confirm that you know all of those.

    2. Know string library and string parsing in your language
      A lot of questions are based on strings and knowing how to take out parts of the string, how to traverse it, how to search for a substring, etc. are very common steps of such questions. So this is important to know.

    3. Know the internal details of each container in your language 
      It is not enough to just solve the coding problem in the interview. It’s equally or more important to solve it efficiently and understand the time, space complexity of your solution. So, know the time complexity of each operation on each container in your language. E.g. in C++, the list container is internally a doubly-linked list, a map is a red-black tree while an unordered_map is a hash table. Knowing such details will enable you to justify and figure out the time complexity of your solution.

    4. Practice solving coding interview problems on platforms like Leetcode.
      Solving such problems will significantly help you in solving the problem in the interview. There are a variety of problems and over 1400 of them, so it’s impossible to solve all of them of course. Ideally, you should solve a few problems from each category like binary tree, graph traversal, searching and sorting, etc.

    5. It would also help to follow this when practicing
      1. Have a clock and think out loud.
      2. Really understand the problem well. Look for details that are still unclear. Check the example and confirm your understanding.
      3. Find a basic, may be inefficient, solution. Find time and space complexity.
      4. Think harder for a better solution, find time & space complexity for that solution.
      5. Implement the solution and make sure it works. Write a unit test for your code.
      6. Find the time complexity of each line of code in your solution, even better to write it in a comment at the end of the line.

    6. Data Structures that you should know –
      1. Array
      2. Linked List
      3. Stack
      4. Queue
      5. Binary Tree
      6. Graph
      7. Set
      8. Hash Map
      9. Heap
      10. Trie

    7. Also, know the fundamental algorithms – DFS, BFS, tree traversals, topological sort, binary search, etc.

    8. Do a couple of mock interviews.
      I can’t stress this enough. Doing a mock interview with someone who can provide valuable feedback can make a huge difference. If for some reason it is not possible you can try the harder route of assuming that there is an interviewer in front of you and solving problems thinking out loud AND recording your voice. You can listen to the audio again and improve yourself.

  3. If you clear the phone screen coding interview, you will likely be called onsite for an interview loop which consists of anywhere between 4 to 6 interviews which include more coding interviews, system design interviews, project deep-dive interviews, behavioral interviews. The most common for top tech companies is to have 2-3 coding interviews, 1 behavioral interview (Googleyness interview at Google, Leadership principles interview at Amazon, or in-general cultural fit interview, etc.), 1-2 system design interviews. Each of them are generally 45 minutes long. The specific interviews vary based on your professional experience, the position, company. The recruiter will give you a good idea about what to expect, so you don’t have to worry about surprises. If they don’t, ask about it. Important thing for you is to prepare yourself.
    After the phone screen, the onsite interviews are fairly flexible in terms of timeline. It can be as quick as a week or two, but you can also (politely) request for some more time to prepare.

    How to prepare for your onsite interviews?
    1. System Design Interview
      1. Nothing beats the real experience of designing real software systems. But if you are still early in the career, companies do understand and judge you accordingly. 
      2. In terms of resources, Designing Data-Intensive Applications is a great book from what I have researched, but it’s a huge book. 
      3. System Design Primer is also a very highly recommended resource. There are also some youtube channels to study from.
      4. One of the most useful thing would be to do a mock interview with your friend. 
      5. More than what solutions you propose, in a system design interview, it is important to make the right assumptions, ask for clarifications, consider various solutions and know their pros & cons,  and finally communicate everything with clarity and in a logical way.
      6. Sometimes this interview is about designing an existing system like Twitter or Netflix. Other times this interview can take a turn into database design or object-oriented modeling and design.

    2. Project Deep-dive
      1. This interview is where you talk about one of the projects that you worked on and dive deeper into it. So have one project that you are going to talk about at the top of your mind.
      2. The common questions that will get asked are going to be one of the two kinds – how you worked in the team & displayed leadership or what technical challenges you faced.
      3. For the project, have the answers for following questions ready –
        1. Explain the project and why did you work on this project?
        2. What technologies did you choose and why did you choose those?
        3. What technical challenges did you face when working?
        4. What was one of the hardest bugs that you found & fixed?
        5. How did you identify and fix it?
        6. How did you communicate with other teams and were there any conflicts during the project? how did you resolve those?

    3. Behavioral Interview
      1. There are a lot of commonly asked behavioral questions. There are a variety of questions – some situation based, some hypothetical questions, some related to leadership, some related to doing the right thing, some related to handling the hard situations, some about your personality, etc.
      2. It’s best to have one or two past experiences related to each of such questions at the top of the mind. It’s hard to recall such situations in an interview. 
      3. There are really no right or wrong answers in this interview, but some companies value one quality over the other.
      4. A very important step as a part of preparation is really understanding what the company values are. Many companies have these values listed on their careers page, so certainly check those. It’s very likely that questions will be around those values and you would be judged on to what extent do you demonstrate those values.

During one of the interviews in your loop, the interviewer can spend some time gauging your fundamentals. Those questions can range from the basics of operating systems to computer networking. How does a computer boot up or what happens when you hit the URL in the browser – are not uncommon interview questions. Any question is a fair game but it would certainly be related to the fundamentals of computer science and not a question in some specialization.

Realistically, what is the minimum time that one should prepare for?
This question is hard to answer. It depends a lot on what your strengths are, what do you find easy, etc. Let’s still take a look at all the steps we need to take and try to timebox those. The following table assumes you know most of the things but might have forgotten over the period of time.

ItemApproximate time you would spend
Read your resume carefully, Read the job description & align it with your experiences30 minutes
Prepare yourself for the recruiter call1 hour
Know your programming language well, syntax, study the string library, etc. (assuming you have a fair proficiency in the language)1 hour
Know internal details and implementations of containers in your language, know the containers for each data structure2-3 hours
Go through fundamental data structures and algorithms4 hours
Problem Solving Practice??
Mock Coding Interviews2-3 hours
Read System Design Primer2 hours
Mock System Design Interviews2-3 hours
Reading about real-world systems, various components & their importance, system design practice, etc.??
Computer Science fundamentals (OS, Database, Computer Networking)4-6 hours
Go through the company values30 minutes
Study the project that you have worked on in the past and have answers ready for common questions2 hours
Think about past experiences and associate those with behavioral questions4 hours
TotalOne or Two Weekends dedicated to studying for the interview
Rough estimate of how much time you need for the interview preparation.

Hence, it can be concluded that one weekend or two is enough to refresh your basics for the upcoming interview. And if you look carefully, there are just 1-2 things that are specific to each company like going through company values, reading the job description. What it suggests is that putting the above efforts once will help you in your job search for all companies in that season (i.e. once in two years?). Very well worth it, I would say. However, the above table does not account for problem-solving practice and system design practice. This is intentional. It’s because there are thousands of problems to solve and hundreds of systems to study. So there is no limit to how much you should practice. It really depends on what you feel comfortable with. Also, you can be strategic about what problems to practice. For example, solving problems from the same category would be less helpful than solving a variety of problems.

I hope this post acts as a checklist for your interview preparation and at the same time, gives you a plan with an approximate timeline that you should target. The amount of time you will need to spend on each item may vary based on what stage in career you are at, or what do you find easier vs harder. What is your interview preparation plan, how time are you going to spend on each item? Share that in the comments below. I tried to include many details about each step in the interview process, did I miss anything? Should I add something more on any bullet? Let me know that too.

And finally, don’t forget to like, share the post and subscribe to the blog.

Happy interviewing!

Related Posts

2 thoughts on “What you should study for a successful interview loop

  1. Hey, are there System Design Interview / Project Deep-dive / Behavioral Interview for a NewGrad position at Google?


    1. Hi, sorry I am not supposed to give any Google specific information. I would be happy to help in every possible way (comment here or a message) as long as it doesn’t ask for Google information.

      Hope you understand.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s