← Back to Directory

Citadel interview notes, page 7 of 14

Large Enterprises

Most of these Citadel write-ups come from Software Engineers (106), then Data Scientists (33) and Machine Learning Engineers (1). The most reported rounds are the technical phone screen (111), the system design round (16), the onsite coding round (4) and the behavioral / leadership round (3).

140 interview notes · updated Oct 2026

Citadel·Software Engineer·Technical Phone Screen

May 2026
Citadel SWE interview with a code optimization problem. You get a slow but correct C++ function and have to make it fast, which sounds straightforward until you're actually staring at it under pressure.
  • You're given a correct but slow C++ function. Identify the bottleneck through complexity analysis and refactor it for significantly better performance, preserving the original signature and behavior. The expected solution is only a few lines.

“The key was recognizing the O(N^2) loop and knowing which structure to swap in.”

View Post

Citadel·Software Engineer·Recruiter / HR Screen

May 2026
Standard Citadel recruiter screen for a software engineering role. Four questions, all pretty much what you'd expect from an HR call: background, motivation, values, and the NYC relocation conversation.
  • Walk me through your background and tell me about your current role, including what your team does and what you work on day to day.
  • What's prompting you to explore new opportunities and consider leaving your current company?
  • What matters most to you when you're evaluating a new company or role?
  • Are you open to relocating to New York City, and if so, what would the compensation package need to look like for that to make sense for you?

“Pretty standard opener.”

View Post

Citadel·Software Engineer·Onsite - Behavioral / Leadership

May 2026
Behavioral round at Citadel for a software engineer role, focused entirely on conflict and how you handle disagreement with teammates. Pretty standard setup but the follow-ups had some teeth to them.
  • Tell me about a conflict you had with a teammate, such as a disagreement over technical direction, priorities, code quality, or ownership. What was the situation, what did you actually do, and what came out of it?
  • How do you handle conflict when you're not the one with decision-making authority?
  • What do you do when you genuinely believe the other person is objectively wrong, not just a matter of preference?
  • Looking back at a past conflict, what would you do differently?

“This is the kind of question where you think you have a good story until you're halfway through it and realize it sounds like you were the difficult one.”

View Post

Citadel·Software Engineer·Technical Phone Screen

May 2026
Citadel quant engineer interview, technical phone screen focused on factor research fundamentals. One meaty question on look-ahead bias that had more layers than I expected going in.
  • How do you figure out whether a quantitative factor is accidentally using future data? Walk through your diagnostic process.

“I started with the formula review angle, which was fine, but I underweighted how much they wanted to hear about point-in-time database joins specifically.”

View Post

Citadel·Software Engineer·Technical Phone Screen

May 2026
One technical question, full stop. Citadel quant researcher screen that was basically a single optimization theory problem and then you're done. Sparse but not easy.
  • Consider the quadratic optimization problem: minimize x^T Q x + c^T x, where Q and c are real-valued. Under what conditions does this problem have a finite minimum?

“This looks clean on paper but there's a lot packed in.”

View Post

Citadel·Software Engineer·Onsite - System Design / Architecture

May 2026
Citadel system design round for a software engineering role. The whole interview was a single escalating problem about a per-key call counter, starting trivial and getting progressively more painful. Walked away feeling like I held up okay on parts 1 and 2 but fumbled some of the cross-process nuance in part 3.
  • Design and implement a per-key call counter with a single method that increments the count for a given string key and returns the new count. Start with a single-threaded, in-process implementation and explain precisely why it breaks under concurrent access.
  • Make the counter thread-safe and compare at least two or three distinct approaches, covering correctness, contention, memory, and complexity. Which would you recommend by default and why?
  • Now extend the counter to work across multiple independent processes on the same host. Why do the Part 2 techniques fail here, and what are your options?
  • How would you handle unbounded key growth? What eviction or TTL policy would you use, and how does eviction interact with the exact-count guarantee?
  • Your single-owner local service is a single point of failure. How do you make it durable and restart-safe without losing or double-counting increments?
  • Under extreme contention on a small number of hot keys, how do you sustain throughput while still returning an exact per-call count to each caller?

“The basic version is just a map with a default of zero, nothing hard there.”

View Post

Citadel·Software Engineer·Technical Phone Screen

Jun 2026
Citadel software engineer interview with a classic DP stock trading problem. Nothing too surprising if you've done your LC hard prep, but the constraint on k transactions is the part that trips people up.
  • Given an integer k and a prices array, find the maximum profit you can make with at most k buy-sell transactions, where you can only hold one share at a time.

“The three-dimensional DP state is what gets you: day, number of transactions used, and whether you're currently holding.”

View Post

Citadel·Software Engineer·Onsite - System Design / Architecture

Jun 2026
Citadel system design round, probably for a quant dev or software engineering role. The whole thing was one long question about a stock price recording system and they really wanted you to go deep on the trade-offs, not just sketch a class diagram and call it done.
  • Design a system that supports two operations on stock prices: inserting a price for a ticker at a given timestamp, and querying the price for a ticker at a specific time (returning the most recent recorded price at or before that time). Walk through in-memory data structures, persistence, out-of-order inserts, scaling to many tickers, and read vs. write trade-offs.

“This one sprawled in every direction.”

View Post

Citadel·Data Scientist·Technical Phone Screen

Jun 2026
Citadel Data Scientist interview with a classic DP problem on stock trading. The coding focus was tight and technical, basically one meaty algorithmic question with a specific complexity requirement attached.
  • Given an array of daily stock prices and an integer K, write Python code to find the maximum profit possible using at most K buy-sell transactions. The interviewer asked for a bottom-up dynamic programming solution running in O(K·N) time and O(N) space.

“The complexity constraint is what made this annoying.”

View Post

Citadel·Software Engineer·Technical Phone Screen

Jun 2026
Citadel software engineer interview, technical round focused almost entirely on C++ memory management internals. They wanted a full working SharedPtr implementation from scratch, not just pseudocode, which I wasn't quite expecting at that depth.
  • Implement a templated SharedPtr<T> class in C++ with full reference-counting semantics, including default, raw pointer, copy, and move constructors, copy and move assignment, destructor, and the standard dereference and access operators.
  • How would you make the reference count in your SharedPtr implementation thread-safe?
  • What are the trade-offs between a separate control block and an intrusive reference count, and how does that relate to supporting weak_ptr?
  • Explain the aliasing constructor for shared_ptr and when you'd actually use it.
  • What are the pitfalls of reference-counted smart pointers with cyclic ownership, and how does weak_ptr address that?

“I started with the control block struct and the constructor from a raw pointer, which felt like the right entry point.”

View Post