DRW Online Assessment full analysis | analysis of real questions and test preparation strategies

1,464 Views

DRW 是全球最顶尖的自营交易公司之一,其招聘以数学密度高、淘汰率高著称。不同于一般投行的行为题筛选,DRW 的 OA 直接把概率论、Markov Chain、期权定价和图论算法砸到你面前,限时作答,没有退路。本文整合 Programhelp 平台上多位真实候选人的一手反馈,深度拆解 DRW Online Assessment 的考察逻辑与完整面试流程,帮你在这条竞争最激烈的量化赛道上,提前建立压倒性的优势。

DRW Online Assessment full analysis | analysis of real questions and test preparation strategies

DRW Recruiting Timeline

Step 01 Online application

Submit your application on the DRW official website and receive an OA invitation within about 1 week. Some positions support employee referral, which can speed up the process. It is recommended that the resume highlight mathematics competitions, programming projects, or quantitative research experience.

Step 02 OA

  • Quant direction: 6 mathematics/statistics questions, about 45 minutes to complete within a time limit, including linear algebra, probability theory, Markov Chain, etc. According to feedback from candidates, one question was deliberately designed to be unanswerable to examine the candidate's mentality in the face of uncertainty.
  • Dev direction: Codility platform, 3 programming questions (Easy + Medium + Hard), covering string processing, greedy algorithm, graph theory matching, about 2 hours.

The completion window is usually 72 hours. It is recommended to complete the answer in a quiet environment with a stable network.

Step 03 Phone Screen

About 30 minutes, mainly talking about background motivation (Why DRW? Why Quant?) and a simple mental arithmetic test. The pace is relatively relaxed, but be prepared with a clear motivation statement.

Step 04 Technical Interview

Hosted by a Junior Quant Trader or Fellow, approximately 45 minutes. Examine probability statistics, expected value calculation, Market Making logic, as well as basic questions such as normal distribution and confidence interval. The Quant Researcher position will also cover ML model issues.

Step 05 Superday

Go to Chicago (or Zoom), Day 1 will be registration + communication in the afternoon, and Day 2 will be a full-day interview. Covers data analysis tasks, Trading Game (poker/dice game), back-to-back technical and behavioral interviews. DRW emphasizes that the social activities on Day 1 are equally important to the final decision and does not recommend absence.

DRW / Codility 6 real questions sharing

Topic 1: Game life value calculation

Question description

Imagine a video game in which a player controls a character through multiple levels. The character's initial health is InitialHealth, the health value will change as the level progresses.

Given an array of integers Deltas, indicating the change in health value at each level. No. I Off (counting from 0) will cause the character's current health to change Deltas[i].

Rule:

  • When a character's health becomes less than 0, it is immediately set to 0.
  • When a character's health becomes greater than 100, it is immediately set to 100.

Your task is: calculate and return the character's final health after passing all levels.

Problem-solving ideas

Just simulate it directly:

  1. Initialization CurrentHealth = initialHealth
  2. Traverse Deltas Array, updated each time CurrentHealth += deltas[i]
  3. After each update, the CurrentHealth Limited to [0, 100] Between
  4. Return after traversal CurrentHealth

Java implementation

Public class Solution {
    public int solution(int initialHealth, int[] deltas) {
        int current = initialHealth;
        for (int delta : deltas) {
            current += delta;
            if (current  100) current = 100;
        }
        return current;
    }
}

Question 2: Matching subarray patterns

Question description

Given an array of integers Numbers And an array representing the comparison pattern Pattern, find out Numbers How many subarrays are there with the given Pattern Match.

Pattern The array contains only the following integers:

  • Pattern[i] = 1: The number at the corresponding position is greater than the previous numberBig
  • Pattern[i] = 0: The number corresponding to the position and the previous numberEqual
  • Pattern[i] = -1: The number at the corresponding position is greater than the previous numberSmall

Question guarantee Numbers.length > pattern.length.

Problem-solving ideas

Violent matching is sufficient (meeting the time complexity requirements of the question):

  1. The length of the subarray must be Pattern.length + 1
  2. Traverse all possible starting positions I, check from I Does the starting subarray match? Pattern
  3. Count the number of matching subarrays

Java implementation

Public class Solution {
    public int solution(int[] numbers, int[] pattern) {
        int count = 0;
        int m = pattern.length;
        int n = numbers.length;
        
        for (int i = 0; i <= n - m; i++) {
            boolean match = true;
            for (int j = 0; j < m; j++) {
                int curr = numbers[i + j + 1];
                int prev = numbers[i + j];
                if (pattern[j] == 1 && curr = prev) match = false;
            }
            if (match) count++;
        }
        return count;
    }
}

Question 3: Matrix drawing letter Y

Question description

Given a N×n The square matrix (N Is an odd number), the matrix contains only numbers 0,1,2. You can change the numbers in any grid to 0,1 Or 2.

The goal is to figure out how to draw the letters in the matrix Y The minimum number of modifications required.

Letter Y Definition:

  1. Constitute Y All numbers are equal: the diagonal line from the top left to the center, the diagonal line from the top right to the center, and all squares vertically downward from the center.
  2. All does not constitute Y The grid numbers of are all equal, and they form Y The numbers are different.

Problem-solving ideas

