6 Month Preparation Plan for Software Engineering Interviews
  1. First things first. Commit to it. Realize that you will spend the next 6 months on this.
  2. Give yourself time. Give yourself 6 months if possible. You are probably preparing with a job or school, so it will take time.
  3. If you want a guided bootcamp, check out Interview Camp

Here is a concise plan. Now, the pace will vary from person-to-person. I am assuming you are preparing alongside a full-time job or study.

Also, this plan doesn’t cover System Design. That should be done separately, and usually takes a lot less time than Algo prep.

  1. (Month #1) Master important data structures

    Learn at least the following for each data structure: Implementation, Insertion, Deletion, Lookup.

    Get a book in your language of choice, or rely on online articles.

    Here is a list of data structures to master:

    • Arrays and Lists
    • 2D Arrays
    • Strings
    • Linked List
    • Stack
    • Queue
    • Hash Table & Hash Set
    • Heap
    • Graphs
    • Binary Tree
    • Binary Search Tree
    • Trie
  2. (Month #1) Master a few classic algorithms:

    You should know how to implement them in < 10 minutes if you practice them a few times.

    • Binary Search
    • Breadth First Search
    • Depth First Search
    • Merge Sort
    • Quick Sort
    • Selection Algorithm
  3. (Month #1) Prepare for Recursion and Backtracking: Used very often.

    Do the following problems to get a good base:

    Recursive Practice Problems with Solutions - GeeksforGeeks

    Congratulations! You’ve mastered the basics. Now for the good part.

  4. (Month #2 & #3) Get Cracking the Coding Interview(CTCI). It gives you a good baseline.

    Most questions are on the easier side (for Google and Facebook). But it’s good to know them before proceeding to harder questions.

    Note: You don’t need to implement all the questions. Follow this strategy:

    • For each chapter, implement the first 2 questions. This gives you practice with that data structure.
    • Then, go down the list of questions and try to solve them. Try visualizing the code in your head. Can you figure out the structure?
    • If yes, move to the next question to save time.
    • If no, try implementing the code.

    Congratulations! You’re now good at many simple and some advanced problems. Time to do realistic stuff.

  5. (Month #4 and #5) Get Elements of Programming Interviews. This is the best collection of realistic problems for Google/Facebook interviews.

    They have versions in C++, Java, and Python.

    Go through the book just like you went through CTCI above.

    Congratulations! You have now mastered several Medium/Hard problems.

  6. (Month #6) In the remaining time, look at questions on Leetcode.

    The more questions you practice, the better you get at new questions.

Here are some other things to do along the way:

Learn your Language: Know how to manipulate each data structure, write classes and objects, string operations, etc.

Get a Pencil and Paper: Ditch the computer. Writing with a pencil is closer to the actual interview. Of course, for phone interviews, you can practice on a computer.

Get a Whiteboard: Want to get closer to the real deal? Get a whiteboard at home.

Here’s an odd tip - get a fine-tip marker: Fine-tip markers save a lot of space during the interview. Conference room markers are often thick and unusable.

Keep a Schedule: Always follow a schedule. It need not have a timeline - but it should have a curated list of questions and/or topics.

Know your Big Os: Don’t bluff time and space complexities if you’re not sure. Analyze them for every problem you practice.

Find a study buddy: This one can be a game changer. A majority of candidates study alone. Finding someone to discuss problems with is very motivating. Go to interview meetups or checkout Interview Camp’s online community.

Do mock interviews: 2-3 mock interviews will help weed out obvious issues in your approach. The goal here is to catch red flags and get comfortable with the actual interview.

Use good variable names: Your code should be readable, and variable names are a big part of it.

Use Helper Functions when needed: To save time, utilize helper functions. This lets you focus on the core logic of your application. Implement the actual helper functions later if needed.

Network - get referrals: Internal referrals is the most sure-shot way of getting interviews. Look through your network and find contacts in the company. A lot of times, Meetup speakers work at a company you might be targeting. This can be a connection hack.

Ask your recruiter about the process: Processes can vary by company. Make sure you ask recruiters follow-up questions. A very common one is - “Will there be a domain-specific interview?”

All the best for your interviews!

Original answer on Quora: How can I get a job at Facebook or Google in 6 months?