HackTheRounds Interview Experiences

Anthropic SDE Interview Experience (2026) - Banking System OA, Claude Serving Design, Offer

Anthropic SDE loop from a fintech backend engineer: 90 minute banking CodeSignal OA, hiring manager code review, Claude chat serving design, and AI ethics behav

By Anonymous ยท 2026-03-28

Background

I applied to Anthropic's SDE loop fresh out of a four-year infra stint at a fintech, without any ML background and with mild imposter syndrome about the whole "AI company" angle. What surprised me is how little of the loop was about ML. The hardest filter was a ninety-minute CodeSignal banking system take-home that had nothing to do with language models and everything to do with whether you can layer features cleanly under a tight clock.

Timeline

Total: about 5.5 weeks.

Recruiter Call (30 min)

Pure screening. The recruiter was trying to establish two things: do you understand what Anthropic is actually building, and are you thoughtful enough about AI safety to not say something disqualifying on an onsite round. She asked me to explain Constitutional AI in my own words, not in buzzwords. I had read the paper the week before and walked through the critique-and-revise loop at a high level: the model critiques its own output against a set of written principles, then rewrites to better match, and this self-correction signal trains the reward model.

She also asked about B Corp certification. I had the honest-version answer ready: it's a third-party signal that the company is legally committed to stakeholder interests beyond just shareholder returns, and Anthropic was the first AI lab to pursue it, which is consistent with the safety framing.

The thing I realized after the call is that she was grading verbal fluency, not correctness. If you can say these things out loud without stalling, you clear the call. If you hesitate, she probably passes you anyway, but it sets the tone for the rest of the loop.

Coding Challenge (90 min CodeSignal Take-Home)

This is the round that eats candidates.

Problem: Implement a BankingSystem class. The hidden test suite grades you in tiers and each tier builds on the previous:

  1. Create account
  2. Deposit funds
  3. Transfer funds between accounts
  4. Pay bills (with delayed cashback on a schedule)
  5. Query transaction history
  6. Merge two accounts (balances, histories, and pending cashback all combine)
  7. Query cashback status
  8. Query current balance

Ninety minutes for all eight tiers. The spec does not explicitly mention concurrency, but the hidden test suite reportedly probes race conditions, and leaving obvious non-atomic windows quietly fails you on later tiers.

The design decision that paid off was committing to a single global lock instead of fine-grained per-account locking. Every public method starts by acquiring the lock, resolves the caller's account through a merge-redirect map, and then executes. A lazy cashback queue (sorted by fire time) is drained at the start of every operation so cashback is always applied before any read.

My single regret is that I spent the first twelve minutes reading and note-taking. In hindsight, eight minutes of reading + rough data structure sketch was enough. The coding on the last two tiers always takes longer than you think, and I ran out of time with six lines left to write on the cashback-after-merge path. I still got a "strong" overall score from the recruiter.

Practice it: [[problem/330?company=7|Banking System]]

Hiring Manager Call (60 min)

Two halves. First half was a project deep dive. I picked a migration project I had led from a legacy monolithic transaction processor to a Kafka-based event-sourced architecture, and I got drilled for about thirty-five minutes on specific design choices. Why Kafka over Kinesis. How we handled exactly-once versus at-least-once. What the rollback plan looked like when a consumer fell behind. How we validated the cutover without doubling writes to both systems.

Second half was a code-review exercise. Three short snippets across Python, Go, and TypeScript, maybe forty lines each. I had to narrate what each snippet did, flag bugs, and suggest improvements.

  • The Python snippet had a default-argument mutation trap where a list was shared across function calls.
  • The Go snippet had a goroutine that captured a loop variable by reference and reported the wrong index on the channel.
  • The TypeScript snippet had a `Promise.all` that would cancel none of the pending promises if one rejected, leaking work after the error surfaced.

I caught all three. The HM later told me the round filters for readers, not just writers. Engineers at Anthropic spend a lot of time reading unfamiliar code in languages outside their primary stack, so reading fluency matters.

Practice it: [[problem/595?company=7|Stack Traces Parser with Denoising]]

Onsite Round 1: Coding โ€” Recipe Manager

Problem: Build a RecipeManager that supports adding recipes, querying which recipes can be made given current pantry contents, and consuming pantry items when a recipe is "cooked." Pantry items have expiration dates; expired items cannot be used.

The data structure I landed on was a dict of ingredient - list of (quantity, expires at) tuples kept sorted by expiration, so that "earliest-expiring first" consumption is a simple pop. Recipes are stored as a dict of ingredient - required quantity . The "can I cook this" check sums non-expired quantities and compares.

