PlacementPrep

Uber Placement Papers 2026

33 min read
Company Placement Papers
Advertisement Placement

Last Updated: March 2026

Uber Placement Papers 2026 - Complete Preparation Guide

📋 Company Overview

Uber Technologies, Inc. is an American mobility-as-a-service provider. It operates in over 70 countries and 10,000+ cities worldwide. Uber's platform connects riders with drivers, and also offers food delivery (Uber Eats), freight, and micro-mobility services.

Key Highlights:

  • Founded: March 2009 (as UberCab)
  • Headquarters: San Francisco, California, USA
  • Industry: Transportation / Technology / Food Delivery
  • Employees: 30,000+ globally
  • India Presence: Major tech centers in Bangalore and Hyderabad

Eligibility Criteria 2026

ParameterRequirement
EducationB.Tech/B.E (CS, IT, ECE, EEE)
Batch2025, 2026
Minimum CGPA7.5/10 or 75%
BacklogsNo active backlogs
Coding SkillsStrong algorithmic problem solving

Uber CTC for Freshers 2026

ComponentAmount (Approx.)
Base Salary₹18-25 LPA
Joining Bonus₹2-3 Lakhs
RSUs (Stock)Variable
BenefitsHealth, Wellness, Relocation
Total CTC₹25-40 LPA

📝 Exam Pattern

Uber's recruitment process is highly competitive with 4-5 rigorous rounds:

RoundDurationQuestionsTopics
Online Coding90-120 mins3-4Algorithms, Data Structures
Technical Round 160 mins-Coding, Problem Solving
Technical Round 260 mins-System Design, Coding
Technical Round 345 mins-Projects, Deep Dive
Hiring Manager45 mins-Behavioral, Culture Fit

Key Points:

  • Very high coding standards expected
  • System design is crucial even for freshers (basic level)
  • Focus on writing production-quality code

🧮 Aptitude Questions (15 with Solutions)

Question 1: Numbers

Find the sum of first 50 odd natural numbers.

Solution: Shortcut: Sum of first n odd numbers = n² Sum = 50² = 2500


Question 2: Probability

In a class of 40 students, 25 play cricket, 20 play football, and 10 play both. How many play neither?

Solution: Using inclusion-exclusion: |C ∪ F| = |C| + |F| - |C ∩ F| = 25 + 20 - 10 = 35

Neither = 40 - 35 = 5 students


Question 3: Combinations

How many diagonals does a decagon (10-sided polygon) have?

Solution: Formula: n(n-3)/2 for n-sided polygon = 10 × (10-3) / 2 = 10 × 7 / 2 = 35 diagonals


Question 4: Speed & Distance

A car travels from A to B at 60 km/h and returns at 40 km/h. Find average speed.

Solution: Average speed = 2xy/(x+y) for equal distances = 2 × 60 × 40 / (60 + 40) = 4800 / 100 = 48 km/h


Question 5: Ratio & Proportion

Divide ₹782 into three parts proportional to 1/2 : 2/3 : 3/4.

Solution: Ratio = 1/2 : 2/3 : 3/4 LCM of denominators = 12 Multiply by 12: 6 : 8 : 9

Total parts = 6 + 8 + 9 = 23 First part = 6/23 × 782 = ₹204 Second part = 8/23 × 782 = ₹272 Third part = 9/23 × 782 = ₹306


Question 6: Profit & Loss

By selling 45 oranges for ₹160, a man loses 20%. How many oranges should he sell for ₹240 to gain 20%?

Solution: CP of 45 oranges = 160 / 0.8 = ₹200 SP for 20% profit = 200 × 1.2 = ₹240

He should sell 45 oranges for ₹240 to gain 20%.


Question 7: Time & Work

A and B together complete work in 12 days. A alone takes 20 days. How long does B take alone?

Solution: (A+B)'s 1 day work = 1/12 A's 1 day work = 1/20 B's 1 day work = 1/12 - 1/20 = (5-3)/60 = 2/60 = 1/30

B takes 30 days


Question 8: Compound Interest

A sum becomes 4 times in 6 years at compound interest. In how many years will it become 64 times?

Solution: 4 times in 6 years means 4 = (1+r)^6 64 times = 4³ = (1+r)^18

18 years


Question 9: Series

