Dunzo Interview Experience


This post is to share my interview experience with Dunzo for a Senior Software Engineer position in Bangalore(May 2019). I was initially contacted by InterviewBit who co-ordinated the interview process.

Round 1 - Object-oriented design

I arrived in the Dunzo office for the F2F rounds on a Saturday morning at 9.30. There were around 20 other people who were invited for the interview the same day.

I was given a sheet of paper with requirements for designing and implementing a Multi-level Cache.

1. Different levels of cache that are chained (L1 -> L2 -> L3 -> L4 ...)
2. Each cache level has a specific CAPACITY, READ_TIME, WRITE_TIME
The READ_TIME, WRITE_TIME for the cache at level x+1 is greater than that of the cache at level x (as is the
 case with a typical caches). The same applies for  CAPACITY as well.

Let's assume there are 5 levels of cache - L1, L2, L3, L4, L5
The following is the order in terms of latency: L1 < L2 < L3 < L4 < L5
The following is the order in terms of size: L1 < L2 < L3 < L4 < L5

3. Values at each level is a subset of values at lower level
4. For Reads, if a value is not found at a particular level, try getting it from lower levels. Also, once a value is
 found, it needs to be updated in higher levels as well
5. For each read, print the value along with the total time it took to read the value
6. For each write, print the time it took to write the value (Choose in what levels the value has to be written)
7. Synchronize this for multiple threads reading and writing at the same time.  

There were a few other minor requirements I may have missed, but the crux of the problem statement is captured above. We were asked to code the solution on our laptops which would then be reviewed during one of the rounds later. If I remember correctly, we were given around 90 minutes to implement our solution. I feel that this round is a tactic employed to ensure that all candidates are engaged at once, and don’t feel that they are being made to wait until they actually meet with an interviewer F2F.

Round 2 - Problem solving + coding

The first F2F round was focused on problem solving and coding. The question for me was Text justification, which is an LC-Hard problem. I was given the option of using my laptop to code the solution(which was nice since I can use my IDE for testing and debugging different input cases).
I hadn’t solved this before, and took around 35-40 minutes to come up with a working solution. The interviewer reviewed it and was happy with the code (He did not press about testing and making it work for different edge cases). He then asked some questions about datastores:

How to optimize/improve performance in SQL db?

What are the problems with indexes?

How to scale a SQL db?

What are columnar datastores?

The round ended with me asking questions about Dunzo. The interviewer was patient and gave an overview of the tech -stack of some products at Dunzo. He also shared his genuine/unbiased views about working for startups, which I really appreciate.

Round 3 - Problem solving + coding

The second F2F round was focused on problem-solving and coding. He started with the following:

Given an array, find the 3 elements such that i < j < k and a[i] + a[j] + a[k] is maximum

I hadn’t solved this problem before, and discussed my thought process with the interviewer as I figured out the solution. My solution did not have the best possible time complexity, which I came to realize later when I checked the solutions discussed in geeksforgeeks. Once I solved this problem, the interviewer also reviewed my code for the Object-oriented design problem I was given earlier in the day.

After this, he answered some of my questions on the work and tech at Dunzo and talked about how his experience at Dunzo compares with that of his previous company.

The recruiter informed that I was done for the day and mentioned that I may have a few rounds of on-site interviews the next week, and that he will co-ordinate with me on the timings.

Round 4 - With Engineering Manager

I was invited for 2 more rounds of on-site interviews the following week, and the first of the two rounds was with an engineering manager. He started with questions about my current role and projects and ended with a coding problem involving synchronizing multiple threads. The following were some of the questions asked in this round:

What is the your role in the team?

What is the most challenging project you've worked?

How did you scale your application?

How did you measure throughput for APIs? What are the metrics you considered? At what point did you choose to scale your infrastructure?

Write a multi threaded program where there are 3 threads - t1 prints 1, 4, 7, etc: t2 prints 2, 5, 8, etc : t3 prints 3, 6, 9, etc - Synchronize so that the numbers are printed in sequence

Difference between using an executor and creating a new thread

Round 5 - With Techincal Architect

This round was with an architect, and was one of the worst I’ve ever performed in an interview. The following were some of the questions asked:

Questions on Garbage collection (what is young gen, permgen, etc)

Datatypes in redis

What is a columnar data store?

What are some thread synchronization mechanisms?

What is a re-entrant lock?

And a coding question at the end: Find the first non-repeating character in a stream

But to his credit, the interviewer remained patient throughout the interview and tried to provide me with hints wherever possible. (But I still managed to screw up 😛)

Final Thoughts

As I was expecting, I did not make it through Round 5 . (I can have no complaints about it since I failed due to my own shortcomings). Overall, I found the interview process to be very rigorous, covering a wide range of skill-sets (Problem solving + Coding + Design + Programming Fundamentals + Experience scaling systems) and it was a great learning experience for me. It helped identify my weaknesses and set me up for success in my subsequent interviews.

See Also