# SDE Interview and Prep Roadmap
## Overview
Welcome to the SDE Interview Preparation Roadmap! This repository is not just about my personal journey; it's a collaborative space for collective learning. As I prepare for Software Development Engineer (SDE) interviews, I've created a comprehensive checklist to guide my preparation. By sharing this roadmap, I aim to foster a community of learners where we can all grow together. It covers various domains including **Data Structures, Algorithms, System Design, Operating Systems, Networking, Databases, Programming Languages and Concepts, System Architecture, Problem-solving and Coding, as well as Behavioral and Soft Skills**.
## Printable PDF Version of Checklist - [Click Here](/SDE-Interview-and-Prep-Roadmap.pdf)
## **Domains and Topics**
1. Data Structures
- [ ] [**Arrays**](./Data%20Structures/Arrays.md)
- [ ] [**Linked Lists**](./Data%20Structures/LinkedList.md)
- [ ] Singly linked lists
- [ ] Circularly linked lists
- [ ] Lock-free linked lists
- [ ] Doubly linked lists
- [ ] Circular doubly linked lists
- [ ] Circular linked lists
- [ ] Skip lists
- [ ] Unrolled linked lists
- [ ] **Stacks**
- [ ] Implementations using arrays and linked lists
- [ ] Array-based stack
- [ ] Linked list-based stack
- [ ] Applications (e.g., expression evaluation, backtracking)
- [ ] Priority stacks
- [ ] **Queues**
- [ ] Implementations (e.g., array-based, linked list-based, priority queues)
- [ ] Circular queue
- [ ] Double-ended queue (Deque)
- [ ] Applications (e.g., BFS, job scheduling)
- [ ] **Trees**
- [ ] Binary Trees
- [ ] Full binary tree
- [ ] Complete binary tree
- [ ] Perfect binary tree
- [ ] Binary Search Trees (BST)
- [ ] Self-balancing BST
- [ ] Scapegoat tree
- [ ] Tango tree
- [ ] AVL Trees
- [ ] Red-Black Trees
- [ ] Splay Trees
- [ ] B-Trees
- [ ] Heap Trees (min-heap, max-heap)
- [ ] Trie
- [ ] Radix Trees
- [ ] **Graphs**
- [ ] Representations (adjacency matrix, adjacency list)
- [ ] Edge list
- [ ] Incidence matrix
- [ ] Traversal algorithms (DFS, BFS)
- [ ] Weighted graphs
- [ ] Directed graphs
- [ ] Acyclic graphs
- [ ] Bipartite graphs
- [ ] Spanning trees (Minimum Spanning Tree, Maximum Spanning Tree)
- [ ] Graphs with special properties (e.g., planar graphs, Eulerian graphs)
- [ ] **Hash Tables**
- [ ] Collision resolution techniques (chaining, open addressing)
- [ ] Hash functions
- [ ] Perfect Hashing
- [ ] Cuckoo Hashing
- [ ] Robin Hood Hashing
- [ ] Count-Min Sketch
- [ ] Bloom Filters
2. Algorithms
- [ ] **Sorting Algorithms**:
- [ ] Bubble Sort
- [ ] Selection Sort
- [ ] Insertion Sort
- [ ] Merge Sort
- [ ] Quick Sort
- [ ] Heap Sort
- [ ] Shell Sort
- [ ] Counting Sort
- [ ] Radix Sort
- [ ] Bucket Sort
- [ ] Comb Sort
- [ ] Cocktail Shaker Sort
- [ ] Tim Sort
- [ ] Cycle Sort
- [ ] Pancake Sort
- [ ] Bitonic Sort
- [ ] Gnome Sort
- [ ] Strand Sort
- [ ] **Searching Algorithms**:
- [ ] Linear Search
- [ ] Binary Search
- [ ] Depth-First Search (DFS)
- [ ] Breadth-First Search (BFS)
- [ ] Jump Search
- [ ] Interpolation Search
- [ ] Exponential Search
- [ ] Fibonacci Search
- [ ] Ternary Search
- [ ] Hashing (Hash Table)
- [ ] **Dynamic Programming**
- [ ] Memoization
- [ ] Tabulation
- [ ] Longest Common Subsequence (LCS)
- [ ] Longest Increasing Subsequence (LIS)
- [ ] 0/1 Knapsack Problem
- [ ] Coin Change Problem
- [ ] Matrix Chain Multiplication
- [ ] Edit Distance
- [ ] Subset Sum Problem
- [ ] Rod Cutting Problem
- [ ] Fibonacci Series
- [ ] Shortest Path Problems (e.g., Dijkstra's Algorithm using DP)
- [ ] **Greedy Algorithms**
- [ ] Fractional Knapsack Problem
- [ ] Activity Selection Problem
- [ ] Huffman Coding
- [ ] Job Sequencing with Deadlines
- [ ] Prim's Algorithm (for Minimum Spanning Tree)
- [ ] Kruskal's Algorithm (for Minimum Spanning Tree)
- [ ] Dijkstra's Algorithm (for Single Source Shortest Path)
- [ ] Greedy Coloring of Graphs
- [ ] Greedy Set Cover
- [ ] **Divide and Conquer**
- [ ] Binary Search
- [ ] Merge Sort
- [ ] Quick Sort
- [ ] Strassen's Matrix Multiplication
- [ ] Closest Pair of Points Problem
- [ ] Karatsuba Algorithm (for Fast Multiplication)
- [ ] Cooley–Tukey Fast Fourier Transform (FFT)
- [ ] Finding Maximum Subarray Sum (Kadane's Algorithm)
- [ ] Finding Peak Element in 1D/2D Array
- [ ] **String Algorithms**:
- [ ] Rabin-Karp Algorithm
- [ ] Knuth-Morris-Pratt (KMP) Algorithm
- [ ] Z-Algorithm
- [ ] Boyer-Moore Algorithm
- [ ] Manacher's Algorithm
- [ ] Suffix Array Construction
- [ ] Longest Common Prefix (LCP) Array
- [ ] Aho-Corasick Algorithm
- [ ] Suffix Tree Construction
- [ ] Suffix Automaton
- [ ] Trie (Prefix Tree) Insertion and Search
- [ ] Breadth-First Search (BFS) in a Trie
- [ ] Depth-First Search (DFS) in a Trie
- [ ] Edit Distance (Levenshtein Distance)
- [ ] Hamming Distance
- [ ] Longest Palindromic Substring
- [ ] Longest Repeated Substring
- [ ] Longest Common Substring
- [ ] Longest Common Subsequence
- [ ] Shortest Common Supersequence
- [ ] Palindrome Check
- [ ] Count and Say Sequence
- [ ] String Hashing
- [ ] Baker-Bird Algorithm
- [ ] Burrows-Wheeler Transform (BWT)
3. System Design
- Resources:
- [System Design Interview by Alex Xu](./System%20Design/Resources/System%20Design%20Interview%20by%20Alex%20Xu.pdf)
- [Designing Data Intensive Applications by Martin Kleppmann](./System%20Design/Resources/Designing%20Data%20Intensive%20Applications%20by%20Martin%20Kleppmann.pdf)
- [ ] **Design patterns**
- [ ] **Creational patterns**
- [ ] Singleton
- [ ] Factory Method
- [ ] Abstract Factory
- [ ] Builder
- [ ] Prototype
- [ ] **Structural patterns**
- [ ] Adapter
- [ ] Bridge
- [ ] Composite
- [ ] Decorator
- [ ] Facade
- [ ] Flyweight
- [ ] Proxy
- [ ] **Behavioral patterns**
- [ ] Chain of Responsibility
- [ ] Command
- [ ] Iterator
- [ ] Mediator
- [ ] Memento
- [ ] Observer
- [ ] State
- [ ] Strategy
- [ ] Template Method
- [ ] Visitor
- [ ] **Object-oriented design principles**
- [ ] DRY (Don't Repeat Yourself)
- [ ] KISS (Keep It Simple, Stupid)
- [ ] YAGNI (You Aren't Gonna Need It)
- [ ] Law of Demeter (Principle of Least Knowledge)
- [ ] Open/Closed Principle
- [ ] SOLID principles
- [ ] Single Responsibility Principle (SRP)
- [ ] Open/Closed Principle (OCP)
- [ ] Liskov Substitution Principle (LSP)
- [ ] Interface Segregation Principle (ISP)
- [ ] Dependency Inversion Principle (DIP)
- [ ] **Scalability**
- [ ] Replication vs. Partitioning
- [ ] Consistent Hashing
- [ ] Auto-scaling
- [ ] **Distributed systems**
- [ ] ACID vs. BASE
- [ ] Eventual consistency
- [ ] Leader election algorithms (Paxos, Raft)
- [ ] Distributed tracing
- [ ] Fault tolerance and resilience
- [ ] **Microservices architecture**
- [ ] Choreography vs. Orchestration
- [ ] API gateway
- [ ] Circuit Breaker pattern
- [ ] Saga pattern
- [ ] Caching strategies
- [ ] Cache aside
- [ ] Write-through caching
- [ ] Write-behind caching
- [ ] Cache stampede prevention
- [ ] Load balancing
- [ ] DNS load balancing
- [ ] Content Delivery Networks (CDNs)
- [ ] Anycast routing
- [ ] Adaptive load balancing algorithms
- [ ] **Database design and optimization**
- [ ] Partitioning
- [ ] Materialized views
- [ ] NoSQL databases (document, key-value, column-family, graph)
- [ ] Database normalization forms (1NF, 2NF, 3NF, BCNF)
4. Operating Systems
- [ ] **Processes**
- [ ] **Threads**
- [ ] **Thread synchronization mechanisms**:
- [ ] Mutexes
- [ ] Semaphores
- [ ] Monitors
- [ ] **Deadlock detection and prevention**
- [ ] **Scheduling algorithms**
- [ ] Fair share scheduling
- [ ] Earliest Deadline First (EDF)
- [ ] Weighted Fair Queuing (WFQ)
- [ ] **Memory management**
- [ ] Page replacement algorithms (LRU, FIFO, Clock)
- [ ] Memory-mapped files
- [ ] Buddy memory allocation
- [ ] **File systems**
- [ ] Journaling file systems (ext3, ext4)
- [ ] Network file systems (NFS, SMB)
- [ ] File system encryption
- [ ] Distributed file systems (HDFS, Ceph)
5. Networking
- [ ] **TCP/IP stack**
- [ ] OSI model layers
- [ ] TCP vs. UDP
- [ ] **HTTP protocol**
- [ ] Request methods (GET, POST, etc.)
- [ ] Status codes
- [ ] **DNS (Domain Name System)**
- [ ] Resolution process
- [ ] **Routing algorithms**
- [ ] Shortest Path algorithms (Dijkstra's, Bellman-Ford)
6. Databases
- [ ] **Relational databases (SQL)**
- [ ] Normalization forms
- [ ] First Normal Form (1NF)
- [ ] Second Normal Form (2NF)
- [ ] Third Normal Form (3NF)
- [ ] Boyce-Codd Normal Form (BCNF)
- [ ] Joins
- [ ] Inner joins
- [ ] Outer joins (left, right, full)
- [ ] Cross joins
- [ ] SQL Data Manipulation Language (DML)
- [ ] SELECT statement
- [ ] INSERT statement
- [ ] UPDATE statement
- [ ] DELETE statement
- [ ] MERGE statement
- [ ] TRUNCATE statement
- [ ] UPSERT operations
- [ ] Explicit vs. Implicit transactions
- [ ] Control-of-flow language (e.g., CASE, IF-ELSE)
- [ ] SQL Data Definition Language (DDL)
- [ ] CREATE statement
- [ ] ALTER statement
- [ ] DROP statement
- [ ] SQL Data Control Language (DCL)
- [ ] GRANT statement
- [ ] REVOKE statement
- [ ] SQL Data Query Language (DQL)
- [ ] Subqueries
- [ ] Aggregate functions (e.g., SUM, AVG, COUNT)
- [ ] GROUP BY and HAVING clauses
- [ ] Window functions
- [ ] Transaction Control
- [ ] COMMIT statement
- [ ] ROLLBACK statement
- [ ] Database Constraints
- [ ] Primary key
- [ ] Foreign key
- [ ] Unique constraint
- [ ] Check constraint
- [ ] Default constraint
- [ ] Stored Procedures and Functions
- [ ] Creation
- [ ] Execution
- [ ] Parameters
- [ ] Triggers
- [ ] Types of triggers (BEFORE, AFTER)
- [ ] Trigger execution order
- [ ] Views
- [ ] Materialized views vs. regular views
- [ ] Advantages and use cases
- [ ] **NoSQL databases**
- [ ] Types
- [ ] Document-based
- [ ] Key-value
- [ ] Column-family
- [ ] Graph
- [ ] Examples
- [ ] MongoDB Interview Questions
- [ ] Redis Interview Questions
- [ ] **ACID properties**
- [ ] Atomicity
- [ ] Consistency
- [ ] Isolation
- [ ] Durability
- [ ] **Indexing**
- [ ] B-tree
- [ ] B+ tree
- [ ] Bitmap Indexing
- [ ] **Transactions**
- [ ] ACID properties in transactions
- [ ] Isolation levels
- [ ] Read Uncommitted
- [ ] Read Committed
- [ ] Repeatable Read
- [ ] Serializable
- [ ] **Database design and optimization**
- [ ] Partitioning
- [ ] Materialized views
7. Programming Languages and Concepts
- [ ] **Programming paradigms**
- [ ] Imperative programming
- [ ] Declarative programming
- [ ] Functional programming
- [ ] Object-oriented programming
- [ ] Procedural programming
- [ ] Event-driven programming
- [ ] Aspect-oriented programming
- [ ] **Memory management**
- [ ] Stack vs. Heap
- [ ] Manual vs. Automatic memory management
- [ ] Garbage collection algorithms (e.g., Mark and Sweep, Generational GC)
- [ ] **Concurrency**
- [ ] Threads vs. Processes
- [ ] Synchronization primitives (locks, mutexes, semaphores)
- [ ] Thread safety
- [ ] Deadlocks
- [ ] Race conditions
- [ ] Parallelism vs. Concurrency
- [ ] Asynchronous programming
- [ ] **Error handling**
- [ ] Exceptions vs. Error codes
- [ ] Exception handling mechanisms
- [ ] Exception safety
- [ ] Error propagation
- [ ] Error recovery
- [ ] **Functional programming**
- [ ] Higher-order functions
- [ ] Closures
- [ ] Lambda expressions
- [ ] Pure functions
- [ ] Referential transparency
- [ ] **Object-oriented programming (OOP)**
- [ ] Encapsulation
- [ ] Inheritance
- [ ] Polymorphism
- [ ] Abstraction
- [ ] Composition vs. Inheritance
- [ ] Method overriding vs. Method overloading
- [ ] **Design patterns**
- [ ] Creational patterns
- [ ] Structural patterns
- [ ] Behavioral patterns
- [ ] **Asynchronous programming**
- [ ] Callbacks
- [ ] Promises
- [ ] Futures
- [ ] Coroutines
- [ ] **Functional vs. Imperative vs. Declarative programming**
- [ ] **Type systems**
- [ ] Static vs. Dynamic typing
- [ ] Strong vs. Weak typing
- [ ] Nominal vs. Structural typing
- [ ] **Lambda calculus**
- [ ] **Garbage collection**
- [ ] Tracing vs. Reference counting
- [ ] Generational GC
- [ ] **Regular expressions**
- [ ] **Memory layout**
- [ ] Stack vs. Heap memory allocation
- [ ] Data segment vs. Code segment
- [ ] **Recursion**
- [ ] Tail recursion
- [ ] Mutual recursion
- [ ] Anonymous recursion
- [ ] **Virtual Memory**
- [ ] Demand Paging
- [ ] Page replacement algorithms (FIFO, LRU, Optimal)
- [ ] **Networking**
- [ ] Sockets
- [ ] Client-server architecture
- [ ] Protocols (TCP, UDP)
- [ ] Remote Procedure Call (RPC)
8. System Architecture
- [ ] **Client-server architecture**
- [ ] Basics
- [ ] Communication protocols
- [ ] [**RESTful architecture**](./System%20Design/RESTfulArchitecture.md)
- [ ] **Service-Oriented Architecture (SOA)**
- [ ] Principles
- [ ] Advantages
- [ ] Challenges
- [ ] **Message Queuing**
- [ ] Basics
- [ ] Use cases
- [ ] Implementations (e.g., RabbitMQ, Kafka)
- [ ] [**Microservices**](./System%20Design/Microservices.md)
- [ ] **Event-Driven Architecture (EDA)**
- [ ] Basics
- [ ] Components
- [ ] Advantages
- [ ] Implementations (e.g., Apache Kafka)
- [ ] **Layered Architecture**
- [ ] Presentation layer
- [ ] Business logic layer
- [ ] Data access layer
- [ ] Cross-cutting concerns layer
- [ ] **Caching strategies**
- [ ] Cache aside
- [ ] Write-through caching
- [ ] Write-behind caching
- [ ] Cache stampede prevention
9. Problem-solving and Coding
- [ ] **Problem-solving strategies**
- [ ] Understand the problem
- [ ] Break it down
- [ ] Solve a simpler problem
- [ ] Look for patterns
- [ ] Make a plan
- [ ] Implement the plan
- [ ] Test your solution
- [ ] **Coding techniques**
- [ ] Modular programming
- [ ] Divide and conquer
- [ ] Recursion
- [ ] Dynamic programming
- [ ] Greedy algorithms
- [ ] Backtracking
- [ ] Bit manipulation
- [ ] Sliding window
- [ ] Two pointers
- [ ] Binary search
- [ ] Fast and slow pointers
- [ ] Hashing
- [ ] **Coding best practices**
- [ ] Naming conventions
- [ ] Code readability
- [ ] Code reusability
- [ ] Error handling
- [ ] Testing
- [ ] Version control (e.g., Git)
- [ ] Code reviews
- [ ] **Time and space complexity analysis**
- [ ] Big O notation
- [ ] Big Omega notation
- [ ] Big Theta notation
- [ ] Space complexity analysis
- [ ] **Debugging**
- [ ] Print debugging
- [ ] Debugger tools
- [ ] Rubber duck debugging
- [ ] **Optimization**
- [ ] Algorithmic optimization
- [ ] Space-time trade-offs
- [ ] Profiling tools
10. Version control System
- [ ] [**Git**](./Version%20Control%20Systems/Git.md)
- [ ] **Bitbucket**
## **Features**
- **Structured Learning Path**: Follow a well-organized roadmap covering key domains such as **Data Structures**, **Algorithms**, **System Design**, **Operating Systems**, **Networking**, **Databases**, and more.
- **Checklist-based Approach**: Track your progress systematically with checklist-style items for each topic, ensuring thorough coverage of concepts and practical skills.
- **Recommended Resources**: Access curated lists of recommended resources, including books, online courses, coding platforms, articles, and practice problems to enhance your understanding and skills.
- **Tailored Preparation**: Customize your preparation based on the specific requirements and focus areas of the companies you're interviewing with, maximizing your chances of success.
- **Tips and Recommendations**: Benefit from valuable tips and recommendations for problem-solving, coding practice, behavioral and soft skills development, and adapting to different interview formats.
## **How to Use**
1. **Clone the Repository**: Clone this repository to your local machine using Git.
2. **Navigate to Domains**: Explore the `Domains` directory to find checklists for different domains/topics.
3. **Check Off Items**: As you study and practice, mark off checklist items to track your progress.
4. **Explore Resources**: Browse through the `Resources` directory for recommended resources corresponding to each domain/topic.
5. **Customize Your Plan**: Tailor your preparation plan based on your strengths, weaknesses, and the requirements of the companies you're targeting.
6. **Community Learning**: Engage with fellow learners, share insights, ask questions, and collaborate on improving the roadmap together.
7. **Stay Updated**: Periodically update your progress and revisit topics to reinforce your understanding and skills.
## **Contributions**
Contributions are welcome! If you have suggestions for improving the roadmap, additional resources to recommend, or want to fix any errors, feel free to open an issue or submit a pull request.
## **Disclaimer**
This roadmap is intended as a general guideline and may not cover every aspect of SDE interviews. It's essential to supplement my preparation with additional resources and adapt based on individual needs and experiences.
## **Credits**
This project is inspired by various interview preparation resources and the collective wisdom of the developer community.