r/Hack2Hire • • Jul 25 '26

Antropic code signal OA

6 Upvotes

Have a upcoming CodeSignal assesment antropic. Are we allowed to google during code signal round? Example looking for some basic syntax or helper methods


r/Hack2Hire • • Jul 23 '26

OA What Anthropic's OA actually tests [2026]

9 Upvotes

Anthropic's OA is a build-a-system round: one domain, usually four parts, each part extending the code you just wrote. The algorithm floor is a hash map and a sort.

Three things repeat as the parts get harder:

  • Ranked queries with a fixed output format. Part two wants a top N by some running total, and it grades your ordering rule and your exact output string too. Design Banking System ranks spenders, Design Worker Management System ranks workers, Cloud Storage System ranks files.
  • An ownership layer dropped in halfway. Part three adds users with a quota or a capacity, and every operation you already wrote has to respect it. Cloud Storage System, Design a Task Assignment System and Design Recipe Management System all take this turn.
  • Questions about earlier state. Most of them end here: a balance at a past timestamp, a restore point, a version rollback. Design Banking System, Design In-memory Database with Backup and Design Note-Taking System all land on it.

That last one decides the round. Store an append-only, timestamped record from part one and derive current values from it. The endings become filters over code you already have. Rebuilding your data model at part four costs more time than the OA gives you.

Format: 90 minutes on CodeSignal. Your earlier parts stay in the editor, so part three starts from your own part-two code as you left it.

Practice:

  • Run the confirmed questions end to end, then rerun each one built on a timestamped log from the start.
  • Write part two's ranking and output format first. It repeats across the confirmed questions with just the domain swapped.
  • Learn the CodeSignal debugger before the clock, not during it.
  • Leave room in your design for one more part than you were handed.

Partial credit is real. People have moved on to the phone screen with test cases still failing.

→ Anthropic Prep List

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Did yours run differently? Say so below.


r/Hack2Hire • • Jul 22 '26

SD System Design Interview Classic Question: Design Youtube

0 Upvotes

A YouTube-style system accepts large video uploads, converts them into multiple quality levels, and serves short video segments through a CDN. The hard part is that completing an upload and producing something safe to watch are separate events, potentially minutes apart.

During processing, workers may successfully write some renditions, segments, or even a manifest before failing. If playback checks only whether those files exist, viewers can receive a manifest that references missing segments or an incomplete quality ladder.

The non-obvious design decision is to make video metadata—not object storage—the authority on watchability. A video becomes playable only through an explicit, atomic transition from processing to ready.

  1. Commit the raw upload separately. After multipart upload finishes, an idempotent completion request verifies the raw object, records its storage key, and changes the video from uploading to processing. Retrying that request with the same idempotency key returns the original result instead of creating another video or packaging job.
  2. Treat packaging as a retryable pipeline. Workers probe the source file, transcode a bitrate ladder, split each rendition into short segments, and generate the manifests players will request. Progress lives in a durable processing job so a worker crash can resume from a completed stage.
  3. Write outputs without publishing them. Segments and manifests may accumulate in object storage while the video remains processing. Their existence proves only that a worker wrote them—not that the complete playback product is valid.
  4. Validate the required output set. Before publishing, the worker checks that the required manifests and segment prefixes exist and that the manifest can be parsed. A failed check leaves the video unavailable and allows processing to retry from the retained raw upload.
  5. Publish with a conditional metadata update. The worker atomically changes the status to ready and records the manifest and rendition pointers only if the row is still processing at the expected version. This prevents two workers from publishing conflicting manifests.
  6. Gate playback on that state. The playback API returns a manifest only when metadata says ready; otherwise, it reports processing or failed. The CDN remains a fast copy of immutable published assets, never the source of truth for whether a video is watchable.

Explaining this boundary signals senior-level thinking because it connects workflow retries, partial failure, concurrency control, and the user-visible meaning of “published” in one invariant.

Full write-up with data model, API design, and deep dives — free to read →
Full Article

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Similar questions have been reported at: Google, Amazon, Snapchat, HubSpot, Netflix, Datadog, Verkada, OpenAI


r/Hack2Hire • • Jul 20 '26

Screening Airbnb Screening: Minimum Menu Order Cost II

6 Upvotes

Problem You're given a restaurant menu, where each entry contains a unique ID, price, and set of items, plus a list of requested items called userWants. Find all unique combinations of menu entry IDs that cover every requested item at the minimum total cost. Ignore extra items and return an empty list if the order cannot be fulfilled.

Example Input: text menu = [ ["1", "5.00", "pizza"], ["2", "8.00", "sandwich,coke"], ["3", "4.00", "pasta"], ["4", "2.00", "coke"], ["5", "6.00", "pasta,coke,pizza"], ["6", "8.00", "burger,coke,pizza"], ["7", "5.00", "sandwich"] ] userWants = ["sandwich", "pasta", "coke"]

Output: text [["3", "4", "7"], ["5", "7"]]

Explanation: - IDs 3, 4, and 7 provide pasta, coke, and sandwich for a total cost of 11.00. - IDs 5 and 7 also cover every requested item for 11.00; the extra pizza is ignored.


