Senior Software Engineer | 100ms | Interview Experience
Summary
I interviewed for a Senior Software Engineer - Frontend role at 100ms. The process consisted of four rounds focusing on JavaScript, DSA, technical discussion, and a VP round involving DSA, LLD, and HLD. Despite completing the challenges, I was ultimately not selected.
Full Experience
Round 1: JavaScript Coding
I started with a JavaScript coding round that thoroughly tested my fundamentals and advanced concepts. The interviewer began by grilling me on basic JavaScript, then moved to topics like the event loop and how JavaScript code executes on the V8 engine. Following this, I was given several output-based questions covering closures, hoisting, prototypes, and the mechanics of inheritance in JavaScript. We also discussed how parent and child prototypes can share properties. This round went quite well, and I soon received a call from HR to schedule the next two onsite rounds.
Round 2: DSA (Real-world Problem Solving)
Although this was designated as a DSA round, the interviewer presented a real-world problem derived from streaming systems. The core challenge involved efficiently streaming large content without impacting existing data and effectively handling users who join the stream midway. We explored multiple approaches, considering both queues and trees. We eventually aligned on a tree-based structure, where if a user joins mid-stream, there's no need to store the entire stream for them; instead, we can simply fetch the required segment from the start up to the current point using the tree. This round was successful, and I received positive feedback.
Round 3: Technical Discussion
This round was labeled as technical, but it felt more like an in-depth discussion about my previous work and projects. The interviewer was an EM-level backend engineer. I walked through the High-Level Design (HLD) of a system I had built, discussed its outcomes, and proposed ways it could be optimized. The conversation then shifted towards streaming service optimizations, where I was asked how we could reduce disturbances for users and generally improve overall performance. The feedback for this round was mixed, but HR subsequently reached out to schedule my final VP call for HLD + LLD.
Round 4: VP Round – DSA + LLD + HLD
The final round was a virtual call with the VP, structured into three sections: DSA, Low-Level Design (LLD), and High-Level Design (HLD). We began with a classic Two Sum problem, and I provided an O(log n) optimized solution. Next, I was asked to implement a pub-sub class in JavaScript. The requirement was that each publish event should receive a unique identifier, and I needed to implement functionality to remove a specific event from the queue using that ID. I successfully wrote and executed the code for this. Unfortunately, the VP experienced frequent disconnections during the call, which consumed a significant portion of our time. As a result, the 45 minutes ended before we could even begin the HLD part. Since I had completed the first two sections successfully, I felt I had performed well. However, four days later, I received an email stating “not selected,” with no specific feedback, as each round was an elimination round.
Interview Questions (2)
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. The interviewer specifically asked for an optimized solution, suggesting something better than the typical O(n^2) brute force or O(n) hash map approaches, potentially aiming for an O(log n) solution if applicable (e.g., if the array is sorted or can be preprocessed).
Implement a PubSub class in JavaScript. The class should support the following core functionalities:
subscribe(eventName, callback): Allows a callback function to subscribe to a specific event name.publish(eventName, data): Publishes an event with associated data, triggering all currently subscribed callbacks for that event.- Crucially, each
publishoperation should return a unique identifier for that specific published event. removeEvent(eventId): Provides a mechanism to remove a previously published event from a processing queue using its unique identifier, preventing its associated callbacks from being invoked if it hasn't been processed yet.