Find the next term: 5, 11, 23, 47, 95, ?

Solution: Pattern: ×2 + 1 5×2+1=11, 11×2+1=23, 23×2+1=47, 47×2+1=95 Next: 95×2+1 = 191


Question 10: Coding-Decoding

If WATER is coded as YCVGT, then what is the code for HONEY?

Solution: Pattern: Each letter +2 W→Y, A→C, T→V, E→G, R→T

HONEY: H→J, O→Q, N→P, E→G, Y→A = JQPGA


Question 11: Blood Relations

Pointing to a photograph, a man says, "She is the daughter of my grandfather's only son." How is the man related to the girl?

Solution: Grandfather's only son = Man's father Daughter of man's father = Man's sister

The man is her brother


Question 12: Direction Sense

A person walks 8km East, turns North and walks 6km, then turns West and walks 8km. How far from start?

Solution: East 8km, North 6km, West 8km Net: 0 East-West, 6km North Distance = 6 km


Question 13: Logical Reasoning

If all roses are flowers and some flowers are red, which conclusion follows? a) All roses are red b) Some roses are red c) Some red things are flowers d) None


Question 14: Pipes & Cisterns

Three pipes A, B, C can fill a tank in 6, 12, 18 hours respectively. If all three are opened together, how long to fill the tank?

Solution: Part filled in 1 hour = 1/6 + 1/12 + 1/18 = (6 + 3 + 2)/36 = 11/36

Time = 36/11 = 3 3/11 hours


Question 15: Data Interpretation

Uber ride data: Week 1 = 1000 rides, Week 2 = 1200 rides, Week 3 = 1500 rides, Week 4 = 1800 rides. Find average weekly growth.

Solution: Week 1→2: 20% growth Week 2→3: 25% growth Week 3→4: 20% growth

Average growth = (20 + 25 + 20)/3 = 21.67%


💻 Technical/CS Questions (10 with Solutions)

Question 1: Data Structures

Design a data structure for an Uber-like ride matching system.

class RideMatchingSystem:
    def __init__(self):
        self.available_drivers = {}  # location -> set of drivers
        self.active_rides = {}
    
    def find_nearest_driver(self, rider_location, radius=5):
        """Find nearest available driver within radius using geohash/quadtree"""
        nearby_drivers = self.query_nearby(rider_location, radius)
        return min(nearby_drivers, 
                  key=lambda d: self.calculate_distance(rider_location, d.location))
    
    def calculate_distance(self, loc1, loc2):
        # Haversine formula for geographic distance
        pass

Question 2: System Design

Design a ride-hailing system like Uber.

  1. Dispatch Service: Matches riders with drivers using geospatial indexing
  2. Location Service: Real-time tracking of drivers using WebSockets
  3. Pricing Service: Dynamic pricing based on demand/supply
  4. Payment Service: Handles fare calculation and payment processing
  5. Notification Service: Push notifications to riders and drivers

Tech Stack:

  • Microservices architecture
  • Kafka for event streaming
  • Redis for caching driver locations
  • PostgreSQL for transactional data
  • MongoDB for location data

Question 3: Algorithms

Find the shortest path between two points considering traffic.

import heapq

def shortest_path_with_traffic(graph, start, end, traffic_data):
    """
    Dijkstra's algorithm with time-dependent edge weights
    """
    pq = [(0, start)]
    distances = {node: float('inf') for node in graph}
    distances[start] = 0
    
    while pq:
        current_dist, current = heapq.heappop(pq)
        
        if current == end:
            return current_dist
        
        if current_dist > distances[current]:
            continue
        
        for neighbor, base_time in graph[current]:
            # Adjust time based on traffic multiplier
            traffic_multiplier = traffic_data.get((current, neighbor), 1.0)
            time = base_time * traffic_multiplier
            distance = current_dist + time
            
            if distance < distances[neighbor]:
                distances[neighbor] = distance
                heapq.heappush(pq, (distance, neighbor))
    
    return distances[end]

Question 4: Database Design

Design a database schema for a ride-sharing app.

-- Users table
CREATE TABLE users (
    user_id UUID PRIMARY KEY,
    name VARCHAR(100),
    phone VARCHAR(20),
    email VARCHAR(100),
    type ENUM('rider', 'driver'),
    created_at TIMESTAMP
);