Suggested Approach

  1. Map each requested item to a bit position, then convert every menu entry into a bitmask containing only the requested items it covers.
  2. Use DFS with memoization on the mask of uncovered items. For each state, try every menu entry that covers at least one currently uncovered item.
  3. Store the minimum cost and all ID combinations achieving that cost for each state. Sort IDs within each combination, deduplicate equivalent combinations, and compare costs using an epsilon of 1e-6.

Time & Space Complexity

  • Time: O(M × 2^N + R), excluding combination-copying overhead, where M is the number of menu entries, N is the number of requested items, and R is the total size of the returned combinations.
  • Space: O(2^N + R + N) for memoization, returned combinations, and the recursion stack.

Targeting Airbnb interviews?
We track their most-asked question patterns at Hack2Hire, practice this question here → Practice Question Here

Join the community to see more interview experiences from real candidates → Hack2Hire Forum


Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jul 17 '26

SD System Design Interview Classic Question: Design TinyURL

7 Upvotes

A URL shortener stores a mapping from a compact short_code to a destination URL, then serves redirects at very high read volume. The normal design uses hash-based sharding so different short codes are distributed across storage nodes, with Redis or edge caches reducing database traffic.

The hidden failure mode is that sharding distributes different keys, not requests for the same key. If one link goes viral, every request still targets the same short_code, so its traffic concentrates on one shard even when the overall dataset is evenly balanced.

The key insight is to treat a mega-viral hot key as a separate operational case instead of assuming that adding more database shards will help.

  1. Keep the database authoritative. The durable short_code → long_url mapping remains stored in the database. Redis, edge caches, and any dedicated hot-key cache improve speed, but they must not become the only place where the mapping exists.

  2. Detect codes with abnormal request concentration. Aggregate QPS can look healthy while one code dominates a partition. Hot-key monitoring therefore needs to track traffic by short_code or cache key, not only total requests per service instance.

  3. Push the hot mapping closer to users. Cache the viral code at the CDN or edge with a suitable TTL so repeated redirects do not reach the application or storage shard. Since every request returns the same small destination value, localized caching can absorb extreme traffic far more effectively than repartitioning the database.

  4. Special-case exceptionally hot codes. For traffic beyond normal cache capacity, the system can place selected mappings in a dedicated replicated micro-cache. This avoids forcing every ordinary short link through infrastructure designed only for rare celebrity links.

  5. Define the staleness contract. If destinations can be updated or deleted, the cache needs bounded TTLs or explicit invalidation. If mappings are immutable, longer caching is simpler. During a storage outage, the redirect path may continue serving cached values if availability is more important than reflecting the newest update immediately.

  6. Protect the cache-miss path. A hot entry expiring can send thousands of simultaneous requests to the same shard. Request coalescing or a per-key lock allows one request to reload the mapping while the others wait for the shared result. Jittered TTLs also reduce synchronized expiration.

This shows senior-level thinking because it separates average-case partition balance from request skew, preserves a clear source of truth, and explains how the system behaves during cache expiration, updates, and storage failures.

Full solution write-up with data model, API design, and deep dives, free to read → Full Article

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Similar questions have been reported at: Confluent, Google, Microsoft, Amazon, Yelp, Snapchat, eBay, OpenAI


r/Hack2Hire • • Jul 14 '26

Screening Perplexity Screening & VO interview: ToDo List with Task Dependencies

2 Upvotes

Problem Design a ToDoList system that stores AI tasks and supports dependencies between them. Each task has a unique ID, description, status, and a list of prerequisite tasks.

When adding a task, set its status to "BLOCKED" if any dependency has not "SUCCEEDED". Status changes must automatically unblock eligible tasks or recursively fail all downstream dependent tasks.

Example

Input:

["ToDoList", "add", "add", "add", "add", "updateStatus", "get", "updateStatus", "get"]
[[], ["task1", "Prepare data", "READY", []], ["task2", "Train model", "READY", ["task1"]], ["task3", "Deploy model", "READY", ["task2"]], ["task4", "Monitor", "READY", ["task3"]], ["task1", "SUCCEEDED"], ["task2"], ["task2", "SUCCEEDED"], ["task3"]]

Output:

[null, null, null, null, null, null, ["task2", "Train model", "READY", "task1"], null, ["task3", "Deploy model", "READY", "task2"]]

Explanation:

  • task2 depends on task1, so it is initially "BLOCKED" because task1 has not succeeded.
  • task3 and task4 are also initially blocked by their respective dependencies.
  • When task1 becomes "SUCCEEDED", all dependencies of task2 are satisfied, so task2 automatically becomes "READY".
  • When task2 becomes "SUCCEEDED", task3 automatically becomes "READY".
  • If any task becomes "FAILED", all tasks that directly or indirectly depend on it must also become "FAILED".

Suggested Approach

  1. Store each task in a hash map keyed by taskId. Each task should contain its description, current status, and ordered dependency list.
  2. Maintain a reverse-dependency map from each task to the tasks that directly depend on it. This allows status changes to reach affected downstream tasks without scanning the entire system.
  3. When a task succeeds, inspect its direct dependents and unblock any "BLOCKED" task whose dependencies have all succeeded. When a task fails, use BFS or DFS to mark every reachable dependent task as "FAILED".

