Uber interview rundown

Uber coding interviews

What the rounds look like, the kinds of problems people get, and what to study first.

From candidate reports · Reviewed November 2026 · Independent, not affiliated with Uber

What the rounds are like

StageWhat people usually describe
Online assessment2–4 problems on HackerRank, CodeSignal or Codility. Referrals and people a recruiter reached out to often skip it
Phone screenUsually one problem in 45–60 minutes, and they want it working. A few people got a design-in-code problem like a parking lot instead
Onsite algorithmsOne round called Algorithms and Data Structures, and you're expected to finish with working code
Machine codingMost loops have a Depth in Specialization round where you build a small system that actually runs

Interviewers push hard on time and space complexity, so expect to defend your answer and talk through other ways you could have done it.

What people have been asked

These come up in candidates' own write-ups of their interviews. Use this to decide what to study first, and don't treat it as a prediction. We wrote the example prompts ourselves, so yours will be worded differently.

Routes through graphs and grids

Find a route through a directed graph, the fastest way across a road network, or the cheapest path across a grid where some moves are free and some cost extra.

Start by working out what your nodes and edges are, and whether some edges cost more than others.

How it might be asked

You're given a list of roads between intersections, each with a travel time. Given a start and a destination, return the shortest possible travel time, or -1 if you can't get there.

Key concepts to know

Try this Interview

Connected regions and dependencies

Find when everyone's connected, put tasks in an order that respects their dependencies, or work out a letter order from a sorted word list.

A lot of these never say the word graph. If items are related to each other, think graph. Union-find handles the connected ones, and the ordering ones need a cycle check.

How it might be asked

You're given logs of riders who shared a ride, sorted by time. Return the earliest time when every rider is connected to every other, directly or through other riders, or -1 if that never happens.

Key concepts to know

Try this Interview

Optimization over choices

Find the best total when each decision changes what you can do next. Candidates report a few of these on trees.

Once you know exactly what each subproblem means, the code is usually pretty short. Getting there is the tricky bit, and you may have to return who you picked as well as the total.

How it might be asked

You're given a company's org chart and a fun score for each employee. You can't invite an employee and their direct manager to the same party. Return the most total fun you can get and who you'd invite.

Key concepts to know

Try this Interview

Top items and scheduling

Keep the top k results or a running median from a stream, or book rooms without double-booking them.

Sorting everything is usually overkill, especially when more data keeps coming in. Follow-ups tend to add cancellations, limited memory or multiple threads.

How it might be asked

You've got n meeting rooms. Write book(start, end) that returns a room that's free for that whole time, or INVALID if none is. Then add a way to cancel a booking.

Key concepts to know

Try this Interview

Arrays, strings and windows

Go through a sequence efficiently, like finding the longest stretch of readings that stay within a limit. Some of these are number problems with a ridiculous amount of edge cases.

Try to get rid of nested loops, and test the boundaries carefully.

How it might be asked

You're given a number as a string, and it can be very long. Return the smallest palindrome that's greater than it.

Key concepts to know

Try this Interview

Small working systems

People have been asked to build a rate limiter, a file system with cd and pwd, a meeting room scheduler and a counter with expiry.

You've got under an hour to write something complete and readable that'd be easy to add to later.

How it might be asked

Build a counter with put_element(key), get_element_count(key) and get_total_elements(). Each element expires t seconds after it was added.

Key concepts to know

Try this Interview

Machine coding

Most loops have this round, usually called Depth in Specialization. You'll need complete, readable code that runs, in under an hour. Clean structure matters, and so does how easy your code would be to extend.

Example: a counter with expiry

One candidate had to build a counter where entries expire after t seconds. If you keep a sorted list of timestamps for each key, you can use binary search and reads stay fast:

expiring_counter.pypython
from bisect import bisect_right
from collections import defaultdict
import time


class ExpiringCounter:
    def __init__(self, ttl_seconds):
        self.ttl = ttl_seconds
        self.times = defaultdict(list)  # key -> sorted timestamps

    def put_element(self, key):
        self.times[key].append(time.monotonic())

    def get_element_count(self, key):
        cutoff = time.monotonic() - self.ttl
        stamps = self.times[key]
        # Drop what's stale while reading, so memory doesn't grow forever.
        del stamps[:bisect_right(stamps, cutoff)]
        return len(stamps)

    def get_total_elements(self):
        return sum(self.get_element_count(key) for key in list(self.times))

How to approach a problem

  1. Say it back and ask questions. How big is the input? What are the edge cases? What should you return?
  2. Start with brute force. Say it out loud with its complexity so you've got something to beat.
  3. Figure out what it really is. Is this secretly a graph? Would sorting help? Do the same subproblems keep coming up?
  4. Write it and test it. Walk through an example, then try the weird cases.

Key concepts to know

Sources