Skip to content

Cracking the Coding Interview

Resources

Related to career-advice.

Modules

Chapters Checklist

  • The Interview Process
    • Why?
    • How Questions are Selected
    • It's All Relative
    • Frequently Asked Questions
  • Behind the Scenes
    • The Microsoft Interview
    • The Amazon Interview
    • The Google Interview
    • The Apple Interview
    • The Facebook Interview
    • The Palantir Interview
  • Special Situations
    • Experienced Candidates
    • Testers and SDETs
    • Product (and Program) Management Dev Lead and Managers
    • Startups
    • Acquisitions and Acquihires
    • For Interviewers
  • Before the Interview
    • Getting the Right Experience
    • Writing a Great Resume
    • Preparation Map
  • Behavioral Questions
    • Interview Preparation Grid
    • Know Your Technical Projects
    • Responding to Behavioral Questions
    • So, tell me about yourself
  • Big O
    • An Analogy
    • Time Complexity
    • Space Complexity
    • Drop the Constants
    • Drop the Non-Dominant Terms
    • Multi-Part Algorithms: Add vsMultiply
    • AmortizedTime
    • Log N Runtimes
    • Recursive Runtimes
    • Examples and Exercises
  • Technical Questions
    • How to Prepare
    • What You Need to Know
    • Walking Through a Problem
    • Optimize and Solve Technique #1: Look for BUD
    • Optimize and Solve Technique #2: DIY (Do It Yourself)
    • Optimize and Solve Technique #3: Simplify and Generalize
    • Optimize and Solve Technique #4: Base Case and Build
    • Optimize and Solve Technique #5: Data Structure Brainstorm
    • Best Conceivable Runtime (BCR)
    • Handling Incorrect Answers
    • When You've Heard a Question Before
    • The "Perfect" Language for Interviews
    • What Good Coding Looks Like
    • Don't Give Up]
  • The Offer and Beyond
    • Handling Offers and Rejection
    • Evaluating the Offer
    • Negotiation
    • On the Job
  • Interview Questions
    • Data Structures
    • Chapter 1 Arrays and Strings
      • Hash Tables
      • ArrayList and Resizable Arrays
      • StringBuilder
    • Chapter 2 Linked Lists
      • Creating a Linked List
      • Deleting a Node from a Singly Linked List
      • The "Runner" Techn ique
      • Recursive Problems
    • Chapter 3 Stacks and Queues
      • Implementing a Stack
      • Implementing a Queue
    • Chapter 4 Trees and Graphs
      • Types of Trees
      • Binary Tree Traversal
      • Binary Heaps (Min-Heaps and Max-Heaps)
      • Tries (Prefix Trees)
      • Graphs
      • Graph Search
    • Concepts and Algorithms
    • Chapters 5 Bit Manipulation
      • Bit Manipulation By Hand
      • Bit Facts and Tricks
      • Two's Complement and Negative Numbers
      • Arithmetic vs Logical Right Shift
      • Common Bit Tasks: Getting and Setting
    • Chapter 6 Math and Logic Puzzles
      • Prime Numbers
      • Probability
      • Start Talking
      • Develop Rules and Patterns
      • Worst Case Shifting
      • Algorithm Approaches
    • Chapter 7 Object-Oriented Design
      • How to Approach
      • Design Patterns
    • Chapter 8 Recursion and Dynamic Programming How to Approach
      • Recursive vs Iterative Solutions
      • Dynamic Programming and Memoization
    • Chapter 9 System Design and Scalability
      • Handling the Questions
      • Design: Step-By Step
      • Algorithms that Scale: Step-By-Step
      • Key Concepts
      • Considerations
      • There is no "perfect" system
      • Example Problem
    • Chapter 10 Sorting and Searching
      • Common Sorting Algorithms
      • Searching Algorithms
    • Chapter 11 Testing
      • What the Interviewer Is Looking For
      • Testing a Real World Object
      • Testing a Piece of Software
      • Testing a Function
      • Troubleshooting Questions
    • Knowledge Based
    • Chapter 12 C and C++
      • Classes and Inheritance
      • Constructors and Destructors
      • Virtual Functions
      • Virtual Destructor
      • Default Values
      • Operator Overloading
      • Pointers and References
      • Templates
    • Chapter 13 Java
      • How to Approach
      • Overloading vs Overriding
      • Collection Framework
    • Chapter 14 Databases
      • SQL Syntax and Variations
      • Denormalized vs Normalized Databases SQL Statements
      • Small Database Design
      • Large Database Design
    • Chapter 15 Threads and Locks
      • Threads in Java
      • Synchronization and Locks
      • Deadlocks and Deadlock Prevention
    • Additional Review Problems
    • Chapter 16 Moderate
    • Chapter 17 Hard
  • Solutions
    • Data Structures
    • Concepts and Algorithms
    • Knowledge Based
    • Additional Review Problems
  • Advanced Topics
    • Useful Math
    • Topological Sort
    • Dijkstra's Algorithm
    • Hash Table Collision Resolution
    • Rabin-Karp Substring Search
    • AVL Trees
    • Red-BlackTrees
    • MapReduce
    • Additional Studying
  • Code Library
    • HashMapList
    • TreeNode (Binary Search Tree)
    • LinkedListNode (Linked List)
    • Trie and TrieNode
  • Hints
    • Hints for Data Structures
    • Hints for Concepts and Algorithms
    • Hints for Knowledge-Based Questions
    • Hints for Additional Review Problems
  • About the Author