The follow-up pushed on a realistic wrinkle: what if multiple recipes compete for the same pantry item and you want to maximize the total number of cookable recipes? I sketched a greedy solution (pick recipes in order of lowest ingredient demand first) and flagged that it is not optimal in general; the optimal version is assignment-style and belongs in a linear-programming or bipartite-matching setting. The interviewer was happy with the honest scope-down.

Practice it: [[problem/593?company=7|Recipe Manager]]

Onsite Round 2: System Design โ€” Claude Chat Service

Problem: Design the serving infrastructure behind Claude.ai so a single autoregressive decoder can serve many concurrent chat sessions without each session waiting for the others to finish.

I built up the architecture in layers. Edge request router handling auth and rate limits. A batching layer that groups in-flight sessions for continuous-batch decoding on the GPU. A per-session KV cache on device for hot sessions, with eviction to CPU then to disk as idleness grows. Streaming back to the client over server-sent events. A safety filter at both pre-generation and sampling time that can abort mid-token if the rolling distribution suggests a policy breach.

The interviewer pressed on batching. "What happens if one user sends a ten-thousand-token prompt? Does their prefill stall everyone else?" My answer: split prefill and decode into separate scheduler queues, prioritize short decode work so it does not get starved by long prefills. She said that matches how Anthropic's actual scheduler works.

Last fifteen minutes we got into monitoring. Where would you add logging and sampling hooks to catch jailbreak attempts or reward hacking? I proposed sampling full logit distributions for a fraction of requests and running them through an offline alignment evaluation pipeline, with alerts that fire when distribution drift crosses a threshold.

Practice it: [[problem/334?company=7|Design Distributed Model Deployment]]

Onsite Round 3: Coding โ€” Task Manager with Priority Scheduling

Problem: Implement a task scheduler that accepts tasks with priority and estimated duration, supports task preemption by higher-priority arrivals, and exposes queries for current queue state and completed tasks.

This was the round I almost blew because I over-engineered the data structure. I started reaching for a Fibonacci heap because "priority with decrease-key" and got gently steered back to a standard binary heap plus a supplementary dict tracking active tasks. Decrease-key is implementable in a standard heap with the "lazy deletion" pattern: mark the old entry stale, push a new entry with the updated priority, skip stale entries at pop time.

The follow-up was about persistence. If the scheduler process dies, what survives? I sketched a write-ahead log of operations written before each mutation is applied, so that replay on restart reconstructs the exact queue state.

Practice it: [[problem/331?company=7|Task Manager System]]

Onsite Round 4: Behavioral + AI Ethics

Half behavioral, half ethics. The behavioral half was standard: disagreement stories, production-incident stories, feedback-delivery stories. The ethics half is where Anthropic's loop differs from anything else.

Questions I got:

  • Where is the line between a model refusing to help because it cannot and because it should not?
  • If a paying customer wanted the model to help them draft a persuasive political ad, what is your framework for deciding whether to comply?
  • How would you measure quantitatively whether a deployed model has become less honest over time?
  • What categories of AI misuse do you personally worry about in the next twelve months?

The interviewer was not fishing for company-approved answers. She wanted to see that I could hold two genuinely conflicting considerations at once without collapsing to one side. My most honest answer was to the third question, about measuring honesty. I said the hard part is not the metric, it is the ground truth, and that any scalable metric has to triangulate across human evaluation, benchmark consistency, and behavioral probes because no single signal is load-bearing. She wrote something down after that.

Result

Offer call on a Friday. SDE level 3, San Francisco, with a compensation structure that was lower on base than my current fintech but higher on equity. I took three days to decide and signed.

Tips

  1. The banking OA is the single largest filter of the loop. Allocate a full weekend to practicing incremental feature layering. Start from "create account and deposit" and build all eight tiers from scratch, with timing, at least twice before the real OA. The skill being tested is pacing, not algorithms.
  2. Single global lock beats fine-grained locking on a take-home. Fancy lock sharding is a trap that eats time. One lock, every public method, done. Reserve the exotic locking for interview follow-up discussion.
  3. Prep a second-language code review. The HM round will pull code in a language you do not use daily. I prepped by reading the Go source of a small open-source project for an hour a day the week before, because Go was my weak link.
  4. For the Claude serving design, know the vLLM vocabulary. Prefill, decode, continuous batching, KV cache eviction, speculative decoding. Having these words at your disposal lets you have a real conversation with the interviewer instead of an unstructured one.
  5. For the ethics round, do not memorize corporate safety talking points. Interviewers at Anthropic are active researchers; they can tell within one answer whether you are repeating a press release or thinking out loud. Pick two or three AI policy questions you genuinely have opinions on and be prepared to defend them under pushback.
  6. Do not confuse the SDE track with the Research Engineer track. I know two people who prepped the RE material (RLHF internals, CAI derivation) and then got hit with the banking OA and spent the first ten minutes panicking. The SDE loop is a systems loop. Prep systems problems.