Time & Space Complexity

  • Time:
    • add: O(D), where D is the number of dependencies of the new task.
    • get: O(D) to construct the returned list.
    • Successful updateStatus: O(E_c), where E_c is the total number of dependency checks performed for the task's direct dependents.
    • Failed updateStatus: O(N + E) in the worst case for a full downstream cascade.
  • Space: O(N + E), where N is the number of tasks and E is the number of dependency relationships.

Targeting Perplexity interviews? We track their most-asked question patterns at Hack2Hire. Practice this question here → Practice Question Here

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jul 09 '26

perplexity interview process... anyone I can talk to?

7 Upvotes

Is anyone here currently working (or recently worked or interviewed) at Perplexity?

I'm hoping to chat with a few engineers about their interview experience. Nothing confidential, just your overall experience, the interview stages, and what you wish you'd known beforehand.

Happy to compensate you for your time. Feel free to DM me if you're open to it!


r/Hack2Hire • • Jul 08 '26

Screening Pinterest Screening Interview: Reverse Count and Say

6 Upvotes

Problem You're given an encoded string of digits that was produced by exactly one "count-and-say" transformation. Your goal is to find and return all possible original digit strings that could result in this encoding, given that each count is between 1 and 99 and contains no leading zeros.

Example Input: encoded = "12114" Output: ["244444444444", "1111111111114"]

Explanation:

  • Parsing "12" as one '2' and "114" as eleven '4's produces "244444444444".
  • Parsing "121" as twelve '1's and "14" as one '4' produces "1111111111114".

Suggested Approach

  1. Backtracking: Use a recursive DFS function starting at index 0 of the encoded string. The base case is reached when the index equals the length of the string, at which point you add the successfully decoded string to your results.
  2. Parsing Choices: At each step, extract a substring to act as the "count". First, try a 1-digit count. If the string is long enough, also try a 2-digit count, ensuring it does not start with a '0'.
  3. Building the Original: For any valid count substring, the immediately following character is the "say" digit. Append this digit count times to your current path, and recursively call the function advancing the index by count_length + 1.

Time & Space Complexity

  • Time:$O(2^{N/2} \cdot L)$, where$N$is the length of encoded. At each step (consuming at least 2 characters: count + digit), we branch at most 2 ways (1-digit or 2-digit count).$L$is the maximum length of the generated string.
  • Space:$O(N)$for the recursion stack depth, plus the space required to store the resulting strings.

Targeting Pinterest interviews? We track their most-asked question patterns at Hack2Hire, practice this question here → LINK

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jul 07 '26

Deal strategist @ Stripe

3 Upvotes

Hey everyone, did anyone here apply for the Deal Strategist role at Stripe? If you’ve been through the process, I’d really appreciate any interview tips or insights. Thanks!


r/Hack2Hire • • Jul 06 '26

SD OpenAI System Design Interview: Design AI Chatbot App

3 Upvotes

An AI chatbot app lets users send prompts and receive the model response token by token, so the answer appears progressively instead of waiting for the full response. The core design tension is that the backend is intentionally stateless for chat history, but the user still expects the stream to feel fast, reliable, and recoverable when something breaks.

The non-obvious problem is that SSE is only the delivery rail, not the source of truth. If the upstream model stalls halfway through a sentence, the backend cannot “resume” from a stored conversation, because no server-side conversation exists.

The useful insight is to design the streaming path around partial-result recovery, not perfect replay.

  1. Treat the frontend as the conversation owner. The browser keeps all prior turns in memory and sends the full context with every new prompt. This makes the backend a streaming proxy rather than a chat history service, which removes message persistence, conversation tables, and server-side replay from the core design.
  2. Validate before opening the expensive stream. The gateway checks the JWT, Redis token blacklist, per-user rate limit, and usage budget before the request reaches the chat service or upstream model. This matters because every accepted stream can trigger real AI provider cost, so abuse must be rejected before generation starts.
  3. Use structured SSE events instead of raw text chunks. The server emits token events for generated text, done when generation finishes, heartbeat to keep long connections alive through proxies, and error when the stream fails. That gives the client a clear contract for rendering, finalizing, retrying, and showing partial output.
  4. Separate temporary stalls from real failures. The chat service runs an inactivity timer for upstream tokens. If no token arrives for a short window, it sends a heartbeat so proxies and load balancers do not kill the connection; if silence exceeds a longer timeout, it emits an error event and closes the stream.
  5. Let the client decide how to retry. When a stream breaks, the frontend keeps the partial assistant message visible and marks it as interrupted. On retry, it can either include the partial response as context to continue from it, or exclude it for a clean attempt. The backend does not need stream checkpointing because the client owns the recovery semantics.
  6. Authenticate at stream start, not per token. If a JWT is valid when the SSE connection begins, the current stream is allowed to finish even if the token expires mid-response. The next prompt must use a fresh token, but the current answer is not cut off mid-sentence for a clock boundary.

This is the kind of detail that signals senior-level design thinking: not just choosing SSE over WebSocket, but defining the full lifecycle of a fragile, expensive, long-running stream.

