Skip to main content

Mid-Level / Intermediate Interview Prep

This guide is for: Engineers with 2โ€“5 years of professional experience interviewing for IC2/IC3 roles (L4 at Google/Meta, SDE II at Amazon, mid-level at most companies).

Time budget: 2โ€“3 weeks, ~1.5 hours/day


What Interviewers Expect at This Levelโ€‹

Mid-level is where the bar shifts meaningfully. You're no longer expected to just write working code โ€” you're expected to write good code and start showing independent thinking.

What they testWhat they're really asking
DSA (medium difficulty)Can you navigate problems without heavy guidance?
Code qualityIs your code clean, readable, and handles edge cases?
DebuggingCan you find and fix bugs under pressure?
OwnershipHave you shipped real features independently?
CollaborationCan you disagree constructively and work across teams?
Basic system designDo you understand how services talk to each other?

The key shift from entry-level: Interviewers expect you to arrive at a clean solution with minimal hints. A brute-force-only solution is not enough at this level.


The 2-Week Study Planโ€‹

Week 1 โ€” Sharpen DSA to Medium Levelโ€‹

Days 1โ€“2: Core Patterns Review

If you've done LeetCode before, this is a calibration. Solve these in under 20 minutes each:

  • LeetCode 15 โ€” 3Sum (Two Pointers)
  • LeetCode 238 โ€” Product of Array Except Self (Arrays)
  • LeetCode 347 โ€” Top K Frequent Elements (Heap)
  • LeetCode 424 โ€” Longest Repeating Character Replacement (Sliding Window)

If any of these took > 30 minutes, that topic needs focused practice this week.

Days 3โ€“4: Trees & Graphs (hardest category for most mid-levels)

// Pattern 1: DFS with return value (most tree problems)
function maxPathSum(root) {
let maxSum = -Infinity;

function dfs(node) {
if (!node) return 0;
const left = Math.max(0, dfs(node.left)); // ignore negative paths
const right = Math.max(0, dfs(node.right));
maxSum = Math.max(maxSum, node.val + left + right); // update global max
return node.val + Math.max(left, right); // return best single path
}

dfs(root);
return maxSum;
}

// Pattern 2: BFS for shortest path
function shortestPath(grid, start, end) {
const queue = [[...start, 0]]; // [row, col, distance]
const visited = new Set([`${start[0]},${start[1]}`]);

while (queue.length) {
const [r, c, dist] = queue.shift();
if (r === end[0] && c === end[1]) return dist;

for (const [dr, dc] of [[1,0],[-1,0],[0,1],[0,-1]]) {
const [nr, nc] = [r + dr, c + dc];
const key = `${nr},${nc}`;
if (nr >= 0 && nr < grid.length && nc >= 0 && nc < grid[0].length
&& grid[nr][nc] !== 1 && !visited.has(key)) {
visited.add(key);
queue.push([nr, nc, dist + 1]);
}
}
}
return -1;
}

Focus problems:

  • LeetCode 235 โ€” Lowest Common Ancestor of BST
  • LeetCode 102 โ€” Binary Tree Level Order Traversal
  • LeetCode 200 โ€” Number of Islands
  • LeetCode 207 โ€” Course Schedule (cycle detection) โญ
  • LeetCode 417 โ€” Pacific Atlantic Water Flow

Days 5โ€“6: Dynamic Programming (the most feared topic)

The secret to DP: always ask "what am I maximizing/minimizing, and what is my last step?"

// 1D DP: House Robber
// dp[i] = max money robbing houses 0..i
// dp[i] = max(dp[i-1], dp[i-2] + nums[i])
function rob(nums) {
let prev2 = 0, prev1 = 0;
for (const num of nums) {
[prev2, prev1] = [prev1, Math.max(prev1, prev2 + num)];
}
return prev1;
}

// 2D DP: Unique Paths
// dp[i][j] = number of paths to reach cell (i,j)
// dp[i][j] = dp[i-1][j] + dp[i][j-1]
function uniquePaths(m, n) {
const dp = Array.from({ length: m }, () => new Array(n).fill(1));
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}

Focus problems:

  • LeetCode 70 โ€” Climbing Stairs
  • LeetCode 198 โ€” House Robber โญ
  • LeetCode 322 โ€” Coin Change โญ
  • LeetCode 300 โ€” Longest Increasing Subsequence
  • LeetCode 1143 โ€” Longest Common Subsequence

Day 7: Weak area deep-dive + 2 full timed sessions


Week 2 โ€” System Design + Behavioralโ€‹

Days 8โ€“9: System Design Fundamentals

At mid-level, you won't be expected to design Twitter from scratch. But you should understand the building blocks and have an opinion on trade-offs.

The 5 building blocks every mid-level must know:

1. Load Balancer

[Client] โ†’ [Load Balancer] โ†’ [Server 1]
โ†’ [Server 2]
โ†’ [Server 3]
  • Distributes traffic across multiple servers
  • Round-robin, least-connections, or consistent hashing
  • Enables horizontal scaling and eliminates single point of failure

