Interview Practice

16-Week Interview Plan

Target: 500+ Problems | Daily: 2 hrs DSA + 1 hr System Design | Total Duration: ~16 Weeks. Problems link to the workspace and show your progress.

Phases

PhaseWeeksDSA Focus AreaKey ConceptsSystem Design TopicDifficulty MixCumulative Problems
Phase 1Wks 1–2FoundationsArrays, Strings, Hashing, Two Pointers, Sliding WindowScalability & Basics80% Easy / 20% Med60
Phase 2Wks 3–4Linear StructuresLinked Lists, Stacks, Queues, Monotonic StructuresStorage & Caching60% Easy / 40% Med120
Phase 3Wks 5–6Trees & GraphsBinary Trees, BST, Tries, Graph BFS/DFS, Union-FindDistributed Systems Intro40% Easy / 50% Med / 10% Hard200
Phase 4Wks 7–8Recursion & DPBacktracking, 1D DP, 2D DP, GreedyDesign Deep Dives I20% Easy / 60% Med / 20% Hard280
Phase 5Wks 9–10Advanced AlgorithmsHeaps, Advanced Graphs, Intervals, Bit ManipulationDesign Deep Dives II10% Easy / 60% Med / 30% Hard350
Phase 6Wks 11–12Hard & PatternsHard DP, Advanced Trees, Segment Trees, MathDesign Deep Dives III5% Easy / 50% Med / 45% Hard410
Phase 7Wks 13–14Mock & ReviewMixed company-tagged sets, timed contestsFull Mock System DesignsCompany-Specific Mix460
Phase 8Wks 15–16Final SprintWeak-area revisit, top 75 NeetCode revisitBehavioral + SD CombosInterview-Intensity500+

Weekly schedule

  1. Week 1: Arrays & Hashing

    Phase 1 · target 25 problems
    System design:
    Scalability 101: vertical vs horizontal, CAP theorem basics
    Deep dive:
    Understand SLA, SLO, SLI; latency vs throughput
    Goal:
    Nail HashMap O(1) lookups
    Checkpoint:
    Can you solve Two Sum 5 ways?
  2. Week 2: Two Pointers + Sliding Window

    Phase 1 · target 20 problems
    System design:
    Load Balancers deep dive: L4 vs L7, algorithms
    Deep dive:
    Design a simple API gateway
    Goal:
    Master variable-window pattern
    Checkpoint:
    Solve Min Window Substring from scratch
  3. Week 3: Stack + Queues

    Phase 2 · target 20 problems
    System design:
    Caching: Redis internals, eviction, cache patterns
    Deep dive:
    Design a distributed cache (Redis-like)
    Goal:
    Monotonic stack mastery
    Checkpoint:
    Implement LRU Cache from memory
  4. Week 4: Linked Lists

    Phase 2 · target 20 problems
    System design:
    Databases: SQL indexing, query planning, ACID
    Deep dive:
    Design URL shortener
    Goal:
    Pointer manipulation fluency
    Checkpoint:
    No bugs in LL reversal
  5. Week 5: Binary Search

    Phase 3 · target 20 problems
    System design:
    NoSQL: DynamoDB, Cassandra, consistency models
    Deep dive:
    Design a KV store
    Goal:
    Master search on answer
    Checkpoint:
    Solve Median Two Arrays without hints
  6. Week 6: Trees — BFS/DFS

    Phase 3 · target 20 problems
    System design:
    API Design: REST principles, pagination, versioning
    Deep dive:
    Design Twitter API
    Goal:
    Tree recursion mental model
    Checkpoint:
    Implement iterative in-order traversal
  7. Week 7: BST + Trie

    Phase 3 · target 20 problems
    System design:
    Message Queues: Kafka architecture, partitions, consumer groups
    Deep dive:
    Design notification system
    Goal:
    BST in-order = sorted; Trie prefix power
    Checkpoint:
    Build Trie from scratch
  8. Week 8: Graphs — BFS/DFS

    Phase 3 · target 25 problems
    System design:
    Consistent Hashing + Sharding
    Deep dive:
    Design distributed cache with sharding
    Goal:
    DFS/BFS template mastery
    Checkpoint:
    Topological sort both BFS & DFS
  9. Week 9: 1D DP

    Phase 4 · target 25 problems
    System design:
    Rate Limiting deep dive: token bucket, leaky bucket
    Deep dive:
    Design API rate limiter
    Goal:
    Define dp[i] precisely before coding
    Checkpoint:
    Coin Change bottom-up and top-down
  10. Week 10: Backtracking + Greedy

    Phase 4 · target 25 problems
    System design:
    Blob Storage + CDN: S3, CloudFront, presigned URLs
    Deep dive:
    Design photo sharing (Instagram)
    Goal:
    Decision tree visualization
    Checkpoint:
    N-Queens with pruning from memory
  11. Week 11: 2D DP

    Phase 4 · target 20 problems
    System design:
    Search systems: Elasticsearch, inverted index, ranking
    Deep dive:
    Design type-ahead / autocomplete
    Goal:
    DP table transitions clarity
    Checkpoint:
    Edit Distance with DP table drawn out
  12. Week 12: Heaps + Intervals

    Phase 5 · target 20 problems
    System design:
    Real-time systems: WebSockets, long-polling, SSE
    Deep dive:
    Design chat application (WhatsApp)
    Goal:
    Heap invariants; interval sweep line
    Checkpoint:
    Implement heap from scratch in Java
  13. Week 13: Advanced Graphs

    Phase 5 · target 20 problems
    System design:
    Video Streaming: HLS, DASH, transcoding pipeline
    Deep dive:
    Design YouTube
    Goal:
    Dijkstra vs BFS: weighted vs unweighted
    Checkpoint:
    Implement Union-Find with path compression
  14. Week 14: Hard DP + Bit Manip

    Phase 6 · target 15 problems
    System design:
    Distributed transactions: Saga, 2PC; Observability stack
    Deep dive:
    Design booking system (Airbnb/Hotels)
    Goal:
    Hard DP pattern recognition
    Checkpoint:
    Solve 3 hard DP in one sitting timed
  15. Week 15: Mock Interviews — Mixed

    Phase 7 · target 20 problems
    System design:
    Full mock SDs: 60-min timed — Uber, Google Drive, Twitter
    Deep dive:
    Practice talking through design out loud
    Goal:
    Interview simulation under pressure
    Checkpoint:
    Complete 2 full mock interviews

    FAANG-tagged problems: Amazon 40, Google 40, Meta 30, Microsoft 30 — timed 45-min sessions per problem Start a mock interview or work through your review queue.

  16. Week 16: Final Sprint + Revision

    Phase 8 · target 20+ problems
    System design:
    Review all SD building blocks; practice trade-off discussions
    Deep dive:
    Behavioral + SD combos
    Goal:
    Confidence & polish
    Checkpoint:
    Can you do any problem in under 25 min?

    Re-solve all flagged retry problems; NeetCode 75 speed run; any weak areas Start a mock interview or work through your review queue.