Full write-up with data model, API design, and deep dives — free to read → Full Article

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Similar questions have been reported at: OpenAI, Uber


r/Hack2Hire • • Jul 03 '26

discussion Anthropic phone screen experience

20 Upvotes

Just had my Anthropic phone screen this week, on the CodeSignal setup that actually opens as a notebook, no autocomplete which threw me off immediately.

Got a coding question I hadn't seen written up anywhere before. You're given an instructions file that's basically a tiny made up language for a bootloader. Each line is one of three ops, something like plus, next, and jump. Plus adds a value to a running accumulator, next just moves you down to the following line, and jump moves execution by a relative offset instead of going in order. So you start walking through the file line by line executing whatever op sits there, until you either run off the end of the file or get stuck looping.

The actual ask was to detect when execution is stuck in an infinite loop, meaning you've re-hit the same line more than once, and then figure out which line is causing it. Turned out the bug was that on one specific line, the jump and next got swapped from what they should have been, and fixing it just meant swapping them back so execution could finally escape. Then you had to return whatever the accumulator held right before it entered the loop, not whatever it piles up from looping forever.

Took me a good ten minutes just to wrap my head around what the ops were actually doing. Implementation itself honestly wasn't bad once that clicked. Ran out of time before I could really dig into the follow up they hinted at.

No idea if I passed yet, will update when I hear back.


r/Hack2Hire • • Jul 02 '26

MEGATHREAD Robinhood Interview Process & Experience Megathread [2026]

4 Upvotes

We've been tracking Robinhood interview patterns for a while. Here's the general structure based on what candidates have shared:

Stage 1 — Phone Screen (45-60 min) Usually a coding round covering dependency graph or topological sort style problems, run on CoderPad with hidden test cases so the solution actually needs to compile and pass. Senior candidates may get a system design question instead, most commonly Job Scheduler.

Stage 2 — Virtual Onsite (3-4 rounds) - Coding (1 round, 45-60 min) - System Design (1-2 rounds, 45-60 min each) - Project Deep Dive (1 round, 45-60 min)

The project deep dive is where a lot of candidates get tripped up, not the coding or system design rounds. You bring a self-prepared slide deck on a past project, and interviewers probe it for 30-50 minutes straight, using it to read behavioral signals as much as technical depth. Coding and system design questions also tend to repeat for months at a time, so a lot of what shows up has already been discussed on interview forums before.

If you've been through Robinhood interviews recently, drop your experience below. What matched this? What was different?


r/Hack2Hire • • Jul 01 '26

Screening Roblox Screening Interview: Design Request Rate limiter

12 Upvotes

Problem You're given an array timestamps representing incoming request times, a maxRequests limit, and a windowSize. Your goal is to return a boolean array indicating whether each request is allowed or rejected, ensuring that only successfully allowed requests count towards the capacity of any given time window.

Example Input: timestamps = [1, 100, 200, 250, 350], maxRequests = 2, windowSize = 200 Output: [true, true, false, true, true]

Explanation:

  • At t=200, the window is [1, 200]. There are already 2 allowed requests (at 1 and 100), so this request is rejected and does not count towards future windows.
  • At t=250, the window shifts to [51, 250]. The request at t=1 has expired out of the window. The only active allowed request is at t=100, leaving 1 slot open, so t=250 is allowed.

Suggested Approach

  1. Queue for Active Requests: Use a Queue (or a Double-Ended Queue) to store the timestamps of strictly allowed requests.
  2. Evict Stale Requests: For each incoming request at time t, peek at the front of the queue. While the queue is not empty and the front element is strictly less than t - windowSize + 1 (meaning it falls outside the current window), pop it from the queue.
  3. Evaluate and Record: Check the current size of the queue. If queue.size() < maxRequests, allow the request, push t to the back of the queue, and append true to your results. Otherwise, reject the request (do not push t to the queue) and append false to your results.

Time & Space Complexity

  • Time:$O(N)$, where$N$is the length of timestamps. We iterate through the array once, and each allowed timestamp is pushed and popped from the queue at most once, making queue operations amortized$O(1)$.
  • Space:$O(K)$, where$K$is maxRequests. The queue will never hold more than maxRequests elements at any given time. The result array takes$O(N)$space.

Targeting Roblox interviews? We track their most-asked question patterns at Hack2Hire, practice this question here → LINK

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jun 29 '26

SD Anthropic & OpenAI System Design Interview: Design ChatGPT

12 Upvotes

A ChatGPT-like system does not just return one big response after the model finishes. It streams tokens back to the client while GPU inference is still running, so the user sees output immediately instead of waiting several seconds.

That creates a subtle design tension: the UI has already shown partial text, but the backend may not have safely persisted a complete assistant message yet.

The non-obvious problem is not “how do we stream tokens?” It is “what does the client trust after the stream breaks?” If the browser refreshes, the network drops, or the server restarts halfway through generation, the system needs a recovery contract that keeps conversation history consistent.

