64 practice questions for Uber Mobile Engineer interviews
Uber mobile engineer interviews focus on iOS or Android platform knowledge, memory management, offline-first architecture, and mobile-specific system design.
1. Top 6 Recently Asked Uber System Design Questions
Category: Graph system design problemThis collection covers the most frequently asked system design questions at Uber interviews.Input: Graph (nodes and edges) Output: Computed result
system designSenioroffline sync#1
1. [OA] Design an Offline-First Sync Engine for Uber Rides
With many Uber users dependent on the app in low connectivity areas, designing an Offline-First Sync Engine is critical. As a Mobile Engineer, your task is to create a robust class to manage local data persistence and synchronization with the server. Problem statement: Define a class OfflineSyncEngine that maintains local copies of user ride requests and syncs them with a remote server when connectivity is restored. - addRideRequest(ride: RideRequest) -> None: Adds a ride request to the local queue. - syncWithServer() -> None: Syncs all local requests with the server when a connection is available. Example 1: Input: syncEngine.addRideRequest(RideRequest(userId='user1', origin='A', destination='B')) Output: None Explanation: The ride request is stored locally until a connection is established. Example 2: Input: syncEngine.syncWithServer() Output: None Explanation: Syncs the local ride requests with the server. Constraints: - The system should handle up to 500 requests locally. - Data types for trip requests must be validated.
system designSeniormessaging#2
2. [OA] Design a Notifications Center for Uber
Uber needs an effective Notifications Center to manage ride updates, promotions, and driver messages in real-time. As a Mobile Engineer, you will design a system that handles notifications through multiple channels. Problem statement: Define the NotificationCenter class, which must manage sending and storing notifications for users. You should implement methods to send notifications via different channels and to retrieve pending notifications. - sendNotification(userId: string, message: string, channel: string) -> None: Sends a notification to the intended user through the specified channel (e.g., SMS, push). - getPendingNotifications(userId: string) -> List[str]: Retrieves and returns all pending notifications for the given user. Example 1: Input: notificationCenter.sendNotification('user1', 'Your ride is arriving!', 'push') Output: None Explanation: Successfully sends a push notification. Example 2: Input: notificationCenter.getPendingNotifications('user1') Output: ['Your ride is arriving!'] Explanation: Retrieves the pending notification message for the user. Constraints: - The number of notifications should not exceed 1000 per user. - User ID and message should be non-empty strings.