parallel/prepPERSONAL WORKSPACE · OCT 2026

NVIDIA INTERVIEW PREPARATION / YI GAO

Two plans.
Your next step.

Compare the routes. Follow either, or mix both.
Original instructions stay separate. Progress stays on this browser.

Amp plan0 completed
Claude plan0 completed

Saved only on this browser. Each plan has its own checklist; completion is not shared across devices or domains.

01 / FOLLOW ALONG

One day. Two approaches.

Dates use Asia/Singapore.

These are two independent plans, not a combined recommendation. Claims, estimates and differing advice are preserved as written. Check the actual test instructions for permitted tools and materials.
23OCTOBER 2026Friday

Where they differ Amp: 6 focused hours, including the pytest bridge. Claude: Sets A, P and B plus story cards and zeval-lite; the schedule runs to 21:30.

Amp plan

Friday, October 23 — reliable Python + translate Zeval into testing engineering

09:00–10:30 / 90 minCoding: maps, counts, arrays
H5 Two Strings 20 min; L1 Two Sum 25 min; H9 Ransom Note 25 min; H6 Left Rotation 20 min. Use platform stubs, not a preferred local template. Check duplicate counts, repeated values, and rotation boundaries. Capture only mistakes in a short error log.
10:45–12:00 / 75 minCoding: Python fluency
H2: Counter/DefaultDict/Exceptions, 30 min total; H10 Merge the Tools!, 25 min; 20 min writing tiny input/output functions from memory (split, map, enumerate, dictionary updates, sorted tie-breaks, JSON exceptions). Contrast a HackerRank stdin driver with a supplied function stub. No new algorithm topics.
13:00–14:15 / 75 minInterview/QA bridge: pytest
Complete P2 using D1. Produce a passing suite and one observed failure from the deliberate wrong implementation. Explain fixture isolation, parametrization, runner versus scorer, and test levels in terms of Zeval.
14:30–15:30 / 60 minCoding: practical automation
P1 Log Summary 30 min; P5 Paged Results API 30 min. Use local synthetic data and a stub only. If unfinished, preserve a correct smaller implementation and name the missing contract; do not pretend it is complete.
15:45–16:45 / 60 minInterview: resume deep-dive
Use the story guide below: 10 min opening pitch; 25 min Zeval architecture and one real case; 15 min meta-judge calibration and limitations; 10 min record/replay an answer to “Why SDET rather than an algorithm role?” Say what was implemented, what is proposed, and what evidence exists.
Sets, instructions & completion targets · full text
Friday output: Python error log; small pytest/API lab; a truthful 90-second opening; one 5-minute Zeval walkthrough. No need to polish slides or build a new product.
Claude plan

3.2 Day 1 — Fri Oct 23: re-warm the hands, start the bridge

08:30–09:00Code
D1-1 Stdlib recall. Type Appendix A1 from memory into a blank file, diff it against the appendix, and retype what you missed
09:00–11:45Code
D1-2 DSA Set A: hashing / windows / sort (list below)
11:45–12:45—
Lunch + walk
12:45–14:45Code
D1-3 Practical Set P: logs, strings, time (list below)
15:00–16:30Interview
D1-4 Resume deep-dive I. Write story cards S1–S3 (§3.8) in stories.md. Say each aloud in 2 minutes, record once, listen once, cut the filler
16:45–18:30Interview (gap)
D1-5 G1 pytest crash. 45 min on the docs (fixtures, parametrize, marks, monkeypatch, tmp_path), then zeval-lite Lab step 1 (Appendix C, T5)
18:30–19:30—
Dinner
19:30–21:00Code
D1-6 DSA Set B: stacks / queues / heaps (list below)
21:00–21:30Both
Update errors.md. Read §3.4 rules only; don't open the mock problems
Sets, instructions & completion targets · full text
Set A (20-min cap each): Ransom Note (10 min) → Sherlock and Anagrams → Count Triplets → Frequency Queries (watch I/O speed) → LC 3 → LC 438 → LC 347 → LC 560 → LC 56. Stretch: LC 15, Sherlock and the Valid String.
Set P: Word Order → Company Logo (tie-break!) → Time Conversion (12AM/12PM) → LC 937 → LC 811 → LC 636 → LC 1604 → T1 flaky detector (Appendix C, 30 min). Stretch: LC 1169.
Set B: Balanced Brackets (10 min) → LC 155 → LC 739 → LC 394 → Jesse and Cookies → LC 215 → Find the Running Median. Stretch: LC 150.
24OCTOBER 2026Saturday

Where they differ Different mock days: Claude’s full 95-minute mock is today at 09:00. Amp reserves its full mock for Sunday and uses today for reliability, CI and cloud vocabulary.

Amp plan

Saturday, October 24 — algorithm coverage + reliability/cloud vocabulary

09:00–10:30 / 90 minCoding: window/search/SQL
L2 Longest Substring 35 min; L4 Binary Search 25 min; L6 Combine Two Tables 15 min; L7 Duplicate Emails 15 min. Explain the abba window trap, search interval invariant, and unmatched join rows. Do not open H7/H8/L3.
10:45–12:00 / 75 minInterview/QA bridge: flaky tests
Complete P3 using D2. Distinguish order dependence from model nondeterminism. Produce one bug report: title, environment/version, minimal reproduction, expected/actual result, evidence, severity versus priority, suspected cause, fix, verification, regression coverage.
13:00–14:00 / 60 minInterview/QA bridge: CI + containers
D3 15 min; D4 10 min; 35 min mini-exercise below. Explain what would block a pull request, what runs nightly, and what artifacts make a failure actionable. This is a new lab, not historical Ztalk CI experience.
14:15–15:30 / 75 minInterview/QA bridge: Kubernetes + faults
D5 and vocabulary 20 min; local manifest exercise 25 min; fault-injection test matrix 30 min. Learn to describe a deployment and diagnose symptoms—not administer a cluster. Use the concrete instructions below.
15:45–16:45 / 60 minInterview: services, performance, failure analysis
ztalk-mcp 20 min; Azure voice harness 15 min; Axera/Bosch 15 min; gap answers and two interviewer questions 10 min. Select real episodes and verify which outcomes/metrics you can honestly defend.
Sets, instructions & completion targets · full text
CI/container mini-exercise (35 minutes, inside the 13:00 block). Draft a workflow with a pull-request trigger and a job containing checkout → setup Python → install test dependencies → python -m pytest -q --junitxml=results.xml → upload the report even on failure. The pytest failure must keep the job red; do not add continue-on-error. Separate a fast deterministic merge gate from slower live-model/nightly evaluations. Record commit, case-data version, configuration/model version, logs, and per-case results for reproducibility. Never commit secrets; distinguish cache from diagnostic artifacts.
Then create a minimal Dockerfile for the synthetic lab: Python base image, work directory, copy test dependencies, install them, copy lab files, and default command python -m pytest -q. Build and run it locally if Docker is already installed; confirm its exit status reflects test success/failure. For reproducibility, understand pinned dependencies and immutable image digests rather than assuming a moving tag is fixed. No registry push or deployment is needed. Cap Docker setup troubleshooting at 10 minutes: if unavailable, run the exact test command in a clean virtual environment and explain the Dockerfile line by line. Report this honestly as a container design walkthrough, not a successful container run. Know that containers share the host kernel (Docker Desktop on macOS supplies a Linux VM), published ports differ from exposed metadata, and persistent data needs explicit storage.
Kubernetes mini-exercise (25 minutes, inside the 14:15 block). Write a local YAML manifest containing a Deployment for a hypothetical eval-api image with two replicas, matching selector/Pod labels, an HTTP readiness probe on /ready, and CPU/memory requests and limits; add a Service whose selector matches those Pods. Use an installed YAML parser to load the document and assert the selectors match and replicas equals two; this is structural validation only, not Kubernetes schema validation or a live deployment. If no parser is available, use a small JSON manifest (valid Kubernetes input) and Python's json module for the same checks. Do not spend the afternoon installing a cluster. If kubectl and a local disposable cluster already exist, inspect a harmless local example; never target a shared cluster.
Learn exactly these terms: Pod; Deployment/ReplicaSet; Service; namespace; ConfigMap versus Secret (base64 is not encryption); Job for batch eval runs; requests versus limits; readiness versus liveness versus startup probes; rolling update/rollback; Pending, CrashLoopBackOff, and OOMKilled. Be able to say what kubectl get pods, describe pod, logs, and rollout status would help inspect. Readiness failure removes traffic eligibility; liveness is not a substitute for dependency health and can cause restart storms. Admission policies, operators, Helm, cluster networking internals, and production operations are out of scope.
Fault-injection mini-exercise (30 minutes, same block). Extend the P5 stub for a bounded timeout and intermittent 503. Write a five-row matrix: tool timeout; 429/rate limit; malformed payload; one replica restart; memory pressure. For each, state fault injection method (stub or hypothetical local container action), expected bounded degradation, observed signal (latency/error/retry count), and recovery criterion. Execute the two stub cases; treat replica restart and memory pressure as proposed tests unless actually exercised locally. Explain no duplicate side effects, bounded queues/retries, and how readiness affects routing. Distinguish functional correctness, load capacity, stress limits, soak stability, and recovery testing.
Claude plan

3.3 Day 2 — Sat Oct 24: the mock, then breadth

08:30–09:00Code
D2-1 Warm-up: Two Strings, Alternating Characters (≤ 15 min total). Type the A1 templates once
09:00–10:35Code
D2-2 FULL 95-MIN MOCK (§3.4)
10:35–10:50—
Break: walk, no screens
10:50–12:20Code
D2-3 Same-day review (§3.5)
12:20–13:20—
Lunch
13:20–15:20Code
D2-4 DSA Set C: graphs / binary search / intervals. Start with whichever pattern the review flagged as worst
15:35–17:05Interview
D2-5 Resume deep-dive II. Write S4–S10. Then do 10 rapid-fire questions from §3.9 aloud (60–90 s each), recorded
17:15–18:45Interview (gap)
D2-6 G2 flaky tests + G3 CI/CD. Read the 2 Google posts, Fowler, and the pytest flaky page (40 min). Then Lab step 2: flaky demos, CI YAML, flaky policy
18:45–19:45—
Dinner
19:45–21:00Both
D2-7 MCQ/Linux. 6 ★ shell drills from §2.7 (40 min). Then A2/A3 gotchas and G8 bug lifecycle (20 min)
21:00–21:30Both
Update errors.md. Re-solve one mock problem you lost points on, from a blank editor
Sets, instructions & completion targets · full text
Set C: LC 200 (iterative BFS) → LC 994 → LC 207 → Components in a graph (union-find) → LC 743 → LC 278 → LC 875 → LC 435. Stretch: Castle on the Grid, LC 721.

3.4 THE MOCK — Sat Oct 24, 09:00–10:35 (exactly 95 min)

Conditions:
  • Chrome full-screen, phone in another room, no AI, no docs, no other tabs.
  • Paper and pen. A visible timer.
  • Open the three problem links at 08:58. Don't read them before then.
DoneClockItemTargetWhy it's in the set
09:00–09:12Part A: 16 MCQs. Appendix B, on paper (≈ 45 s each). Note "confident / guessed" per answer12 minConfiguration B rehearsal; negative-marking discipline
09:12–09:27Q1 Time Delta (HR, Medium)15 minTimestamp parsing with tz offsets (%z), done from memory
09:27–09:59Q2 Fraudulent Activity Notifications (HR, Medium)32 minSliding-window median. Naive sort-per-day times out on big tests, so it rehearses the partial-credit decision (counting array over 0..200, or bisect.insort)
09:59–10:31Q3 Roads and Libraries (HR, Medium)32 minConnected components. Edge case c_lib <= c_road; recursion-depth trap (go iterative or use union-find)
10:31–10:35Final pass: every question submitted, MCQs reviewed4 minTest-day habit
Triage rule: at minute 15 of any question with no working approach, write the brute force, submit it for partial credit, and move on. Come back if time remains.
Score sheet (write it down immediately):
Q   | tests passed | minutes | first-submit at | time split read/plan/code/debug | labels
MCQ | __/16 (guessed: __) |
Q1  | __/__ | ...
Q2  | __/__ | ...
Q3  | __/__ | ...
Benchmarks:
  • Q1 full plus Q2 or Q3 full ≈ on track.
  • All three full and ≥ 12/16 MCQ ≈ strong. Shift Sunday time toward interview prep.
  • Under 1.5 problems ≈ move Sunday's D3-3 lab to a conceptual pass, and give that time to DSA re-solves.

3.5 Same-day review method (Sat 10:50–12:20, 90 min)

This is Zeval applied to yourself: score → failure taxonomy → targeted re-run.
  1. Score (10 min). Fill in the score sheet honestly: minutes per phase, and when the first green submit happened.
  2. Label every lost point (20 min) with exactly one tag:
    • K didn't know the pattern
    • I knew it, implementation too slow
    • B bug
    • E missed edge case
    • T TLE / complexity
    • F I/O or format mismatch
    • M triage / time management
    • R misread the statement
  3. Cold re-solve (35 min). Close everything and re-solve your worst problem from blank at ⅔ of the original time. Only then read the Discussions tab for the optimal approach, and implement it if it differs.
  4. Explain cards (15 min). For Q1–Q3, write 5 lines each: problem in one line · key insight · complexity · edge cases + how you'd test it · what you'd change. Say each card aloud in 60 s. This is exactly Tuesday's first interview segment.
  5. Rules and routing (10 min).
    • Write one rule per label in errors.md. Example: "T → compute the operation count from constraints before typing."
    • Reorder Set C so your worst label/pattern comes first.
    • MCQs: read the explanation for every wrong and every guessed answer.
25OCTOBER 2026Sunday

Where they differ Amp: the full mock at 14:00, followed immediately by a 50-minute interview rehearsal. Claude: a separate 60-minute real-UI rehearsal, the Kubernetes lab and an interview rehearsal at 16:00.

Amp plan

Sunday, October 25 — dress rehearsal, immediate debrief, targeted repair

09:00–10:00 / 60 minCoding: repair, not expansion
Re-solve Friday/Saturday's two weakest already attempted problems, 25 min each; 10 min compare error patterns. If none remain, re-solve L2 and P1 from blank. L5 may replace the last 20 min only if the core patterns are secure. Keep H7/H8/L3 unseen.
10:15–11:15 / 60 minInterview: full story coverage
Zeval/meta-judge 20 min; MCP reliability 15 min; Axera/Azure 15 min; honest Kubernetes/QA gap answers 10 min. Use the question bank below. Practice follow-up questions, not memorized speeches.
11:30–12:15 / 45 minFundamentals + setup
P4 closed-book recall 20 min; 10 min review misses using D3–D5/H2; 15 min confirm logins, Python selection, Chrome/VPN-off access, and Teams microphone/camera/screen share. Load only the mock problem statements at 14:00. Lunch and rest until then.
14:00–15:35 / 95 minThe one full timed coding mock
Exact set: H8 Sparse Arrays + H7 Balanced Brackets + L3 Merge Intervals, in that order. Follow the minute-by-minute rules below.
15:35–16:25 / 50 minInterview rehearsal with no transition gap
5 min introduction; 20 min explain mock solutions; 15 min Zeval/meta-judge/MCP questions; 5 min gaps; 5 min questions for interviewer. Speak aloud to a person or record yourself. Do not inspect editorials first.
16:40–18:10 / 90 minSame-day mock review
10 min classify failures; up to 50 min re-solve failed/weak questions without a per-question timer; 20 min test counterexamples and explain corrected invariants; 10 min produce Monday's repair list. If all passed, repair the weakest explanation and test adversarial inputs instead of adding a second mock.
Sets, instructions & completion targets · full text

Exact 95-minute mock protocol

This is a three-task preparation stress test, not a prediction of the actual question count. Use HackerRank for H8/H7 and LeetCode China for L3, with one uninterrupted external timer. This is a deliberate cross-platform approximation, not an official NVIDIA/HackerRank test. Use the published function signatures and constraints. Do not read solutions, discussions, tags, or hints beforehand. If you already know a solution, still implement from blank and label the resulting score as familiarity-assisted rather than claiming a blind baseline.
DoneElapsed timeAction
0–5 minRead all three statements and constraints; note return formats and rough approaches.
5–25 minH8 Sparse Arrays: implement, run samples/custom cases, submit.
25–50 minH7 Balanced Brackets: implement, test prefixes/mismatches, submit.
50–85 minL3 Merge Intervals: implement, test nested/touching/disjoint intervals, submit.
85–95 minRevisit highest-value failure; check signatures/output; submit current best versions. Hard stop at 95.
During the debrief, explain intended complexity: Sparse Arrays linear counting plus query lookups (with string hashing costs acknowledged); Balanced Brackets linear time and up to linear stack space; Merge Intervals sorting-dominated time and result/storage costs. Do not claim constant memory for a Python solution that creates slices, a sorted copy, or an output list.
Review method: save each failure as symptom → smallest counterexample → wrong assumption → correct invariant → regression case. Classify reading/contract, algorithm, Python API, boundary, complexity, or time-management errors. Try the untimed re-solve first. If still blocked after a genuine attempt, read a minimal explanation, close it, then rebuild from blank; mark that attempt as assisted. For every corrected solution, run an input that would reject the original wrong approach—not merely another sample. Record actual minutes and accepted/failed submissions; do not infer a company pass threshold from this mock.
Claude plan

3.6 Day 3 — Sun Oct 25: close the gaps, rehearse the interview

08:30–10:00Code
D3-1 Set D: design-a-class + REST. LC 146 LRU (OrderedDict and dict + doubly linked list) → LC 981 → LC 1797 → Simple Text Editor → T4-A and T4-B (jsonmock, with urllib; then redo one with requests)
10:15–11:15Code
D3-2 Real-UI rehearsal. Problem Solving (Intermediate), or Basic if the mock was under 1.5 problems. You get unseen problems in the real proctored UI. Cap yourself at 60 min, then submit whatever you have; the rehearsal matters more than the badge
11:15–11:45Code
Short review: steps 1–3 of §3.5
11:45–12:45—
Lunch
12:45–14:45Interview (gap)
D3-3 G4 Docker + G5 Kubernetes + G6 perf/fault injection. zeval-lite Lab step 3 on OrbStack's built-in Kubernetes
15:00–16:00Interview
D3-4 G7 AI-for-testing. Prepare 4 whiteboard mini-designs (test-case generation, flaky classifier, failure clustering, test selection) as 5 bullets each. Re-read S1–S3
16:00–17:00Interview
D3-5 Full interview rehearsal, 50 min, camera on, recorded: 5-min intro → walk through your mock Q2/Q3 using the explain cards → 6 technical questions → 3 behavioral → your questions for them. Have a friend ask from §3.9 if you can; otherwise draw 9 questions at random
17:00–17:30Interview
Watch the recording. Rewrite the 3 weakest answers
17:30–19:00—
Dinner / rest
19:00–20:30Code
D3-6 Redo every errors.md problem from blank, timed. If the error log is short, do 30 min of SQL (The Report, Top Competitors, LC 185)
20:30–21:00Both
D3-7 Write a one-page handwritten cheat sheet (templates, gotchas, story keywords). You'll read it Tuesday morning, not during the test
26OCTOBER 2026 · TAPERMonday

Where they differ Both taper. Amp specifies four 30-minute blocks; Claude specifies 90 minutes of morning practice, a 45-minute logistics dry-run and an evening wind-down.

Amp plan

Monday, October 26 — light taper, 2 hours only

09:30–10:00 / 30 minCoding confidence
Re-solve one Sunday repair item from blank, 20 min; verbally explain its invariant and edge cases, 10 min. If no repair item exists, use H1 Plus Minus and Mini-Max Sum, 10 min each, then 10 min review. No new hard problem.
10:15–10:45 / 30 minInterview confidence
Opening pitch 5 min; Zeval/meta-judge 10 min; one MCP/Axera story 10 min; honest gap statement 5 min. Use the final resume as the source of truth.
14:00–14:30 / 30 minEnvironment / schedule
Chrome and platform access with VPN off; Teams camera/microphone/speaker check; rehearse share/unshare of one harmless window; check power/network and invitation timezone. Resolve the 15:35 handoff with recruiter if not yet clarified. Do not start the real assessment or consume its attempt.
16:00–16:30 / 30 minFinal recall / pack
Review error log and P4 for 15 min; review test-day checklist and prepare a clear desk for 15 min. Stop preparation afterward; normal dinner and a full night's sleep.
Claude plan