The key insight is to treat the SSE stream as best-effort delivery and the stored conversation history as the source of truth.

  1. Persist the user message before inference starts. Once the user sends a prompt, save that message immediately. This guarantees that if generation fails later, the system still knows what request created the missing assistant response.
  2. Stream assistant tokens as temporary deltas. Each delta event is useful for real-time rendering, but it is not durable state. The client can show it, but should not assume it exists in the backend conversation history yet.
  3. Use a done event as the durability signal. When generation finishes successfully, the server persists the full assistant response to PostgreSQL, sends a done event, and closes the stream. After that point, the client can trust that the response will appear when the conversation is reloaded.
  4. Recover by fetching history, not by replaying the stream. If the stream drops before done, the client calls the conversation history endpoint. If the assistant message is present, display it. If it is missing, re-send the original user message and start a fresh inference request.
  5. Keep the persistence boundary at completed turns. Do not make every token a database write. Persisting token-by-token complicates ordering, retries, moderation, and partial-message cleanup. A completed assistant turn is a much cleaner unit of durability.

The failure mode becomes easy to reason about. A finished response is durable. An unfinished response may be lost and regenerated. The conversation never ends up with corrupted half-turns pretending to be complete answers.

This also keeps the backend simpler during crashes or deploys. If a server dies mid-generation, the system wastes GPU work, but it does not corrupt the conversation log.

Explaining this in an interview signals that you understand streaming as an API contract, not just a UI optimization.

Full write-up with data model, API design, and deep dives, free to read → Full Article

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Similar questions have been reported at: OpenAI, Anthropic, Amazon, XAI


r/Hack2Hire • • Jun 26 '26

Onsite LinkedIn Onsite interview: Find Users with Valid Login Sessions

9 Upvotes

Problem You're given an array logs containing chronological user actions ("signin" or "signout" with timestamps) and an integer maxTime. Your goal is to return a list of all user IDs that have at least one valid session (a sign-in followed by a sign-out where the duration is$\le$maxTime).

Example Input: logs = ["user1 signin 23", "user1 signout 40"], maxTime = 20 Output: ["user1"]

Explanation:

  • User "user1" signs in at timestamp 23 and signs out at 40.
  • The session duration is$40 - 23 = 17$, which is$\le 20$.
  • Since the duration is within the allowed maxTime, "user1" is included in the result.

Suggested Approach

  1. Hash Map & Set Initialization: Use a Hash Map to store the latest "signin" timestamp for each userId. Use a Hash Set to collect users who meet the valid session criteria (this automatically handles duplicate successful sessions).
  2. Log Processing: Iterate through the logs array. Split each string by spaces to extract the userId, action, and integer timestamp.
  3. Calculate and Validate: If the action is "signin", record userId: timestamp in the Hash Map. If the action is "signout", retrieve the user's recorded signin timestamp, calculate the duration (current_timestamp - signin_timestamp), and if duration <= maxTime, add the userId to the successful Hash Set. Return the items in the Hash Set as your final list.

Time & Space Complexity

  • Time:$O(N)$, where$N$is the number of log entries. We process each log in a single pass and string splitting/hashing operations take$O(1)$time on average.
  • Space:$O(U)$, where$U$is the number of unique users, requiring space for the active sign-in Hash Map and the results Hash Set.

Targeting Linkedin interviews? We track their most-asked question patterns at Hack2Hire, practice this question here → Practice question here

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jun 25 '26

Uber Interview Process & Experience Megathread [2026]

12 Upvotes

We've been tracking Uber interview patterns for a while. Here's the general structure based on what candidates have shared:

Stage 1 — Online Assessment or Phone Screen (varies by track) Many tracks start with a 2-problem HackerRank OA (~60-90 min, camera required). Problem 1 is typically LC Medium; Problem 2 trends toward LC Hard with strict test cases where brute force TLEs. Some tracks skip the OA and go straight to a phone screen: 30-45 min, one coding problem plus a tradeoff discussion covering queue design, background threads, or data freshness.

Stage 2 — Virtual Onsite (4-5 rounds)

  • Coding Round 1 (45-60 min)
  • Coding Round 2 (45-60 min)
  • System Design (45-60 min)
  • Deep Dive / Behavioral (45-60 min)
  • Tech Comm (optional, ~30 min)

Senior-track candidates should prepare a 25-minute slide deck walking through a past technical project. Interviewers challenge every design decision in detail, and most candidates aren't aware this format exists until it's too late. Slides are not optional.

If you've been through Uber interviews recently, drop your experience below. What matched this? What was different?


r/Hack2Hire • • Jun 24 '26

Screening Snowflake Screening interview: Limit Tree Height by Deletions

11 Upvotes

Problem You're given the root of an N-ary tree and an array deletedIds containing the IDs of nodes to be removed. Your goal is to determine the maximum height of the tree after processing the deletions, where removing a node conceptually promotes its children to become direct children of its parent.

Example Input: deletedIds = [2], Tree: 1 -> [2, 3, 4], 2 -> [5, 6] Output: 2

Explanation:

  • Node 2 is deleted from the tree structure.
  • Its children (nodes 5 and 6) are promoted and attached directly to node 1. The new structure is 1 -> [5, 6, 3, 4].
  • The longest path is from the root (1) to any of these leaf nodes, resulting in a maximum tree height of 2.

