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

Intermediate

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.

Advanced

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.

Intermediate

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.

Intermediate

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.

Intermediate

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.

Intermediate

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.

Advanced

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/10
Technical accuracy: 5/10Depth of knowledge: 4/10Problem solving: 6/10Communication: 7/10

Missed 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/10
Technical accuracy: 6/10Depth of knowledge: 5/10Communication: 6/10

Missed 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/10
Depth of knowledge: 5/10Practical experience: 6/10

Missed 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

Last updated: 2026-09-03 · Questions? Contact support · Security