cswork / libraryOpen practice workspace

Interview guides · Cboe

Cboe Software Engineer Interview Guide

Cboe Software Engineer interview guide: reported rounds, questions and how candidates describe the process.

The 60-second brief

As a Software Engineer at Cboe (Cboe Global Markets), you will be building and maintaining the foundational technology powering one of the world's largest exchange holding companies. Cboe operates multi-asset market centers across options, futures, equities, FX, and digital assets globally. Your code directly handles high-volume market feeds, mission-critical order routing, trade matching engine logic, risk management systems, and specialized web tools. Operating in a domain where microsecond latencies, zero-downtime reliability, and high throughput are paramount, your engineering contributions directly safeguard market integrity and drive global liquidity. In this role, you will work across high-performance, multi-threaded backend services and intuitive real-time monitoring tools.

This guide is scoped to a Software Engineer candidate at Cboe.

Focus areas

  • Order Book / Trading Domain Modeling
  • Take-Home Coding Assignments
  • Market Trades Data Processing

The Cboe interview process

Cboe candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.

Recruiter Call

Initial 30-minute introductory phone call focusing on background, technical interests, and alignment with Cboe's engineering culture.

What to demonstrate

  • Initial 30-minute introductory phone call focusing on background, technical interests, and alignment with Cboe's engineering culture
  • Depth in Order Book / Trading Domain Modeling

How to prepare

  • Be able to walk your CV end to end in two minutes, and say why this company specifically.
  • Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.

Take-Home Challenge

Candidates receive a take-home coding challenge centered around real-world domain logic.

What to demonstrate

  • Candidates receive a take-home coding challenge centered around real-world domain logic
  • Depth in Order Book / Trading Domain Modeling

How to prepare

  • Answer aloud and timed: How do you extract individual digits or characters from a formatted number input (e.g., transforming 123 into 1, 2, 3) using efficient memory structures in Python?
  • Answer aloud and timed: Write a SQL query to aggregate trade volumes across specific instrument IDs and retrieve the top trading records over a given time window.

Final Interview

Multi-part virtual panel or on-site session with technical and behavioral rounds, including review of take-home solution.

What to demonstrate

  • Multi-part virtual panel or on-site session with technical and behavioral rounds
  • Including review of take-home solution

How to prepare

  • Answer aloud and timed: What are log notation complexities (O(1)O(1), O(log⁡n)O(\log n), O(n)O(n)) for key data structure operations, and how do they influence real-time execution speeds?
  • Answer aloud and timed: Describe how you would design and implement a production-ready limit order book that ingests trade messages and executes sample orders efficiently.

Where candidates lose points

Treat the take-home assignment like production code

Format your code cleanly, include a thorough README with build/run instructions, handle edge cases gracefully, and write comprehensive unit tests.

Be ready to explain every design choice

During the code review round, expect interviewers to ask why you chose specific data structures (such as a HashMap versus a balanced tree) and how your design scales.

Review core financial terminology

Spend 30 minutes familiarizing yourself with foundational trading concepts like limit orders, order execution, market data feeds, put/call options, and futures.

Drink plenty of water and stay energized during the final panel interview stage

You will speak with multiple engineers and leaders across back-to-back sessions.

Questions & practice

How do virtual functions and virtual constructors operate in C++, and what occurs if an exception is thrown fr

Medium · Technical & Language Fundamentals

How do virtual functions and virtual constructors operate in C++, and what occurs if an exception is thrown from a constructor or destructor?

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

What are the key differences between various Java collections (e.g., HashMap, TreeMap, ArrayList), and how do

Medium · Technical & Language Fundamentals

What are the key differences between various Java collections (e.g., HashMap, TreeMap, ArrayList), and how do they manage memory and collision under load?

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

