Summary
I recently interviewed for a Software Engineer position at PhonePe, which involved an Online Assessment, two technical coding rounds, and a final Hiring Manager discussion. I successfully received an offer for the role.
Full Experience
My interview journey at PhonePe for the Software Engineer role, with 1-3 years of experience, began after I applied through Instahyre.
Round 0 – Online Assessment
The initial stage was an online coding assessment conducted on CodeSignal. This round comprised four Data Structures and Algorithms questions, ranging from medium to hard difficulty levels.
Round 1 – Coding Round
Approximately one week after completing the OA, I received an email from HR to schedule the first coding round. I requested to postpone it by two weeks as I was out of town. In this round, I was presented with the following problem:
We thoroughly discussed multiple approaches to solve this problem. Due to time constraints, this was the only question covered in this round.
Round 2 – Coding Round
The very next day, I received a call from HR and scheduled the second coding round for the same week. This round involved two specific questions:
- Accounts Merge
- A variation of the Meeting Rooms problem, specifically focused on finding the minimum number of meeting rooms required.
Round 3 – HM Round
Again, HR contacted me the day after the second coding round, and I scheduled the Hiring Manager round for the following week. This round primarily involved a discussion about my resume and my work experience at my current company. I was asked technical and architectural questions related to my current projects. Additionally, the interviewer posed a few behavioral and situational questions to understand my approach to various workplace scenarios.
Verdict: I was selected for the position.
Interview Questions (4)
Given a list of accounts where each account consists of a name followed by some email addresses, merge these accounts. Two accounts belong to the same person if they have some email common. Note that even if two accounts have the same name, they may belong to different people as people could have the same name. A person can have any number of accounts initially, but all of their accounts have the same name.
Given an array of meeting time intervals intervals where intervals[i] = [starti, endi], return the minimum number of conference rooms required.
The interview included general behavioral and situational questions designed to assess problem-solving skills, teamwork, handling conflict, and career aspirations.
Summary
This post summarizes my interview experience at PhonePe, detailing the various Data Structures & Algorithms and System Design questions I encountered across multiple technical rounds.
Full Experience
My interview journey at PhonePe involved several intense rounds, primarily focusing on Data Structures & Algorithms (DSA) and System Design.
DSA Rounds
The DSA rounds were comprehensive, covering a wide array of topics. I was presented with problems such as "Burning Tree" and "Shortest Path to Get All Keys". I also tackled LeetCode 1235: Maximum Profit in Job Scheduling and 1657: Determine if Two Strings Are Close. During Matchsticks to Square, I initially struggled due to misinterpreting the input format, but once I understood, my approach was satisfactory to the interviewer. For Kth Smallest Element in a Sorted Matrix, I started with a min-heap solution, and after a hint, optimized it using binary search.
Other notable DSA problems included Burst Balloons (a hard DP problem) and The Celebrity Problem. In a subsequent PS/DS round, I was asked to solve Remove K Digits and a problem from Codeforces. I also faced a custom question: "Find the minimum number of swaps to make a string palindrome", for which I used a greedy approach. Another question involved finding "the sum of all nodes at the deepest level in a binary tree".
I encountered a complex problem on maximizing total damage with spell casting, where I had to consider sliding window or dynamic programming, and removing the most stones in the same row or column, which required graph theory and Union-Find. Classic problems like Trapping Rain Water, Left View of a Binary Tree, and finding nodes at 'k' distance from a target node were also asked. I implemented a Min Stack and was tasked with printing the level order traversal of a tree with alternate direction changes, which I solved easily. Another monotonic stack problem was given, and despite modifications, I managed to solve the first two versions.
Additional problems included First Missing Positive, Longest Increasing Path in a Matrix, and an O(log n) optimization challenge for the Complete Binary Tree Inserter (which I could only solve in O(n)). Queue Reconstruction by Height, House Robber III, Kth Ancestor of a Tree Node, and Bricks Falling When Hit were also part of the technical assessments. I was also asked a question related to the Convex Hull Algorithm and how to generate random points within a circle with equal probability distribution.
System Design Rounds
The System Design rounds were equally challenging. I was asked to design a Search Autocomplete feature, where I successfully implemented a Trie-based solution and discussed scalability and optimizations. One of the final rounds was to design Instagram, where I focused on posting, immediate visibility, feed generation, and likes/comments. I covered NFRs, scale, HLD, and trade-offs, though I felt I could have elaborated more on the likes/comments service. I also had to design a service for delayed triggers, a generic online game (like Ludo/Chess) where I had to drive the discussion from FNRs to tech stack and matching logic, and Payment Gateway Integration. Another iteration of Design Instagram highlighted the interviewer's disagreement with a message queue for feed publishing/fetching at massive scale. Lastly, I designed Twitter, covering tweet posting, follow-following, timelines, and profiles, emphasizing LLD and HLD aspects.
Interview Questions (62)
You are given an integer array matchsticks where matchsticks[i] is the length of the i-th matchstick. You want to use all the matchsticks to form one square. You should not break any single matchstick, but you can link them up, and each matchstick must be used exactly one time. Return true if you can make this square, and false otherwise.
In a group of N people, a celebrity is someone who is known by everyone else but does not know anyone. Find the celebrity if one exists.
Given a string, find the minimum number of swaps required to make it a palindrome.
A problem about maximizing total damage with spell casting. I had to devise a strategy, possibly using sliding window or dynamic programming, to balance choices and constraints.
Given a binary tree, print the nodes in 'left view' order (first node at each level from the left side).
A problem solvable using a monotonic stack. The interviewer modified the question multiple times during the interview. I solved the initial problem and its first modification.
The thief has found himself a new place for his thievery again. There is only one entrance to this area, called root. Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that all houses in this place form a binary tree. It will automatically contact the police if two directly-linked houses were robbed on the same night. Determine the maximum amount of money the thief can rob tonight without alerting the police.
You are given an m x n grid representing a map of bricks. A brick is at grid[i][j] = 1 and an empty cell is at grid[i][j] = 0. You are also given an array hits, where hits[i] = [rowi, coli] indicates a brick (if exists) at that position is removed. We need to find the number of bricks that will fall after each hit.
A problem related to finding the convex hull of a set of points.
Write a function that generates random points within a circle with equal probability distribution.
A path in a binary tree is a sequence of nodes where each pair of adjacent nodes in the sequence has an edge connecting them. A node can only appear in the sequence at most once. The path does not necessarily need to pass through the root. The path sum is the sum of the node's values in the path. Given the root of a binary tree, return the maximum path sum of any non-empty path.
Given an array of integers, count the maximum number of integers you can add such that at any point, the cumulative sum from left to right never goes negative. The question was presented in a scenario.
There is an undirected connected tree with n nodes labeled from 0 to n - 1 and n - 1 edges. You are given an array edges of length n - 1, where edges[i] = [ai, bi] indicates that there is an edge between nodes ai and bi. Return an array answer of length n where answer[i] is the sum of the distances between node i and all other nodes in the tree.
You are given an m x n grid where each cell can have one of three values: 0 representing an empty cell, 1 representing a fresh orange, or 2 representing a rotten orange. Every minute, any fresh orange that is 4-directionally adjacent to a rotten orange becomes rotten. Return the minimum number of minutes that must elapse until no fresh oranges remain. If this is impossible, return -1.
A greedy problem similar to typical meeting scheduling or interval problems.
A problem that can be solved using a monotonic stack, similar to finding the next greater element.
You are given an m x n integer matrix grid where grid[i][j] is either 0 (empty) or 1 (obstacle). You can move up, down, left, or right. You are also given an integer k. Return the minimum number of steps to walk from (0, 0) to (m - 1, n - 1) given that you can eliminate at most k obstacles. If it is impossible to find such a path, return -1.
You are given a 0-indexed m x n grid of integers fire. You are in a cell (0, 0) and a fire starts at a cell (fireRow, fireCol). You want to reach a safe cell (m - 1, n - 1) before the fire reaches it. Return the maximum time t you can wait before starting your journey, such that you can still reach the safe cell. If it is impossible to ever reach the safe cell, return -1. If you can always reach the safe cell regardless of how long you wait, return 10^9.
You have a 2-D grid of size m x n representing a box with some slanted walls. A ball will drop from the top of the box. The grid grid[i][j] can be 1 (representing a right-slanted wall) or -1 (representing a left-slanted wall). Return an array answer of size n where answer[i] is the column that the ball falls out of at the bottom, or -1 if it gets stuck.
Given two strings str1 and str2 of the same length, determine whether you can transform str1 into str2 by doing zero or more conversions. In one conversion you can convert all occurrences of one character in str1 to any other lowercase English character.
Design a search autocomplete feature. I used a Trie data structure and implemented a working solution. The discussion covered scalability, handling different scenarios, and optimization of memory and time complexity.
Design Instagram, focusing on core features like posting content, immediate post visibility, feed generation, and likes/comments. I covered non-functional requirements, set scale expectations, and outlined a high-level design, detailing each service and its trade-offs.
Design a service that registers triggers with specified delays from other services and sends a response once the delay for that trigger is completed.
Design an online multiplayer game like Ludo or Chess. I had to lead the discussion, covering functional and non-functional requirements, high-level design, APIs, tech stack choices, implementation details, exception handling, fault tolerance, and database choices. I also explained core logic for features like player matching (e.g., Noob vs. Noob) and presented multiple approaches with their trade-offs.
Design a system for payment gateway integration. The interviewers were looking for very specific details in the design.
Design Twitter, focusing on functionalities such as posting tweets, follow/following mechanisms, user timelines, and user profiles. The interview emphasized both Low-Level Design (LLD) and High-Level Design (HLD).
Preparation Tips
My preparation primarily involved in-depth study of Data Structures and Algorithms, practicing a wide range of LeetCode problems, and gaining a solid understanding of System Design principles. I focused on common patterns and complex problem-solving techniques relevant to both domains.
Summary
I recently participated in a machine coding round for PhonePe, where I was tasked with designing an 'App Version Management System' to handle app installations, updates, and various rollout strategies.
Full Experience
I had a machine coding round at PhonePe, which focused on building an 'App Version Management System'. The problem statement detailed the need to manage different app versions, handling fresh installs and updates, similar to how smartphone apps evolve. The core idea was to design a system where app owners could directly interact with target devices, bypassing traditional marketplaces like Playstore or AppStore. Key functionalities included uploading new versions, creating update patches between versions, releasing versions with strategies like beta or percentage rollouts, and checking for app version compatibility and updates. I also had to implement functions to execute install or update tasks. The expectation was to have everything in memory, focusing on OOPs/OOD principles, code readability, and testability.
Interview Questions (1)
App Version Management System
Every smartphone user these days has lots of apps installed in their smartphones. These apps follow multiple iterations in its lifecycle which can range from fresh installs to updates of an existing app.Install is done for cases where the phone doesn't have the app previously installed. Updates are triggered when the app is preinstalled but a new feature is rolled out.
Design an app version management system for a mobile application, say PhonePe app.
We will assume that there is no marketplace like Playstore / AppStore exists and every App Owner can directly interact with the target device irrespective of operating system ( android / iOS )
To install any app, consumer can go to the website and directly install the app through online installer ( we’ll assume, this is something which is implemented )
Real world example -
- Install - Consumer just bought his / her first Mobile device and wants to use PhonePe. In such case a fresh Install will happen - always latest version supported will be installed. Consumer goes to phonepe website and selects install option given on website ( how it happens is outside the scope of problem statement )
- Update- Above customer has installed the app and a few days later a new feature ( say dark mode ) is rolled out by PhonePe. In such cases, PhonePe will directly update the app on the phone.
System Components -
- App and App versions - App will have a list of versions, each version denoting a new file and metadata. Version will have some meta data associated with it, like the minimum supported operating system ( android / iOS ) version etc.
- Roll out :: App admin can roll-out a new version from the backend. A roll-out can be either installing or updating the app -
- install - App is to be installed fresh in the device. We will install the app in the smartphone
- Update - takes a diff of installed version vs latest version and install the diff ( details in requirements part )
- Rollout strategy - New version rollout can be done with different strategies.
- Beta rollout - roll out the app version only on specific devices
- Percentage rollout - roll out the app version on some percent on devices
Requirements-
Below are various functions that should be supported with necessary parameters passed- Implement the above mentioned System components and their extensions (if possible)
- Implement the following functionalities for an app version management system. Note - We can use any of the available methods in the available capabilities section.
uploadNewVersion( // necessary params ) : Store the new version and version file byte stream in the system
createUpdatePatch( app, fromVersion, toVersion) : Create an update patch from source to target app version. Diff of fromVersion and toVersion will be a byte-stream or byte-array and same diff would be fired on the target device and pre-installed app will take care of installation. Pre Installed app has capability to accept a byte-stream / byte-array and install it as an update / patch
releaseVersion(// necessary params) : will release a version as per the strategy. BetaRolloutStartergy will include rolling out a new app version to only a set of devices.
isAppVersionSupported(// necessary params) : will check if given targetVersion supports the input device using info like like device android version, rollout strategies etc
checkForInstall(// necessary params) : Check whether a given h/w + OS supports the the app or not
checkForUpdates(// necessary params) : checks if an update is available for a given device.
executeTask(// necessary params) - will create an install or update task based on the method input. Can use methods from the list of available methods below.
Available Capabilities -
We can assume below methods are available (can decide method arguments by yourselves) -installApp- will flash the app file in the deviceupdateApp- will flash the diff pack in the devicecreateDiffPack- will consume 2 app files and create diff pack file from sourceFile to targetFileuploadFile(fileContent)- will upload the file in some storage and return its url.getFile(fileUrl)- returns a file content, which could then be flashed using either installApp or updateApp methods
Code Expectations -
- Everything has to be in memory.
- Candidate can opt for any language for implementation
- Simple and basic function are expected as entry point - no marks for providing fancy restful API or framework implementation
- Because this is a machine coding round, try to at least complete the basic requirements with minimal required algorithm implementations.
Evaluation criteria -
- Working code
- Code readability
- Implementation of OOPs / OOD principles with proper Separation of concerns
- Testability - a TDD approach ( not to be mixed with test cases )
- Language proficiency
- Test Cases
- [execution time limit] 4 seconds (sh)
- [memory limit] 2g
Summary
I recently interviewed for the SDE-2 role at PhonePe and was selected. The process involved machine coding, DSA/problem-solving, system design, and hiring manager rounds. Despite challenges with an unprofessional recruiter, I received an offer.
Full Experience
My PhonePe SDE-2 Interview Experience
Hi everyone, I wanted to share my recent interview experience for the SDE-2 position at PhonePe. The overall process was quite comprehensive, although my interaction with the recruiter was less than ideal. She was unprofessional, frequently canceled meetings without informing me promptly, and often scheduled interviews on different days than requested. I often had to call back after each round to schedule the next one, which was frustrating.
Round 1: Machine Coding Round
For the first round, I was given a problem and had 24 hours to complete it. The problem was the classic Snake and Ladder game. I successfully completed this round.
Round 2: DSA/Problem Solving
This round consisted of two problems. The first involved some mathematical calculations, while the second was similar to problems that require equalizing all elements in an array through various operations.
Round 3: System Design
This round was focused on system design, where I was tasked with designing a Subscription Management System. I discussed various aspects of designing such a system, including handling recurring payments, plan changes, cancellations, and notifications.
Round 4: Hiring Manager (HM) Round
The final round was with the hiring manager. This round focused on my past projects, behavioral questions, and situation-based scenarios.
Despite the initial struggles with the recruitment process, I received positive feedback from all rounds and eventually got the 'Selected' verdict!
Interview Questions (3)
For the machine coding round, I was given the complete problem statement for the classic Snake and Ladder game and had 24 hours to implement a solution.
In the DSA/Problem Solving round, one of the problems asked was similar to equalizing all elements in an array. This typically involves finding the minimum operations to make all elements the same, often related to finding a median or average.
For the system design round, I was asked to design a comprehensive Subscription Management System. This included aspects like handling recurring payments, managing different subscription plans, user upgrades/downgrades, cancellations, and notification systems.