Summary
I interviewed for an SDE-2 position at Winzo in Delhi, which involved two rounds: DSA and Low-Level Design. Unfortunately, I was rejected after these rounds.
Full Experience
My Interview Experience at Winzo (SDE-2)
I recently had an interview experience for the SDE-2 role at Winzo in Delhi. The process consisted of two main technical rounds.
Round 1: Data Structures and Algorithms
The first round focused on Data Structures and Algorithms. I was presented with two questions:
- The first question was directly from LeetCode, specifically Smallest Range Covering Elements from K Lists.
- The second question was similar to Jump Game II and involved determining if a frog could cross a river given stone positions and specific jumping rules.
Round 2: Low-Level Design (LLD)
The second round was an LLD round. The interviewer's expectation was a comprehensive discussion covering database design, API design, High-Level Design (HLD), and Low-Level Design (LLD). We delved into various topics, including:
- Fundamental concepts like what Kafka is, database transactions, and how transactions ensure ACID properties in databases.
- A detailed system design problem for a chat application. I had to consider both functional and non-functional requirements, including one-on-one and group chats, message delivery acknowledgments, media sharing, chat storage and deletion, push notifications, and a premium subscription feature for extended message deletion.
I also had to consider non-functional aspects such as scalability (100K messages/second, 10KB avg. msg), consistency (message order), high availability, low latency, and end-to-end security.
Interview Questions (4)
A frog is crossing a river. The river is divided into some number of units, and at each unit, there may or may not exist a stone. The frog can jump on a stone, but it must not jump into the water.
Given a list of stones positions (in units) in sorted ascending order, determine if the frog can cross the river by landing on the last stone. Initially, the frog is on the first stone and assumes the first jump must be 1 unit.
If the frog's last jump was k units, its next jump must be either k - 1, k, or k + 1 units. The frog can only jump in the forward direction.
Example 1:
Input: stones = [0,1,3,5,6,8,12,17]
Output: true
Explanation: The frog can jump to the last stone by jumping 1 unit to the 2nd stone, then 2 units to the 3rd stone, then 2 units to the 4th stone, then 3 units to the 6th stone, 4 units to the 7th stone, and 5 units to the 8th stone.
Example 2:
Input: stones = [0,1,2,3,4,8,9,11]
Output: false
Explanation: There is no way to jump to the last stone as the gap between the 5th and 6th stone is too large.
Constraints:
2 <= stones.length <= 20000 <= stones[i] <= 2^31 - 1stonesis sorted in a strictly increasing order.
- What is Kafka?
- Explain database transactions.
- How do transactions make ACID databases ACID?
Functional Requirements:
- Should support one-on-one chat as well as group chats.
- Message delivery acknowledgement - sent, delivered, read.
- Sharing media files.
- Storage of chat as well as deletion functionality.
- Push notifications and SMS in case a user is inactive for a definite period of time (e.g., 1 day).
- Subscription for special features (premium feature) - only premium users can delete their messages at any time or an entire chat. Regular users can only delete for, let's say, 5 minutes.
Non-functional Requirements:
- Scalable.
- Consistent (messages shouldn't be in random order).
- Highly available (consistency > availability).
- Low latency.
- Security - end-to-end encryption.
Scale:
- 100K messages per second.
- Average message size - 10kb.