-- Drivers table
CREATE TABLE drivers (
    driver_id UUID PRIMARY KEY,
    user_id UUID REFERENCES users(user_id),
    vehicle_info JSON,
    current_location GEOGRAPHY(POINT),
    status ENUM('available', 'busy', 'offline'),
    rating DECIMAL(2,1)
);

-- Rides table
CREATE TABLE rides (
    ride_id UUID PRIMARY KEY,
    rider_id UUID REFERENCES users(user_id),
    driver_id UUID REFERENCES drivers(driver_id),
    pickup_location GEOGRAPHY(POINT),
    dropoff_location GEOGRAPHY(POINT),
    status ENUM('requested', 'accepted', 'ongoing', 'completed', 'cancelled'),
    fare DECIMAL(10,2),
    started_at TIMESTAMP,
    completed_at TIMESTAMP
);

-- Create spatial index
CREATE INDEX idx_driver_location ON drivers USING GIST(current_location);

Question 5: Object-Oriented Design

Design the class structure for Uber's pricing system.

from abc import ABC, abstractmethod
from enum import Enum

class RideType(Enum):
    UBERX = "uberx"
    UBERBLACK = "uberblack"
    UBERPOOL = "uberpool"

class PricingStrategy(ABC):
    @abstractmethod
    def calculate_fare(self, distance, time, demand_multiplier):
        pass

class StandardPricing(PricingStrategy):
    BASE_FARE = 2.50
    PER_MILE = 1.50
    PER_MINUTE = 0.25
    
    def calculate_fare(self, distance, time, demand_multiplier):
        fare = self.BASE_FARE + (distance * self.PER_MILE) + (time * self.PER_MINUTE)
        return fare * demand_multiplier

class SurgePricing(PricingStrategy):
    def __init__(self, base_strategy, surge_multiplier):
        self.base_strategy = base_strategy
        self.surge_multiplier = surge_multiplier
    
    def calculate_fare(self, distance, time, demand_multiplier):
        base_fare = self.base_strategy.calculate_fare(distance, time, 1.0)
        return base_fare * self.surge_multiplier * demand_multiplier

class PricingService:
    def __init__(self):
        self.strategies = {
            RideType.UBERX: StandardPricing(),
            RideType.UBERBLACK: StandardPricing(),
        }
    
    def get_fare(self, ride_type, distance, time, demand_level):
        strategy = self.strategies.get(ride_type)
        surge = self.calculate_surge(demand_level)
        if surge > 1.0:
            strategy = SurgePricing(strategy, surge)
        return strategy.calculate_fare(distance, time, 1.0)
    
    def calculate_surge(self, demand_level):
        # Surge pricing logic based on demand/supply ratio
        pass

Question 6: Distributed Systems

How would you handle real-time location updates from millions of drivers?

  1. WebSocket Connections: Maintain persistent connections with drivers
  2. Message Queue (Kafka): Buffer location updates
  3. Geospatial Database: Store and query locations efficiently using Redis Geo or PostGIS
  4. Batch Processing: Aggregate location data periodically
  5. CDN/Edge Computing: Process updates closer to the source
  6. Rate Limiting: Limit updates to every few seconds per driver

Question 7: Algorithms

Implement an efficient rate limiter.

import time
from collections import deque

class SlidingWindowRateLimiter:
    def __init__(self, max_requests, window_size):
        self.max_requests = max_requests
        self.window_size = window_size
        self.requests = {}
    
    def is_allowed(self, user_id):
        current_time = time.time()
        
        if user_id not in self.requests:
            self.requests[user_id] = deque()
        
        # Remove old requests outside the window
        while (self.requests[user_id] and 
               current_time - self.requests[user_id][0] > self.window_size):
            self.requests[user_id].popleft()
        
        if len(self.requests[user_id]) < self.max_requests:
            self.requests[user_id].append(current_time)
            return True
        
        return False

