Software engineers, backend/frontend, SDEs
Technical Interview Practice
Technical interviews test “what” and “why”. MockWise pairs language-aware Qs (from your resume) with a senior engineer persona that probes depth, not just syntax, and your report flags missed points like CAS vs locks.
- Resume-aware stack follow-ups
- Why + trade-off scoring
- 60-min depth option
What technical interviews grade beyond correctness
- Reasoning made audible: assumptions stated before solutions, complexity named without being asked, and the brute-force path acknowledged on the way to the optimal one.
- Depth ceiling: where the third follow-up finds you. Panels grade the limit of your understanding, not the start of your answer.
- Trade-off literacy: every choice carries a cost sentence: “I picked X, which gives up Y, accepted because Z” is the sentence being listened for.
- Failure instinct: the good answers volunteer the thing that breaks first (contention, stale caches, unbounded queues) before the interviewer asks.
- Production texture: tools, metrics, and limits from real work separate an experienced answer from a tutorial recital, and the follow-ups find out which you brought.
The four question families
Problem solving / DS-algorithms
Arrays, hashing, two pointers, windows, stacks, trees, heaps. Medium difficulty with a twist. Graded on the walkthrough, not the solve: restate, brute force, bottleneck name, optimize, edges, complexity.
Language and runtime internals
Concurrency models, memory behavior, standard-library semantics. Java’s collections and GC, Python’s GIL and mutability traps, JavaScript’s event loop. Stack-aware follow-ups probe exactly where your resume claims comfort.
Data and API design
Indexing choices, query plans, schema and contract design, idempotency, pagination. These questions grade judgment under constraints: what you refuse to do is as informative as what you do.
Debugging and incident reasoning
Symptoms in, hypotheses out: memory leaks, flaky p99s, distributed failures. Graded on diagnosis order: measure, hypothesize, isolate, fix, verify, prevent. Because that order is what on-call actually needs.
The follow-up ladder
One question is really three. The classic HashMap prompt walks the same path every loop does. Your score is where the walk stops:
- Level 1: “What is it?” Bucket arrays, chaining, load factor. Nearly everyone passes here.
- Level 2: “What happens when…?” Collisions, resize cost, bad hashCodes clustering everything into one bucket, treeify thresholds.
- Level 3: “So what would you choose?” HashMap vs ConcurrentHashMap under concurrency. Iteration semantics, CAS vs bin locks, weakly consistent reads, and what you accept for each choice.
- Panels treat the level you stop at as the measurement, which is why re-recording one question three levels deep beats skimming ten topics once.
How MockWise runs a technical session
- Questions derive from your resume stack and seniority, or from the job description you paste in; either way, follow-ups dig where you claimed solid.
- You explain by voice or text (30 minutes for a focused drill, 60 for depth); transcripts get graded, not compilation.
- Each question scores Technical accuracy, Depth of knowledge, Problem solving, Communication, and Confidence, rolled to one number. The missed-point list is the value.
- Missed points name the standard follow-up you failed to pre-empt: “did not mention iteration semantics,” “no failure handling.” Sentences you can drill against.
- The trade-off sentence is explicitly detected: choices stated without their cost cap Impact regardless of correctness.
Where prepared candidates still lose points
- Optimal-first answers: skipping the naive solution hides the reasoning path and reads as recall, not derivation.
- Buzzword depth: naming Kafka or Redis without the “why not a queue-less design?” The follow-up always arrives.
- No numbers: unbounded “very fast” answers where the strong answer says “p99 was 2.1s, we shipped 400ms”.
- Silence on failure: designs without “when X dies…” are graded as never-run-in-production.
- Answering the question you studied instead of the one asked. Restate before solving; it also buys structuring time.
The drill protocol that moves the number
- Take a 30-minute technical mock cold and list your three worst missed points, verbatim.
- For each: study only that point: concept, one worked example, and the sentence you now say at the end of every answer about it.
- Re-record the same question; pass when the missed-point sentence disappears from the report.
- Next session: escalate to 60-minute depth on the topic that keeps clearing fast. The ceiling moves up only when the floor is fixed.
- Keep a two-column log: recurring missed points (fix depth) versus new ones (fix exposure). They need different remedies.
Example questions and ideal structure
Explain HashMap vs ConcurrentHashMap: when would you pick each?
The question is really about concurrency semantics: plain HashMap corrupts under concurrent puts; CHM gives lock-free reads, bin-level write locks, and CAS on absent keys.
Why it matters: The single most-asked Java concurrency opener. It separates “used a map” from “understands memory visibility.”
Common mistake: “CHM is just a synchronized HashMap” misses both the read path (volatile values, no locking) and the weakly-consistent iteration you are buying.
Trade-off: Sizing matters: CHM size() is a counter-sum, iteration is a snapshot-in-time. Fine for stats, wrong for “stop exactly when count hits N” logic.
Ideal structure: Structure: bucket array + chaining, load factor, vs segment/CAS, visibility/happens-before, and the choice under read-heavy vs write-heavy + iteration semantics.
Tip: Contrast iteration fail-fast vs weakly consistent and mention sizing.
Follow-up to expect: “How would you implement an atomic compute-if-absent without losing updates?” The answer is computeIfAbsent or merge, and knowing why put-if-absent races.
Design a rate limiter for 10K RPS per user across 3 regions.
Graded on sequencing: clarify (per-user vs global, burst tolerance), estimate (memory, counters), then choose algorithm and placement. Local token buckets plus async roll-up versus one central store.
Why it matters: It tests whether you design from constraints or from vocabulary; the phrase “per user across regions” hides the actual trade-off: cross-region consistency latency.
Common mistake: Redis solves it. A synchronous global counter across regions adds cross-region latency to every request; acceptable precision must be discussed, not assumed.
Trade-off: Fail-open (users see 429s from an outage) vs fail-closed (limiters stop protecting) is a product decision. Name the owner and the default.
Ideal structure: Requirements (per-user, burst), estimate (QPS, memory), propose token bucket + centralized counter (Redis) vs local + sync, trade-offs, and failure handling.
Tip: State per-user vs global before picking algorithm.
Follow-up to expect: “What happens to accuracy during a counter-store partition?” Seconds of over-allowance should be your stated, accepted cost.
How would you diagnose a memory leak in a Java service in production?
The grade lives in order and verification: correlate GC-time and heap-growth trends before acting, dump safely (jmap/heap dump with care under load), analyze dominators (MAT), name the holder, then prove the fix with metrics.
Why it matters: Real incidents separate tutorial memory from operational memory. Restart frequency, dump size vs RAM, and staging reproduction all surface in follow-ups.
Common mistake: Dumping and analyzing without first ruling out a growing legitimate cache. A heap full of entries is not automatically a leak.
Trade-off: The answer’s final sentence is always prevention: bounded caches, weak refs, try-with-resources, and an alert on old-gen trend so next time is detected at 10%, not 90%.
Ideal structure: Heap dump (jmap), MAT dominator tree, leak suspects, fix (unclosed cache/listener), verify via metrics/GC logs, and prevention (try-with-resources, weak refs).
Tip: Name a real tool you used and the metric that confirmed the fix.
Follow-up to expect: “How do you restart-avoid while you wait for the fix?” Heap-dump off-heap mitigations and rolling restarts are the expected answer.
Compare SQL “second highest salary: with ties” solutions for performance.
Three routes: DENSE_RANK window, correlated subquery, self-join. But the grade is on semantics first: “second highest salary value” (DENSE_RANK) versus “second row” (ROW_NUMBER) are different questions most candidates answer without noticing.
Why it matters: SQL rounds use this to test whether you reason about correctness under duplicates before touching performance, and every loop asks it of data-adjacent roles.
Common mistake: MAX(salary) WHERE salary < MAX(salary) happens to be right for the value case, but it quietly breaks on empty groups and confuses people about NULL semantics.
Trade-off: On 10M rows the index on salary decides everything; the window function scans once, correlated subqueries can scan per row. EXPLAIN before opinion.
Ideal structure: Window (DENSE_RANK) vs subquery vs self-join; discuss index on salary, handling ties, and plan on 10M rows.
Tip: Mention index and `EXPLAIN`.
Follow-up to expect: “Now per department, and only the top two salaries.” PARTITION BY and a filter on rank; ties behavior stated aloud.
When does adding a cache make the system worse?
The question inverts the reflex: caches hurt when invalidation is a correctness bug, hit rates are too low to pay the complexity, memory pressure shifts elsewhere, or stale reads break money paths.
Why it matters: Saying “always cache reads” is the junior tell; naming the invalidation strategy and its failure modes is the senior tell.
Common mistake: A cache in front of slow-but-rare reads is latency theater. Measure the hit-rate economics before the pattern.
Trade-off: Every cache is a data-replication decision: TTL simplicity vs event-driven invalidation vs read-through complexity. Pick and defend with numbers.
Ideal structure: Start with access pattern and staleness budget; cache when read frequency x savings exceeds invalidation + memory + staleness cost; name the stampede and eviction policies that come next.
Tip: The strongest sentence: “for this data, a cache is a correctness risk. Here is why not.”
Follow-up to expect: “Cache expires mid-traffic spike: what does the DB see?” Stampede protection (lock-ahead, jittered TTLs) is the point of the story.
What is a deadlock, and how do you prevent one in a service that locks multiple resources?
Define the four conditions briefly, then show the engineering move: impose a global lock order, or scope locks to avoid cycles entirely (single-owner queues, sharded locks), or accept and detect with timeouts.
Why it matters: Concurrency questions are asked as incidents, not definitions. “Our payments worker started stalling” is the real version.
Common mistake: “Use tryLock and retry” without backoff turns a deadlock into a livelock. Know the difference when they ask it.
Trade-off: Coarse locks are simple and slow; fine-grained locks are fast and subtle. The answer states which you chose at which traffic level.
Ideal structure: Mutual hold-and-wait cycle; prevention by ordering and scoping; detection by timeout + thread dumps; recovery with bounded retry and jitter.
Tip: Name a real lock-ordering fix (“we sorted account IDs before locking both”), not just textbook terms.
Follow-up to expect: “What does the thread dump actually show?” BLOCKED pairs with a wait-chain description.
How would you make an order-creation API idempotent?
Client-generated idempotency keys, stored with the response for a retention window; unique constraint on the key; concurrent replays handled by the storage layer, not by hoping requests serialize; TTL-scoped replay returns the same result code.
Why it matters: At-least-once delivery is everywhere (retries, timeout-guessing users, payment rails); panels use this to see if you have shipped anything that could not afford a double-execute.
Common mistake: Checking-then-inserting without a unique index. The race is exactly between the check and the insert.
Trade-off: Key retention is a product decision: keep it long enough to cover retries, short enough to bound storage. Say both numbers out loud.
Ideal structure: Idempotency-key header + unique constraint + stored response replay + concurrent-retry behavior + TTL + what happens if the first request failed midway.
Tip: The gold sentence: “replaying the same request returns the same result, not an error and not a second charge.”
Follow-up to expect: “Crash between order-write and response-persist: what does the retry see?” Transactional outbox or recoverable design is the answer they want.
How to prepare
- State assumptions and complexity out loud before coding; interviewers score reasoning as much as correctness.
- After “what”, always add “why this choice and what you give up.” That is what moves a 5 to a 7.
- If “depthOfKnowledge” <6, rerun a 60-minute interview and focus on one Q deep-dive until the report’s “missed points” clears.
- Re-record the same question up to three passes per session. The second and third clears are where depth actually attaches.
- Rotate question families weekly (algorithm, internals, data/API, debugging) so missed-point patterns surface as gaps, not as topics.
FAQs
Do I write code here?
You explain by voice/text. MockWise scores your reasoning, trade-offs, and structure, not compilation. Paste code references verbally.
Will follow-ups match my stack?
Yes. Your resume’s languages (Java, Python, etc.) steer follow-ups; e.g., Java → concurrency, Python → GIL.
How is this scored?
Each Q gets technicalAccuracy, problemSolving, depth, communication, confidence; overallQuestionScore rolls up. See “missed points” for the next drill.
Is a resume required for technical sessions?
No. Generic sessions run at a chosen difficulty. A resume or job description focuses the follow-up ladder on the claims you will actually be asked to defend.
Does this cover system design too?
Technical rounds probe depth on implementation and reasoning; design rounds grade requirements, estimates, and architecture scope. Use the system-design practice for those, the framework guide for structure.
Which interview type for freshers?
This one. The AI scales follow-up depth to your experience level, so a first loop and a senior loop both grade fairly against their own bar.
Sample report
What your report looks like
Every session produces a report like this: per-question scores, the exact points you missed, and a rewrite showing what a stronger answer sounds like.
Illustrative sample with synthetic data, not from a real user. Backend SDE candidate · illustrative sample. Overall recommendation: Lean reject: concurrency depth gaps.
Q1.Explain HashMap vs ConcurrentHashMap. When would you pick each?
5.5/10Missed point: Did not mention iteration semantics (fail-fast vs weakly consistent). The standard follow-up.
Rewrite: "…and because CHM iterators are weakly consistent, reads are safe while another thread writes. A plain HashMap would throw ConcurrentModificationException."
Q2.Design a rate limiter for 10K RPS per user across 3 regions.
5.5/10Missed point: Jumped to Redis before stating per-user vs global limits or the replication-lag trade-off.
Rewrite: "Per-user token bucket, counters sharded per region with async roll-up. Accept a few seconds of over-allowance rather than cross-region latency on every request."
Q3.How would you diagnose a memory leak in a Java service in production?
5.5/10Missed point: Named jmap but not how you would confirm the fix with GC metrics.
Rewrite: "…then verify: heap-after-full-GC flatlines and the dominator tree no longer shows the cache. Both wired into the dashboard."
Your improvement roadmap after this report
- Revisit concurrency basics, then rerun a 60-minute technical interview
- Practice stating the trade-off before the solution. One sentence per choice
- Drill the "missed points" from this report with Alex until they clear
Ready to practice?
Practice your answers in a mock interview, then review the transcript-based feedback.
Related practice
System Design Interview Practice
Practice system design requirements, estimates and trade-offs with a retry-safe API example and transcript feedback.
Behavioral Interview Practice
Practice truthful STAR answers with follow-ups, a synthetic worked story, and transcript-based feedback with clear scoring limits.
Software Engineer Mock Interviews
SDE loop practice: DS/algo + system trade-offs + behavioral in one interview, with a report of missed points.
Last updated: 2026-09-03 · Questions? Contact support · Security