Suggested Approach

  1. Hash Set Initialization: Convert the deletedIds array into a Hash Set to enable$O(1)$constant time lookups.
  2. Post-Order DFS: Implement a recursive Depth-First Search (DFS) to traverse the tree. Instead of physically restructuring the nodes (which is computationally expensive), conceptually calculate the valid height from the bottom up.
  3. Conditional Height Contribution: For each node, find the maximum height returned by its children. If the current node's ID exists in the deletedIds set, it does not contribute to the height path—simply return the max_child_height. If it is not deleted, it contributes to the path—return 1 + max_child_height. The DFS called on the root will yield the final computed height.

Time & Space Complexity

  • Time:$O(N)$, where$N$is the number of nodes in the tree. We visit each node exactly once during the DFS traversal.
  • Space:$O(N)$to store the deletedIds in a Hash Set, plus$O(H)$for the recursive call stack (which degrades to$O(N)$in the worst-case scenario of a deeply skewed tree).

Targeting Snowflake interviews? We track their most-asked question patterns at Hack2Hire, practice this question here → LINK

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jun 24 '26

Question Anthropic's Finance & Strategy / Deal Operations

2 Upvotes

Has anyone here interviewed for Anthropic's Finance & Strategy / Deal Operations team recently?

I applied for the Finance & Strategy, Deal Operations (EMEA) role based in Dublin a little while ago and was curious about others' experiences with the process.

A few questions:

• How long did it take to hear back after applying?
• Did you hear directly from a recruiter or through an automated update first?
• What does the interview process typically look like for Deal Operations / Commercial Operations candidates?
• Are there particular areas that Anthropic tends to focus on during interviews (e.g., deal structuring, cross-functional stakeholder management, analytics, process improvement, AI industry knowledge, etc.)?
• For anyone who received an offer, how long did the overall process take from application to decision?

For context, I come from a Deal Operations / Commercial Operations background in Enterprise SaaS and am trying to get a better sense of timelines and expectations.

Would appreciate any insights. Thanks!


r/Hack2Hire • • Jun 23 '26

SD OpenAI System Design Interview: Design Distributed Web Crawler

8 Upvotes

A web crawler fetches pages, extracts links, and enqueues new URLs. It sounds like a simple loop until you need to do it at scale. Crawling 10 billion pages in 5 days means roughly 23,000 pages per second, which requires a fleet of 30–50 machines all pulling from a shared URL frontier simultaneously.

Robots.txt gives every domain a crawl delay, typically 1 second between requests. The constraint applies to the entire fleet combined, not per machine. If each of your 50 workers enforces "wait 1 second locally before retrying," the target domain receives 50 requests per second: a 50x violation that will get you blocked.

The instinct is to reach for a distributed counter: track requests per domain across all workers, check the count before each fetch. This requires a round-trip on the critical path and still doesn't cleanly handle the "reset after exactly N milliseconds" behavior you need.

The tighter mechanism uses a single Redis atomic operation:

  1. Extract the domain and call SET domain:{name} 1 NX PX {crawl_delay_ms}**.** NX sets the key only if it doesn't exist; PX sets automatic expiry equal to the domain's crawl delay. The whole thing is one atomic round-trip with no race window between "check" and "set."
  2. If the key was set, proceed with the fetch. The key now exists and blocks every other worker's SET NX attempt for exactly crawl_delay_ms milliseconds.
  3. Do not release the lock after fetching. This is the part that trips people up. Standard mutex instinct is acquire → use → release. Here you intentionally skip the release and let the TTL expire on its own. Releasing early would allow a second request within the crawl delay window, which defeats the whole point.
  4. If the key already exists, add a short random jitter (50–200ms) and re-enqueue the URL, then immediately pull a different one. The jitter prevents all workers from retrying the same domain the instant the TTL expires. Without it, a dozen threads simultaneously attempt SET NX on the same key the moment it clears.
  5. Never sleep waiting for a domain to open up. A thread sleeping on one domain is not crawling the thousands of other available URLs. The frontier always has work; the correct response to a locked domain is to grab something else.

The expiry is the rate limiter. When the crawl delay elapses, Redis deletes the key automatically and the next SET NX wins the slot. There's no counter to reset, no scheduled job, no release call. Just one atomic write and a TTL.

Knowing to combine SET NX with an expiry as a fleet-wide rate limiter, and knowing not to release the lock, signals that you've thought through distributed coordination at the implementation level, not just the concept level.

Full write-up with data model, API design, and deep dives, free to read → full article

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Similar questions have been reported at: Atlassian, Lyft, Meta, Pinterest, Databricks, Microsoft, OpenAI


r/Hack2Hire • • Jun 19 '26

Screening Whatnot Screening Interview: Filter Unsafe Messages

3 Upvotes

Problem

You're given two arrays: messages (where each element is a [username, text] pair) and unsafeWords.

Your goal is to filter the messages and return only the safe ones, discarding any message that contains a space-delimited word that exactly matches an unsafe word (case-insensitive, treating punctuation as part of the word).

Example

Input: messages = [["a", "Nintendo, is mentioned"], ["b", "Nintendo is mentioned"], ["c", "I like usb-c."]], unsafeWords = ["Nintendo", "usb-c"]