# Token bucket rate limiter
class TokenBucketRateLimiter:
    def __init__(self, capacity, refill_rate):
        self.capacity = capacity
        self.refill_rate = refill_rate
        self.tokens = {}
        self.last_refill = {}
    
    def is_allowed(self, user_id):
        current_time = time.time()
        
        if user_id not in self.tokens:
            self.tokens[user_id] = self.capacity
            self.last_refill[user_id] = current_time
        
        # Refill tokens
        time_passed = current_time - self.last_refill[user_id]
        tokens_to_add = time_passed * self.refill_rate
        self.tokens[user_id] = min(self.capacity, self.tokens[user_id] + tokens_to_add)
        self.last_refill[user_id] = current_time
        
        if self.tokens[user_id] >= 1:
            self.tokens[user_id] -= 1
            return True
        
        return False

Question 8: SQL

Find top 3 drivers with highest average rating who completed at least 100 rides.

SELECT 
    d.driver_id,
    d.name,
    AVG(r.rating) as avg_rating,
    COUNT(r.ride_id) as total_rides
FROM drivers d
JOIN rides r ON d.driver_id = r.driver_id
WHERE r.status = 'completed'
GROUP BY d.driver_id, d.name
HAVING COUNT(r.ride_id) >= 100
ORDER BY avg_rating DESC, total_rides DESC
LIMIT 3;

Question 9: Scalability

How would you scale a ride-matching service to handle 10x load?

  1. Horizontal Scaling: Add more application servers
  2. Database Sharding: Partition data by geographic region
  3. Caching: Cache popular routes and driver locations in Redis
  4. Load Balancing: Distribute requests evenly
  5. CDN: Cache static content at edge locations
  6. Async Processing: Use message queues for non-critical operations
  7. Microservices: Decompose monolith into smaller services

Question 10: Testing

How would you test a ride-hailing application?

  • Fare calculation logic
  • Distance calculation
  • Driver matching algorithm

Integration Tests:

  • End-to-end ride flow
  • Payment processing
  • Notification delivery

Load Tests:

  • Simulate peak traffic (New Year's Eve scenario)
  • Test database performance under load

Mock Tests:

  • Use mock GPS coordinates
  • Mock payment gateways
  • Mock SMS/email services

📝 Verbal/English Questions (10 with Solutions)

Question 1: Synonyms

Choose the word closest in meaning to "UBIQUITOUS": a) Rare b) Omnipresent c) Unique d) Scattered

Explanation: Ubiquitous means present, appearing, or found everywhere.


Question 2: Antonyms

Opposite of "ZENITH": a) Peak b) Nadir c) Apex d) Summit

Explanation: Zenith is the highest point; nadir is the lowest point.


Question 3: Error Spotting

Identify the error: "Neither the driver nor the riders were happy with the surge pricing."

Explanation: With "neither...nor", verb agrees with the nearest subject (riders - plural, so "were" is actually correct here).

Correction: The sentence is correct! With plural nearest subject, use plural verb.


Question 4: Sentence Completion

The _______ nature of the gig economy has led to debates about worker rights. a) stable b) precarious c) permanent d) rigid


Question 5: Para Jumbles

Arrange: (A) through the app (B) customers can book rides (C) in just a few taps


Question 6: Reading Comprehension

Passage: "Dynamic pricing adjusts ride costs based on real-time demand and supply conditions..."

Question: What determines dynamic pricing? Answer: Real-time demand and supply conditions.


Question 7: Idioms

Meaning of "to take someone for a ride": a) To give a lift b) To deceive someone c) To travel together d) To offer a job


Question 8: One Word Substitution

A person who starts their own business: a) Employee b) Entrepreneur c) Manager d) Investor


Question 9: Active to Passive

Convert: "The algorithm matches riders with nearby drivers."


Question 10: Analogy

Map : Navigation :: GPS : ? a) Satellite b) Tracking c) Signal d) Location

Explanation: A map is used for navigation; GPS is used for tracking.


💻 Coding Questions (5 with Python Solutions)

Question 1: Nearest Driver (Geospatial)

Find k nearest drivers to a rider location.

import heapq
import math

def haversine_distance(lat1, lon1, lat2, lon2):
    """Calculate great circle distance between two points"""
    R = 6371  # Earth's radius in km
    
    lat1, lon1, lat2, lon2 = map(math.radians, [lat1, lon1, lat2, lon2])
    dlat = lat2 - lat1
    dlon = lon2 - lon1
    
    a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2
    c = 2 * math.asin(math.sqrt(a))
    
    return R * c

