# Facebook Tips

## This share is really awesome!

[https://leetcode.com/discuss/interview-experience/542669/facebook-e4-feb-2020-offer](https://leetcode.com/discuss/interview-experience/542669/facebook-e4-feb-2020-offer)

Here's what I did to prepare:

1. All questions from the following "Cracking the Coding Interview" chapters:
   * Arrays & Strings
   * LinkedLists
   * Stacks & Queues
   * Trees & Graphs
   * Recursion & Dynamic Programming
   * Sorting & Searching
   * Moderate Questions
   * Implemented all the data structures and algorithms the author recommends on page 61
2. All questions from the following "Daily Coding Problem" chapters:
   * Arrays
   * Strings
   * Linked Lists
   * Stacks and Queues
   * Hash Tables
   * Trees
   * Graphs
   * Recursion
3. [Codingbat.com](http://codingbat.com/) Questions:
   * Strings
   * Recursion
   * Arrays
4. LeetCode
   * The Facebook prep course
   * Most of the Google prep course
   * All "easy" String, Array, LinkedList, Stack & Queue, Tree & Graph, Search/Sort, Recursion problems I could find, starting from the most common and working my way down the list
   * A handful of "medium" and hard "questions."
5. Groking the System Design Interview
   * The course has too much reading and not enough doing, so I'd read a topic, take notes (ala "Explain to Understand" described below), then try to find some app that I wanted to make that was similar. You start to see the patterns after 4 or 5 times doing that. Each one took about 30 minutes.
6. Groking the Coding Interview
   * I wanted to understand the concepts, so I did enough to understand the lessons in the chapter names, then moved on and tried to apply the skills learned to problems I hadn't seen before.
7. Interview Cake
   * It's good, but it's too limited in scope. You get an excellent education on a handful of questions, but part of the interview studying process is just practicing, which includes volume. I just needed more questions to practice with. That's where LeetCode shines.

Fun facts:

* \~300 questions over about 3 years.
* Aimed for 1 question/day, 5 days/week. I do not cram.
* I'm a bootcamp grad, so I needed to learn the very basics, and I've been employed since I graduated, so time was on my side.

Study techniques:

* Gayle Laakmann McDowell recommends a pattern for attempting to solve FAANG-level questions. It's on pg. 62 of her book. I practiced each step systematically trying to master them. Some are easier than others.
*   Everyone always talks about what to do: study problems. But no one ever mentions what to do when you get totally stuck on a problem. I came up with a solution. Here's what I did when I got completely stuck or missed a problem. I call it "Explain to Understand":

    **Explain to Understand**\
    After attempting a question or reading a section in a book:

    * If you donʼt understand the solution/explanation
      1. Write an explanation going back and forth between the solution and your explanation, clarifying each sentence.
      2. Go through the solution step-by-step and explain each step. Donʼt summarize.
      3. Be specific. The details are where you shine in interviews.
    * If you do understand the solution/explanation
      1. Read the solution, close the book, and write down everything you can remember about its main points.
      2. Question-Book Method: Restate the big idea of sections as questions. Limit 1 question/section.
      3. Try to prove the answer right or wrong by attempting to recreate the read.
      4. Try to create a visualization or analogy (Reversing a linked list is like a caterpillar eating right pointers and pooping out left pointers!)
* Speed is always an issue. I got the amount of time it took me to complete a problem down by setting a timer and dropping the marker (do everything on a whiteboard!) at different intervals. I started at 25 minutes/question and completed about 25-50% in that time period. Every week, I'd knock off about a minute. After a couple months, I was able to solve most easy and easy-medium questions in about 15-16 minutes.
* Always interleave problem topics. Example: never do 2 LinkedList questions in a row. If you ever get too comfortable with a topic, like doing all the string questions you can find, then moving on, you're in trouble.
* You want to be constantly uncomfortable, like how you're going to feel in an interview. You should be deliberately focused on the topics you need to work on most. Yes, it feels good to knock out a couple of backtracking problems because you know the pattern, but you're going to be presented with questions you don't know the patterns to. So, the goal isn't to "learn Recursion/Stacks/Graphs/Whatever" it's to learn to figure out which tool in your toolbox to use given a novel situation. You build your toolbox by doing the questions, and you practice choosing your tools everytime you switch topics. Switch topics after every single question. This is a skill most ignore, but it's more important than learning Dijkstra's algorithm, in my opinion.
* Skip all questions that don't have a solution/explanation/readable answer. You're trying to learn a technique, not guess your way through something.
* Focus. Decide when you're going to study and then leave all other distractions -- phone, smartwatch, etc -- in another room. Yes, another room.

Behavioral Questions:

* Find the 20 most-popular behavioral questions for tech companies, and practice answering them just like you would a technical question:
  1. Try to come up with an answer, in front of a person is best.
  2. Go read about good answers.
  3. Fix your mistakes.
  4. It's not hard. It just takes practice. Some more than others.

Books on study techniques and preparation:

* "The Little Book of Talent" - Daniel Coyle
* "Ultralearning" - Scott H. Young
* "Daily Rituals: How Artists Work" - Mason Currey
* "Make It Stick" - Peter C. Brown, et al.
* "Peak" - K. Anders Ericsson
* "A Mind for Numbers" - Barbara Oakley
* "The Obstacle is the Way" - Ryan Holiday
* "Learn Better" - Ulrich Boser
* "The Learning Brain" (audiobook) - Thad A. Polk
* "Mindset" - Carol S. Dweck
* "Grit" - Angela Duckworth
* "Digital Minimalism" - Cal Newport
* "Deep Work" - Cal Newport
* "So Good They Can't Ignore You" - Cal Newport

Some inspirational quotes that kept me going when I got rejected in the past:

* ”Success is never final. Failure is never fatal. Courage counts.” - from Angel Duckworth, Grit
* “Reaching, failing, and reaching again is the way your brain grows and forms new connections. When is comes to developing talent, remember, mistakes are not really mistakes -- they are guideposts you use to get better.” - Daniel Coyle, The Little Book of Talent
* “If you don’t have early success, don’t quit. Instead, treat your early efforts as experiments, not as verdicts. Remember, this is a marathon, not a sprint.” - Daniel Coyle, The Little Book of Talent
* “Show me a guy who’s afraid of looking bad, and I’ll show you a guy you can beat every time.” - Lou Brock
* “It’s easier to go from failure to success than excuses to success.” - John C. Maxwell
* “The greatest teacher, failure is.” - Yoda, The Last Jedi

If you can't do it yet, that's ok. It'll come. Don't give up.