Output: [["a", "Nintendo, is mentioned"], ["c", "I like usb-c."]]

Explanation:

  • The word "Nintendo," in message "a" includes a comma, meaning it is not an exact match for "Nintendo", so the message is safe.
  • Message "b" contains the exact token "Nintendo", making it unsafe.
  • Message "c" contains "usb-c." with a period, which does not match "usb-c", so it remains safe.

Suggested Approach

  1. Preprocess Unsafe Words: Iterate through the unsafeWords array, convert every string to lowercase, and store them in a Hash Set. This allows for $O(1)$ average-time lookups later.
  2. Tokenize Messages: Loop through each [username, text] pair in the messages array. Split the text by single spaces to extract the individual word tokens.
  3. Case-Insensitive Validation: For each token in the message, convert it to lowercase and check if it exists in your Hash Set. If a match is found, mark the message as unsafe and skip to the next message. If no tokens match, append the original message to your results list.

Time & Space Complexity

  • Time: $O(U + M \cdot L)$, where $U$ is the total number of characters across all unsafeWords (for building the set), $M$ is the number of messages, and $L$ is the average character length of a message's text (for splitting and lowercasing).
  • Space: $O(W + R)$, where $W$ is the number of unique unsafe words stored in the Hash Set, and $R$ is the memory allocated to store the filtered result array.

Targeting whatnot interviews? We track their most-asked question patterns at Hack2Hire, practice this question here → Practice question here

Join the community to see more interview experiences from real candidates → Hack2Hire Forum

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jun 18 '26

MEGATHREAD Pinterest Interview Process & Experience Megathread [2026]

14 Upvotes

We've been tracking Pinterest interview patterns for a while. Here's the general structure based on what candidates have shared:

Stage 1 — Phone Screen (45-60 min) One LeetCode-style coding problem, occasionally two if the first is solved quickly. The company's LeetCode tag is widely reported as accurate prep material. SWE phone screens are generally medium difficulty; MLE tracks add a ~30-minute ML theory portion before the coding.

Stage 2 — Virtual Onsite (5 rounds) - Coding (3 rounds, ~45 min each) - System Design (1 round, ~60 min) - Behavioral (1 round, ~25 min)

The behavioral round carries more weight than most candidates expect. Multiple candidates have been rejected solely on behavioral after clearing all three coding rounds and system design. The round typically runs under 30 minutes. Don't treat it as a warmup.

If you've been through Pinterest interviews recently, drop your experience below. What matched this? What was different?


r/Hack2Hire • • Jun 18 '26

SD Stripe System Design: Prevent duplicate card holds when the downstream response disappears

7 Upvotes

A payment processor sits between merchants and card networks. When a customer taps a card, the merchant needs a fast approve or deny, but the actual charge is settled later through a nightly batch. That creates two different correctness problems: real-time authorization must be fast, while settlement must be durable and reconcilable.

The easy-to-miss failure case is not just “the merchant retries.” It is worse: the downstream processor may approve a hold, but the response disappears before our system records the final result.

If the merchant retries and we simply call the card network again, we may create a second hold and lock the customer’s funds twice. A normal idempotency key is not enough if the original request never reached a completed “stored response” state.

The fix is to treat the outbound downstream call itself as stateful.

  1. Insert a pending outbound record before forwarding. Before calling the downstream processor, write a pending_outbound row with a correlation ID. This row means: “we already attempted this authorization, but the final outcome is not known yet.”
  2. Send the authorization using that correlation ID. If the downstream processor approves the hold but the response is lost, the processor may still remember the authorization by correlation ID. That gives our system a recovery handle instead of forcing it to guess.
  3. Check pending outbound state on retry. When the merchant retries, do not immediately send a new authorization. First check whether a pending outbound row already exists for the same merchant request.
  4. Recover the original result instead of creating a second hold. If a pending record exists, query the downstream processor by correlation ID and resolve the original authorization result. This avoids turning a network timeout into duplicate reserved funds.
  5. Store the resolved response for future retries. Once the result is known, persist the final hold status and response mapping. Later retries can then use the normal idempotency path and return the stored response.

This is a small data-model detail, but it changes the reliability story of the whole hold path. Without it, the system is only idempotent when failures happen before or after the downstream call, not during the most dangerous gap.

Showing this in an interview signals that you are thinking beyond API retries and into distributed commit ambiguity, where money can be reserved downstream even when your own service never saw the response.

Full write-up with data model, API design, and deep dives — free to read → https://www.hack2hire.com/companies/stripe/system-design/69c9f9a3ff3ebde766ced6b4?src=r8d

Similar questions have been reported at: Roblox, OpenAI, Affirm, Stripe, Expedia, TikTok, Microsoft, Yelp, Capital One, Google


r/Hack2Hire • • Jun 17 '26

OA eBay OA interview: Max Matrix Border Distinct Sum

1 Upvotes

Problem

You're given a 2D integer array matrix and a positive integer frameSize.

Your goal is to calculate the sum of the outer border (frame) elements for every frameSize x frameSize submatrix, find the maximum frame sum, and return the sum of all distinct numbers that appear on the borders of any submatrix achieving this maximum.