def find_k_nearest_drivers(rider_lat, rider_lon, drivers, k):
    """
    drivers: list of (driver_id, lat, lon)
    Returns k nearest drivers
    """
    distances = []
    for driver_id, lat, lon in drivers:
        dist = haversine_distance(rider_lat, rider_lon, lat, lon)
        distances.append((dist, driver_id))
    
    # Use heapq.nsmallest for O(n log k) complexity
    return heapq.nsmallest(k, distances)

# Example
drivers = [
    ("D1", 12.9716, 77.5946),
    ("D2", 12.9352, 77.6245),
    ("D3", 12.9789, 77.6402)
]
rider = (12.9716, 77.5946)
print(find_k_nearest_drivers(rider[0], rider[1], drivers, 2))

Time Complexity: O(n log k), Space Complexity: O(k)


Question 2: Surge Pricing Calculator

Calculate ride fare with dynamic surge pricing.

def calculate_fare(distance_km, time_minutes, base_fare=2.50, 
                   per_km=1.50, per_min=0.25, surge=1.0):
    """
    Calculate total fare including surge pricing
    """
    distance_fare = distance_km * per_km
    time_fare = time_minutes * per_min
    subtotal = base_fare + distance_fare + time_fare
    total = subtotal * surge
    
    return {
        'base_fare': base_fare,
        'distance_fare': distance_fare,
        'time_fare': time_fare,
        'subtotal': subtotal,
        'surge_multiplier': surge,
        'total_fare': round(total, 2)
    }

def calculate_surge_multiplier(demand, supply):
    """
    Calculate surge based on demand/supply ratio
    """
    ratio = demand / max(supply, 1)
    if ratio < 1.2:
        return 1.0
    elif ratio < 1.5:
        return 1.5
    elif ratio < 2.0:
        return 2.0
    else:
        return min(ratio, 3.0)  # Cap at 3x

# Example
fare = calculate_fare(10, 20, surge=1.5)
print(f"Total fare: ${fare['total_fare']}")

Question 3: Ride Matching Algorithm

Match riders with optimal drivers using criteria.

from dataclasses import dataclass
from typing import List
import heapq

@dataclass
class Driver:
    id: str
    lat: float
    lon: float
    rating: float
    vehicle_type: str

@dataclass
class Rider:
    id: str
    lat: float
    lon: float
    preferred_vehicle: str

def calculate_match_score(rider, driver):
    """
    Calculate a match score (lower is better)
    Consider: distance, rating, vehicle type match
    """
    # Distance component (using simple Euclidean for demo)
    distance = ((rider.lat - driver.lat)**2 + (rider.lon - driver.lon)**2)**0.5
    
    # Rating component (normalize to 0-1 range)
    rating_score = (5 - driver.rating) / 5
    
    # Vehicle match bonus
    vehicle_match = 0 if driver.vehicle_type == rider.preferred_vehicle else 0.5
    
    # Weighted sum
    score = distance * 10 + rating_score + vehicle_match
    return score

def match_rider_to_driver(rider: Rider, available_drivers: List[Driver], top_k=3):
    """
    Find top k matching drivers for a rider
    """
    scored_drivers = []
    for driver in available_drivers:
        score = calculate_match_score(rider, driver)
        scored_drivers.append((score, driver))
    
    # Return top k matches
    return heapq.nsmallest(top_k, scored_drivers, key=lambda x: x[0])

# Example
rider = Rider("R1", 12.9716, 77.5946, "uberx")
drivers = [
    Driver("D1", 12.9718, 77.5948, 4.8, "uberx"),
    Driver("D2", 12.9720, 77.5950, 4.5, "uberxl"),
    Driver("D3", 12.9710, 77.5940, 4.9, "uberx")
]
matches = match_rider_to_driver(rider, drivers, top_k=2)
for score, driver in matches:
    print(f"Driver {driver.id}: Score {score:.2f}")

Question 4: ETA Calculator

Calculate estimated time of arrival with traffic.