Enumerate all 6 possible color combinations, calculate the number of grids that need to be modified for each combination, and take the minimum value:

  • Y=0, background=1 / Y=0, background=2
  • Y=1, background=0 / Y=1, background=2
  • Y=2, background=0 / Y=2, background=1

Java implementation

Public class Solution {
    public int solution(int[][] matrix) {
        int n = matrix.length;
        int center = n / 2;
        boolean[][] isY = new boolean[n][n];
        
        // Mark the position of Y
        for (int i = 0; i < center; i++) {
            isY[i][i] = true;
            isY[i][n - 1 - i] = true;
        }
        for (int i = center; i < n; i++) {
            isY[i][center] = true;
        }
        
        int[][] pairs = {{0,1}, {0,2}, {1,0}, {1,2}, {2,0}, {2,1}};
        int minChanges = Integer.MAX_VALUE;
        
        for (int[] pair : pairs) {
            int yColor = pair[0];
            int bgColor = pair[1];
            int changes = 0;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    if (isY[i][j]) {
                        if (matrix[i][j] != yColor) changes++;
                    } else {
                        if (matrix[i][j] != bgColor) changes++;
                    }
                }
            }
            minChanges = Math.min(minChanges, changes);
        }
        return minChanges;
    }
}

Topic 4: Number flipping matching

Question description

Definition FlipDigits Function: Reverse the numerical order of an integer and remove all leading zeros from the result.

For example:FlipDigits(5070) = 705,FlipDigits(800) = 8.

Given an array of non-negative integers Arr, calculate the number pairs that satisfy the following conditions (i,j) Quantity:

  • I ≤ j
  • Arr[i] + flipDigits(arr[j]) = arr[j] + flipDigits(arr[i])

Problem-solving ideas

Transformation of the equation:Arr[i] - flipDigits(arr[i]) = arr[j] - flipDigits(arr[j])

So, we only need to count each (x - flipDigits(x)) The number of times a value appears can be calculated using the number of combinations.

Java implementation

Import java.util.*;

public class Solution {
    public long solution(int[] arr) {
        Map countMap = new HashMap();
        for (int x : arr) {
            long key = x - flipDigits(x);
            countMap.put(key, countMap.getOrDefault(key, 0L) + 1);
        }
        
        long total = 0;
        for (long cnt : countMap.values()) {
            total += cnt * (cnt + 1) / 2;
        }
        return total;
    }
    
    private long flipDigits(int x) {
        long res = 0;
        while (x > 0) {
            res = res * 10 + (x % 10);
            x /= 10;
        }
        return res;
    }
}

Question 5: Construct a string in which each letter appears an odd number of times

Question description

Write a function that, given an integer N, returns a N Lowercase letters (A-z), it is required that the number of occurrences of each letter that appears is an odd number.

Problem-solving ideas

  • When N When it is an odd number: use it directly N Indivual 'a' That’s it ('a' Occurs an odd number of times).
  • When N When it is an even number: use (N-1) Indivual 'a' And 1 'b' That's it (both letters appear an odd number of times).

Python implementation

Def solution(N):
    if N % 2 == 1:
        return 'a' * N
    else:
        return 'a' * (N - 1) + 'b'

Question 6: Minimum number of exchanges to minimize the difference between two numbers

Question description

Given two numeric strings S And T, you can exchange the numbers at the corresponding positions. The goal is to make the absolute value of the difference between the two numbers as small as possible and find the minimum number of exchanges.

Problem-solving ideas

Dynamic programming: bit-by-bit processing, maintaining the minimum number of exchanges of the three states:

  • Dp[0]: The current two number prefixes are exactly equal
  • Dp[1]:current S Prefix ratio T Big prefix
  • Dp[2]:current S Prefix ratio T Small prefix

Java implementation

Public class Solution {
    public int solution(String S, String T) {
        int n = S.length();
        int[] dp = new int[]{0, n + 1, n + 1};
        
        for (int i = 0; i  bVal) next[1] = Math.min(next[1], dp[0] + cost);
            else if (aVal < bVal) next[2] = Math.min(next[2], dp[0] + cost);
            else next[0] = Math.min(next[0], dp[0] + cost);
        }
        if (dp[1] != Integer.MAX_VALUE) next[1] = Math.min(next[1], dp[1] + cost);
        if (dp[2] != Integer.MAX_VALUE) next[2] = Math.min(next[2], dp[2] + cost);
    }
}

Recommended exam preparation resources

  • Tradermath.org: Mental arithmetic and probability question bank
  • A Practical Guide to Quant Finance Interviews(Green Paper)
  • LeetCode/Codility:Dev Track essential
  • Kaggle: Python data analysis exercises
  • DRW Official Exam Preparation Guide

Additional recommendation: If you want to systematically improve your OA pass rate and interview performance, it is highly recommended to learn about Programhelp. Their seniors provide professional OA practical assistance , prediction of real questions, code optimization and high-intensity mock interviews can help you quickly fill in your weaknesses and significantly improve the efficiency of exam preparation.

Students in need can directly contact Programhelp for details, and they will give you a targeted plan based on your situation.

author avatar
Jory Wang Amazon Senior Software Development Engineer
Amazon senior engineer, focusing on the research and development of infrastructure core systems, with rich practical experience in system scalability, reliability and cost optimization. Currently focusing on FAANG SDE interview coaching, helping 30+ candidates successfully obtain L5/L6 Offers within one year.
END
 0