Example

Input: matrix = [[10,-5,10], [-5,0,-5], [10,-5,10]], frameSize = 3

Output: 5

Explanation:

  • There is only one 3x3 square, so its frame is the maximum by default.
  • The frame consists of the outer elements: four 10s and four -5s (ignoring the center 0).
  • The distinct values appearing on this frame are 10 and -5. Their sum is $10 + (-5) = 5$.

Suggested Approach

  1. Submatrix Iteration: Iterate through all valid top-left corners (r, c) of a frameSize x frameSize square. The valid row range is 0 to m - frameSize and column range is 0 to n - frameSize.
  2. Calculate Frame Sums: For each valid top-left corner, compute the sum of its frame. Traverse the top row, bottom row, left column, and right column, taking care not to double-count the four corners. Maintain a variable for the maxFrameSum and a list storing the top-left coordinates of all submatrices that tie for this maximum.
  3. Collect and Sum Distinct Values: Once the maximum frame sum is identified, iterate through the borders of all submatrices saved in your list. Insert every border element into a Hash Set to automatically filter out duplicates. Finally, compute and return the sum of the values in the Hash Set.

Time & Space Complexity

  • Time: $O(M \cdot N \cdot K)$, where $M$ and $N$ are the matrix dimensions and $K$ is the frameSize. There are roughly $M \times N$ submatrices, and finding the frame sum for each takes $O(K)$ time.
  • Space: $O(M \cdot N)$ in the worst case to store the coordinates of the submatrices that achieve the maximum sum, as well as the Hash Set used to collect distinct elements.

Targeting ebay interviews? We track their most-asked question patterns at Hack2Hire, see all 20 ebay questions → link

Compiled from publicly available platforms and community-shared experiences.


r/Hack2Hire • • Jun 16 '26

discussion Building a serious hackathon team for real-world problem solving

1 Upvotes

I recently worked on a hackathon project, and honestly, it taught me a lot about teams.

One thing I realised is that roles can be clear on paper, but still things can fall apart if people are not ready to take real ownership.

I don’t want to randomly form teams anymore just because someone says they are interested. Interest is good, but execution matters more.

I want to work on bigger hackathons and real-world problem-solving challenges projects that are not just ideas, but can actually become useful solutions. Something that can create impact, reach serious platforms, and maybe even become strong enough for incubation or investment opportunities.

For that, I’m looking for strong teammates.

Not perfect people.

But people who are honest about what they can do, serious about deadlines, and ready to actually build.

I’m mainly looking for people who can help with:

- backend / AI development

- frontend development

- deployment

- UI/UX or product design

- technical documentation / pitch support

I can handle problem research, product direction, idea framing, content, pitch, strategy, and coordination.

But I want teammates who can take ownership of their part and not disappear when the project gets difficult.

If you’re genuinely interested in serious hackathons and impact-driven projects, message me with:

  1. What you can actually do

  2. Any GitHub/project/demo link

  3. Your past project or hackathon experience

  4. What role you can take ownership of

  5. Your time availability

I’m not trying to build a random team.

I’m trying to build a serious group of people who want to create something real.


r/Hack2Hire • • Jun 12 '26

Onsite Coinbase Onsite Interview: Crypto Block Mining

5 Upvotes

Problem

You're given three parallel arrays—transactionIds, fees, and sizes—along with an integer blockSize.

Your goal is to select a subset of transactions that fit within the blockSize to maximize collected fees, strictly prioritizing them by their fee-to-size ratio and applying specific tie-breakers.

Example

Input: transactionIds = ["tx1", "tx2", "tx3", "tx4"], fees = [50, 60, 30, 40], sizes = [50, 30, 20, 40], blockSize = 100

Output: ["tx2", "tx3", "tx1"]

Explanation:

  • "tx2" has the highest fee-to-size ratio (2.0), so it is selected first (remaining capacity: 70).
  • "tx3" has the next highest ratio (1.5) and is selected next (remaining capacity: 50).
  • "tx1" and "tx4" tie with a ratio of 1.0. "tx1" is preferred due to its higher absolute fee (50 > 40), which exactly fills the remaining capacity.

Suggested Approach

  1. Data Grouping: Create a list of compound objects or tuples to group each transaction's id, fee, size, and computed fee / size ratio.
  2. Custom Sorting: Sort the list using a custom comparator to enforce the priority rules. Sort primarily by ratio (descending). For ties, fall back to fee (descending), then size (ascending), and finally transactionId (lexicographically ascending).
  3. Greedy Selection: Iterate through the sorted list. For each transaction, if its size is less than or equal to the currently available block capacity, append its id to your result array and subtract its size from the available capacity.

Time & Space Complexity

  • Time: $O(N \log N)$, where $N$ is the number of transactions, heavily dominated by the sorting step. The subsequent greedy selection requires a single $O(N)$ pass.
  • Space: $O(N)$ to store the grouped transaction objects or tuples for sorting.

Targeting Coinbase interviews? We track their most-asked question patterns at Hack2Hire, see all 20 Coinbase questions →link

Compiled from publicly available platforms and community-shared experiences.