2. Cache (Redis)

  • Cache-aside pattern: check cache โ†’ miss โ†’ query DB โ†’ store in cache
  • When to use: read-heavy data, expensive queries, session storage
  • Key question: when does the cache become stale? (TTL, write-through, invalidation)

3. Database Design

-- Think about: indexes, foreign keys, normalization
-- Mid-level should know:
-- PRIMARY KEY, FOREIGN KEY, INDEX
-- SELECT with JOIN, WHERE, GROUP BY, ORDER BY
-- When to use SQL vs NoSQL

4. API Design

REST conventions:
GET /users โ†’ list users
POST /users โ†’ create user
GET /users/:id โ†’ get user
PUT /users/:id โ†’ update user
DELETE /users/:id โ†’ delete user

Status codes you must know:
200 OK, 201 Created, 400 Bad Request,
401 Unauthorized, 403 Forbidden, 404 Not Found, 500 Server Error

5. Async Processing (Queues)

[Web Server] โ†’ [Queue] โ†’ [Worker] โ†’ [DB/Email/etc]

Use when: email sending, image processing, notifications,
anything that can be delayed without affecting the user response

Sample mid-level system design question:

"Design a URL shortener."

Good mid-level answer covers:

  • POST /shorten API that takes a long URL and returns a short code
  • GET /:code that redirects to the long URL
  • Database table: urls(id, short_code, long_url, created_at)
  • Redis cache for popular URLs (O(1) redirect)
  • Hash function to generate short codes (mention collision handling)
  • Estimate: 100M URLs, 10B redirects/day โ†’ need cache

Days 10โ€“11: Behavioral Depth

Mid-level interviewers want real stories with real impact. "We built a feature" is not enough โ€” they want to know your specific role and measurable outcome.

The 8 stories every mid-level must have:

StoryWhat it proves
Project you owned end-to-endIndependence, full-stack thinking
Performance optimization you didTechnical depth, initiative
Bug you tracked downDebugging skills, persistence
Time you improved a processOwnership beyond your immediate tasks
Disagreement with a teammate/managerCommunication, healthy pushback
Time you mentored or helped someoneEarly leadership signals
Project that didn't go as plannedHandling adversity, learning mindset
Most complex technical decision you madeDepth of technical thinking

High-frequency mid-level behavioral questions:

  • "Tell me about a time you took ownership of something that wasn't strictly your responsibility."
  • "Describe a complex technical problem you solved."
  • "Tell me about a time you disagreed with your tech lead's approach."
  • "How do you prioritize when you have multiple things competing for your time?"
  • "Tell me about a time you improved a system's performance."
  • "Describe a time you collaborated across teams to deliver something."
  • "What's the most impactful thing you've shipped in the last year?"

Day 12: Mid-level specific question drill

Practice answering these with STAR format, aiming for 2โ€“3 minutes each:

  1. Walk me through your most complex project.
  2. How do you approach a codebase you've never seen?
  3. Tell me about a time a project was at risk. What did you do?

Days 13โ€“14: Full mock loops

Do 2 complete mock interviews (each is 45 min DSA + 15 min behavioral + 10 min system design).


Mid-Level Cheat Sheetโ€‹

LeetCode Problem Targetsโ€‹

CategoryProblems to solveTarget time
EasyAll easy in your weak area< 10 min
Medium โ€” Arrays/Strings10โ€“15< 20 min
Medium โ€” Trees/Graphs10โ€“15< 25 min
Medium โ€” DP8โ€“10< 30 min
Medium โ€” Heap5โ€“8< 20 min
Hard3โ€“5 (stretch goal)< 40 min

System Design Vocabulary (know these)โ€‹

TermOne-line definition
Horizontal scalingAdd more servers (vs vertical = bigger server)
CAP theoremCan only guarantee 2 of: Consistency, Availability, Partition-tolerance
Eventual consistencyReplicas may be temporarily out of sync but will converge
IdempotencyCalling an API N times has the same effect as calling it once
CDNServers geographically close to users that cache static assets
Message queueDecouples producer and consumer; enables async processing
ShardingHorizontal partitioning of a database across multiple machines
Index (DB)Data structure that speeds up lookups at the cost of write speed
Read replicaCopy of DB that handles read traffic, freeing up primary for writes

Interview Anti-Patterns at This Levelโ€‹

โŒ Brute force and done โ€” always discuss complexity and mention potential optimizations โŒ Vague behavioral stories โ€” "we built a thing" โ†’ "I redesigned the caching layer, reducing p99 latency from 800ms to 120ms" โŒ No system design opinion โ€” even if you're unsure, articulate trade-offs โŒ Not asking clarifying questions โ€” mid-level engineers define the scope before they build โŒ Only talking about "we" โ€” interviewers want to know what you specifically did

Salary Negotiation Noteโ€‹

Mid-level is often where engineers leave significant money on the table. Always:

  • Anchor high โ€” research the market using levels.fyi and Glassdoor
  • Never give a number first if you can avoid it
  • Negotiate total comp (base, equity, bonus), not just base
  • Get competing offers if you can โ€” they're your best leverage