A code review interview hands you a pull request — often deliberately flawed — and asks what you'd flag before approving it. Unlike LeetCode, there's no single correct answer to submit. You're graded on what you catch, what you miss, and how you explain it.
What interviewers are actually grading
Most candidates over-index on style — naming, formatting, minor refactors. Interviewers mostly don't care. What they're listening for:
- Correctness under concurrency — race conditions, lost updates
- Idempotency — what happens on retry or duplicate delivery
- Failure modes — what happens when a downstream call times out
- Security — auth bypass, injection, data exposure
- Whether your comments are actionable, not just observations
Common code review interview questions
"Walk me through how you'd review this PR."
Say your process out loud: read the diff for intent first, then trace the change through its failure paths, then check tests. Interviewers want to see a repeatable process, not a lucky catch.
"This function isn't thread-safe — how would you flag it?"
Name the specific race (two requests reading-then-writing the same state), not just "this could have concurrency issues." Then say what you'd ask the author to change — a lock, an atomic operation, or a different data structure — not just that it's wrong.
"How do you review code in a language you don't know well?"
Say you'd focus on the parts of a review that are language-agnostic — control flow, error handling, edge cases, API contracts — while flagging that you'd want a second reviewer for idiom-specific concerns.
"What would you NOT block a PR for?"
This is a trap for over-eager reviewers. The answer: style preferences, minor naming, and refactors unrelated to the change. Senior reviewers unblock fast and leave non-blocking comments for the rest.
How to structure your review comments
Interviewers consistently reward comments with this shape:
- What's wrong, stated specifically (not "this looks risky")
- Why it matters — the concrete failure scenario
- What you'd change, in one sentence
"This retry doesn't check idempotency — a duplicate request after a timeout will double-charge the customer. Add an idempotency key keyed on the request ID." beats "retry logic looks risky" every time.
Worked example: reviewing a real snippet
Here's a small payment-retry function, the kind of thing that shows up in a real loop:
async function chargeCustomer(orderId, amount) {
try {
return await paymentGateway.charge(orderId, amount);
} catch (err) {
return await paymentGateway.charge(orderId, amount); // retry once
}
}A junior review stops at "there's no error handling if the retry also fails." True, but not the interesting bug. A senior review leads with the one that costs money: the retry has no idempotency key, so if the first call actually succeeded and only the response was lost — a timeout, a dropped connection — the retry double-charges the customer. The fix isn't "add a try/catch," it's passing an idempotency key derived fromorderId so the gateway can dedupe the second call. That distinction — spotting the state-consistency bug versus the visible one — is exactly what separates levels below.
How the bar rises by level
| Level | What's graded |
|---|---|
| Mid-level | Can you spot the planted bug when it's pointed out or fairly obvious — a null check, an off-by-one, an unhandled exception. |
| Senior | Do you find the non-obvious failure mode unprompted — a race condition, a missing idempotency key — and explain the concrete consequence, not just that something "looks risky." |
| Staff | Do you prioritize correctly across several issues, decide what actually blocks the merge versus what's a follow-up, and reason about blast radius — who else calls this code, what breaks downstream. |
Practice with real, graded PRs
Reading about code review questions only gets you so far — the skill is pattern recognition under time pressure. Senior Loop's code review catalog has 15+ hand-authored PRs across payments, distributed systems, and APIs, each with planted, specific bugs and a rubric-based AI grader that scores what you caught versus missed. Three reviews are free, no card required.
Frequently asked questions
What candidates ask most often about code review interviews.
What is a code review interview?+−
A round where you're handed a pull request or code snippet — often with deliberately planted bugs — and asked to review it like you would on the job: flag issues, explain why they matter, and say what you'd change. Unlike a coding round, you're not writing an algorithm from scratch; you're evaluating someone else's.
What do interviewers actually grade in a code review interview?+−
Correctness under concurrency and failure (races, retries, timeouts), security (auth, injection, data exposure), whether your comments are specific and actionable rather than vague, and your judgment about what's worth blocking versus a nit. Style and naming are what most candidates over-index on and what interviewers care about least.
Is the bar different for senior candidates?+−
Yes. Junior loops mostly check whether you can spot an obvious bug. Senior and staff loops expect you to also weigh tradeoffs, prioritize which issues actually block a merge, and phrase feedback the way a tech lead would — see the leveling breakdown below.
How long does a code review interview usually take?+−
Most run 30-45 minutes: a few minutes to read the diff, the bulk of the time walking through what you'd flag out loud, then follow-up questions on your reasoning or a hypothetical variant of the bug.
How should I prepare for a code review interview?+−
Practice on real, planted-bug pull requests rather than just reading about the format — pattern recognition under time pressure is the actual skill being tested. Reading a checklist won't build the reflex; reviewing graded PRs will.