Daily routine

Time BlockDurationActivityWhat To DoNotes
Block 130 minWarm-up / ReviewRe-read yesterday's notes, review 2–3 solved problemsActive recall, not passive reading
Block 260 minNew DSA TopicStudy concept deeply → understand intuition → code from scratchNo copy-paste; understand WHY
Block 330 minPractice ProblemsSolve 2–4 problems on current topic (timed: 20–25 min each)Track in Problem Log sheet
Block 460 minSystem DesignStudy 1 SD concept + design a system end-to-end with trade-offsUse the SD sheet as checklist
Buffer—Spaced RepetitionFlag hard problems for re-attempt in 3/7/14 daysUse the Retry Tracker sheet

Pattern recognition cheatsheet

PatternRecognize When…Template / ApproachTime ComplexitySpace ComplexityGotchas
Sliding Window (Variable)Max/min subarray satisfying a constraint; 'longest substring with...'Expand right pointer always; shrink left when constraint violated; track window state with map/intO(n)O(k) window sizeDefine precisely when to shrink; avoid over-shrinking
Two Pointers (Opposite Ends)Sorted array + pair/triplet sum; palindrome check; container problemslo=0, hi=n-1; move based on comparison to target; sort first if neededO(n log n) with sortO(1)Sort destroys index — use values; watch duplicate skipping in 3Sum
Fast & Slow PointersCycle detection, finding middle, kth from endslow=head, fast=head; slow moves 1, fast moves 2; check fast==slow for cycleO(n)O(1)For find duplicate: Floyd's cycle = detect, find entry = cycle start
BFS (Level Order / Shortest Path)Shortest path in unweighted graph; level-by-level processingQueue with (node, dist/level); mark visited before enqueue not after dequeueO(V+E)O(V)Mark visited at enqueue time to avoid TLE
DFS + BacktrackingGenerate all combinations/permutations/subsets; constraint satisfactionChoose → recurse → unchoose; prune early; track current pathO(2^n) or O(n!)O(n) stack depthDraw decision tree first; add index param to avoid reuse
Monotonic Stack (Decreasing)Next Greater Element; temperatures; histogram rectangleMaintain decreasing stack; pop when current > stack top; record answer at pop timeO(n)O(n)Know whether to store index vs value in stack
Binary Search on Answer'Minimum maximum' or 'Maximum minimum'; feasibility function existslo=min_val, hi=max_val; binary search; write isValid(mid) functionO(n log(range))O(1)isValid() must be monotonic; think about lo/hi edge cases
Top-K with HeapKth largest/smallest; K most frequent; K closestMin-heap of size K for Kth largest; pop when size>K; heap top = answerO(n log k)O(k)Min-heap for top-K largest (counter-intuitive); max-heap for Kth smallest
1D DP — KnapsackInclude/exclude decision; optimal value with constraintdp[i] = max/min considering first i items; dp[i] = max(dp[i-1], dp[i-w]+val)O(n*W)O(n) or O(W) optimizedTraverse inner loop backwards for 0/1 (avoid reuse)
2D DP — Two SequencesLCS, Edit Distance, Interleaving — comparing two strings/arraysdp[i][j] = answer for s1[:i] and s2[:j]; fill row by rowO(m*n)O(m*n) or O(n) optimizedDefine dp[0][j] and dp[i][0] base cases carefully
Union-FindConnected components; dynamic connectivity; cycle in undirected graphfind() with path compression; union() with rank; detect cycle if find(u)==find(v) before unionO(α(n)) ≈ O(1)O(n)Always implement both path compression AND union by rank
TriePrefix matching; word search; autocompleteTrieNode has children[26] and isEnd; insert char by char; search/startsWith iterateO(L) per opO(L*N) total nodesUse HashMap<Character, TrieNode> for flexible char sets
Graph Topological SortDependency ordering; course scheduling; build orderBFS (Kahn's): in-degree array + queue; DFS: post-order reversalO(V+E)O(V+E)Cycle = no valid topological order; check result size == V
Dijkstra's AlgorithmShortest path in weighted graph with non-negative weightsMin-heap (dist, node); relax neighbors; skip stale entriesO((V+E) log V)O(V)Does NOT work with negative edges; use Bellman-Ford then
Interval Merge/OverlapMerging overlapping intervals; scheduling conflictsSort by start; if curr.start <= prev.end → merge (update end); else add to resultO(n log n)O(n)Sort by start for merge; sort by end for greedy scheduling