# Software Engineer
**Role:** Software Engineer · **Level:** L3
**Company:** [Optiver](https://scaleengineer.com/companies/optiver)
**Difficulty:** Medium
**Salary:** US$90000 - US$120000
**Experience:** 1 - 3
**Timeline:** ~14 days
The Software Engineer L3 interview at Optiver is designed to assess a candidate's foundational knowledge in computer science, problem-solving abilities, and coding proficiency. It typically involves a mix of technical and behavioral questions to evaluate a candidate's fit for the role and the company culture.
Canonical: https://scaleengineer.com/interviews/optiver/l3-software-engineer
---
## Overall evaluation

- Technical Skills
- Communication
- Behavioral and Cultural Fit

## Questions asked

- Write a function to reverse a linked list.
- Given an array of integers, find the two numbers that add up to a specific target.
- Explain the difference between TCP and UDP.
- Describe a challenging project you worked on and your role in it.
- How would you design a URL shortener service?
- What is a deadlock and how can it be prevented?
- Tell me about a time you failed. What did you learn from it?
- Implement a function to find the kth smallest element in a binary search tree.

## Preparation tips

### lists

- Strengthen your understanding of fundamental data structures (arrays, linked lists, trees, graphs, hash maps) and algorithms (sorting, searching, dynamic programming, graph traversal).
- Practice coding problems on platforms like LeetCode, HackerRank, or AlgoExpert, focusing on medium-difficulty problems.
- Review core concepts of object-oriented programming (OOP) and your primary programming language (Java or C++).
- Prepare to discuss your past projects, highlighting your contributions, challenges faced, and solutions implemented.
- Understand basic system design principles and be ready to discuss trade-offs.
- Research Optiver's business, its trading philosophy, and the technologies it uses.
- Prepare behavioral questions using the STAR method (Situation, Task, Action, Result).

### studyPlan

- {"title":"Data Structures","longDescription":"Weeks 1-2: Focus on Data Structures. Cover arrays, linked lists, stacks, queues, trees (binary trees, BSTs, heaps), hash tables, and graphs. Understand their time and space complexity for common operations. Practice implementing them and solving problems related to them.","shortDescription":"Weeks 1-2: Data Structures (Arrays, Lists, Trees, Graphs, Hash Tables). Complexity analysis."}
- {"title":"Algorithms","longDescription":"Weeks 3-4: Focus on Algorithms. Cover sorting algorithms (bubble, insertion, merge, quick), searching algorithms (binary search), recursion, dynamic programming, greedy algorithms, and graph algorithms (BFS, DFS, Dijkstra's). Practice solving problems using these algorithms.","shortDescription":"Weeks 3-4: Algorithms (Sorting, Searching, DP, Greedy, Graph Traversal). Problem-solving practice."}
- {"title":"Core CS Concepts & System Design Basics","longDescription":"Week 5: Focus on Object-Oriented Programming (OOP) principles (encapsulation, inheritance, polymorphism, abstraction) and your primary language's specific features. Also, start reviewing basic system design concepts like scalability, availability, and load balancing.","shortDescription":"Week 5: OOP concepts, Language specifics, Basic System Design."}
- {"title":"Behavioral & Company Research","longDescription":"Week 6: Practice behavioral questions using the STAR method. Prepare stories for common scenarios like teamwork, conflict resolution, handling failure, and leadership. Research Optiver and prepare questions to ask the interviewer.","shortDescription":"Week 6: Behavioral questions (STAR method), Company research, Prepare questions."}

## Location differences

- {"location":"Amsterdam","differences":{"tips":["Be prepared to discuss your past projects in detail.","Practice coding problems on a whiteboard or paper.","Research Optiver's trading strategies and technologies."],"interviewFocus":["Understanding of core Java/C++ concepts","Problem-solving skills","Ability to write clean and efficient code","Communication skills"],"commonQuestions":["Explain the difference between a process and a thread.","Describe a situation where you had to debug a complex issue. How did you approach it?","How would you design a system to handle real-time stock price updates?"]}}
- {"location":"Chicago","differences":{"tips":["Brush up on your knowledge of distributed systems and cloud computing.","Prepare examples of teamwork and conflict resolution.","Understand the specific challenges of high-frequency trading environments."],"interviewFocus":["System design principles","Concurrency and multithreading","Data structures and algorithms","Behavioral aspects and teamwork"],"commonQuestions":["What are the advantages of using a distributed system?","Describe a time you disagreed with a team member. How did you resolve it?","How would you optimize a database query for performance?"]}}
- {"location":"Shanghai","differences":{"tips":["Review common data structures and algorithms.","Be ready to discuss your approach to software testing.","Showcase your passion for technology and continuous learning."],"interviewFocus":["Algorithmic thinking","Code quality and testing","Understanding of different programming paradigms","Enthusiasm for learning new technologies"],"commonQuestions":["Explain the concept of Big O notation and its importance.","How do you ensure the quality of your code?","What are your thoughts on functional programming?"]}}

## Round 1: Coding Challenge
**Type:** Technical Interview - Coding · **Difficulty:** Medium · **Duration:** 45 min
Solve coding problems involving data structures and algorithms.
This round focuses on assessing your core programming skills and problem-solving abilities. You will be asked to solve one or two coding problems, typically involving data structures and algorithms. The interviewer will expect you to write clean, efficient, and correct code, and to explain your thought process throughout the problem-solving exercise.
**Interviewers look for:** Ability to translate a problem into code.; Understanding of time and space complexity.; Clean and maintainable code.; Logical thinking and problem-solving skills.
**Evaluation criteria:** Correctness of the solution; Efficiency of the solution (time and space complexity); Code clarity and style; Problem-solving approach; Communication of the solution
**Common rejection reasons:** Inability to solve coding problems within the given time.; Poor code quality (not readable, inefficient, buggy).; Lack of understanding of fundamental data structures and algorithms.; Inability to explain the thought process clearly.
## Questions

- Given a binary tree, check if it is a valid Binary Search Tree.
- Find the first non-repeating character in a string.

## Preparation tips

- Practice coding on a whiteboard or in a simple text editor without IDE assistance.
- Think out loud and explain your approach before you start coding.
- Test your code with edge cases.
- Be prepared to discuss alternative solutions and their trade-offs.

## Round 2: System Design
**Type:** Technical Interview - System Design · **Difficulty:** Medium · **Duration:** 45 min
Design a scalable software system.
This round evaluates your ability to design scalable and reliable software systems. You'll be presented with a high-level problem (e.g., design a URL shortener, a social media feed, or a rate limiter) and expected to discuss various aspects of the design, including data storage, APIs, scalability, and potential bottlenecks.
**Interviewers look for:** Ability to think about systems at a higher level.; Understanding of distributed systems concepts.; Pragmatic approach to problem-solving.; Ability to handle ambiguity.
**Evaluation criteria:** Understanding of scalability and performance.; Ability to design a robust and maintainable system.; Knowledge of common system components (databases, caches, load balancers).; Trade-off analysis and justification of design choices.; Clarity of communication.
**Common rejection reasons:** Lack of understanding of system design principles.; Inability to handle scale or performance considerations.; Poor trade-off analysis.; Difficulty in communicating design choices.
## Questions

- Design a system to track the top N trending items on a website.
- How would you design a distributed cache?

## Preparation tips

- Study common system design patterns and architectures.
- Understand concepts like load balancing, caching, database sharding, and message queues.
- Practice designing systems for scale.
- Be prepared to justify your design decisions and discuss alternatives.

## Round 3: HR / Behavioral Round
**Type:** Behavioral Interview · **Difficulty:** Easy · **Duration:** 30 min
Assess cultural fit, motivation, and behavioral competencies.
This is typically an initial screening or a final round conducted by HR. It focuses on your background, motivations, career goals, and cultural fit. You'll be asked behavioral questions to understand how you handle various workplace situations and to assess your alignment with Optiver's values.
**Interviewers look for:** Genuine interest in Optiver and the role.; Positive attitude and enthusiasm.; Ability to work effectively in a team.; Self-awareness and reflection.; Good communication skills.
**Evaluation criteria:** Cultural fit with Optiver.; Motivation and passion for software engineering.; Teamwork and collaboration skills.; Communication and interpersonal skills.; Alignment with company values.
**Common rejection reasons:** Lack of enthusiasm or interest in the role/company.; Poor communication or interpersonal skills.; Inability to provide specific examples for behavioral questions.; Mismatch in cultural values.; Unrealistic salary expectations.
## Questions

- Why are you interested in working at Optiver?
- Tell me about a time you had to work with a difficult colleague.
- What are your strengths and weaknesses?

## Preparation tips

- Be prepared to talk about your resume and why you are interested in Optiver.
- Research Optiver's mission, values, and culture.
- Prepare examples using the STAR method for common behavioral questions.
- Have thoughtful questions ready to ask the interviewer about the role, team, or company.