How do you extract individual digits or characters from a formatted number input (e.g., transforming 123 int

Medium · Technical & Language Fundamentals

How do you extract individual digits or characters from a formatted number input (e.g., transforming 123 into 1, 2, 3) using efficient memory structures in Python?

Approach

  1. Say what the runtime actually does before reasoning about the code.
  2. Name what is shared across threads and what owns each piece of state.
  3. Identify the window where an invariant is briefly untrue.
  4. Distinguish a value from a reference to it, and say which one you handed out.

Follow-up

  • What happens if two callers reach this at the same time?
  • Where could this allocate more than you expect?

What are log notation complexities (O(1)O(1), O(log⁡n)O(\log n), O(n)O(n)) for key data structure operations, and how do

Medium · Technical & Language Fundamentals

What are log notation complexities (O(1)O(1), O(log⁡n)O(\log n), O(n)O(n)) for key data structure operations, and how do they influence real-time execution speeds?

Approach

  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Name the brute-force solution and its complexity before improving on it.
  3. Choose the data structure from the access pattern, not from familiarity.
  4. State the target complexity and say which constraint rules the naive version out.

Follow-up

  • How does this change if the input no longer fits in memory?
  • What is the worst case, and how likely is it on real data?

Write a SQL query to aggregate trade volumes across specific instrument IDs and retrieve the top trading recor

Medium · Technical & Language Fundamentals

Write a SQL query to aggregate trade volumes across specific instrument IDs and retrieve the top trading records over a given time window.

Approach

  1. Name the grain you start from and join outward from it.
  2. Check whether any join is one-to-many before aggregating, or the sums inflate.
  3. Say which index the query would use, and what makes it unusable.
  4. Handle the rows that do not match: that is usually the actual question.

Follow-up

  • How does the query change if that join becomes one-to-many?
  • What happens to this when the table is ten times larger?

Write the update path that detects a concurrent edit

Medium · optimistic concurrency · transactional outbox · audit history

resource carries version INT NOT NULL DEFAULT 1. resource_revision holds revision_id, resource_id, version, actor_user_id, change_kind, patch JSONB, request_id, created_at with UNIQUE (resource_id, version). outbox_event holds aggregate_type, aggregate_id, aggregate_version, event_type, payload, status. A PUT carries the version the client read. Write the exact statements for the single transaction that applies the edit, records the revision and enqueues 'resource.updated', and give the handler's branch on zero affected rows. Then say what PostgreSQL 16 does under READ COMMITTED when two of these updates hit one row at once.

Approach

  1. One transaction, three writes, no network call inside it: UPDATE resource SET title = 3,version=version+1,updatedat=now()WHEREresourceid=3, version = version + 1, updated_at = now() WHERE resource_id = 1 AND tenant_id = 4ANDversion=4 AND version = 2; then INSERT the resource_revision row at version $2 + 1; then INSERT the outbox_event row at the same aggregate_version. The event goes to a table rather than a broker because no transaction spans both.
  2. Branch on the affected-row count before doing anything else. Zero has three causes — stale version, wrong tenant, row gone — so re-read once and map to 409 carrying the current version, or 404 for an id outside the caller's tenant, which also stops the endpoint confirming that another tenant's id exists.
  3. State the engine behaviour instead of assuming it. Under READ COMMITTED the second UPDATE blocks on the row lock, and when the first commits PostgreSQL re-evaluates the WHERE clause against the newly committed row, so the version predicate now fails and the statement reports zero rows. Under REPEATABLE READ the identical collision raises SQLSTATE 40001 instead, so the handler must fold both shapes into one conflict response.
  4. Keep UNIQUE (resource_id, version) even though the predicate already serialises writers. It is what makes a lost update unwritable if any other path ever reaches the revision table, and it converts a logic bug into 23505 rather than into a silently missing history row.

Follow-up

  • A client sends the version it read ten minutes ago and the resource has moved three versions. What is in your 409 so it can resolve the conflict without a full re-fetch?
  • Two editors, two disjoint fields, no overlap. Does your answer still refuse the second write, and should it?

Describe how you would design and implement a production-ready limit order book that ingests trade messages an

Medium · Systems & Domain Architecture

Describe how you would design and implement a production-ready limit order book that ingests trade messages and executes sample orders efficiently.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

How do you approach cross-platform deployment when moving a web application between Windows and Linux environm

Medium · Systems & Domain Architecture

How do you approach cross-platform deployment when moving a web application between Windows and Linux environments?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Walk through your process for parsing fixed-format text files containing raw trade data and aggregating the to

Medium · Systems & Domain Architecture

Walk through your process for parsing fixed-format text files containing raw trade data and aggregating the top 10 instruments by volume.

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

Explain basic financial derivative concepts: what is a put option, a call option, a futures contract, and how

Medium · Systems & Domain Architecture

Explain basic financial derivative concepts: what is a put option, a call option, a futures contract, and how are these modeled in code?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

How would you approach string encoding and decoding to ensure space efficiency and rapid serialization over a

Medium · Systems & Domain Architecture

How would you approach string encoding and decoding to ensure space efficiency and rapid serialization over a network socket?

Approach

  1. Fix the scope first: who calls this, how often, and what they do when it fails.
  2. Name the read and write paths separately; they rarely have the same bottleneck.
  3. Choose a partition key and say what query it makes expensive.
  4. State the consistency you need, and where you are willing to be stale.

Follow-up

  • What breaks first when traffic grows ten times?
  • How does this behave when that dependency is down for an hour?

One customer endpoint stalls deliveries to every other destination

Medium · bulkhead · timeouts · saturation

The egress service delivers about 1.5k webhooks/second across 40,000 destinations, with a per-destination concurrency cap of 4 and a 10-second connect-plus-read timeout. Throughput falls to 300/second, queue depth climbs, and p99 delivery latency for unaffected destinations goes from 200 ms to minutes, while the error rate barely moves. One tenant holds 900 destination rows whose URLs share a hostname that now answers in 9.5 seconds. Explain the mechanism with the arithmetic, then give the containment in the order you would apply it.

Approach

  1. Look at saturation before errors. A flat error rate with collapsing throughput says nothing is failing, things are waiting, so the first signal to pull is in-flight request count or pool wait time rather than the error counter. This is the distinction that decides the whole investigation.
  2. Group in-flight work by resolved host, not by destination id. The cap is keyed per destination row, so 900 rows sharing one hostname buy 3,600 concurrent slots against a single host, each held for 9.5 seconds. The bulkhead was never a bulkhead for that host, and grouping by the wrong dimension is why the dashboard looked healthy.
  3. Do the arithmetic in both directions. Required concurrency is arrival rate times latency, so 1.5k/second at 200 ms needs about 300 in flight, which is entirely consumed by 3,600 slow slots; conversely whatever concurrency is left sustains rate equals concurrency divided by 9.5 seconds, which is the 300/second you are seeing. Matching both numbers is what promotes this from a plausible story to the mechanism.
  4. Explain why the circuit breaker never helped. It opens on consecutive failures, and a 9.5-second response inside a 10-second timeout is a success. Slow is not failing, so an error-rate breaker cannot see this; you need a slow-call ratio, a deadline propagated from the caller's remaining budget, or a concurrency limiter.

Follow-up

  • The host recovers to 80 ms. How long does the queue take to drain, and what does the drain do to the recovered host?
  • Where should the 10-second timeout number actually come from?

Suggested practice checklist

Built from the rounds and topics Cboe candidates report.

Day 1 — Map the Cboe loop

  • Write out the reported sequence: Recruiter Call, Take-Home Challenge, Final Interview.
  • For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.

Deliverable: A one-page map of the 3 reported rounds, with the weakest marked.

Day 2 — Work Order Book / Trading Domain Modeling

  • Spend the session on Order Book / Trading Domain Modeling, which Cboe candidates report being tested on.
  • Write one worked example in Order Book / Trading Domain Modeling and time yourself on it.

Deliverable: One timed worked example in Order Book / Trading Domain Modeling.

Day 3 — Work Take-Home Coding Assignments

  • Spend the session on Take-Home Coding Assignments, which Cboe candidates report being tested on.
  • Write one worked example in Take-Home Coding Assignments and time yourself on it.

Deliverable: One timed worked example in Take-Home Coding Assignments.

Day 4 — Work Market Trades Data Processing

  • Spend the session on Market Trades Data Processing, which Cboe candidates report being tested on.
  • Write one worked example in Market Trades Data Processing and time yourself on it.

Deliverable: One timed worked example in Market Trades Data Processing.

Day 5 — Answer out loud: Technical & Language Fundamentals

  • Answer aloud, timed: How do virtual functions and virtual constructors operate in C++, and what occurs if an exception is thrown from a constructor or destructor?
  • Answer aloud, timed: What are the key differences between various Java collections (e.g., HashMap, TreeMap, ArrayList), and how do they manage memory and collision under load?

Deliverable: Spoken answers to 2 reported Technical & Language Fundamentals question(s), under time.

Day 6 — Answer out loud: Systems & Domain Architecture

  • Answer aloud, timed: Describe how you would design and implement a production-ready limit order book that ingests trade messages and executes sample orders efficiently.
  • Answer aloud, timed: How do you approach cross-platform deployment when moving a web application between Windows and Linux environments?

Deliverable: Spoken answers to 2 reported Systems & Domain Architecture question(s), under time.

Day 7 — Answer out loud: Behavioral & Team Collaboration

  • Answer aloud, timed: Tell me about a situation where you had to lead a complex software project or solve an ambiguous technical problem under tight deadlines.
  • Answer aloud, timed: Why are you interested in working for Cboe, and how do our corporate values align with your professional goals?

Deliverable: Spoken answers to 2 reported Behavioral & Team Collaboration question(s), under time.

Behavioural preparation

Behavioural rounds judge the decision you made and what it cost.

Tell me about a situation where you had to lead a complex software project or solve an ambiguous technical pro

Medium · Behavioral & Team Collaboration

Tell me about a situation where you had to lead a complex software project or solve an ambiguous technical problem under tight deadlines.

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Why are you interested in working for Cboe, and how do our corporate values align with your professional goals

Medium · Behavioral & Team Collaboration

Why are you interested in working for Cboe, and how do our corporate values align with your professional goals?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Describe a time when you received constructive critique during a code review and how you adapted your implemen

Medium · Behavioral & Team Collaboration

Describe a time when you received constructive critique during a code review and how you adapted your implementation.

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

How do you prioritize trade-offs between delivery speed and deep technical perfection when designing enterpris

Medium · Behavioral & Team Collaboration

How do you prioritize trade-offs between delivery speed and deep technical perfection when designing enterprise software?

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?

Where do you see your technical trajectory progressing over the next three to five years?

Medium · Behavioral & Team Collaboration

Approach

  1. Pick a story where you made the decision, not one where you watched it.
  2. State the situation in two sentences and spend the rest on the reasoning.
  3. Give the blast radius: what could have broken, and what you measured.
  4. Name the disagreement and how you resolved it with evidence.

Follow-up

  • What would you do differently if you ran that again?
  • How did you know your change caused the improvement?