3.7 Mon Oct 26 — taper

09:30–10:30
3 speed re-solves from blank, ≤ 15 min each: LC 560, LC 636, Roads and Libraries
10:30–11:00
Read S1–S10 and the §3.9 trigger table aloud once
14:00–14:45
Logistics dry-run at the test's clock time. Work through the §4.1 checklist, with VPN off
Evening
Nothing new. Light exercise. Lights out by 23:00
Sets, instructions & completion targets · full text
Optional, send by Friday: a one-line note to the recruiter confirming the interview starts right at 15:35, back-to-back with the test. If they offer 15:40, take it.

27OCTOBER 2026 · TEST DAYTuesday

Where they differ Different handoff advice: Amp says not to shorten the test without recruiter guidance. Claude plans final submission at 15:28 and joining Teams at 15:32–15:34. Both original checklists are preserved below; follow the actual assessment instructions.

Amp plan

4. TEST-DAY CHECKLIST — TUESDAY, OCTOBER 27

Before these blocks · original instructions

Before the test

09:30–09:50 / 20 min
Review the existing Python error log and explain one solved function aloud. No new problems or full mock.
12:00–12:30 / 30 min
Familiar light lunch and water; avoid experimenting with caffeine or food. Rest afterward.
13:00–13:20 / 20 min
At the test machine: power connected; stable internet; Chrome ready; VPN off; close AI chats, coding agents, assistant extensions, editor copilots, unrelated tabs, notifications, and background jobs that may interrupt. Do not change managed software or disable security protections.
13:20–13:35 / 15 min
Using the invitations, check assessment access, account identity, permitted Python version, camera/permissions if requested, and instructions. Prepare Teams signed in with the correct meeting ready, but do not join prematurely if that conflicts with assessment rules. Keep the recruiter's approved contact channel available for genuine technical trouble.
13:35–13:50 / 15 min
Read allowed-resources/proctoring rules without starting the timed attempt early. Use only explicitly permitted materials/tools; assume no AI or outside assistance. Check that a notebook, second display, external editor, or documentation is allowed before using it. Clear the desk accordingly.
13:50–14:00 / 10 min
Bathroom/water, sit down, breathe. Do not open practice problems. Start at the instructed time.
Tactics, handoff & interview checklist · full text

HackerRank tactics: 14:00–15:35

  • Minutes 0–5: scan every question, points, section locks, constraints, and submission rules. Choose Python. Identify supplied function signatures versus stdin/stdout tasks. Estimate the easiest points first; do not assume you can return to a locked section.
  • If three coding tasks: use the mock's 5-minute scan + 20/25/35-minute task budgets + 10-minute final pass. Reorder by actual difficulty/value, not screen position.
  • If two coding tasks: 5-minute scan + 35 minutes each + 20 minutes testing/repair. If a short MCQ section is present, allocate 10 of those final 20 minutes to it, unless section locks require an earlier order. Rebudget from actual point weights; no fixed plan overrides the interface.
  • For each problem: restate the contract, give yourself one simple example and one hostile edge case, select the simplest algorithm meeting constraints, then code. Check empty/minimum input when allowed, duplicates, boundary indices, large inputs, and required ordering. Debug output must not pollute stdout.
  • When stuck: after 7–10 minutes without a concrete new step, write a simpler correct approach or move on. If a brute-force solution is all you can finish, submit it only knowing which constraints it violates; it may earn subset credit if the scoring supports that. Do not hard-code examples or assume partial credit exists.
  • Submit incremental working versions if the platform permits; check what counts as the final saved/submitted answer. Passing samples does not establish hidden-test correctness. Investigate an off-by-one or multiplicity bug before replacing a mostly correct algorithm.
  • Use Python intentionally: avoid list.pop(0) for queues, quadratic concatenation, deep recursive DFS on large inputs, accidental shared state, and sorting away required input order. Prefer standard-library tools you understand; do not rely on unapproved packages.
  • Last 10 minutes: no risky rewrite. Check return types, output formatting, function names, edge cases, and that your best version is actually submitted. Keep a mental one-sentence explanation of each approach for Teams; do not export, screenshot, or copy assessment material unless expressly permitted.
  • Technical trouble: use the assessment's official support or recruiter channel as allowed; describe the symptom and time. Do not use AI to diagnose the assessment or bypass proctoring/network restrictions. Do not assume a restart or extension is authorized.

Immediate Teams handoff: 15:35

  • Use the recruiter-agreed transition arrangement. Without a changed schedule, finish/confirm submission at 15:35 and join immediately; there is no planned post-test recovery window. If a platform issue causes delay, notify the recruiter through the agreed channel rather than silently missing the interview.
  • Camera on; verify correct microphone, speaker/headset, and camera; neutral background and good lighting. Close private work/customer windows and notification previews. Keep a harmless window ready for sharing.
  • Ask what to share; choose the requested window or screen. Check text is readable, share/unshare controls work, and no private data, AI overlay, chat notifications, or preparation notes are visible. Do not show the assessment itself unless permitted/requested. Do not record the actual interview without consent.
  • Have the resume available only if interview rules allow. No hidden live assistance, chat agents, transcription assistants that answer questions, or generated interview responses.

Discussing the test solutions immediately afterward

For each problem, use this 2–3-minute structure:
  1. Contract and example (20–30 seconds): what had to be returned; important constraints and a discriminating edge case.
  2. Approach and invariant (45–60 seconds): chosen data structure, why each step is correct, and what stays true during the loop.
  3. Trade-offs (20–30 seconds): time/space complexity, including Python allocations; contrast one plausible alternative.
  4. Testing and result (20–30 seconds): samples plus adversarial tests; say exactly what passed or remained uncertain. Do not claim hidden cases you could not see.
  5. Improvement (20–30 seconds): name the specific missing case, optimization, or clarity improvement. If unfinished, explain the bottleneck and next step without excuses or invented success.
Example phrasing: “I used counts rather than a set because duplicate requirements matter. The invariant is that the map tracks remaining demand after each item. My implementation passed the visible cases; I would additionally test repeated values and an absent required item. The trade-off is extra map storage for avoiding repeated scans.” Use the actual test problem's semantics, not this wording if it does not apply.
Final standard: demonstrate a developer who can build test tooling, reason about correctness and uncertainty, investigate failures, and explain personal contributions honestly. Three days should make those abilities visible—not manufacture an operations history you do not have.
Claude plan

4. Test-day checklist (Tue Oct 27)

Before these blocks · original instructions

4.1 Setup: dry-run Monday at 14:00, re-check Tuesday at 13:00

  • Chrome: updated. Make a fresh Chrome profile with no extensions (no AI sidebars, translators, Grammarly). HackerRank supports Chrome, Firefox and Edge; Brave isn't supported (browser support).
  • VPN off. Check that hackerrank.com and Teams both load quickly from your network. Prefer wired Ethernet, power plugged in, one display.
  • Quit every AI app and agent: Claude, ChatGPT, Codex, Cursor, Copilot, Amp, and similar. Also quit WeChat/DingTalk/Feishu, and turn on macOS Focus / Do Not Disturb.
  • Teams: app updated and signed in (or the guest link tested). Run a test call to check camera, mic and speaker.
  • Screen sharing: grant System Settings → Privacy & Security → Screen & System Audio Recording → Microsoft Teams. Teams has to restart after this, so do it Monday. Practice sharing a single window. Help: Teams support.
  • Local coding window for the interview: VS Code with all AI extensions disabled (or a plain editor) plus a terminal running python3. Font size ≥ 16. Have an empty scratch.py open.
  • Room: light in front of you, camera at eye level, quiet, headset, water, paper + 2 pens.
  • Links: star the HackerRank invitation email and the Teams invite.

4.2 Timeline

08:00
Wake, normal breakfast
10:00–10:40
Warm-up: 2 problems you've already solved + type Appendix A1 once. No new problems
11:30
Light lunch. You'll be "on" from 14:00 to ~16:25
12:30–13:00
Read your handwritten cheat sheet and S1–S10 keywords, then put them away
13:00–13:30
Run the §4.1 checks. Test Teams, then quit Teams so nothing pops up during the test
13:30–13:55
Bathroom, water. Open the test link and read the instructions page (number and type of questions, negative marking, whether an AI Assistant panel exists). If a Sample Test is offered and you have spare minutes, use it
14:00
Start the test
15:28
Final submit check: every coding question Submitted (not just Run), every MCQ answered or deliberately skipped
15:28–15:32
On paper, 3 lines per question: approach · complexity · what failed or was unfinished, and why
15:32–15:34
Open Teams and join. Camera on
15:35
Interview
Tactics, handoff & interview checklist · full text

4.3 HackerRank tactics

First 3–5 minutes: open every question, read the constraints, and pick an order. Easiest and highest-value first, never the hardest first.
Time allocation:
DoneIf the test is…Plan
3 coding4 min read-all → Q-easy ~18 → Q-med ~30 → Q-med/hard ~35 → 5 min buffer and submit check
2 coding + MCQsOne fast MCQ pass at ≤ 1 min each, flag the uncertain ones (≈ 15–20 min). Then 2 × ~32 min coding. Then flagged MCQs with whatever is left
4 codingTwo easy ones fast (≤ 15 each) → the two hard ones split the rest. Brute force first
Per-question loop:
  1. Read the constraints and derive the complexity target (A4).
  2. Write 3 edge cases on paper.
  3. Code the clean solution.
  4. Run Code. Add your own custom input (empty/min, duplicates, max-ish).
  5. Submit.
  6. Improve, then re-submit.
Partial credit:
  • If you have no full approach at minute 12–15, ship a correct brute force. It usually passes the small hidden cases.
  • Then optimize, and only re-submit if the new version passes everything the old one did.
Avoiding Python timeouts:
  • Read big input with sys.stdin.readline/sys.stdin.buffer (full-program questions only).
  • Use deque.popleft(), never list.pop(0).
  • Build strings with ''.join, not += in a loop.
  • Use iterative DFS/BFS (or sys.setrecursionlimit, which only partly protects you).
  • heapq and bisect beat re-sorting.
  • Precompute outside loops.
Output exactness:
  • Match the expected format character for character: spacing, rounding (f"{x:.2f}"), trailing newlines.
  • In function-stub questions, the template writes your return value to the output file and print() goes to a separate debug pane (code stubs, custom input). In full-program questions, remove debug prints before you submit.
  • Don't rewrite the template's I/O unless you have to.
MCQs: if the instructions mention negative marking, only answer when you can eliminate at least 2 options.
Integrity:
  • Stay full-screen and don't switch tabs. Both are flagged (test integrity).
  • No AI unless the onboarding explicitly enables HackerRank's built-in assistant. Even then, use it at most for syntax, since you'll defend every line minutes later.
  • Paper scratch work is normal.
Write for the interviewer: small helper functions, clear names, and a one-line comment with the complexity. No code golf.
Stuck or panicking: write down the brute force, its complexity, and the bottleneck. Naming the bottleneck usually points to the data structure you need.

4.4 The 15:28–15:35 switch

  • Submit, then write the paper notes. Don't spend the last 7 minutes squeezing one more test case out of a question.
  • If a question is unfinished, your notes say what the full solution would be. You'll offer it in the interview.

4.5 In the interview: discussing your solutions

Open proactively, after the greeting:
"Quick summary of the test: Q1 I solved fully with X in O(n log n). Q2 passes most cases. The remaining ones time out because I sort the window every day; the fix is a counting array, which gives O(n·200). Q3…"
Owning failures precisely is a strong SDET signal.
Per-question 60-second card: problem in one line → key insight → algorithm → complexity (time/space) → status → what failed and why → how I'd fix it → how I'd test it.
"How would you test this?" (EBIDPP):
  • Equivalence classes (typical inputs per class)
  • Boundaries (empty, 1 element, max n, min/max values, duplicates, already sorted / reverse sorted)
  • Invalid input (types, malformed lines, negatives, unicode/whitespace)
  • Differential testing against a brute-force oracle on random small inputs
  • Property-based (Hypothesis: invariants such as "output is a permutation" or "sum is preserved")
  • Performance at the maximum constraints (timed)
Then: "in CI, as parametrized pytest cases plus one Hypothesis test."
Expect a follow-up change: "inputs now stream", "make it thread-safe", "add unit tests", "the range is now 10⁹". Practice: for each mock problem, write 4 pytest tests in 5 minutes (Sunday rehearsal).
Screen-share hygiene:
  • Share one window. Close everything else.
  • No Ztalk internals on screen.
  • Think aloud while coding, and say what you're testing before you run it.
If you blank: restate the problem, solve a tiny example by hand, name the brute force and its bottleneck. Interviewers grade the process.

02 / COMPARE THE FORECASTS

What might be on the test?

Amp ranks preparation priorities. Claude supplies estimated probabilities. Neither is knowledge of the actual test.

Amp forecast
Ranked question types & evidence · full text

1. PREDICTED TEST

What the evidence supports—and what it does not

  • Official NVIDIA guidance: How We Hire says technical candidates may receive a coding exercise, usually using HackerRank, and that unapproved outside tools such as ChatGPT during interviews result in disqualification. It does not publish this requisition's question count or topics.
  • Weak but relevant historical signal: a QA/SDET intern interview account describes a November 2021 HackerRank round with two coding problems plus OS, computer fundamentals, and reasoning, followed by Teams questions on projects and Python/C++. This is one old, self-reported internship account, not a reliable template for a senior Shanghai AI-agent role. It supports preparing for mixed coding/fundamentals, not memorizing its questions.
  • Strongest role-specific evidence: the supplied JD emphasizes Python, AI-assisted testing, scalable frameworks, regression/flakiness, cloud-native reliability, and bug lifecycle. The recruiter explicitly says the interview will discuss the test solutions and relevant experience. That makes explainable code and rigorous testing reasoning more valuable than studying obscure algorithms.

Working forecast: prepare for two substantial coding tasks, with a possible third shorter task or a fundamentals/MCQ section. Expect easy-to-medium array/string/hash-map work before advanced algorithms. Practical Python may appear inside a normal coding problem rather than as a separate section. Dedicated test-writing, API work, and debugging are plausible, but may instead appear in the video interview. These are preparation priorities, not measured probabilities or knowledge of the actual test.

Rank / likelihood Type and role-specific reasoning Patterns and concrete examples to rehearse
1 — High DSA in Python. NVIDIA's coding format and the JD's framework-building requirements both favor clear implementations, complexity analysis, and edge cases. First: frequency maps/sets: Two Sum, Two Strings, Ransom Note, Sparse Arrays. Next: arrays/indexing: Left Rotation; stack validation: Balanced Brackets; sort-and-scan: Merge Intervals. Then: sliding window: Longest Substring Without Repeating Characters; binary-search boundaries: Binary Search. Backup only: BFS/DFS connected components: Number of Islands.
2 — Medium–high Practical Python/string/data processing. Direct match to test-result aggregation, defect triage, and regression analysis. Could be the theme of a DSA question. Parse JSON lines; count failures by case; deduplicate while preserving order; sort with tie-breakers; group records; handle malformed/missing fields according to a contract. Examples: Merge the Tools!, the local P1 Log Summary exercise, and joining baseline/current evaluation results by case ID. Know dict, set, Counter, defaultdict, deque, sorted(key=...), json.loads, and exception handling.
3 — Medium MCQ/short fundamentals. Supported by the historical SDET account, but uncertain for this senior test. JD explicitly calls for Linux, Python, containers, CI/CD. Python aliasing/mutable defaults, generators, shallow copies, exception flow, average hash lookup versus list scan; process/thread differences and race conditions; shell exit codes/pipes; HTTP methods/statuses; unit/integration/system tests; CI gates; container versus VM; Pod versus Deployment versus Service. Use P4 Fundamentals Recall. Do not spend hours on generic aptitude or hardware trivia.
4 — Medium–low in the online test; high interview relevance Write tests / debug a buggy or flaky scenario. This is central to SDET work, though a timed HackerRank screen may test it indirectly through hidden cases. Equivalence classes, boundary values, empty/duplicate inputs, deterministic fixtures, resource cleanup, global-state leakage, race conditions, timeout versus sleep, and controlled dependencies. Examples: test an evidence-completeness function (P2); fix order-dependent duplicate detection (P3); explain why passing a retry does not establish correctness.
5 — Low–medium online; medium–high interview relevance API/REST testing. Relevant to MCP services and cloud-native reliability, but not confirmed as a separate assessment. Status/schema/semantic assertions; pagination; auth isolation; timeouts; bounded retries/backoff; 429/5xx; idempotency; malformed JSON; partial failure. Use P5 Paged Results API with a stub, not an unreliable public API. Distinguish REST examples from MCP's own protocol contract.
6 — Low SQL. Useful for analyzing test telemetry, but absent from the stated must-haves. Cover basics cheaply rather than displacing Python reps. SELECT, filtering, GROUP BY, HAVING, COUNT(*) versus COUNT(column), LEFT JOIN, NULL, and join fan-out. Examples: Combine Two Tables; Duplicate Emails; per-build failure rate. Window functions only if the basics are already automatic.

Do not prioritize: hard dynamic programming, advanced graph algorithms, CUDA kernels, deep GPU architecture, C++ language revision, or Kubernetes administration. There is no supplied evidence these outrank Python/testing fundamentals for this requisition. If time runs short, drop the backup graph drill and additional SQL—not mock review or the Zeval story.

Claude forecast
Probability model, configurations & evidence · full text

1. Predicted test composition