def calculate_eta(distance_km, traffic_level='normal'):
    """
    Calculate ETA based on distance and traffic
    traffic_level: 'low', 'normal', 'high', 'severe'
    """
    base_speed = 40  # km/h in normal conditions
    
    traffic_multipliers = {
        'low': 1.3,
        'normal': 1.0,
        'high': 0.6,
        'severe': 0.3
    }
    
    adjusted_speed = base_speed * traffic_multipliers.get(traffic_level, 1.0)
    time_hours = distance_km / adjusted_speed
    time_minutes = time_hours * 60
    
    return {
        'distance_km': distance_km,
        'traffic_level': traffic_level,
        'estimated_speed_kmh': adjusted_speed,
        'eta_minutes': round(time_minutes, 1),
        'eta_formatted': f"{int(time_minutes)} min"
    }

# Example
print(calculate_eta(12, 'high'))

Question 5: Trip Analytics

Analyze ride statistics from trip data.

from collections import defaultdict
from datetime import datetime

def analyze_trips(trips):
    """
    trips: list of dicts with keys: driver_id, fare, distance, timestamp
    """
    stats = {
        'total_trips': len(trips),
        'total_revenue': 0,
        'total_distance': 0,
        'driver_stats': defaultdict(lambda: {
            'trips': 0, 
            'revenue': 0, 
            'distance': 0
        }),
        'hourly_distribution': defaultdict(int)
    }
    
    for trip in trips:
        driver_id = trip['driver_id']
        fare = trip['fare']
        distance = trip['distance']
        timestamp = datetime.fromisoformat(trip['timestamp'])
        
        # Global stats
        stats['total_revenue'] += fare
        stats['total_distance'] += distance
        
        # Driver stats
        stats['driver_stats'][driver_id]['trips'] += 1
        stats['driver_stats'][driver_id]['revenue'] += fare
        stats['driver_stats'][driver_id]['distance'] += distance
        
        # Hourly distribution
        hour = timestamp.hour
        stats['hourly_distribution'][hour] += 1
    
    # Calculate averages
    if stats['total_trips'] > 0:
        stats['avg_fare'] = stats['total_revenue'] / stats['total_trips']
        stats['avg_distance'] = stats['total_distance'] / stats['total_trips']
    
    return stats

# Example
trips = [
    {'driver_id': 'D1', 'fare': 250, 'distance': 8.5, 'timestamp': '2026-03-01T08:30:00'},
    {'driver_id': 'D2', 'fare': 180, 'distance': 6.2, 'timestamp': '2026-03-01T09:15:00'},
    {'driver_id': 'D1', 'fare': 320, 'distance': 12.0, 'timestamp': '2026-03-01T17:45:00'},
]
stats = analyze_trips(trips)
print(f"Total Revenue: ₹{stats['total_revenue']}")
print(f"Average Fare: ₹{stats['avg_fare']:.2f}")

🎯 Interview Tips

Technical Interview Tips:

  1. Algorithm Mastery: Uber's coding interviews are extremely challenging. Practice LeetCode hard problems and focus on optimal solutions.

  2. System Design Fundamentals: Even for freshers, understand basics of distributed systems, databases, and scalability.

  3. Real-World Problem Solving: Think about edge cases, error handling, and production-ready code.

  4. Domain Knowledge: Understand geospatial problems, real-time systems, and supply-demand dynamics.

  5. Communication: Clearly explain your thought process. Uber values engineers who can articulate their solutions.

HR Interview Tips:

  1. Uber's Mission: "We reimagine the way the world moves for the better" - show how you align with this mission.

  2. Problem-Solving Stories: Prepare examples showing how you've tackled complex problems or overcome obstacles.


❓ Frequently Asked Questions

Q1: How tough is Uber's interview process?

A: Uber's interview process is among the most challenging in the industry. Expect multiple coding rounds with complex algorithmic problems and system design questions.

Q2: What programming languages are preferred?

A: Uber primarily uses Go, Java, Python, and JavaScript. Be proficient in at least one of these.

Q3: Is system design asked for freshers?

A: Yes, basic system design concepts are expected. Focus on understanding scalability, database design, and microservices architecture.

Q4: How important is domain knowledge?

A: While not mandatory, understanding transportation/logistics domain helps in framing better solutions during system design rounds.

Q5: What makes Uber different from other tech companies?

A: Uber operates at massive scale with real-time requirements. They look for engineers who can handle high-stakes, high-scale problems.


Best of luck with your Uber placement preparation! 🚗

Advertisement Placement

Share this article: