Whatnot

Whatnot Software Engineer Interview Questions

13+ questions from real Whatnot Software Engineer interviews, reported by candidates.

13
Questions
1
Round Types
8
Topic Areas

Round Types

Phone 13

Top Topics

Questions

## Problem Determine whether a string can become a palindrome by removing at most one character. ## Likely LeetCode equivalent Directly matches Valid Palindrome II (LC 680). ## Tags strings, two_pointers, whatnot

## Problem Given n versions where the first bad version causes all subsequent ones to be bad, find the first bad version using binary search. ## Likely LeetCode equivalent Directly matches First Bad Version (LC 278). ## Tags binary_search, whatnot

## Problem Group a list of strings into anagram clusters, where each cluster contains strings that are anagrams of each other. ## Likely LeetCode equivalent Directly matches Group Anagrams (LC 49). ## Tags hash_table, strings, sorting, whatnot

## Problem Find the K points closest to the origin from a list of 2D coordinates using Euclidean distance. ## Likely LeetCode equivalent Directly matches K Closest Points to Origin (LC 973). ## Tags heap, math, sorting, whatnot

## Problem Search for a target value in a 2D matrix with sorted rows and columns using an efficient traversal. ## Likely LeetCode equivalent Similar to Search a 2D Matrix II (LC 240). ## Tags matrix, binary_search, whatnot

## Problem Find the minimum length substring of a source string that contains all characters of a target string. ## Likely LeetCode equivalent Directly matches Minimum Window Substring (LC 76). ## Tags sliding_window, strings, hash_table, whatnot

## Problem Rate-limit notification delivery, ensuring no more than N notifications are sent within a sliding time window. ## Likely LeetCode equivalent Similar to Design Hit Counter (LC 362) or sliding window rate limiter. ## Tags sliding_window, queue, whatnot, rate_limit

## Problem Count the number of islands (connected groups of 1s) in a 2D binary grid using DFS or BFS. ## Likely LeetCode equivalent Directly matches Number of Islands (LC 200). ## Tags graph, matrix, bfs, dfs, whatnot

## Problem Compute ranking scores for items or users based on weighted criteria and return the top-K ranked results. ## Likely LeetCode equivalent Similar to Top K Frequent Elements (LC 347) with custom scoring. ## Tags heap, sorting, whatnot, ranking

## Problem Compute the dot product of two sparse vectors represented as index-value pairs, efficiently skipping zeros. ## Likely LeetCode equivalent Directly matches Dot Product of Two Sparse Vectors (LC 1570). ## Tags arrays, hash_table, two_pointers, whatnot

## Problem You are given a string and a sequence of transformation rules. Each rule is one of: - `REPLACE a b` — replace all occurrences of `a` with `b` - `REVERSE` — reverse the string - `TRUNCATE n` — keep only the first `n` characters - `REPEAT n` — repeat the string `n` times - `IF len>n THEN rule` — apply `rule` only if current string length > `n` Apply the rules in order and return the final string. ```python def apply_rules(s: str, rules: list[str]) -> str: pass ``` ## Example ``` Input: s = "hello" rules = [ "REPLACE l r", "REVERSE", "IF len>4 THEN TRUNCATE 3", "REPEAT 2" ] Steps: REPLACE l->r: "herro" REVERSE: "orreh" IF len(5)>4: TRUNCATE 3 -> "orr" REPEAT 2: "orrorr" Output: "orrorr" ``` ## Follow-ups 1. How would you add nested conditionals (`IF ... THEN IF ... THEN ...`)? 2. How do you detect rule sequences that could produce exponentially long strings (REPEAT inside a loop)? 3. What parsing technique (recursive descent vs. regex) works best for this grammar?

## Problem Build a content moderation system that flags messages containing unsafe words. Blocklist entries can be: - Exact strings: `"badword"` - Wildcards: `"bad*"` (prefix match) - Phrase patterns: `"buy * now"` (any word in the middle) The filter should be case-insensitive and must not flag safe words that contain the blocked substring (e.g., blocking `"ass"` should not flag `"assistant"`). ```python class ContentFilter: def add_rule(self, pattern: str) -> None: def is_unsafe(self, text: str) -> bool: def get_violations(self, text: str) -> list[str]: # returns matched patterns ``` ## Example ``` filter = ContentFilter() filter.add_rule("spam") filter.add_rule("buy * now") filter.is_unsafe("Buy cheap products now!") -> True # matches "buy * now" filter.is_unsafe("This is spam") -> True filter.is_unsafe("I am not a spammer") -> False # word-boundary safe filter.get_violations("Buy it now or spam") -> ["buy * now", "spam"] ``` ## Follow-ups 1. How do you enforce word-boundary matching efficiently at scale? 2. How would you handle Unicode normalization and leetspeak obfuscation (`sp4m`, `s.p.a.m`)? 3. With 100K rules and 10K messages/second, how do you make this performant (Aho-Corasick, regex compilation)?

## Problem You have a table of user events: `(user_id, event_name, ts)`. A **funnel** is an ordered list of event names that a user must complete in sequence (though non-funnel events may occur in between). For each user, determine whether they completed the funnel and, if so, the time elapsed from the first to last funnel step. ```sql -- events: user_id VARCHAR, event_name VARCHAR, ts TIMESTAMP -- Example funnel: ['view_product', 'add_to_cart', 'checkout', 'purchase'] SELECT user_id, MIN(CASE WHEN event_name = 'view_product' THEN ts END) AS step1_ts, MIN(CASE WHEN event_name = 'add_to_cart' AND ts > MIN(CASE WHEN event_name = 'view_product' THEN ts END) THEN ts END) AS step2_ts -- ... continue for each step FROM events GROUP BY user_id; ``` ## Example ``` user_id | event_name | ts alice | view_product | 10:00 alice | browse | 10:05 <- not in funnel, skipped alice | add_to_cart | 10:10 alice | purchase | 10:30 <- skipped checkout; funnel incomplete bob | view_product | 09:00 bob | add_to_cart | 09:05 bob | checkout | 09:10 bob | purchase | 09:15 -> completed in 15 min ``` ## Follow-ups 1. How do you define and handle funnel re-entry (user completes the funnel twice)? 2. What query pattern works best for this in BigQuery (ARRAY_AGG + filtering vs. self-joins)? 3. How would you compute funnel conversion rates by user segment (e.g., mobile vs. desktop)?

What Whatnot Looks for in Software Engineer Interviews

Whatnot Software Engineer interviews are calibrated against the level and scope expected of the role. Across 13+ verified candidate reports on LeakCode, the consistent signals interviewers look for: clear problem decomposition before coding, explicit complexity reasoning, structured handling of edge cases, and the ability to articulate trade-offs between two reasonable approaches.

The discriminator between candidates who advance and candidates who do not is rarely the final correctness of the solution. It is the path to the solution: did you ask clarifying questions, did you state your approach before coding, did you handle edge cases without prompting, and did you communicate your reasoning throughout. Reports tagged "no hire" frequently cite a working solution with poor communication; reports tagged "strong hire" cite clear thinking even when the final solution was incomplete.

How To Use This Question Set

Real interview reports are a calibration tool, not a memorization target. Companies update their question pools every 2-4 months; memorizing exact problems risks misleading you when the interviewer uses a variant. The high-leverage use: identify the patterns that appear repeatedly in Whatnot Software Engineer reports, practice those patterns on similar (not identical) problems, and use the reports to understand the interviewer's typical follow-up depth.

Filter the questions below by round type, difficulty, and recency. Focus first on reports from the past 6-12 months; older reports may reference questions that have since rotated out of Whatnot's pool. Reports tagged with quantified difficulty (e.g., "medium-hard") are higher-signal than reports without difficulty tags.

Round-by-Round Expectations

Whatnot Software Engineer loops typically span 4-6 rounds across phone screens and on-site or virtual on-site interviews. The structure varies by company: some run 1 recruiter screen + 1 technical phone + 3-4 on-site rounds; others run 1 recruiter screen + 1 OA + 4-5 on-site rounds. The recruiter screen is logistics and culture-light; the technical phone screen is medium-difficulty coding; the on-site loop covers coding, system design (at L4+ levels), and behavioral rounds.

Each round is designed to surface a specific signal. Coding rounds: correctness, code quality, complexity reasoning, communication. System design rounds: requirements clarification, design judgment, operational thinking. Behavioral rounds: ownership scope, leadership, ambiguity tolerance, conflict navigation. Strong candidates explicitly hit each signal dimension out loud during the round; weak candidates focus only on solving the prompt.

Common Interview Mistakes At This Combination

Reports tagged "no hire" at Whatnot Software Engineer commonly cite: jumping into code without clarifying requirements, coding silently for 10+ minutes without verbalizing approach, missing edge cases (empty input, single element, very large input, overflow), and producing a working solution that the candidate cannot explain or refactor when probed. Strong candidates avoid these patterns by following a consistent template: clarify, verbalize approach, code with narration, test with examples.

Behavioral and design rounds have their own failure modes. Behavioral: stories that use "we" instead of "I" diluting individual signal, stories with no quantified outcome, defensiveness when probed about failure. Design: not asking clarifying questions, not stating requirements out loud, designing for a single server when the prompt clearly implies scale, ignoring operational concerns (deployment, monitoring, rollback). These show up in roughly half of Whatnot Software Engineer interview retrospectives on LeakCode.

See All 13 Whatnot Software Engineer Questions

Full question text, answer context, and frequency data for subscribers.

Get Access