1.1 What is known (verified on HackerRank's candidate docs, 2026-10-22)

  • Scoring is per test case, with partial credit. Each hidden test case passed earns its own points (Evaluation method, Hidden test cases).
  • Python 3 = 3.14.2, with a 10 s time limit and 512 MB memory. requests, python-dateutil and pyyaml are available. PyPy3 is only 3.6, so avoid it unless pure-loop code times out (Execution environment).
  • Possible question types: Coding, Multiple Choice, Database (SQL), DevOps (Linux VM), Code Review (inline comments on a diff), Subjective, QA projects (Selenium/Cypress/Playwright), and others (Question types).
  • Malpractice includes exiting full-screen, switching tabs, copying code from online sources, and outside help. Plagiarism detection catches renamed or reformatted copies (Test integrity).
  • MCQs may use negative marking. The instructions page will say so (MCQ).
  • Built-in AI Assistant: HackerRank has one, but only the hiring company can enable it. If it's on, the onboarding says so and a panel appears. If there's no panel, it's off (AI Assistant). Plan for no AI.
  • Submission at time-out: after you edit a submitted answer, your last submitted version is what counts unless you re-run and re-submit (Modifying submissions, Time-out evaluation).
  • The editor is Monaco (the VS Code engine). Its IntelliSense autocomplete is part of the platform and is fine to use (Answer coding questions).

1.2 Reasoning

  • The interview discusses your solutions, 0 minutes after the test. So the test is mainly auto-scored coding. MCQs give an interviewer little to discuss. Expect at least 2 coding questions.
  • 95 minutes is consistent with either 3 coding questions of increasing difficulty, or 2 coding questions plus an MCQ/short-answer block.
  • The JD stresses Python/Linux/shell, test automation, flaky/regression analysis and log-heavy cloud systems. So at least one question is likely a "realistic" data-processing task (logs, test results, events with timestamps) rather than pure puzzle DSA.
  • SDET online assessments at large tech companies usually reuse standard library-style DSA (LeetCode Easy–Medium). They sometimes add testing-theory MCQs or a "find the bug / write tests" item.
  • QA web-UI projects (Selenium etc.) are unlikely. The role is AI agents and cloud-native systems, not browser UI.

The likelihoods below are my estimates, not leaked content. Prepare in proportion to them.

1.3 Most likely configurations

Config Estimate Shape
A ~50% 3 coding: Q1 easy–medium practical (parsing/aggregation), Q2 medium DSA, Q3 medium(–hard) DSA or design-a-class
B ~30% 2 medium coding + 10–20 MCQs (Python semantics, testing theory, Linux, CI/containers/K8s)
C ~20% 2 coding + 1 non-standard item: fix-the-bug stub, "write test cases for X" (subjective), Code Review, REST API, or SQL

1.4 Question types ranked by likelihood, with patterns and examples

# Type Likelihood Patterns to own Example problems (links in §2)
1 Algorithmic DSA (Python) ~95% (≥1 Q) Hash-map counting · sliding window / two pointers · sort + greedy · stack / monotonic stack · heap / top-k · BFS / DFS on grid/graph · union-find · binary search (incl. on the answer) · intervals · prefix sums · light DP Count Triplets, Frequency Queries, Fraudulent Activity Notifications, Roads and Libraries, LC 3, 56, 200, 207, 347, 560, 739, 875
2 Python practical / data processing ~70% Parse lines → records (split/regex) · timestamps (datetime, tz offsets, windows) · group-by/aggregate (Counter/defaultdict) · multi-key sort with tie-breaks · exact output formatting · streaming/large input Time Delta, Word Order, Company Logo, Time Conversion, LC 636 Exclusive Time, 937 Reorder Log Files, 811 Subdomain Visits, 1604 Key-Card Alert, 1169 Invalid Transactions; custom T1 flaky detector, T2 log triage
3 Testing-flavored item ~40% Fix a buggy function (mutable defaults, off-by-one, wrong comparator) · enumerate test cases / edge cases for a spec · implement a class to a spec, called by a hidden harness · review a diff · regression bisection HR "Debugging": Default Arguments, Words Score; LC 8 atoi, 65 Valid Number, 468 Validate IP, 165 Compare Versions; LC 146 LRU, 1797 Auth Manager, 981; LC 278 First Bad Version
4 MCQ block ~40% Python gotchas · pytest/fixtures/exit codes · testing theory (BVA, equivalence classes, test pyramid, severity vs priority) · flaky causes · Linux pipelines/signals/permissions · Docker layers · K8s probes / OOMKilled · statistics of non-deterministic tests Appendix B (16 Qs, used in the mock)
5 REST API consumption ~20% Paginated GET (page, total_pages), filter/aggregate, requests or urllib + json, money/strings parsing jsonmock tasks T4-A…D (with answer keys)
6 SQL ~15% JOIN + GROUP BY + HAVING · window functions (ROW_NUMBER/RANK/DENSE_RANK) · self-join · date gaps · median The Report, Top Competitors, SQL Project Planning, LC 176, 185, 180
7 Linux / DevOps VM or bash ~10% grep/awk/sed/sort/uniq/cut pipelines · file ops · processes/ports HR Shell: Cut #1, Sort #5, Uniq #2, Grep-A, Awk-1, Sed #3
8 QA web project (Selenium/Playwright/Cypress) <5% — Skip.

Difficulty to expect: LeetCode Easy–Medium, sometimes a Medium-Hard with a naive solution that earns partial credit. Python TLE traps are common: O(n²) on n = 10⁵, list.pop(0), deep recursion.


03 / THE RESOURCE LIBRARY

Practice, by plan.

Every linked resource from each source, grouped by topic. Only identical URLs within a plan are deduplicated. Links open only when you choose them; the site loads no external assets. ★ and ◆ retain the source’s priority and mock-reservation markers in the full plans.

Amp resources25 unique links
Claude resources278 unique links
1.1 What is known (verified on HackerRank's candidate docs, 2026-10-22) (10)
2.1 Type 1 — Algorithmic DSA (20)
2.1 Type 1 — Algorithmic DSA / Hash-map counting (10)
2.1 Type 1 — Algorithmic DSA / Sliding window / two pointers (8)
2.1 Type 1 — Algorithmic DSA / Sort + greedy (7)
2.1 Type 1 — Algorithmic DSA / Intervals (6)
2.1 Type 1 — Algorithmic DSA / Stack / monotonic stack (8)
2.1 Type 1 — Algorithmic DSA / Heap / top-k / streaming (9)
2.1 Type 1 — Algorithmic DSA / BFS / DFS / grid (8)
2.1 Type 1 — Algorithmic DSA / Components / union-find (6)
2.1 Type 1 — Algorithmic DSA / Topo sort / shortest path (3)
2.1 Type 1 — Algorithmic DSA / Binary search (7)
2.1 Type 1 — Algorithmic DSA / Prefix sum / difference array (2)
2.1 Type 1 — Algorithmic DSA / DP (low priority for this role) (8)
2.2 Type 2 — Python practical / data processing (9)
2.2 Type 2 — Python practical / data processing / Counting + exact output (9)
2.2 Type 2 — Python practical / data processing / Custom sort keys (3)
2.2 Type 2 — Python practical / data processing / Time / timestamps (9)
2.2 Type 2 — Python practical / data processing / Event logs → state (4)
2.2 Type 2 — Python practical / data processing / Regex / validation (15)
2.2 Type 2 — Python practical / data processing / Exceptions / parsing robustness (3)
2.3 Type 3 — Testing-flavored items / Fix-the-bug (stub with defects) (2)
2.3 Type 3 — Testing-flavored items / Enumerate test cases first, then code (1)
2.3 Type 3 — Testing-flavored items / Implement a class to a spec (8)
2.3 Type 3 — Testing-flavored items / Regression bisection (1)
2.3 Type 3 — Testing-flavored items / Write pytest tests (3)
2.5 Type 5 — REST API consumption (7)
2.6 Type 6 — SQL (low priority) (21)
2.7 Type 7 — Linux shell (13)
3.1 Tonight, Thu Oct 22 (30–45 min) (1)
3.2 Day 1 — Fri Oct 23: re-warm the hands, start the bridge (1)
3.3 Day 2 — Sat Oct 24: the mock, then breadth / 08:30–09:00 (1)
3.8 Interview prep: resume deep-dive / ztalk-mcp (stateless, MCP 2026-07-28 spec) (1)
3.10 JD-gap crash-bridge topics (what to learn, and how deep) / G1 (13)
3.10 JD-gap crash-bridge topics (what to learn, and how deep) / G2 (6)
3.10 JD-gap crash-bridge topics (what to learn, and how deep) / G3 (4)
3.10 JD-gap crash-bridge topics (what to learn, and how deep) / G4 (4)
3.10 JD-gap crash-bridge topics (what to learn, and how deep) / G5 (14)
3.10 JD-gap crash-bridge topics (what to learn, and how deep) / G6 (7)
4.1 Setup: dry-run Monday at 14:00, re-check Tuesday at 13:00 (2)
4.3 HackerRank tactics (2)
A2. Python gotchas (planted bugs and MCQ material) (1)
Appendix C — SDET-flavored practice tasks (sample outputs checked against reference solutions) (1)
04 / NOTHING LEFT OUT

The complete source plans.

All original text: setup, rules, exercises, story cards, reference code and answer keys. Expand a chapter to read it. Keep mock questions and answer keys closed until their scheduled time.

Amp · complete originalDownload .md
NVIDIA interview preparation — Yi Gao

NVIDIA interview preparation — Yi Gao

Role: JR2020478, Senior AI Agent Test Developer, SDET, Shanghai.
Candidate: AI Algorithm Engineer, Ztalk, Hangzhou.
Planning date: Thursday evening, October 22, 2026.
All times below: Beijing / Singapore time, UTC+8.

Confirmed Tuesday, October 27 schedule: HackerRank at 14:00–15:35 (95 minutes); Microsoft Teams at 15:35–approximately 16:25, camera on and screen-share ready. There is no scheduled transition buffer. Ask the recruiter before Tuesday how to handle the immediate handoff; unless told otherwise, keep both appointments and do not assume a grace period or shorten the test yourself.

Priority: regain reliable Python problem-solving speed, then translate genuine agent-evaluation experience into testing-engineering language. Do not pretend three days of study equals production Kubernetes ownership or five years of classic QA automation. All coding drills and the mock are without AI, autocomplete assistants, editorials, or outside solution help while the timer runs. Read explanations only during review.

1. PREDICTED TEST

1. PREDICTED TEST

What the evidence supports—and what it does not

  • Official NVIDIA guidance: How We Hire says technical candidates may receive a coding exercise, usually using HackerRank, and that unapproved outside tools such as ChatGPT during interviews result in disqualification. It does not publish this requisition's question count or topics.
  • Weak but relevant historical signal: a QA/SDET intern interview account describes a November 2021 HackerRank round with two coding problems plus OS, computer fundamentals, and reasoning, followed by Teams questions on projects and Python/C++. This is one old, self-reported internship account, not a reliable template for a senior Shanghai AI-agent role. It supports preparing for mixed coding/fundamentals, not memorizing its questions.
  • Strongest role-specific evidence: the supplied JD emphasizes Python, AI-assisted testing, scalable frameworks, regression/flakiness, cloud-native reliability, and bug lifecycle. The recruiter explicitly says the interview will discuss the test solutions and relevant experience. That makes explainable code and rigorous testing reasoning more valuable than studying obscure algorithms.

Working forecast: prepare for two substantial coding tasks, with a possible third shorter task or a fundamentals/MCQ section. Expect easy-to-medium array/string/hash-map work before advanced algorithms. Practical Python may appear inside a normal coding problem rather than as a separate section. Dedicated test-writing, API work, and debugging are plausible, but may instead appear in the video interview. These are preparation priorities, not measured probabilities or knowledge of the actual test.

Rank / likelihood Type and role-specific reasoning Patterns and concrete examples to rehearse
1 — High DSA in Python. NVIDIA's coding format and the JD's framework-building requirements both favor clear implementations, complexity analysis, and edge cases. First: frequency maps/sets: Two Sum, Two Strings, Ransom Note, Sparse Arrays. Next: arrays/indexing: Left Rotation; stack validation: Balanced Brackets; sort-and-scan: Merge Intervals. Then: sliding window: Longest Substring Without Repeating Characters; binary-search boundaries: Binary Search. Backup only: BFS/DFS connected components: Number of Islands.
2 — Medium–high Practical Python/string/data processing. Direct match to test-result aggregation, defect triage, and regression analysis. Could be the theme of a DSA question. Parse JSON lines; count failures by case; deduplicate while preserving order; sort with tie-breakers; group records; handle malformed/missing fields according to a contract. Examples: Merge the Tools!, the local P1 Log Summary exercise, and joining baseline/current evaluation results by case ID. Know dict, set, Counter, defaultdict, deque, sorted(key=...), json.loads, and exception handling.
3 — Medium MCQ/short fundamentals. Supported by the historical SDET account, but uncertain for this senior test. JD explicitly calls for Linux, Python, containers, CI/CD. Python aliasing/mutable defaults, generators, shallow copies, exception flow, average hash lookup versus list scan; process/thread differences and race conditions; shell exit codes/pipes; HTTP methods/statuses; unit/integration/system tests; CI gates; container versus VM; Pod versus Deployment versus Service. Use P4 Fundamentals Recall. Do not spend hours on generic aptitude or hardware trivia.
4 — Medium–low in the online test; high interview relevance Write tests / debug a buggy or flaky scenario. This is central to SDET work, though a timed HackerRank screen may test it indirectly through hidden cases. Equivalence classes, boundary values, empty/duplicate inputs, deterministic fixtures, resource cleanup, global-state leakage, race conditions, timeout versus sleep, and controlled dependencies. Examples: test an evidence-completeness function (P2); fix order-dependent duplicate detection (P3); explain why passing a retry does not establish correctness.
5 — Low–medium online; medium–high interview relevance API/REST testing. Relevant to MCP services and cloud-native reliability, but not confirmed as a separate assessment. Status/schema/semantic assertions; pagination; auth isolation; timeouts; bounded retries/backoff; 429/5xx; idempotency; malformed JSON; partial failure. Use P5 Paged Results API with a stub, not an unreliable public API. Distinguish REST examples from MCP's own protocol contract.
6 — Low SQL. Useful for analyzing test telemetry, but absent from the stated must-haves. Cover basics cheaply rather than displacing Python reps. SELECT, filtering, GROUP BY, HAVING, COUNT(*) versus COUNT(column), LEFT JOIN, NULL, and join fan-out. Examples: Combine Two Tables; Duplicate Emails; per-build failure rate. Window functions only if the basics are already automatic.

Do not prioritize: hard dynamic programming, advanced graph algorithms, CUDA kernels, deep GPU architecture, C++ language revision, or Kubernetes administration. There is no supplied evidence these outrank Python/testing fundamentals for this requisition. If time runs short, drop the backup graph drill and additional SQL—not mock review or the Zeval story.

2. PRACTICE MAP

2. PRACTICE MAP

Verified resource directory

Every external link in this document was checked live on October 22, 2026 with curl -L and returned HTTP 200, including after redirects where applicable. Returned page titles/content were checked to distinguish real pages from error/challenge pages. This verifies reachability from the preparation machine at that time, not login, submission functionality, or availability from the test network. Confirm access again Monday with VPN off.

Cost/access: the selected HackerRank and LeetCode problems are free practice targets; plan on a free account to submit and retain progress. LeetCode China may require its own regional login. Documentation and the two evidence articles require no account to read. Some platform editorials or other content may be paid; none is required here. A GitHub account is needed only to actually run GitHub Actions, which this plan does not require.

ID Verified resource / exact destination What to use; effort cap
H0 HackerRank Interview Preparation Kit Use Arrays, Dictionaries and Hashmaps, Sorting, and Stacks and Queues as a topic index. Do not complete the entire kit.
H1 HackerRank 1 Week Preparation Kit Redirects to Day 1. Optional Plus Minus and Mini-Max Sum for Monday warm-up; 10 minutes each. Do not consume its own mock tests in addition to the planned mock.
H2 HackerRank Python track Strings, Collections, and Errors and Exceptions. Rehearse collections.Counter(), DefaultDict Tutorial, Exceptions, and Merge the Tools!; choose gaps, not the full track.
H3 HackerRank Algorithms / problem-solving track Implementation, Strings, Sorting, Search. Backup exercise selection only; the specific problems below take priority.
H4 HackerRank SQL track Basic Select, Aggregation, Basic Join. Revising the Select Query I is an optional 10-minute syntax warm-up.
H5 Two Strings Set intersection; 15 minutes plus 5 minutes of edge cases. The question is about any shared substring, not finding the longest one.
H6 Arrays: Left Rotation Indexing/modulo or slicing; 20 minutes. Explain allocation costs and what the stated input constraints permit.
H7 Balanced Brackets Stack and prefix invariant. Reserve unseen for Sunday's mock.
H8 Sparse Arrays Frequency map with repeated queries. Reserve unseen for Sunday's mock.
H9 Hash Tables: Ransom Note Counts rather than membership; repeated words matter. 20 minutes plus 5 minutes review.
H10 Merge the Tools! Fixed-size chunks and stable deduplication; 25 minutes. A set alone loses required order.
L1 LeetCode 1 — Two Sum One-pass map, distinct indices, duplicate values; 20 minutes.
L2 LeetCode 3 — Longest Substring Without Repeating Characters Sliding window; 30 minutes. Check abba, dvdf, and all-identical characters.
L3 LeetCode 56 — Merge Intervals Sort then merge overlapping/touching closed intervals. Reserve unseen for Sunday's mock.
L4 LeetCode 704 — Binary Search Maintain a clear inclusive or half-open interval invariant; 20 minutes. Test singleton, absent target, first/last element.
L5 LeetCode 200 — Number of Islands Optional 20-minute BFS/DFS outline after core work; connected components, visited marking, recursion-depth risk. Not required for readiness.
L6 LeetCode 175 — Combine Two Tables LEFT JOIN, including a person with no address; 15 minutes.
L7 LeetCode 182 — Duplicate Emails GROUP BY ... HAVING COUNT(*) > 1; 15 minutes.
D1 pytest parametrization Read the first function-parametrization example, then build P2. Learn fixture isolation/teardown with the local instructions below; no full framework course.
D2 pytest: flaky tests Causes, uncontrolled state, overly strict assertions, parallelism; then reproduce P3.
D3 GitHub Actions: building and testing Python Understand checkout, Python setup, dependencies, test command, artifacts, and job status. Draft only; no remote publication required.
D4 Docker: what is a container? Image versus running container, isolation, ports, volumes, reproducibility. Build/run one local test image if Docker is available.
D5 Kubernetes Basics Read the deploy, expose, scale, and update summaries. Learn the object model and failure signals; do not complete a cluster-administration course.

Coverage map: DSA → H0/H3/H5–H9/L1–L5; practical Python → H2/H10/P1; test design/debugging → D1/D2/P2/P3; API testing → P5; MCQ/fundamentals → P4/D3–D5/H2; SQL → H4/L6/L7. The local exercises below are deliberately self-contained; they need no external service or URL.

Links rejected: the global LeetCode problem pages for Two Sum, Longest Substring Without Repeating Characters, Merge Intervals, Binary Search, Number of Islands, Combine Two Tables, and Duplicate Emails returned HTTP 403 bot challenges, including their /description/ variants. Their verified China pages above replace them. An initially attempted generic GeeksforGeeks NVIDIA SDET interview article returned 404; the specific historical QA/SDET intern article in Section 1 replaces it. Failed URLs are intentionally not reproduced.

Local exercises: precise contracts, not vague study topics

Use a disposable local prep-lab directory, synthetic data, and no employer code, credentials, merchant conversations, or customer identifiers. These are practice artifacts to create during preparation, not additional deliverables accompanying this plan.

P1 — Log Summary: practical Python (30 minutes). Implement summarize(lines) -> (failure_counts, skipped_count). Each line must decode to a JSON object containing a nonempty string case_id and status equal to pass or fail; ignore extra fields. Skip and count malformed JSON, non-object JSON, missing fields, or invalid field values. Each valid fail record counts once, including repeated case IDs. Return (case_id, count) pairs ordered by descending count, then ascending case ID. Do not deduplicate attempts silently.

Use these input lines:

{"case_id":"B","status":"fail"}
{"case_id":"A","status":"pass"}
{"case_id":"B","status":"fail"}
{"case_id":"A","status":"fail"}
{"case_id":"C","status":"fail"}
not-json
{"case_id":"D"}
[]

Expected result: ([("B", 2), ("A", 1), ("C", 1)], 3). Also check empty input and all-pass input. Spend 5 minutes stating the contract, 18 implementing, 7 testing/explaining. Explain linear parsing/counting plus sorting distinct failed case IDs. Follow-up verbally: when comparing baseline/current runs, distinguish added/removed cases from regressions and join by stable identity, not list position.

P2 — pytest/framework bridge (75 minutes). Implement evidence_complete(required, consulted) using lists of evidence IDs. Contract: true iff every distinct required ID was consulted; order and duplicates do not matter; no requirements means true. These are contract tests for a synthetic metric, not a claim about Zeval's implementation.

  • First 15 minutes: D1; understand test discovery (test_*.py), ordinary assert, parametrization, fixtures, setup/teardown, and test independence.
  • Next 35 minutes: create metrics.py and tests/test_metrics.py; use @pytest.mark.parametrize for empty requirements, exact match, missing evidence, extra evidence, reordered IDs, and duplicates. In particular, required ["a", "b"], consulted ["a", "a"] must be false—a count-only implementation is wrong. Required ["a", "a"], consulted ["a"] must be true. Use tmp_path in one snapshot round-trip test with Python's json module. If a dependency needs replacement, understand monkeypatch; do not mock the metric under test.
  • Next 10 minutes: run python -m pytest -q; deliberately substitute the wrong count-only rule, observe a failing test, restore the correct rule, rerun. If pytest is unavailable, create a virtual environment and install it during preparation, not on test day.
  • Final 15 minutes: sketch the framework: versioned case loader → system adapter → deterministic assertions / separately calibrated judge → per-case result → aggregate report and failure artifacts. Put fixture sharing in conftest.py only when needed. Separate unit tests (no network), integration/contract tests (controlled dependencies), and nightly/live evals (slower, less deterministic). Explain JUnit XML, marks, configurable timeouts, cleanup, and why scoring failures must not be swallowed.

P3 — A real order-dependent failure (75 minutes). Start with this intentionally defective helper:

def first_seen(case_id, seen=set()):
    fresh = case_id not in seen
    seen.add(case_id)
    return fresh

Intended contract: callers may pass a set to share a collection within one run; calls without a set must not share state. Two independently collected tests each asserting first_seen("same-case") is True pass alone but fail when run together. Two calls with the same explicitly supplied set should return true then false.

  • 15 minutes: D2 and the distinction between a reproducible bug, order-dependent flake, environmental failure, and legitimate stochastic variation.
  • 25 minutes: reproduce each test alone and together with pytest; reverse their order; fix the default to None with a fresh set inside the function. Check the explicitly shared-set behavior remains correct. Do not “fix” it by clearing state in the tests or accepting retries.
  • 15 minutes: repeat the suite 20 times in fresh processes; explain why this alone would not expose state leakage between individual isolated runs. The together-in-one-process test is the discriminator.
  • 20 minutes: map other causes to mitigations: fixed sleeps → deadline-bounded polling of observable state; wall clock → injected clock; external network → stub plus separate integration suite; random data → logged seed; parallel shared files → unique temporary directories; judge/model changes → pinned versions and controlled repeated measurements. Quarantine needs an owner, ticket, expiry, and visibility; retries are diagnostic or explicitly part of a product contract, not a greenwashing mechanism.

P4 — Fundamentals Recall: 12 prompts (20 minutes, answer aloud before reading the key).

  1. Why does appending to one of two aliased lists affect both?
  2. Why is a mutable function default dangerous? What differs from an explicit shared set?
  3. When does a generator help, and what changes on a second iteration?
  4. Why can a set solve Two Strings but not Ransom Note?
  5. What is the difference between a process and a thread? Does Python's GIL prevent application-level races?
  6. What do a nonzero shell exit status, a pipeline, and pipefail imply for CI?
  7. Which layer should test a pure scorer versus a real model endpoint?
  8. What do HTTP 401, 403, 429, and 503 mean? Should every failure be retried?
  9. What is an idempotent operation? Why can blind retries of POST create duplicates?
  10. How are an image, container, Pod, Deployment, and Service different?
  11. Why does a readiness failure differ from a liveness failure?
  12. Why can COUNT(column) differ from COUNT(*), and how can a join inflate counts?

Short answer key: same object reference; defaults evaluated once versus caller-owned sharing; lazy one-pass consumption; membership versus multiplicity; address-space sharing and synchronization still matter; nonzero indicates failure and an earlier failed pipeline command can otherwise be hidden; unit versus integration; unauthenticated/forbidden/rate-limited/unavailable with bounded contract-aware retry; repeating has the same intended effect, non-idempotent writes need deduplication/idempotency support; image template/container process/Pod scheduling unit/Deployment replica controller/Service stable network access; readiness controls serving eligibility, liveness can restart a container; NULL values are omitted by COUNT(column) and one-to-many joins multiply rows. These are preparation prompts, not claimed NVIDIA questions.

P5 — Paged Results API (30 minutes). Implement collect_failures(fetch_page). Inject a stub callable accepting cursor, initially None, and returning (http_status, body). A successful body has items (objects with case_id and status) and next_cursor (string or None). Collect distinct failing IDs in sorted order. Follow cursors until None. On 503, retry the same cursor once; a second 503 or any other non-200 raises an exception. A repeated non-null next cursor is an error rather than an infinite loop. Invalid body shape/status values also raise rather than silently reporting success. Production backoff is discussed, not slept through in this lab.

Stub scenario: first page contains B/fail, A/pass, next cursor p2; page p2 first returns 503, then A/fail, B/fail, next cursor None. Expected output: ["A", "B"]. Test empty results, persistent 503, 401, a cursor loop, and malformed body. Use 5 minutes for the contract, 15 for implementation, 10 for tests. In an interview, extend the test matrix to missing/expired auth, tenant isolation, pagination duplication, schema compatibility, timeout, rate limit, and cleanup. Do not point this exercise at production or an external API.

3. THE 3-DAY PLAN

3. THE 3-DAY PLAN

Budget: Friday 6 focused hours; Saturday 6; Sunday 6 hours 40 minutes; Monday 2 hours. Gaps in the tables are meals/breaks, not hidden study time. Stop at the block boundary. Carry at most two unresolved errors forward; do not let one problem consume the day. Every timed attempt ends with a brief correctness invariant, complexity statement, and at least three edge cases. On non-mock drills, spend the last 5–10 minutes reviewing rather than looking up a solution mid-attempt.

Friday, October 23 — reliable Python + translate Zeval into testing engineering

Time / duration Focus Exact work and completion target
09:00–10:30 / 90 min Coding: maps, counts, arrays H5 Two Strings 20 min; L1 Two Sum 25 min; H9 Ransom Note 25 min; H6 Left Rotation 20 min. Use platform stubs, not a preferred local template. Check duplicate counts, repeated values, and rotation boundaries. Capture only mistakes in a short error log.
10:45–12:00 / 75 min Coding: Python fluency H2: Counter/DefaultDict/Exceptions, 30 min total; H10 Merge the Tools!, 25 min; 20 min writing tiny input/output functions from memory (split, map, enumerate, dictionary updates, sorted tie-breaks, JSON exceptions). Contrast a HackerRank stdin driver with a supplied function stub. No new algorithm topics.
13:00–14:15 / 75 min Interview/QA bridge: pytest Complete P2 using D1. Produce a passing suite and one observed failure from the deliberate wrong implementation. Explain fixture isolation, parametrization, runner versus scorer, and test levels in terms of Zeval.
14:30–15:30 / 60 min Coding: practical automation P1 Log Summary 30 min; P5 Paged Results API 30 min. Use local synthetic data and a stub only. If unfinished, preserve a correct smaller implementation and name the missing contract; do not pretend it is complete.
15:45–16:45 / 60 min Interview: resume deep-dive Use the story guide below: 10 min opening pitch; 25 min Zeval architecture and one real case; 15 min meta-judge calibration and limitations; 10 min record/replay an answer to “Why SDET rather than an algorithm role?” Say what was implemented, what is proposed, and what evidence exists.

Friday output: Python error log; small pytest/API lab; a truthful 90-second opening; one 5-minute Zeval walkthrough. No need to polish slides or build a new product.

Saturday, October 24 — algorithm coverage + reliability/cloud vocabulary

Time / duration Focus Exact work and completion target
09:00–10:30 / 90 min Coding: window/search/SQL L2 Longest Substring 35 min; L4 Binary Search 25 min; L6 Combine Two Tables 15 min; L7 Duplicate Emails 15 min. Explain the abba window trap, search interval invariant, and unmatched join rows. Do not open H7/H8/L3.
10:45–12:00 / 75 min Interview/QA bridge: flaky tests Complete P3 using D2. Distinguish order dependence from model nondeterminism. Produce one bug report: title, environment/version, minimal reproduction, expected/actual result, evidence, severity versus priority, suspected cause, fix, verification, regression coverage.
13:00–14:00 / 60 min Interview/QA bridge: CI + containers D3 15 min; D4 10 min; 35 min mini-exercise below. Explain what would block a pull request, what runs nightly, and what artifacts make a failure actionable. This is a new lab, not historical Ztalk CI experience.
14:15–15:30 / 75 min Interview/QA bridge: Kubernetes + faults D5 and vocabulary 20 min; local manifest exercise 25 min; fault-injection test matrix 30 min. Learn to describe a deployment and diagnose symptoms—not administer a cluster. Use the concrete instructions below.
15:45–16:45 / 60 min Interview: services, performance, failure analysis ztalk-mcp 20 min; Azure voice harness 15 min; Axera/Bosch 15 min; gap answers and two interviewer questions 10 min. Select real episodes and verify which outcomes/metrics you can honestly defend.

CI/container mini-exercise (35 minutes, inside the 13:00 block). Draft a workflow with a pull-request trigger and a job containing checkout → setup Python → install test dependencies → python -m pytest -q --junitxml=results.xml → upload the report even on failure. The pytest failure must keep the job red; do not add continue-on-error. Separate a fast deterministic merge gate from slower live-model/nightly evaluations. Record commit, case-data version, configuration/model version, logs, and per-case results for reproducibility. Never commit secrets; distinguish cache from diagnostic artifacts.

Then create a minimal Dockerfile for the synthetic lab: Python base image, work directory, copy test dependencies, install them, copy lab files, and default command python -m pytest -q. Build and run it locally if Docker is already installed; confirm its exit status reflects test success/failure. For reproducibility, understand pinned dependencies and immutable image digests rather than assuming a moving tag is fixed. No registry push or deployment is needed. Cap Docker setup troubleshooting at 10 minutes: if unavailable, run the exact test command in a clean virtual environment and explain the Dockerfile line by line. Report this honestly as a container design walkthrough, not a successful container run. Know that containers share the host kernel (Docker Desktop on macOS supplies a Linux VM), published ports differ from exposed metadata, and persistent data needs explicit storage.

Kubernetes mini-exercise (25 minutes, inside the 14:15 block). Write a local YAML manifest containing a Deployment for a hypothetical eval-api image with two replicas, matching selector/Pod labels, an HTTP readiness probe on /ready, and CPU/memory requests and limits; add a Service whose selector matches those Pods. Use an installed YAML parser to load the document and assert the selectors match and replicas equals two; this is structural validation only, not Kubernetes schema validation or a live deployment. If no parser is available, use a small JSON manifest (valid Kubernetes input) and Python's json module for the same checks. Do not spend the afternoon installing a cluster. If kubectl and a local disposable cluster already exist, inspect a harmless local example; never target a shared cluster.

Learn exactly these terms: Pod; Deployment/ReplicaSet; Service; namespace; ConfigMap versus Secret (base64 is not encryption); Job for batch eval runs; requests versus limits; readiness versus liveness versus startup probes; rolling update/rollback; Pending, CrashLoopBackOff, and OOMKilled. Be able to say what kubectl get pods, describe pod, logs, and rollout status would help inspect. Readiness failure removes traffic eligibility; liveness is not a substitute for dependency health and can cause restart storms. Admission policies, operators, Helm, cluster networking internals, and production operations are out of scope.

Fault-injection mini-exercise (30 minutes, same block). Extend the P5 stub for a bounded timeout and intermittent 503. Write a five-row matrix: tool timeout; 429/rate limit; malformed payload; one replica restart; memory pressure. For each, state fault injection method (stub or hypothetical local container action), expected bounded degradation, observed signal (latency/error/retry count), and recovery criterion. Execute the two stub cases; treat replica restart and memory pressure as proposed tests unless actually exercised locally. Explain no duplicate side effects, bounded queues/retries, and how readiness affects routing. Distinguish functional correctness, load capacity, stress limits, soak stability, and recovery testing.

Sunday, October 25 — dress rehearsal, immediate debrief, targeted repair

Time / duration Focus Exact work and completion target
09:00–10:00 / 60 min Coding: repair, not expansion Re-solve Friday/Saturday's two weakest already attempted problems, 25 min each; 10 min compare error patterns. If none remain, re-solve L2 and P1 from blank. L5 may replace the last 20 min only if the core patterns are secure. Keep H7/H8/L3 unseen.
10:15–11:15 / 60 min Interview: full story coverage Zeval/meta-judge 20 min; MCP reliability 15 min; Axera/Azure 15 min; honest Kubernetes/QA gap answers 10 min. Use the question bank below. Practice follow-up questions, not memorized speeches.
11:30–12:15 / 45 min Fundamentals + setup P4 closed-book recall 20 min; 10 min review misses using D3–D5/H2; 15 min confirm logins, Python selection, Chrome/VPN-off access, and Teams microphone/camera/screen share. Load only the mock problem statements at 14:00. Lunch and rest until then.
14:00–15:35 / 95 min The one full timed coding mock Exact set: H8 Sparse Arrays + H7 Balanced Brackets + L3 Merge Intervals, in that order. Follow the minute-by-minute rules below.
15:35–16:25 / 50 min Interview rehearsal with no transition gap 5 min introduction; 20 min explain mock solutions; 15 min Zeval/meta-judge/MCP questions; 5 min gaps; 5 min questions for interviewer. Speak aloud to a person or record yourself. Do not inspect editorials first.
16:40–18:10 / 90 min Same-day mock review 10 min classify failures; up to 50 min re-solve failed/weak questions without a per-question timer; 20 min test counterexamples and explain corrected invariants; 10 min produce Monday's repair list. If all passed, repair the weakest explanation and test adversarial inputs instead of adding a second mock.

Exact 95-minute mock protocol

This is a three-task preparation stress test, not a prediction of the actual question count. Use HackerRank for H8/H7 and LeetCode China for L3, with one uninterrupted external timer. This is a deliberate cross-platform approximation, not an official NVIDIA/HackerRank test. Use the published function signatures and constraints. Do not read solutions, discussions, tags, or hints beforehand. If you already know a solution, still implement from blank and label the resulting score as familiarity-assisted rather than claiming a blind baseline.

Elapsed time Action
0–5 min Read all three statements and constraints; note return formats and rough approaches.
5–25 min H8 Sparse Arrays: implement, run samples/custom cases, submit.
25–50 min H7 Balanced Brackets: implement, test prefixes/mismatches, submit.
50–85 min L3 Merge Intervals: implement, test nested/touching/disjoint intervals, submit.
85–95 min Revisit highest-value failure; check signatures/output; submit current best versions. Hard stop at 95.

During the debrief, explain intended complexity: Sparse Arrays linear counting plus query lookups (with string hashing costs acknowledged); Balanced Brackets linear time and up to linear stack space; Merge Intervals sorting-dominated time and result/storage costs. Do not claim constant memory for a Python solution that creates slices, a sorted copy, or an output list.

Review method: save each failure as symptom → smallest counterexample → wrong assumption → correct invariant → regression case. Classify reading/contract, algorithm, Python API, boundary, complexity, or time-management errors. Try the untimed re-solve first. If still blocked after a genuine attempt, read a minimal explanation, close it, then rebuild from blank; mark that attempt as assisted. For every corrected solution, run an input that would reject the original wrong approach—not merely another sample. Record actual minutes and accepted/failed submissions; do not infer a company pass threshold from this mock.

Monday, October 26 — light taper, 2 hours only

Time / duration Focus Exact work and completion target
09:30–10:00 / 30 min Coding confidence Re-solve one Sunday repair item from blank, 20 min; verbally explain its invariant and edge cases, 10 min. If no repair item exists, use H1 Plus Minus and Mini-Max Sum, 10 min each, then 10 min review. No new hard problem.
10:15–10:45 / 30 min Interview confidence Opening pitch 5 min; Zeval/meta-judge 10 min; one MCP/Axera story 10 min; honest gap statement 5 min. Use the final resume as the source of truth.
14:00–14:30 / 30 min Environment / schedule Chrome and platform access with VPN off; Teams camera/microphone/speaker check; rehearse share/unshare of one harmless window; check power/network and invitation timezone. Resolve the 15:35 handoff with recruiter if not yet clarified. Do not start the real assessment or consume its attempt.
16:00–16:30 / 30 min Final recall / pack Review error log and P4 for 15 min; review test-day checklist and prepare a clear desk for 15 min. Stop preparation afterward; normal dinner and a full night's sleep.

Interview story guide: real experience, testing vocabulary

90-second positioning: “I am an AI algorithm engineer who has moved toward evaluating and improving the reliability of agent systems. At Ztalk I created Zeval around curated case snapshots, explicit deterministic metrics, and a calibrated analysis meta-agent. That work exposed the need for repeatable evidence access, which led to a shared stateless MCP service. Earlier computer-vision work at Axera and Bosch trained me to investigate failure modes and dataset coverage. My strongest fit is AI-agent evaluation, failure analysis, and test tooling; I am building the conventional pytest/CI/container vocabulary around that experience, and I would not claim production Kubernetes ownership.” Adapt wording to your own voice.

Zeval in SDET terms: curated case snapshots → regression fixtures; explicit verdict/evidence/remediation metrics → test oracles; judge calibration → oracle validation; case-level analysis → defect triage; versioned artifacts and reproducible execution → framework design. These are mappings, not proof that Zeval already has every classic QA feature. Explain which are implemented, which have analogues, and which are improvements you would make.

Preserve the exact calibration story: the collecting Codex agent helped curate the dataset and supplied per-case judgments. The Evaluator Analysis Meta-Agent was calibrated against those judgments so evaluation could continue after that collecting agent's session ended. Do not call those judgments independent human ground truth, claim formal inter-rater reliability measurements you did not run, or imply calibration makes the judge infallible. Explain the risk of shared blind spots, rubric overfitting, leakage, and model drift. Propose human adjudication and a held-out case set as improvements if they are not already implemented.

ztalk-mcp in SDET terms: a reusable evidence/tool interface can enable contract testing, isolated clients, repeatable fixtures, and centralized observability. Be ready to distinguish stateless protocol handling from persistence in databases, registries, or downstream services. Your resume states MCP 2026-07-28 stateless specification plus a Git-based agent-plugin registry; describe the design you actually built rather than inventing specification details. Explain tool schemas, request context/auth boundaries, version compatibility, timeouts, errors, and registry revision pinning where those really exist. If a mechanism is missing, say how you would test/add it.

For each story, prepare context → failure/risk → your decision and implementation → observed result → limitation/next test. Use real numbers only if you can explain their source, denominator, baseline, and measurement window. A qualitative result is better than a fabricated percentage.

Likely interview question Background story to trigger; what a strong answer must contain
“Design a test framework for an AI agent.” Zeval. Case snapshots, adapters, deterministic assertions, semantic judge, result schema, artifacts, test levels, versioning, and separation of test-data failures from agent failures. Sketch a representative case flowing through the system.
“How did you validate your evaluator?” Meta-judge calibration. Collecting agent's per-case judgments, rubric, mismatch analysis, persistence beyond the session, and limitations. Propose held-out/human review if not done. Agreement with another agent is not the same as correctness.
“What do the three metrics actually measure?” Zeval metrics. Verdict correctness, evidence-consultation completeness, remediation-route agreement. Give one concrete, anonymized example of each, its expected reference, denominator, and a case where the metrics disagree. Do not silently substitute a single overall accuracy score.
“A nightly eval drops by 8 points. Is it a regression?” MyQA/Zeval. First verify comparable cases/configurations/model/tool/data versions; pair results by case; inspect subgroup deltas, repeat controlled runs, separate harness/infrastructure issues from product behavior. The 8 points are hypothetical, not a claimed project event.
“How do you handle flaky LLM tests?” Eval/regression thinking plus P3. Identify source of variation, control fixtures/configuration, retain raw traces, repeated measurement where justified, stable deterministic gates plus separate semantic monitoring. Temperature zero alone does not guarantee reproducibility.
“How would you use AI to generate tests or optimize coverage?” Collecting agent / AutoResearch loops. Generate candidates from uncovered behaviors and historical failures, validate expected results, deduplicate, preserve a fixed holdout, and measure useful defect discovery versus review cost. Do not let the generator become its own unchecked oracle.
“Why make MCP stateless? What can still leak?” ztalk-mcp. Actual request context, isolation, multiple clients, external state, schema errors, auth, retries, timeouts, and registry compatibility. A proposed cross-client isolation test is more persuasive than “stateless means no bugs.”
“A tool call times out after causing a side effect. Retry?” ztalk-mcp / P5. Unknown outcome, idempotency/deduplication or outcome lookup, bounded retries, deadline propagation, auditability. Do not assume every tool is a read or safe to repeat.
“Design a performance and reliability test.” Azure voice-agent harness. Actual workload, concurrency, warm-up, latency distribution/tail, time to first useful response where relevant, throughput, errors, instrumentation, and bottleneck isolation. Distinguish measured facts from a proposed load/soak/fault plan.
“Tell me about a difficult defect and its lifecycle.” Axera failure analysis. A real detection/annotation/ISP failure, minimal reproducible evidence, stratification by conditions, root-cause investigation, fix owner, verification, and regression cases. Explain severity versus scheduling priority.
“How would you improve test-data coverage?” Axera plus Bosch. Failure taxonomy, rare conditions, representative slices, annotation quality, Blender/CAD synthetic data, and domain-gap checks against real samples. Coverage is not just more cases or higher line coverage.
“How would you put this into CI and Kubernetes?” Zeval plus Saturday lab. Fast deterministic PR gate, heavier integration/nightly runs, artifacts and failure status, containerized runner, Job versus service Deployment, probes/resources. Explicitly separate proposed architecture from hands-on production experience.
“You are an algorithm engineer; where is your QA experience?” Whole resume. Evaluation oracles, regression cases, failure analysis, automation, and performance harnesses are genuine. Acknowledge the classic-framework/operations gap directly; explain the concrete bridge without claiming the JD's five years of conventional QA ownership.
“Explain your research or a technical trade-off deeply.” TU Berlin / ICARM or Bosch. Choose one method you can derive and one limitation you observed. Keep this a backup story; do not displace the role's evaluation/tooling focus with an unrelated model lecture.

Questions to ask NVIDIA (choose two): “What agent failures are most costly today, and how are ground truth and release gates defined?” “How much of this role is framework development versus live-system reliability testing?” “What test infrastructure exists already, and what would success in the first 90 days look like?”

4. TEST-DAY CHECKLIST — TUESDAY, OCTOBER 27

4. TEST-DAY CHECKLIST — TUESDAY, OCTOBER 27

Before the test

Time / duration What to do / where
09:30–09:50 / 20 min Review the existing Python error log and explain one solved function aloud. No new problems or full mock.
12:00–12:30 / 30 min Familiar light lunch and water; avoid experimenting with caffeine or food. Rest afterward.
13:00–13:20 / 20 min At the test machine: power connected; stable internet; Chrome ready; VPN off; close AI chats, coding agents, assistant extensions, editor copilots, unrelated tabs, notifications, and background jobs that may interrupt. Do not change managed software or disable security protections.
13:20–13:35 / 15 min Using the invitations, check assessment access, account identity, permitted Python version, camera/permissions if requested, and instructions. Prepare Teams signed in with the correct meeting ready, but do not join prematurely if that conflicts with assessment rules. Keep the recruiter's approved contact channel available for genuine technical trouble.
13:35–13:50 / 15 min Read allowed-resources/proctoring rules without starting the timed attempt early. Use only explicitly permitted materials/tools; assume no AI or outside assistance. Check that a notebook, second display, external editor, or documentation is allowed before using it. Clear the desk accordingly.
13:50–14:00 / 10 min Bathroom/water, sit down, breathe. Do not open practice problems. Start at the instructed time.

HackerRank tactics: 14:00–15:35

  • Minutes 0–5: scan every question, points, section locks, constraints, and submission rules. Choose Python. Identify supplied function signatures versus stdin/stdout tasks. Estimate the easiest points first; do not assume you can return to a locked section.
  • If three coding tasks: use the mock's 5-minute scan + 20/25/35-minute task budgets + 10-minute final pass. Reorder by actual difficulty/value, not screen position.
  • If two coding tasks: 5-minute scan + 35 minutes each + 20 minutes testing/repair. If a short MCQ section is present, allocate 10 of those final 20 minutes to it, unless section locks require an earlier order. Rebudget from actual point weights; no fixed plan overrides the interface.
  • For each problem: restate the contract, give yourself one simple example and one hostile edge case, select the simplest algorithm meeting constraints, then code. Check empty/minimum input when allowed, duplicates, boundary indices, large inputs, and required ordering. Debug output must not pollute stdout.
  • When stuck: after 7–10 minutes without a concrete new step, write a simpler correct approach or move on. If a brute-force solution is all you can finish, submit it only knowing which constraints it violates; it may earn subset credit if the scoring supports that. Do not hard-code examples or assume partial credit exists.
  • Submit incremental working versions if the platform permits; check what counts as the final saved/submitted answer. Passing samples does not establish hidden-test correctness. Investigate an off-by-one or multiplicity bug before replacing a mostly correct algorithm.
  • Use Python intentionally: avoid list.pop(0) for queues, quadratic concatenation, deep recursive DFS on large inputs, accidental shared state, and sorting away required input order. Prefer standard-library tools you understand; do not rely on unapproved packages.
  • Last 10 minutes: no risky rewrite. Check return types, output formatting, function names, edge cases, and that your best version is actually submitted. Keep a mental one-sentence explanation of each approach for Teams; do not export, screenshot, or copy assessment material unless expressly permitted.
  • Technical trouble: use the assessment's official support or recruiter channel as allowed; describe the symptom and time. Do not use AI to diagnose the assessment or bypass proctoring/network restrictions. Do not assume a restart or extension is authorized.

Immediate Teams handoff: 15:35

  • Use the recruiter-agreed transition arrangement. Without a changed schedule, finish/confirm submission at 15:35 and join immediately; there is no planned post-test recovery window. If a platform issue causes delay, notify the recruiter through the agreed channel rather than silently missing the interview.
  • Camera on; verify correct microphone, speaker/headset, and camera; neutral background and good lighting. Close private work/customer windows and notification previews. Keep a harmless window ready for sharing.
  • Ask what to share; choose the requested window or screen. Check text is readable, share/unshare controls work, and no private data, AI overlay, chat notifications, or preparation notes are visible. Do not show the assessment itself unless permitted/requested. Do not record the actual interview without consent.
  • Have the resume available only if interview rules allow. No hidden live assistance, chat agents, transcription assistants that answer questions, or generated interview responses.

Discussing the test solutions immediately afterward

For each problem, use this 2–3-minute structure:

  1. Contract and example (20–30 seconds): what had to be returned; important constraints and a discriminating edge case.
  2. Approach and invariant (45–60 seconds): chosen data structure, why each step is correct, and what stays true during the loop.
  3. Trade-offs (20–30 seconds): time/space complexity, including Python allocations; contrast one plausible alternative.
  4. Testing and result (20–30 seconds): samples plus adversarial tests; say exactly what passed or remained uncertain. Do not claim hidden cases you could not see.
  5. Improvement (20–30 seconds): name the specific missing case, optimization, or clarity improvement. If unfinished, explain the bottleneck and next step without excuses or invented success.

Example phrasing: “I used counts rather than a set because duplicate requirements matter. The invariant is that the map tracks remaining demand after each item. My implementation passed the visible cases; I would additionally test repeated values and an absent required item. The trade-off is extra map storage for avoiding repeated scans.” Use the actual test problem's semantics, not this wording if it does not apply.

Final standard: demonstrate a developer who can build test tooling, reason about correctness and uncertainty, investigate failures, and explain personal contributions honestly. Three days should make those abilities visible—not manufacture an operations history you do not have.

Claude · complete originalDownload .md
NVIDIA JR2020478 — Senior AI Agent Test Developer (SDET), Shanghai

NVIDIA JR2020478 — Senior AI Agent Test Developer (SDET), Shanghai

3-day prep plan for Yi Gao (written Thu 2026-10-22, Beijing time)

3-day prep plan for Yi Gao (written Thu 2026-10-22, Beijing time)

When (Beijing) What
Fri Oct 23, Sat Oct 24, Sun Oct 25 Core prep days (≈ 9–10 focused hours each)
Mon Oct 26 Taper: ≤ 2 h practice + logistics dry-run at 14:00
Tue Oct 27, 14:00–15:35 HackerRank coding test, 95 min, Chrome, VPN off, Python, no AI
Tue Oct 27, 15:35 Teams interview, ~50 min, camera on, screen-share ready. They will discuss your test solutions, technical skill, and experience

The test ends at 15:35, and the interview starts at 15:35. You have no buffer. Plan to finish the test by 15:28, and set up Teams before 14:00 (§4).

The five things that matter most

  1. Coding speed in plain Python, with no AI and no docs. HackerRank flags tab-switching and leaving full-screen as malpractice, so you can't look up datetime formats mid-test. Appendix A has to be in your fingers.
  2. Partial credit. Scoring is per hidden test case. Submit a working brute force early on every question, then optimize.
  3. Explaining your own code 0 minutes later. Write readable code, and keep paper notes on approach, complexity and failures for each question (§4.5).
  4. Present Zeval / ztalk-mcp as test infrastructure for non-deterministic AI systems. That is what the JD is asking for (§3.8).
  5. Be honest about the gaps and show you've started closing them. Over the weekend you'll build zeval-lite: a pytest suite → GitHub Actions YAML → Docker image → Kubernetes Job on OrbStack. Afterwards you can say "I did this" rather than "I'd learn it" (Appendix C, T5).

Time split across Fri–Mon: ~17 h coding-test prep / ~11 h interview prep (≈ 60/40). The test gates you, and the interview starts by discussing the test, so coding gets the larger share.


1. Predicted test composition

1. Predicted test composition

1.1 What is known (verified on HackerRank's candidate docs, 2026-10-22)

  • Scoring is per test case, with partial credit. Each hidden test case passed earns its own points (Evaluation method, Hidden test cases).
  • Python 3 = 3.14.2, with a 10 s time limit and 512 MB memory. requests, python-dateutil and pyyaml are available. PyPy3 is only 3.6, so avoid it unless pure-loop code times out (Execution environment).
  • Possible question types: Coding, Multiple Choice, Database (SQL), DevOps (Linux VM), Code Review (inline comments on a diff), Subjective, QA projects (Selenium/Cypress/Playwright), and others (Question types).
  • Malpractice includes exiting full-screen, switching tabs, copying code from online sources, and outside help. Plagiarism detection catches renamed or reformatted copies (Test integrity).
  • MCQs may use negative marking. The instructions page will say so (MCQ).
  • Built-in AI Assistant: HackerRank has one, but only the hiring company can enable it. If it's on, the onboarding says so and a panel appears. If there's no panel, it's off (AI Assistant). Plan for no AI.
  • Submission at time-out: after you edit a submitted answer, your last submitted version is what counts unless you re-run and re-submit (Modifying submissions, Time-out evaluation).
  • The editor is Monaco (the VS Code engine). Its IntelliSense autocomplete is part of the platform and is fine to use (Answer coding questions).

1.2 Reasoning

  • The interview discusses your solutions, 0 minutes after the test. So the test is mainly auto-scored coding. MCQs give an interviewer little to discuss. Expect at least 2 coding questions.
  • 95 minutes is consistent with either 3 coding questions of increasing difficulty, or 2 coding questions plus an MCQ/short-answer block.
  • The JD stresses Python/Linux/shell, test automation, flaky/regression analysis and log-heavy cloud systems. So at least one question is likely a "realistic" data-processing task (logs, test results, events with timestamps) rather than pure puzzle DSA.
  • SDET online assessments at large tech companies usually reuse standard library-style DSA (LeetCode Easy–Medium). They sometimes add testing-theory MCQs or a "find the bug / write tests" item.
  • QA web-UI projects (Selenium etc.) are unlikely. The role is AI agents and cloud-native systems, not browser UI.

The likelihoods below are my estimates, not leaked content. Prepare in proportion to them.

1.3 Most likely configurations

Config Estimate Shape
A ~50% 3 coding: Q1 easy–medium practical (parsing/aggregation), Q2 medium DSA, Q3 medium(–hard) DSA or design-a-class
B ~30% 2 medium coding + 10–20 MCQs (Python semantics, testing theory, Linux, CI/containers/K8s)
C ~20% 2 coding + 1 non-standard item: fix-the-bug stub, "write test cases for X" (subjective), Code Review, REST API, or SQL

1.4 Question types ranked by likelihood, with patterns and examples

# Type Likelihood Patterns to own Example problems (links in §2)
1 Algorithmic DSA (Python) ~95% (≥1 Q) Hash-map counting · sliding window / two pointers · sort + greedy · stack / monotonic stack · heap / top-k · BFS / DFS on grid/graph · union-find · binary search (incl. on the answer) · intervals · prefix sums · light DP Count Triplets, Frequency Queries, Fraudulent Activity Notifications, Roads and Libraries, LC 3, 56, 200, 207, 347, 560, 739, 875
2 Python practical / data processing ~70% Parse lines → records (split/regex) · timestamps (datetime, tz offsets, windows) · group-by/aggregate (Counter/defaultdict) · multi-key sort with tie-breaks · exact output formatting · streaming/large input Time Delta, Word Order, Company Logo, Time Conversion, LC 636 Exclusive Time, 937 Reorder Log Files, 811 Subdomain Visits, 1604 Key-Card Alert, 1169 Invalid Transactions; custom T1 flaky detector, T2 log triage
3 Testing-flavored item ~40% Fix a buggy function (mutable defaults, off-by-one, wrong comparator) · enumerate test cases / edge cases for a spec · implement a class to a spec, called by a hidden harness · review a diff · regression bisection HR "Debugging": Default Arguments, Words Score; LC 8 atoi, 65 Valid Number, 468 Validate IP, 165 Compare Versions; LC 146 LRU, 1797 Auth Manager, 981; LC 278 First Bad Version
4 MCQ block ~40% Python gotchas · pytest/fixtures/exit codes · testing theory (BVA, equivalence classes, test pyramid, severity vs priority) · flaky causes · Linux pipelines/signals/permissions · Docker layers · K8s probes / OOMKilled · statistics of non-deterministic tests Appendix B (16 Qs, used in the mock)
5 REST API consumption ~20% Paginated GET (page, total_pages), filter/aggregate, requests or urllib + json, money/strings parsing jsonmock tasks T4-A…D (with answer keys)
6 SQL ~15% JOIN + GROUP BY + HAVING · window functions (ROW_NUMBER/RANK/DENSE_RANK) · self-join · date gaps · median The Report, Top Competitors, SQL Project Planning, LC 176, 185, 180
7 Linux / DevOps VM or bash ~10% grep/awk/sed/sort/uniq/cut pipelines · file ops · processes/ports HR Shell: Cut #1, Sort #5, Uniq #2, Grep-A, Awk-1, Sed #3
8 QA web project (Selenium/Playwright/Cypress) <5% — Skip.

Difficulty to expect: LeetCode Easy–Medium, sometimes a Medium-Hard with a naive solution that earns partial credit. Python TLE traps are common: O(n²) on n = 10⁵, list.pop(0), deep recursion.


2. Practice map (all URLs curl-verified 2026-10-22; method in Appendix D)

2. Practice map (all URLs curl-verified 2026-10-22; method in Appendix D)

LeetCode note: leetcode.com pages answer curl with a Cloudflare bot check (403), so each LeetCode problem was verified twice. First via LeetCode's own GraphQL API (exists, isPaidOnly=false). Second, the same slug on the CN mirror (200, real title). If leetcode.com is slow with VPN off, swap leetcode.com → leetcode.cn in any problem URL below; every slug was checked there too. Premium problems I excluded: Meeting Rooms II, Logger Rate Limiter, Design Hit Counter, Design Log Storage System, Analyze User Website Visit Pattern, Encode and Decode Strings.

2.1 Type 1 — Algorithmic DSA

Where:

Problems by pattern (★ = in the 3-day plan; ◆ = reserved for the mock, so don't open it early):

Pattern HackerRank LeetCode
Hash-map counting ★Ransom Note (E) · ★Sherlock and Anagrams (M) · ★Count Triplets (M) · ★Frequency Queries (M) · ★Two Strings (E) 1 Two Sum · 49 Group Anagrams · 128 Longest Consecutive · ★347 Top K Frequent · ★560 Subarray Sum = K
Sliding window / two pointers ◆Fraudulent Activity Notifications (M) · Bear and Steady Gene (M) ★3 Longest Substring w/o Repeat · ★438 Find All Anagrams · 424 Char Replacement · 15 3Sum · 11 Container With Most Water · 239 Sliding Window Max
Sort + greedy Max Min (M) · Luck Balance (E) · Sorting: Comparator (M) · Minimum Swaps 2 (M) · New Year Chaos (M) 621 Task Scheduler · 452 Burst Balloons
Intervals Gridland Metro (M) ★56 Merge Intervals · 57 Insert Interval · ★435 Non-overlapping · 986 Interval Intersections · 1094 Car Pooling
Stack / monotonic stack ★Balanced Brackets (M) · Largest Rectangle (M) · Queues: A Tale of Two Stacks (M) 20 Valid Parentheses · ★155 Min Stack · ★739 Daily Temperatures · 150 Eval RPN · ★394 Decode String
Heap / top-k / streaming ★Jesse and Cookies (E) · QHEAP1 (E) · ★Find the Running Median (H) ★215 Kth Largest · 295 Median from Data Stream · 692 Top K Frequent Words · 23 Merge k Sorted Lists (merge logs by timestamp) · 1834 Single-Threaded CPU · 1882 Process Tasks Using Servers
BFS / DFS / grid Castle on the Grid (M) · DFS: Connected Cell · BFS: Shortest Reach · Find the nearest clone (M) ★200 Number of Islands · ★994 Rotting Oranges · 133 Clone Graph · 79 Word Search
Components / union-find ◆Roads and Libraries (M) · ★Components in a graph (M) · Journey to the Moon (M) 547 Number of Provinces · 684 Redundant Connection · 721 Accounts Merge
Topo sort / shortest path — ★207 Course Schedule (test/build dependency order) · 210 Course Schedule II · ★743 Network Delay Time
Binary search Pairs (M) · Minimum Time Required (M) · Ice Cream Parlor (M) ★278 First Bad Version (= git bisect) · ★875 Koko Eating Bananas · 34 First/Last Position · 33 Rotated Array
Prefix sum / difference array Array Manipulation (H) 238 Product Except Self
DP (low priority for this role) Max Array Sum (M) · Abbreviation (M) 70 · 198 · 322 · 300 · 1143 · 139

2.2 Type 2 — Python practical / data processing

Where: the HackerRank Python domain. Target the subdomains Collections, Date and Time, Regex and Parsing, Errors and Exceptions, Built-Ins, and Debugging. Python docs to memorize from before Tuesday: collections · datetime · re · itertools · heapq · bisect · functools · Time complexity of builtins

Pattern HackerRank LeetCode
Counting + exact output ★Word Order (M) · ★Company Logo (M) · collections.Counter() · DefaultDict Tutorial · Collections.OrderedDict() · Collections.namedtuple() · Compress the String! (groupby) ★811 Subdomain Visit Count · 609 Find Duplicate File
Custom sort keys Athlete Sort · ginortS ★937 Reorder Data in Log Files
Time / timestamps ◆Time Delta (M) · ★Time Conversion (E) · The Time in Words (M) · Library Fine (E) · Calendar Module ★1604 Key-Card Alert (1-hour window) · 1169 Invalid Transactions · 1348 Tweet Counts per Frequency · 981 Time-Based KV Store
Event logs → state ★Simple Text Editor (M, ops + undo) ★636 Exclusive Time of Functions · 1396 Design Underground System · 71 Simplify Path
Regex / validation Re.findall() & Re.finditer() · Group(), Groups() & Groupdict() · Regex Substitution · Re.split() · Validating UID · Validating Credit Card Numbers · Validating and Parsing Email Addresses · Detect HTML Tags… · Matrix Script (H) · Strong Password (E) 468 Validate IP Address · 165 Compare Version Numbers · 8 atoi · 443 String Compression · 68 Text Justification (stretch)
Exceptions / parsing robustness Exceptions · Incorrect Regex · XML2 - Max Depth —
SDET-flavored originals Appendix C: T1 flaky & regression detector, T2 log triage (both have verified sample I/O) —

2.3 Type 3 — Testing-flavored items

Sub-type Practice
Fix-the-bug (stub with defects) HR Python "Debugging": ★Default Arguments (M), ★Words Score (M). Also Appendix A2 gotchas, which are the usual planted bugs
Enumerate test cases first, then code Write 8–10 cases before coding: 8 atoi · 65 Valid Number · 468 Validate IP · 165 Compare Versions · Time Conversion. Use the EBIDPP checklist (§4.5)
Implement a class to a spec ★146 LRU Cache · ★1797 Design Authentication Manager (TTL) · ★981 Time-Based KV · 1146 Snapshot Array · 1472 Browser History · 2034 Stock Price Fluctuation · 2349 Number Container System · 729 My Calendar I · 341 Flatten Nested List Iterator
Regression bisection ★278 First Bad Version + git bisect
Write pytest tests Appendix C T3 (retry/backoff + tests) and T5 (zeval-lite). Docs: fixtures · parametrize · monkeypatch

2.4 Type 4 — MCQ

Appendix B (16 questions, part of the mock) plus the Appendix A2/A3 cheat sheets. Depth sources are in §3.10 (G1–G8).

2.5 Type 5 — REST API consumption

2.6 Type 6 — SQL (low priority)

2.7 Type 7 — Linux shell

HackerRank Linux Shell domain: ★Cut #1 · ★Sort Command #5 · ★'Uniq' Command #2 · ★'Grep' - A · ★'Awk' - 1 · ★'Sed' command #3 · 'Grep' #1 · 'Awk' - 2 · Paste - 1 · 'Tr' Command #1 · Compute the Average · Tail #2. One-liners are in Appendix A3.


3. The 3-day plan

3. The 3-day plan

3.0 Rules for all four days

  • No AI autocomplete while practicing. Turn off Copilot, Codex, Claude, Cursor Tab, etc. in your editor until Tuesday evening, because you need the muscle memory back.
  • Time caps: Easy 10–12 min, Medium 20–25 min. When you hit the cap, read the HackerRank Discussions tab or a hint. Then close it and re-implement from a blank editor, and log it in errors.md.
  • Every problem follows one ritual: constraints → target complexity → 3 edge cases written down → code → run → submit. You will use exactly this ritual on Tuesday.
  • errors.md has one line per lost point: problem | label (K/I/B/E/T/F/M/R, see §3.5) | rule I'll apply next time.
  • Hard stop 21:30 each night. Sleep is worth more than a 10th problem.
  • If Friday is a working day: do D1-1 before work and D1-2 + D1-3 in the evening (≈ 4.5 h). Move D1-4 (S1–S3) to Sunday 19:00–20:30 in place of D3-6. Do D1-5 (pytest + Lab step 1) in Saturday's D2-7 slot, and move D2-7 (MCQ/Linux) to Monday 09:30–10:30 in place of the re-solves. From Set B keep only Balanced Brackets and LC 739 (do them Saturday 08:30 with the warm-up).

3.1 Tonight, Thu Oct 22 (30–45 min)

  • In Chrome, log in or create your HackerRank account (use your application email). Solve Sales by Match to get a feel for the editor: Run vs Submit, custom input, debug output.
  • Set up a local env. pytest isn't installed for your system python3 (3.14.7), so: python3 -m venv ~/nvprep/.venv && source ~/nvprep/.venv/bin/activate && pip install pytest pytest-xdist pytest-randomly pytest-rerunfailures pytest-timeout pytest-cov hypothesis requests
  • Disable AI completion in your editor.
  • Create ~/nvprep/errors.md and ~/nvprep/stories.md.
  • In stories.md, fill in the [fill] numbers for S1–S10 (§3.8) from memory or your notes: case counts, agreement rates, latencies, regressions caught. Never use confidential Ztalk data in anything you show.

3.2 Day 1 — Fri Oct 23: re-warm the hands, start the bridge

Time Track Block
08:30–09:00 Code D1-1 Stdlib recall. Type Appendix A1 from memory into a blank file, diff it against the appendix, and retype what you missed
09:00–11:45 Code D1-2 DSA Set A: hashing / windows / sort (list below)
11:45–12:45 — Lunch + walk
12:45–14:45 Code D1-3 Practical Set P: logs, strings, time (list below)
15:00–16:30 Interview D1-4 Resume deep-dive I. Write story cards S1–S3 (§3.8) in stories.md. Say each aloud in 2 minutes, record once, listen once, cut the filler
16:45–18:30 Interview (gap) D1-5 G1 pytest crash. 45 min on the docs (fixtures, parametrize, marks, monkeypatch, tmp_path), then zeval-lite Lab step 1 (Appendix C, T5)
18:30–19:30 — Dinner
19:30–21:00 Code D1-6 DSA Set B: stacks / queues / heaps (list below)
21:00–21:30 Both Update errors.md. Read §3.4 rules only; don't open the mock problems

Set A (20-min cap each): Ransom Note (10 min) → Sherlock and Anagrams → Count Triplets → Frequency Queries (watch I/O speed) → LC 3 → LC 438 → LC 347 → LC 560 → LC 56. Stretch: LC 15, Sherlock and the Valid String.

Set P: Word Order → Company Logo (tie-break!) → Time Conversion (12AM/12PM) → LC 937 → LC 811 → LC 636 → LC 1604 → T1 flaky detector (Appendix C, 30 min). Stretch: LC 1169.

Set B: Balanced Brackets (10 min) → LC 155 → LC 739 → LC 394 → Jesse and Cookies → LC 215 → Find the Running Median. Stretch: LC 150.

3.3 Day 2 — Sat Oct 24: the mock, then breadth

Time Track Block
08:30–09:00 Code D2-1 Warm-up: Two Strings, Alternating Characters (≤ 15 min total). Type the A1 templates once
09:00–10:35 Code D2-2 FULL 95-MIN MOCK (§3.4)
10:35–10:50 — Break: walk, no screens
10:50–12:20 Code D2-3 Same-day review (§3.5)
12:20–13:20 — Lunch
13:20–15:20 Code D2-4 DSA Set C: graphs / binary search / intervals. Start with whichever pattern the review flagged as worst
15:35–17:05 Interview D2-5 Resume deep-dive II. Write S4–S10. Then do 10 rapid-fire questions from §3.9 aloud (60–90 s each), recorded
17:15–18:45 Interview (gap) D2-6 G2 flaky tests + G3 CI/CD. Read the 2 Google posts, Fowler, and the pytest flaky page (40 min). Then Lab step 2: flaky demos, CI YAML, flaky policy
18:45–19:45 — Dinner
19:45–21:00 Both D2-7 MCQ/Linux. 6 ★ shell drills from §2.7 (40 min). Then A2/A3 gotchas and G8 bug lifecycle (20 min)
21:00–21:30 Both Update errors.md. Re-solve one mock problem you lost points on, from a blank editor

Set C: LC 200 (iterative BFS) → LC 994 → LC 207 → Components in a graph (union-find) → LC 743 → LC 278 → LC 875 → LC 435. Stretch: Castle on the Grid, LC 721.

3.4 THE MOCK — Sat Oct 24, 09:00–10:35 (exactly 95 min)

Conditions:

  • Chrome full-screen, phone in another room, no AI, no docs, no other tabs.
  • Paper and pen. A visible timer.
  • Open the three problem links at 08:58. Don't read them before then.
Clock Item Target Why it's in the set
09:00–09:12 Part A: 16 MCQs. Appendix B, on paper (≈ 45 s each). Note "confident / guessed" per answer 12 min Configuration B rehearsal; negative-marking discipline
09:12–09:27 Q1 Time Delta (HR, Medium) 15 min Timestamp parsing with tz offsets (%z), done from memory
09:27–09:59 Q2 Fraudulent Activity Notifications (HR, Medium) 32 min Sliding-window median. Naive sort-per-day times out on big tests, so it rehearses the partial-credit decision (counting array over 0..200, or bisect.insort)
09:59–10:31 Q3 Roads and Libraries (HR, Medium) 32 min Connected components. Edge case c_lib <= c_road; recursion-depth trap (go iterative or use union-find)
10:31–10:35 Final pass: every question submitted, MCQs reviewed 4 min Test-day habit

Triage rule: at minute 15 of any question with no working approach, write the brute force, submit it for partial credit, and move on. Come back if time remains.

Score sheet (write it down immediately):

Q   | tests passed | minutes | first-submit at | time split read/plan/code/debug | labels
MCQ | __/16 (guessed: __) |
Q1  | __/__ | ...
Q2  | __/__ | ...
Q3  | __/__ | ...

Benchmarks:

  • Q1 full plus Q2 or Q3 full ≈ on track.
  • All three full and ≥ 12/16 MCQ ≈ strong. Shift Sunday time toward interview prep.
  • Under 1.5 problems ≈ move Sunday's D3-3 lab to a conceptual pass, and give that time to DSA re-solves.

3.5 Same-day review method (Sat 10:50–12:20, 90 min)

This is Zeval applied to yourself: score → failure taxonomy → targeted re-run.

  1. Score (10 min). Fill in the score sheet honestly: minutes per phase, and when the first green submit happened.
  2. Label every lost point (20 min) with exactly one tag:
    • K didn't know the pattern
    • I knew it, implementation too slow
    • B bug
    • E missed edge case
    • T TLE / complexity
    • F I/O or format mismatch
    • M triage / time management
    • R misread the statement
  3. Cold re-solve (35 min). Close everything and re-solve your worst problem from blank at ⅔ of the original time. Only then read the Discussions tab for the optimal approach, and implement it if it differs.
  4. Explain cards (15 min). For Q1–Q3, write 5 lines each: problem in one line · key insight · complexity · edge cases + how you'd test it · what you'd change. Say each card aloud in 60 s. This is exactly Tuesday's first interview segment.
  5. Rules and routing (10 min).
    • Write one rule per label in errors.md. Example: "T → compute the operation count from constraints before typing."
    • Reorder Set C so your worst label/pattern comes first.
    • MCQs: read the explanation for every wrong and every guessed answer.

3.6 Day 3 — Sun Oct 25: close the gaps, rehearse the interview

Time Track Block
08:30–10:00 Code D3-1 Set D: design-a-class + REST. LC 146 LRU (OrderedDict and dict + doubly linked list) → LC 981 → LC 1797 → Simple Text Editor → T4-A and T4-B (jsonmock, with urllib; then redo one with requests)
10:15–11:15 Code D3-2 Real-UI rehearsal. Problem Solving (Intermediate), or Basic if the mock was under 1.5 problems. You get unseen problems in the real proctored UI. Cap yourself at 60 min, then submit whatever you have; the rehearsal matters more than the badge
11:15–11:45 Code Short review: steps 1–3 of §3.5
11:45–12:45 — Lunch
12:45–14:45 Interview (gap) D3-3 G4 Docker + G5 Kubernetes + G6 perf/fault injection. zeval-lite Lab step 3 on OrbStack's built-in Kubernetes
15:00–16:00 Interview D3-4 G7 AI-for-testing. Prepare 4 whiteboard mini-designs (test-case generation, flaky classifier, failure clustering, test selection) as 5 bullets each. Re-read S1–S3
16:00–17:00 Interview D3-5 Full interview rehearsal, 50 min, camera on, recorded: 5-min intro → walk through your mock Q2/Q3 using the explain cards → 6 technical questions → 3 behavioral → your questions for them. Have a friend ask from §3.9 if you can; otherwise draw 9 questions at random
17:00–17:30 Interview Watch the recording. Rewrite the 3 weakest answers
17:30–19:00 — Dinner / rest
19:00–20:30 Code D3-6 Redo every errors.md problem from blank, timed. If the error log is short, do 30 min of SQL (The Report, Top Competitors, LC 185)
20:30–21:00 Both D3-7 Write a one-page handwritten cheat sheet (templates, gotchas, story keywords). You'll read it Tuesday morning, not during the test

3.7 Mon Oct 26 — taper

Time Block
09:30–10:30 3 speed re-solves from blank, ≤ 15 min each: LC 560, LC 636, Roads and Libraries
10:30–11:00 Read S1–S10 and the §3.9 trigger table aloud once
14:00–14:45 Logistics dry-run at the test's clock time. Work through the §4.1 checklist, with VPN off
Evening Nothing new. Light exercise. Lights out by 23:00

Optional, send by Friday: a one-line note to the recruiter confirming the interview starts right at 15:35, back-to-back with the test. If they offer 15:40, take it.


3.8 Interview prep: resume deep-dive

Positioning (30 seconds; memorize the shape, not the words):

"I build verification for AI systems. At Ztalk I created Zeval, the evaluation and regression system for our customer-service LLM agent MyQA, which runs on Taobao, JD and Douyin. Zeval is a curated suite of case snapshots that makes agent runs reproducible. Deterministic metrics are the primary oracle, and an LLM evaluator calibrated against reference judgments covers what metrics can't capture. It grew into ztalk-mcp, a shared stateless MCP service. Before that I did failure analysis for automotive perception at Axera and defect-detection models at Bosch. The thread is the same: make AI behavior measurable and catch regressions before users do. That's what this role does at NVIDIA scale."

90-second 'tell me about yourself': TU Berlin M.Sc. Computer Engineering (ICARM paper, dynamic object detection) → Bosch: defect detection (Mask R-CNN/U-Net), synthetic data from Blender/CAD → Axera: detection-model failure analysis, annotation workflows, ISP/image quality → Ztalk: MyQA agent, Zeval, ztalk-mcp, Azure voice-agent perf harnesses → why SDET now (S10).

Vocabulary translation (say the right-hand column to an SDET panel):

Your Ztalk term SDET framing
Case snapshot Hermetic test fixture. Frozen input plus the external evidence state, so a run is reproducible and independent of live systems
Hand-curated case dataset (built with a collecting Codex agent) Versioned golden regression suite, with agent-assisted test-case collection and reference labels
Verdict correctness / evidence-consultation completeness / remediation-route agreement Deterministic oracles: functional correctness, process/coverage assertion (did it consult the required evidence), decision-path agreement
Evaluator Analysis Meta-Agent calibrated against per-case judgments LLM-as-judge oracle, validated against reference labels with measured agreement. Versioned, so scores stay comparable across runs
"Scoring outlives the session" Scores are reproducible and comparable over time, with no dependence on the context that produced the labels
AutoResearch loops Automated failure analysis / root-cause exploration, gated by eval
ztalk-mcp (stateless, MCP 2026-07-28 spec) Shared tooling service. Stateless means it scales horizontally, has no session affinity, is easy to containerize, and each call can be contract-tested in isolation
Git-based agent-plugin registry Config-as-code tool registry: versioned, reviewed, rollback-able
Azure voice-agent perf harness Load/latency test harness: p50/p95/p99, concurrency, stage breakdown
Axera failure analysis → annotation/data fixes Defect triage, root cause, fix, verify: the bug lifecycle
Bosch synthetic data Test-data generation for rare cases: coverage of the long tail

JD → evidence map (and how to state each gap):

JD item Your evidence Story Gap / honest phrasing
AI-powered test-case generation Codex-agent-collected case dataset; Bosch synthetic rare-defect data S1, S7 Code-level unit-test generation: "here's how I'd build it" (G7)
Defect detection Bosch and Axera detection work S6, S7 Vision domain. Same discipline: precision/recall trade-off, false positives cost triage time
Flaky-test & regression analysis Separating agent non-determinism from real regressions in Zeval S4 You haven't run CI flaky dashboards. Cover with G2 + Lab step 2
Coverage optimization Evidence-consultation completeness; curating the suite for scenario coverage S1 Code coverage and test selection tooling: G1/G7
Functional / performance testing Zeval; Azure perf harnesses S1, S5 —
Fault injection / reliability, cloud-native ztalk-mcp's stateless design S3 No K8s/chaos in production. Say so; then the Lab step 3 story
Scalable test frameworks Zeval architecture; plugin registry S1, S3 pytest-specific: G1 + zeval-lite
Bug lifecycle Axera triage → fix → verify loop S6 Jira-style workflow vocabulary: G8
Python / Linux / shell Daily work — —
K8s / containers / CI-CD [fill: what you actually used, e.g. Docker at Axera/Ztalk, any CI] S9 Don't stretch it. Be specific about what you've touched
MS/PhD TU Berlin M.Sc. + ICARM paper — —
5+ yrs QA automation [fill: years spent on evaluation/validation/failure analysis across Bosch/Axera/Ztalk] S10 "Test and eval infrastructure for AI systems", not "QA engineer". Don't inflate titles

Story cards. Each card is Hook → Problem → What I built (SDET terms) → Proof [fill] → Follow-ups. Keep the spoken version to 2 minutes.

  • S1 Zeval (anchor story).
    • Problem: changes to the MyQA agent (prompts, retrieval, model versions) had no reliable regression signal. Outputs are non-deterministic, and spot checks didn't scale. [fill: release cadence, cost of a bad release]
    • Built:
      1. Case-snapshot suite collected with a Codex agent that also recorded per-case judgments, so the cases are hermetic and replayable.
      2. Three deterministic oracles (verdict, evidence completeness, route agreement).
      3. A meta-agent judge calibrated against those judgments, for analysis the metrics can't express.
    • Proof: [fill: #cases, #regressions caught, a decision Zeval changed, run time].
    • Follow-ups: How do cases get added and retired? How do you avoid overfitting the agent to the suite (held-out cases, refreshing from production)? How is the suite versioned? Is it in CI? If not: "here's the CI design" (zeval-lite).
  • S2 Judge calibration.
    • Calibration set with reference labels → agreement measured [fill: % / κ] → review the confusion matrix on disagreements → fix the rubric.
    • Known LLM-judge failure modes: position bias, verbosity bias, self-preference, drift on model updates.
    • Mitigations: structured rubric output, pinned model/version/prompt, temperature 0, recalibration on any change, periodic human audit.
    • Key line: "A judge is a test oracle, and an oracle needs its own test suite."
  • S3 ztalk-mcp.
    • Grew out of Zeval because agents and the evaluator needed the same tool access.
    • Stateless per the 2026-07-28 MCP spec, so any replica can serve any call. That makes it easy to scale behind a load balancer and easy to test, since there's no hidden session state.
    • The Git-based plugin registry gives versioned, reviewable tools.
    • Testing [fill: what exists]. What you'd add: schema/contract tests per tool, golden-response tests, idempotency and concurrency tests, fault injection (backend timeout, malformed payload), and compatibility tests across plugin versions.
  • S4 Non-determinism vs regression.
    • Repeated runs per case; compare distributions, not single runs.
    • Thresholds with sample sizes big enough to mean something (see B15: 18/20 vs 15/20 is not significant).
    • Cases that disagree across reruns of the same version are flaky by definition, the same definition Google uses: pass and fail on the same code.
    • Freezing evidence removes external variance. [fill: an actual incident]
  • S5 Azure voice-agent perf harness.
    • Workload model (concurrent sessions, call length).
    • End-to-end latency broken into stages (ASR → LLM → TTS), reported as p50/p95/p99, plus error rate.
    • The bottleneck you found and the fix [fill].
    • How you'd turn it into a CI perf gate: a baseline, a tolerance band, noise handling.
  • S6 Axera failure analysis. Detection failures grouped into categories [fill: e.g. small/occluded objects, night/glare via ISP, label errors] → root cause → fix (data, annotation, ISP tuning) → verify on a regression set. That is a bug lifecycle with severity and priority. Mention the annotation-workflow changes you drove.
  • S7 Bosch defect detection + synthetic data. Rare defects meant too few real samples, so you generated Blender/CAD synthetic data to cover the long tail. Same idea as AI-generated test cases: generate inputs where real coverage is thin, then validate that they help (held-out real defects) [fill: metric lift].
  • S8 AutoResearch loops. An automated hypothesis → experiment → eval loop with an eval gate as the stop/accept criterion. In SDET terms: AI-driven root-cause exploration, where the safety comes from the gate. [fill: one concrete loop and its result]
  • S9 The Kubernetes gap (say it straight).

    "I haven't operated Kubernetes in production; my services ran on [fill]. This weekend I containerized a pytest eval suite and ran it as a Kubernetes Job. I debugged an OOMKilled pod and an ImagePullBackOff, and watched a Deployment self-heal after I killed a pod. Concepts I'm solid on: pods, deployments, services, probes, requests/limits. In the first month I'd get hands-on with the team's cluster tooling and chaos setup."

  • S10 Why SDET / why NVIDIA. "In agent engineering the bottleneck has moved from generating behavior to verifying it. I've spent [fill] years building verification for AI systems as a side responsibility. I want it to be the job, on the platform where agents and cloud-native infrastructure are being built."

Confidentiality: describe Ztalk systems at the architecture level. Don't screen-share internal code, prompts, customer data or dashboards.

3.9 Likely interview questions → the story or answer each should trigger

# Question Trigger Points to hit
1 Walk me through your Q2 solution §4.5 card Insight → algorithm → complexity → status → what failed and why → fix
2 Complexity? Can you do better? — State the bound from constraints. Name the trade-off (memory vs time)
3 Which hidden tests failed, and why? §3.5 labels Own it precisely: "TLE on large n because…"
4 How would you test this function? §4.5 EBIDPP Equivalence classes, boundaries, invalid input, differential vs brute force, property-based (Hypothesis), performance at max n; pytest parametrize
5 Make it production-ready / input is a 50 GB log — Streaming generator, bounded memory (heap of size k), chunking/external sort, input validation, logging, tests
6 How do you test an agent whose outputs are non-deterministic? S1, S4 Hermetic snapshots → deterministic oracles first → calibrated judge second → repeated runs + statistics
7 How do you know your LLM judge is right? S2 Calibration set, agreement/κ, disagreement review, pinning, recalibration
8 Use AI to generate test cases for a cloud service S1, S7, G7 Inputs: spec/OpenAPI + diff + past bugs → LLM proposes → run → dedupe → keep only cases that add coverage or kill mutants → human review. The oracle problem is the hard part
9 Design a flaky-test detection system G2, T1 Definition; signals (same-SHA reruns, flip rate, duration variance, error-signature variance); quarantine with SLA + owner; never auto-pass on rerun; dashboard
10 Pass rate dropped 97% → 93% overnight. Go S4, G2 Split infra vs product vs test; cluster by failure signature; compare to the flaky baseline; diff env (image digest, deps, model version); bisect (LC 278); reproduce; file with evidence
11 CI takes 3 h. Cut it G3, G7 Test impact analysis (changed files → covering tests), prioritize by historical failure probability, shard/parallelize (xdist, K8s Jobs), tier presubmit vs nightly, dedupe redundant tests
12 Defect detection from logs with AI S6, G7 Parse logs into templates, anomaly detection, cluster failure signatures (embeddings), link to known bugs, auto-triage; precision matters (triage cost)
13 How would you test an MCP server / tool-using agent? S3 Schema contract tests, golden responses, statelessness/idempotency, concurrency, fault injection (timeouts, malformed responses), version compatibility
14 Design a scalable test framework G1, T5 Layers (tests → fixtures/resources → clients → config → reporting), data-driven cases, markers/tiers, parallelism and isolation, JUnit XML → CI
15 pytest: fixture scopes, conftest, parametrize, plugins G1 function/class/module/package/session; yield teardown; conftest.py discovery; ids=; --strict-markers; xdist, randomly, rerunfailures, timeout, cov
16 Common causes of flaky tests and fixes G2 Async waits, order dependency, shared state, time/timezone, randomness, unordered collections, network, resource leaks, infra
17 Test strategy for a new feature G1 Risk-based; pyramid; entry/exit criteria; what you automate vs explore
18 Bug lifecycle; what's a good bug report? S6, G8 States, severity vs priority, repro steps, expected vs actual, env, logs, regression range
19 GIL: threads vs processes vs asyncio for a test runner A2 I/O-bound → threads/asyncio; CPU-bound → processes; xdist uses processes
20 Pod vs Deployment vs Service; debug CrashLoopBackOff G5, S9 describe → events → logs --previous → exit code / OOMKilled → probes → config/secrets
21 Readiness vs liveness — and how to test them G5 Readiness failing → removed from endpoints; liveness failing → restart. Test by injecting a failing dependency
22 Design a fault-injection test on K8s G6 Steady-state hypothesis (SLO metric) → inject (pod kill, 200 ms latency, packet loss) → observe → limit blast radius + abort conditions → automate nightly
23 Design a performance test S5, G6 Workload model, ramp/soak/spike, p95/p99, throughput, error rate, baseline + tolerance
24 Run your suite in CI on Kubernetes G5, T5 Image → Job per shard → ephemeral namespace → artifacts → cleanup; exit code = verdict
25 Tell me about yourself §3.8 90 s, end on "why this role"
26 Algorithm engineer → why SDET? S10 Verification is now the bottleneck
27 JD asks 5+ yrs QA automation — map yours S10, JD map Honest year count across roles; ownership of test/eval infrastructure
28 Biggest regression/bug you caught S1/S4 [fill] Concrete, with impact
29 Disagreed with a dev/PM on quality [fill] Data-driven resolution, e.g. deterministic metric vs "looks fine"
30 No Kubernetes — how will you ramp? S9 Weekend lab + concepts + 30-day plan

Your questions for them (pick 3):

  • How does the team measure agent quality today, and where is it weakest?
  • Which AI testing tools are built in-house versus adopted?
  • How is time split between framework building and test execution?
  • What does CI run on (internal K8s clusters?), and how are flaky tests handled now?
  • What would make someone in this seat clearly successful at 6 months?

3.10 JD-gap crash-bridge topics (what to learn, and how deep)

ID Topic Depth target ("done when you can…") Sources (verified) When
G1 pytest + test-framework design …write from memory: fixture with scope + yield teardown, conftest.py, parametrize with ids, custom markers + -m + --strict-markers, monkeypatch, tmp_path, capsys, skip/xfail; name the plugins (xdist, randomly, rerunfailures, timeout, cov) and pytest exit codes 0–5; sketch framework layers on a whiteboard pytest docs · fixtures · fixtures reference · parametrize · marks · skip/xfail · monkeypatch · tmp_path · --lf/--ff cache · good practices · hooks · exit codes · unittest.mock · Hypothesis · pytest-xdist · Practical Test Pyramid Fri D1-5
G2 Flaky-test theory …define flaky (pass and fail on the same code); quote Google's numbers: ~1.5% of runs flaky, ~16% of tests with some flakiness, ~84% of pass→fail transitions involving a flaky test; list 8 root causes with a fix each; argue why "retry until green" hides real bugs; describe quarantine (owner + SLA + still running, not counted toward gating) Google: Flaky tests and how we mitigate · Google: Where flaky tests come from · Fowler: Eradicating non-determinism · pytest: flaky tests · pytest-randomly · pytest-rerunfailures Sat D2-6
G3 CI/CD …write a GitHub Actions workflow from memory (trigger, matrix, setup-python with pip cache, run pytest, upload JUnit artifact with if: always()); explain presubmit vs nightly, gating vs non-blocking lanes, artifacts, caching, sharding, test impact analysis GH Actions quickstart · Building & testing Python · Matrix jobs · GitLab CI Sat D2-6
G4 Containers …explain image vs container vs layer; why COPY requirements.txt comes before COPY . .; multi-stage builds; volumes; container exit code → CI verdict; compose for SUT + dependencies Docker get started · What is a container · Multi-stage · Compose Sun D3-3
G5 Kubernetes for test engineers …explain Pod / Deployment / ReplicaSet / Service / ConfigMap / Secret / Job / Namespace; readiness vs liveness vs startup probes; requests/limits and OOMKilled; debug CrashLoopBackOff and ImagePullBackOff with get/describe/logs --previous/events; run tests as a Job; ephemeral namespace per PR; PodDisruptionBudget K8s basics · Overview · Pods · Pod lifecycle · Probes · Resources · Deployments · Jobs · Services · Disruptions · Debug pods · kubectl quick ref · OrbStack K8s · kind quick start Sun D3-3
G6 Performance, fault injection, reliability …distinguish load / stress / soak / spike; report p50/p95/p99 + throughput + error rate against a baseline; state the chaos loop (steady-state hypothesis → inject → observe → limit blast radius → automate); name tools (Locust, k6, Chaos Mesh, LitmusChaos, Toxiproxy); explain retry + backoff + jitter, timeouts, idempotency, circuit breakers Principles of Chaos · Chaos Mesh · LitmusChaos · Toxiproxy · Locust · k6 · Google SRE: Testing for reliability Sun D3-3
G7 AI for testing (your strength; give it structure) …give a 5-bullet design for each: (1) LLM test-case generation with an oracle strategy and mutation/coverage filtering; (2) flaky classifier (flip rate, duration variance, error-signature features); (3) failure clustering / auto-triage (log templates + embeddings); (4) test selection / prioritization (change → coverage map + failure history); plus agent testing (trajectory/tool-call checks, hermetic replay, judge calibration, statistical gates) Your own Zeval material plus G1/G2 sources Sun D3-4
G8 Bug lifecycle …recite New → Triaged → Assigned → In Progress → Fixed → Verified → Closed (and Reopened); explain severity vs priority with an example of each mismatch; give a good-report template; name the metrics (escape rate, MTTR, reopen rate) — (conceptual) Sat D2-7

G2 key content to memorize (root cause → fix):

  • Async/timing waits → poll with a deadline, or wait on an event; never a fixed sleep.
  • Order dependency / shared state → isolate with fixtures; run randomized order (pytest-randomly).
  • Time / timezone / DST → inject a clock; freeze time.
  • Randomness → seed it, or inject the RNG.
  • Unordered collections → compare sets or sorted lists.
  • Concurrency / races → deterministic scheduling and locks in the system under test.
  • Network / external services → hermetic fakes (responses, recorded fixtures). This is what your case snapshots already do.
  • Resource leaks / port collisions → per-test temp dirs and ephemeral ports.
  • Infra (noisy neighbors, OOM) → resource requests; separate infra failures from test failures.
  • LLM non-determinism → statistical assertions over N runs, pinned model version, temperature 0 where you can, snapshot the evidence.

4. Test-day checklist (Tue Oct 27)

4. Test-day checklist (Tue Oct 27)

4.1 Setup: dry-run Monday at 14:00, re-check Tuesday at 13:00

  • Chrome: updated. Make a fresh Chrome profile with no extensions (no AI sidebars, translators, Grammarly). HackerRank supports Chrome, Firefox and Edge; Brave isn't supported (browser support).
  • VPN off. Check that hackerrank.com and Teams both load quickly from your network. Prefer wired Ethernet, power plugged in, one display.
  • Quit every AI app and agent: Claude, ChatGPT, Codex, Cursor, Copilot, Amp, and similar. Also quit WeChat/DingTalk/Feishu, and turn on macOS Focus / Do Not Disturb.
  • Teams: app updated and signed in (or the guest link tested). Run a test call to check camera, mic and speaker.
  • Screen sharing: grant System Settings → Privacy & Security → Screen & System Audio Recording → Microsoft Teams. Teams has to restart after this, so do it Monday. Practice sharing a single window. Help: Teams support.
  • Local coding window for the interview: VS Code with all AI extensions disabled (or a plain editor) plus a terminal running python3. Font size ≥ 16. Have an empty scratch.py open.
  • Room: light in front of you, camera at eye level, quiet, headset, water, paper + 2 pens.
  • Links: star the HackerRank invitation email and the Teams invite.

4.2 Timeline

Time Action
08:00 Wake, normal breakfast
10:00–10:40 Warm-up: 2 problems you've already solved + type Appendix A1 once. No new problems
11:30 Light lunch. You'll be "on" from 14:00 to ~16:25
12:30–13:00 Read your handwritten cheat sheet and S1–S10 keywords, then put them away
13:00–13:30 Run the §4.1 checks. Test Teams, then quit Teams so nothing pops up during the test
13:30–13:55 Bathroom, water. Open the test link and read the instructions page (number and type of questions, negative marking, whether an AI Assistant panel exists). If a Sample Test is offered and you have spare minutes, use it
14:00 Start the test
15:28 Final submit check: every coding question Submitted (not just Run), every MCQ answered or deliberately skipped
15:28–15:32 On paper, 3 lines per question: approach · complexity · what failed or was unfinished, and why
15:32–15:34 Open Teams and join. Camera on
15:35 Interview

4.3 HackerRank tactics

First 3–5 minutes: open every question, read the constraints, and pick an order. Easiest and highest-value first, never the hardest first.

Time allocation:

If the test is… Plan
3 coding 4 min read-all → Q-easy ~18 → Q-med ~30 → Q-med/hard ~35 → 5 min buffer and submit check
2 coding + MCQs One fast MCQ pass at ≤ 1 min each, flag the uncertain ones (≈ 15–20 min). Then 2 × ~32 min coding. Then flagged MCQs with whatever is left
4 coding Two easy ones fast (≤ 15 each) → the two hard ones split the rest. Brute force first

Per-question loop:

  1. Read the constraints and derive the complexity target (A4).
  2. Write 3 edge cases on paper.
  3. Code the clean solution.
  4. Run Code. Add your own custom input (empty/min, duplicates, max-ish).
  5. Submit.
  6. Improve, then re-submit.

Partial credit:

  • If you have no full approach at minute 12–15, ship a correct brute force. It usually passes the small hidden cases.
  • Then optimize, and only re-submit if the new version passes everything the old one did.

Avoiding Python timeouts:

  • Read big input with sys.stdin.readline/sys.stdin.buffer (full-program questions only).
  • Use deque.popleft(), never list.pop(0).
  • Build strings with ''.join, not += in a loop.
  • Use iterative DFS/BFS (or sys.setrecursionlimit, which only partly protects you).
  • heapq and bisect beat re-sorting.
  • Precompute outside loops.

Output exactness:

  • Match the expected format character for character: spacing, rounding (f"{x:.2f}"), trailing newlines.
  • In function-stub questions, the template writes your return value to the output file and print() goes to a separate debug pane (code stubs, custom input). In full-program questions, remove debug prints before you submit.
  • Don't rewrite the template's I/O unless you have to.

MCQs: if the instructions mention negative marking, only answer when you can eliminate at least 2 options.

Integrity:

  • Stay full-screen and don't switch tabs. Both are flagged (test integrity).
  • No AI unless the onboarding explicitly enables HackerRank's built-in assistant. Even then, use it at most for syntax, since you'll defend every line minutes later.
  • Paper scratch work is normal.

Write for the interviewer: small helper functions, clear names, and a one-line comment with the complexity. No code golf.

Stuck or panicking: write down the brute force, its complexity, and the bottleneck. Naming the bottleneck usually points to the data structure you need.

4.4 The 15:28–15:35 switch

  • Submit, then write the paper notes. Don't spend the last 7 minutes squeezing one more test case out of a question.
  • If a question is unfinished, your notes say what the full solution would be. You'll offer it in the interview.

4.5 In the interview: discussing your solutions

Open proactively, after the greeting:

"Quick summary of the test: Q1 I solved fully with X in O(n log n). Q2 passes most cases. The remaining ones time out because I sort the window every day; the fix is a counting array, which gives O(n·200). Q3…"

Owning failures precisely is a strong SDET signal.

Per-question 60-second card: problem in one line → key insight → algorithm → complexity (time/space) → status → what failed and why → how I'd fix it → how I'd test it.

"How would you test this?" (EBIDPP):

  • Equivalence classes (typical inputs per class)
  • Boundaries (empty, 1 element, max n, min/max values, duplicates, already sorted / reverse sorted)
  • Invalid input (types, malformed lines, negatives, unicode/whitespace)
  • Differential testing against a brute-force oracle on random small inputs
  • Property-based (Hypothesis: invariants such as "output is a permutation" or "sum is preserved")
  • Performance at the maximum constraints (timed)

Then: "in CI, as parametrized pytest cases plus one Hypothesis test."

Expect a follow-up change: "inputs now stream", "make it thread-safe", "add unit tests", "the range is now 10⁹". Practice: for each mock problem, write 4 pytest tests in 5 minutes (Sunday rehearsal).

Screen-share hygiene:

  • Share one window. Close everything else.
  • No Ztalk internals on screen.
  • Think aloud while coding, and say what you're testing before you run it.

If you blank: restate the problem, solve a tiny example by hand, name the brute force and its bottleneck. Interviewers grade the process.


Appendix A — memorize before Tuesday (no docs during the test)

Appendix A — memorize before Tuesday (no docs during the test)

A1. Standard library and templates

import sys, re, math, heapq, bisect
from collections import Counter, defaultdict, deque, OrderedDict
from itertools import groupby, accumulate, combinations, permutations, product, pairwise
from functools import lru_cache, cmp_to_key, reduce
from datetime import datetime, timedelta, timezone

data = sys.stdin.buffer.read().split()        # bulk input (full-program questions)
input = sys.stdin.readline                    # fast line input
cnt = Counter(words); cnt.most_common(3)      # ties keep insertion order -> sort yourself if a tie rule is given
ranked = sorted(cnt.items(), key=lambda kv: (-kv[1], kv[0]))   # count desc, name asc
g = defaultdict(list); g[u].append(v)
q = deque([s]); q.popleft(); q.appendleft(x)
h = []; heapq.heappush(h, (prio, idx, item)); heapq.heappop(h)  # idx = tie-breaker; max-heap: push -x
heapq.nlargest(k, xs, key=f)
i = bisect.bisect_left(a, x)                  # first i with a[i] >= x ; bisect_right: first a[i] > x
bisect.insort(win, x); win.pop(bisect.bisect_left(win, old))     # sorted sliding window
runs = [(k, len(list(grp))) for k, grp in groupby(s)]            # run-length (adjacent only)
pref = list(accumulate(a, initial=0))         # pref[j] - pref[i] = sum(a[i:j])
@lru_cache(maxsize=None)                      # memoized recursion
sorted(xs, key=cmp_to_key(lambda a, b: -1 if a + b > b + a else 1))
re.findall(r'(\w+)=(\d+)', line)              # list of tuples
m = re.match(r'^(?P<ts>\S+) (?P<lvl>[A-Z]+) (?P<svc>\w+)', line); m['lvl']
datetime.strptime('2026-10-27 14:03:22', '%Y-%m-%d %H:%M:%S')
datetime.strptime('Sun 10 May 2015 13:54:36 -0700', '%a %d %b %Y %H:%M:%S %z')
datetime.fromisoformat('2026-10-27T14:03:22Z')  # 3.11+ accepts 'Z'
(t2 - t1).total_seconds(); t + timedelta(minutes=5)
divmod(n, 60); (a + b - 1) // b               # ceil for ints; float('inf') / math.inf
f"{x:.2f}"  f"{n:05d}"  f"{s:>10}"  f"{n:,}"
# BFS on grid
def bfs(grid, sr, sc):
    R, C = len(grid), len(grid[0]); dist = [[-1] * C for _ in range(R)]
    dist[sr][sc] = 0; q = deque([(sr, sc)])
    while q:
        r, c = q.popleft()
        for dr, dc in ((1, 0), (-1, 0), (0, 1), (0, -1)):
            nr, nc = r + dr, c + dc
            if 0 <= nr < R and 0 <= nc < C and grid[nr][nc] != '#' and dist[nr][nc] < 0:
                dist[nr][nc] = dist[r][c] + 1; q.append((nr, nc))
    return dist

# Union-find
parent = list(range(n)); size = [1] * n
def find(x):
    while parent[x] != x:
        parent[x] = parent[parent[x]]; x = parent[x]
    return x
def union(a, b):
    ra, rb = find(a), find(b)
    if ra == rb: return False
    if size[ra] < size[rb]: ra, rb = rb, ra
    parent[rb] = ra; size[ra] += size[rb]; return True

# Topological sort (Kahn) -- cycle if len(order) < n
indeg = [0] * n; adj = defaultdict(list)
for a, b in edges: adj[a].append(b); indeg[b] += 1
q = deque(i for i in range(n) if indeg[i] == 0); order = []
while q:
    u = q.popleft(); order.append(u)
    for v in adj[u]:
        indeg[v] -= 1
        if indeg[v] == 0: q.append(v)

# Dijkstra
dist = {src: 0}; h = [(0, src)]
while h:
    d, u = heapq.heappop(h)
    if d > dist.get(u, math.inf): continue
    for v, w in adj[u]:
        if d + w < dist.get(v, math.inf):
            dist[v] = d + w; heapq.heappush(h, (d + w, v))

# Binary search on the answer: smallest x with ok(x) True (ok is monotone F..F T..T)
lo, hi = LO, HI
while lo < hi:
    mid = (lo + hi) // 2
    if ok(mid): hi = mid
    else: lo = mid + 1

# Variable sliding window (longest substring without repeats)
last = {}; left = best = 0
for right, ch in enumerate(s):
    if last.get(ch, -1) >= left: left = last[ch] + 1
    last[ch] = right; best = max(best, right - left + 1)

# Prefix sum + hashmap (count subarrays summing to k)
seen = Counter({0: 1}); run = ans = 0
for x in nums: run += x; ans += seen[run - k]; seen[run] += 1

# Merge intervals
out = []
for s, e in sorted(iv):
    if out and s <= out[-1][1]: out[-1][1] = max(out[-1][1], e)
    else: out.append([s, e])

# Monotonic stack (days until warmer)
res = [0] * len(T); st = []
for i, t in enumerate(T):
    while st and T[st[-1]] < t:
        j = st.pop(); res[j] = i - j
    st.append(i)

A2. Python gotchas (planted bugs and MCQ material)

  • Mutable default arguments persist across calls → use None and create inside the function.
  • [[0]*m]*n gives n references to one row → use [[0]*m for _ in range(n)].
  • Late-binding closures: [lambda: i for i in range(3)] all return 2 → lambda i=i: i.
  • // floors toward −∞: -7 // 2 == -4. % takes the sign of the divisor: -7 % 2 == 1. round(2.5) == 2 (banker's rounding). Compare floats with math.isclose.
  • is vs ==: never use is for value comparison (only for None).
  • Mutating a dict or set while iterating → RuntimeError. Iterate over list(d).
  • Return values: list.sort() returns None; sorted() returns a new list. Both are stable, which is the trick for multi-key sorts.
  • Generators are exhausted after one pass.
  • finally runs even after a return.
  • Bare except: also catches KeyboardInterrupt/SystemExit → catch except Exception.
  • Copies: shallow (copy.copy, list[:]) vs deep (copy.deepcopy).
  • Hashing: defining __eq__ without __hash__ makes instances unhashable. Use @dataclass(frozen=True) for hashable records.
  • GIL: threads overlap I/O waits but not CPU work → CPU-bound work needs multiprocessing / ProcessPoolExecutor; I/O-bound work can use threads or asyncio. Docs: concurrent.futures.
  • Decorators should use functools.wraps. Context managers (with) guarantee cleanup; pytest yield fixtures follow the same idea.
  • pytest exit codes: 0 all passed · 1 some failed · 2 interrupted · 3 internal error · 4 usage error · 5 no tests collected.

A3. Linux one-liners

grep -c ERROR app.log; grep -E 'ERROR|FATAL' app.log; grep -v DEBUG app.log; grep -rn "timeout" src/; grep -o 'req=[0-9]*' app.log
cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -5      # top-5 IPs (uniq needs sorted input!)
awk '{s[$3]+=$5} END {for (k in s) print k, s[k]}' metrics.txt       # group-sum col 5 by col 3
awk -F, 'NR>1 && $4 > 500 {print $1}' data.csv                       # filter CSV, skip header
sed -n '10,20p' f; sed 's/foo/bar/g' f; sed -i.bak '/^#/d' f          # print range / replace / delete comments
sort -t, -k2,2nr f; tail -f app.log; tr 'a-z' 'A-Z' < f; paste -sd, f; xargs -n1
find . -name '*.log' -mtime -1 -size +10M; du -sh *; df -h
ps aux | grep pytest; kill -15 PID  # SIGTERM (catchable)  vs  kill -9 PID  # SIGKILL (not catchable)
lsof -i :8080; ss -ltnp; curl -sS -o /dev/null -w '%{http_code}\n' "$HEALTH_URL"   # status code only
chmod 755 run.sh; chmod u+x run.sh; ln -s target link; echo $?    # last exit code
set -euo pipefail                                                  # fail fast in CI scripts
cmd > out.log 2>&1; cmd 2>/dev/null; cmd1 && cmd2 || cmd3; nohup cmd &

A4. Complexity budget (Python 3, HackerRank limit 10 s per test case; assume ~10⁷ simple ops/s)

n Feasible
≤ 10 O(n!)
≤ 20 O(2ⁿ·n)
≤ 500 O(n³)
≤ 5·10³ O(n²)
≤ 10⁶ O(n log n) or O(n)
≥ 10⁹ O(log n) / math

Appendix B — MCQ set (mock Part A; **don't read it before Saturday 09:00**)

Appendix B — MCQ set (mock Part A; don't read it before Saturday 09:00)

  1. def add(x, acc=[]): acc.append(x); return acc — then add(1); print(add(2)) → (a) [2] (b) [1, 2] (c) error (d) [[1], 2]
  2. g = [[0]*3]*2; g[0][0] = 1; print(g) → (a) [[1,0,0],[0,0,0]] (b) [[1,0,0],[1,0,0]] (c) error (d) [[1,1,1],[0,0,0]]
  3. print(-7 // 2, -7 % 2) → (a) -3 1 (b) -4 1 (c) -3 -1 (d) -4 -1
  4. fs = [lambda: i for i in range(3)]; print([f() for f in fs]) → (a) [0,1,2] (b) [2,2,2] (c) [0,0,0] (d) error
  5. A runner makes 500 independent HTTP health checks in CPython. The simplest big speed-up: (a) a plain loop (b) ThreadPoolExecutor or asyncio (c) 500 processes (d) no gain is possible because of the GIL
  6. Top-5 most frequent IPs (field 1) in access.log: (a) cut -d' ' -f1 access.log | uniq -c | sort -rn | head -5 (b) cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -5 (c) sort access.log | uniq -c | head -5 (d) awk '{print $1}' access.log | sort -rn | head -5
  7. A CI step runs pytest tests/ and 3 tests fail. The exit code is: (a) 0 (b) 1 (c) 3 (d) 5
  8. A field accepts integers 1–100. The minimal two-sided boundary-value set: (a) 1, 50, 100 (b) 0, 1, 100, 101 (c) −1, 0, 101 (d) 1, 100
  9. A test passes alone but fails intermittently when the full suite runs in random order. Most likely cause: (a) a slow CI machine (b) shared mutable state / order dependency (c) network (d) a wrong assertion
  10. A @pytest.fixture(scope="module") is used by 3 tests in test_a.py and 2 in test_b.py (single process). How many times does the fixture body run? (a) 1 (b) 2 (c) 5 (d) it depends on order
  11. kubectl describe pod shows Last State: Terminated, Reason: OOMKilled, and restarts keep rising. Best next step: (a) raise the readiness-probe timeout (b) compare memory use to resources.limits.memory, then raise the limit or fix the leak (c) switch the Service to LoadBalancer (d) delete the namespace
  12. A container's readiness probe fails while liveness passes. Kubernetes: (a) restarts the container (b) removes the Pod from Service endpoints without restarting it (c) deletes the Deployment (d) reschedules the Pod to another node
  13. Why COPY requirements.txt . + RUN pip install -r requirements.txt before COPY . .? (a) a smaller image (b) layer caching: dependencies only reinstall when requirements change (c) security (d) pip requires it
  14. A typo in the company name on the home page is: (a) high severity, high priority (b) low severity, high priority (c) high severity, low priority (d) low severity, low priority
  15. An agent eval case passes 18/20 runs on model v1 and 15/20 on v2. The right conclusion: (a) v2 regressed 15 points, block the release (b) not significant at this sample size (Fisher exact two-sided p ≈ 0.41), so add trials/cases before deciding (c) the case is flaky, delete it (d) v1 was flaky
  16. 1,000 commits separate the last good build from the first bad one, and each test run takes 20 min. Worst-case bisection time: (a) ~20 min (b) ~3.3 h (≈ 10 runs) (c) ~1 day (d) ~333 h
Answer key

1 b · 2 b · 3 b · 4 b · 5 b · 6 b (uniq only collapses adjacent duplicates) · 7 b (5 = no tests collected) · 8 b · 9 b · 10 b · 11 b · 12 b · 13 b · 14 b · 15 b · 16 b (⌈log₂1000⌉ = 10 runs × 20 min)


Appendix C — SDET-flavored practice tasks (sample outputs checked against reference solutions)

Appendix C — SDET-flavored practice tasks (sample outputs checked against reference solutions)

T1. Flaky-test and regression detector (Fri, 30 min) Input: N, then N lines run_id commit test_name PASS|FAIL duration_ms. Commit order = order of first appearance. Output:

  • For each test with both PASS and FAIL on the same commit: FLAKY <test> <number_of_such_commits>, sorted by count descending, then name.
  • Then, for each test, the first commit where it went from all-PASS (on its previous commit) to all-FAIL: REGRESSION <test> <commit>, sorted by name.
  • If both lists are empty, print NONE.
12
r1 c1 test_login PASS 120
r2 c1 test_login FAIL 3000
r3 c1 test_search PASS 80
r4 c1 test_upload PASS 200
r5 c2 test_login PASS 110
r6 c2 test_search FAIL 95
r7 c2 test_search FAIL 90
r8 c2 test_upload FAIL 5000
r9 c2 test_upload PASS 210
r10 c3 test_login FAIL 2900
r11 c3 test_login PASS 130
r12 c3 test_search FAIL 85

Expected output:

FLAKY test_login 2
FLAKY test_upload 1
REGRESSION test_search c2

Interview extension: which signals would you add (duration variance, error-message variance), and how would you make this a CI job?

T2. Log triage (stretch / Sunday evening) Input: first line N K W, then N lines ISO8601Z LEVEL service latency_ms. Lines are not guaranteed to be sorted. Output:

  • Per service, sorted by name: service total errors error_rate(2dp) p95. p95 uses nearest rank: sorted latencies at index ceil(0.95·n) − 1.
  • Then ALERT service ts for the first ERROR at which ≥ K of that service's ERRORs fall within the closed window [ts − W s, ts].
11 3 60
2026-10-27T14:00:00Z INFO auth 120
2026-10-27T14:00:10Z ERROR auth 900
2026-10-27T14:00:45Z INFO search 80
2026-10-27T14:00:30Z ERROR auth 950
2026-10-27T14:01:05Z ERROR auth 1000
2026-10-27T14:01:20Z ERROR search 300
2026-10-27T14:02:00Z INFO search 70
2026-10-27T14:03:00Z ERROR search 310
2026-10-27T14:03:30Z INFO search 90
2026-10-27T14:03:40Z ERROR search 330
2026-10-27T14:04:10Z INFO auth 110

Expected output:

auth 5 3 60.00 1000
search 6 3 50.00 330
ALERT auth 2026-10-27T14:01:05Z

T3. retry with backoff, plus tests (Fri D1-5 or Sat D2-6, 30 min) Spec: implement retry(fn, attempts=3, base_delay=0.1, factor=2, retry_on=(Exception,), sleep=time.sleep). It calls fn(). On an exception in retry_on, it sleeps base_delay * factor**i and retries. After the last attempt it re-raises the last exception. Other exceptions propagate immediately. attempts < 1 raises ValueError. Write pytest tests for:

  • success on the first call (no sleeps)
  • success on the 3rd call (sleeps [0.1, 0.2], using a recording fake sleep)
  • all attempts exhausted → the original exception is raised
  • a non-retryable exception is not retried
  • attempts=1
  • attempts=0 → ValueError

Use parametrize for the delay sequences. Then add jitter and explain how you'd test randomness: inject the RNG.

T4. REST tasks on the jsonmock fixtures (Sun D3-1). Use urllib.request + json first, then requests. Loop until page == total_pages. Answers were computed 2026-10-22; the data is live but static in practice.

  • A. Total goals Barcelona scored in 2011. Query team1=Barcelona (count team1goals) and team2=Barcelona (count team2goals), all pages: endpoint. Answer: 35 (12 matches). Note that goals come back as strings.
  • B. Top 3 article names by num_comments. Name = title, or else story_title; skip the article if both are null; break ties by name: endpoint. Answer: "UK votes to leave EU" (2531), "F.C.C. Repeals Net Neutrality Rules" (1397), "EU approves internet copyright law, including ‘link tax’ and ‘upload filter’" (1010).
  • C. Count of RUNNING IoT devices and mean operatingParams.rotorSpeed (2 dp): endpoint. Answer: 35 devices, 3087.51.
  • D. Total debit amount per userName (parse strings like "$1,670.57"), top 3: endpoint. Answer: John Oliver 97285.55 · Bob Martin 85250.00 · Helena Fernandez 65445.13.
  • Then write 3 pytest tests for your fetcher without network access: monkeypatch urllib.request.urlopen, or use responses for requests. Cover pagination, an empty result, and an HTTP error.

T5. zeval-lite lab: Zeval's ideas in pytest → CI → Docker → Kubernetes. Use synthetic cases only.

Step 1, Fri D1-5 (60 min): pytest suite

zeval-lite/
  cases/*.json              # 8 synthetic case snapshots
  zeval_lite/agent.py       # fake agent: returns {"verdict", "evidence_used", "route"}
  zeval_lite/metrics.py     # verdict_correct, evidence_completeness, route_agreement
  tests/conftest.py         # session-scoped cached fake judge, report dir via tmp_path_factory
  tests/test_metrics.py     # unit tests for the metrics (parametrize + edge cases: empty evidence, extra evidence)
  tests/test_cases.py       # one parametrized test per case file
  pytest.ini
{"id": "refund-late-delivery-01",
 "input": "My order is 3 days late, I want a refund",
 "evidence": {"order_status": "shipped", "days_late": 3},
 "expected": {"verdict": "eligible", "required_evidence": ["order_status", "days_late"], "route": "refund_flow"}}
# tests/test_cases.py
import json, pathlib, pytest
from zeval_lite.agent import run_agent
from zeval_lite.metrics import verdict_correct, evidence_completeness

CASES = sorted((pathlib.Path(__file__).parent.parent / "cases").glob("*.json"))

@pytest.fixture(params=CASES, ids=lambda p: p.stem)
def case(request):
    return json.loads(request.param.read_text())

def test_verdict(case):
    out = run_agent(case)
    assert verdict_correct(out, case["expected"]), out

def test_evidence_completeness(case):
    assert evidence_completeness(run_agent(case), case["expected"]) == 1.0

@pytest.mark.judge
def test_judge_agrees(case, judge):
    assert judge(case, run_agent(case))["agree"]
# tests/conftest.py
import json, pytest

@pytest.fixture(scope="session")
def judge():
    cache = {}
    def _judge(case, out):
        key = (case["id"], json.dumps(out, sort_keys=True))
        if key not in cache:   # stub: in real life a pinned-model LLM call, cached so reruns are deterministic
            cache[key] = {"agree": out["verdict"] == case["expected"]["verdict"]}
        return cache[key]
    return _judge
# pytest.ini
[pytest]
markers =
    judge: uses the LLM judge (slow, non-deterministic) -- nightly lane only
addopts = -ra --strict-markers

Run: pytest -m "not judge" -q · pytest -n auto · pytest --lf · pytest --junitxml=reports/junit.xml · pytest --cov=zeval_lite --cov-report=term-missing

Step 2, Sat D2-6 (50 min): flakiness + CI

  • Add tests/test_flaky_demo.py with three classic flaky tests:
    1. assert random.random() < 0.9
    2. test A appends to a module-level list, and test B asserts the list is empty
    3. time.sleep(0.01) waiting on a background thread
  • Expose them by running for i in $(seq 20); do pytest -q tests/test_flaky_demo.py || echo "FAIL run $i"; done. pytest-randomly shuffles the order and prints a seed; reproduce with pytest --randomly-seed=<seed>. Then fix each properly: inject the RNG, isolate state with a fixture, wait on an event with a timeout.
  • Write .github/workflows/tests.yml from memory, then compare it with the docs:
name: tests
on:
  pull_request:
  schedule:
    - cron: "0 18 * * *"          # nightly (UTC) -> judge lane
jobs:
  presubmit:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        python-version: ["3.12", "3.13"]
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
          cache: pip
      - run: pip install -r requirements.txt
      - run: pytest -m "not judge" -n auto --junitxml=reports/junit.xml
      - uses: actions/upload-artifact@v4
        if: always()
        with:
          name: junit-${{ matrix.python-version }}
          path: reports/
  nightly-judge:
    if: github.event_name == 'schedule'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-python@v5
        with: { python-version: "3.13", cache: pip }
      - run: pip install -r requirements.txt
      - run: pytest -m judge --reruns 2 --junitxml=reports/judge.xml   # report pass-on-rerun as FLAKY, not PASS
  • Write a one-page flaky policy:
    • definition
    • detection: same-SHA reruns, flip rate
    • quarantine: owner + 7-day SLA, still runs, doesn't gate
    • a rule that reruns are reported, never silently counted as green
    • LLM tests use statistical gates

Step 3, Sun D3-3 (90 min): container + Kubernetes. State of this Mac on 2026-10-22: Docker engine 29.8.2 running via OrbStack (active context), kubectl v1.33.9, no cluster context yet, kind not installed. Docker Hub pulls may need your VPN on (prep days only).

FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENTRYPOINT ["pytest", "-q", "-m", "not judge"]
docker build -t zeval-lite:dev . && docker run --rm zeval-lite:dev; echo "exit=$?"   # break a test -> exit=1
orb start k8s                       # OrbStack's built-in cluster; local images work with a non-:latest tag
kubectl config get-contexts         # expect an 'orbstack' context
# job.yaml
apiVersion: batch/v1
kind: Job
metadata: { name: zeval-lite }
spec:
  backoffLimit: 0
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: tests
          image: zeval-lite:dev
          imagePullPolicy: IfNotPresent
          resources:
            requests: { cpu: "250m", memory: "128Mi" }
            limits:   { cpu: "1",    memory: "256Mi" }
kubectl apply -f job.yaml && kubectl get pods -w
kubectl logs job/zeval-lite; kubectl describe job zeval-lite; kubectl get events --sort-by=.lastTimestamp
kubectl delete job zeval-lite

Failure drills (each one becomes a sentence in story S9):

  1. Add a test that allocates 300 MB with the limit at 256Mi → OOMKilled in describe.
  2. Typo the image tag → ErrImagePull / ImagePullBackOff.
  3. kubectl create deployment web --image=nginx --replicas=3, then kubectl expose deployment web --port=80, then kubectl delete pod <one> → the ReplicaSet recreates it. Next, add a readiness probe on a wrong path → the pod is Running but not Ready, and kubectl get endpoints web is empty.
  4. Say out loud how you'd do fault injection with Chaos Mesh (PodChaos pod-kill, NetworkChaos delay) against a steady-state SLO.

Fallback if OrbStack's Kubernetes won't start: brew install kind && kind create cluster (kind quick start), then kind load docker-image zeval-lite:dev. Spend at most 15 minutes on installs before switching to the docs-only version of G5.


Appendix D — how the URLs were verified (2026-10-22)

Appendix D — how the URLs were verified (2026-10-22)

  • Every URL in this file was fetched with curl -L and a browser user agent (some sites reject plain curl).
    • HackerRank pages: HTTP 200 with the real page title. A bogus slug returns 404.
    • Certification pages: 200 plus the certificate heading. A bogus slug returns 500.
    • Candidate-support articles: 200 with the article title.
    • jsonmock endpoints: 200 with JSON data. The /api/users endpoint returned 400 and isn't used.
  • LeetCode: leetcode.com HTML returns a Cloudflare bot challenge (403) to curl, so every problem and study plan was verified through LeetCode's GraphQL API. All exist, and none are paywalled. Each problem slug was also fetched on leetcode.cn (200 with a real NNN. 标题 title; bogus slugs there show an empty title).
  • Excluded after checking:
    • 6 premium LeetCode problems (listed in §2).
    • toxiproxy.io, which now redirects to an unrelated betting site. The GitHub repo is linked instead.
    • Two PyPI pages that returned a bot "Client Challenge" (pytest-xdist and responses). Readthedocs/GitHub links are used instead.
    • The HackerRank Regex domain page and /dashboard, which land on the logged-in dashboard.
  • NVIDIA's AI-tools policy page could not be located by curl, so no URL is given. The rule as you were told it (unapproved outside AI tools such as ChatGPT during interviews means disqualification) is the operating assumption throughout.