Summary
Designed two queues using an array of fixed size N to efficiently utilize empty spaces after elements are popped.
Full Experience
Got this question in Rubrik interview.
Design two queues using an array of fixed size N.
The interviewer said you can use an external data structure but the elements must be in the queue.
The problem here is that once the elements in the queue gets popped, it creates empty space which must be then utilized.
How can we solve this problem?
Few approaches I have in my mind:
Create K blocks. Each blocks store N/K values.
Each block store indices from i x N/K to (i+1) x (N/K)
Doubly Linkedlist points to the blocks
DLL tail -> always empty blocks for fast query of empty blocks
class LinkedListNode:
self.start_index
self.end_index
self.next_node = NULL
Linkedlist -> Keep track of blocks
head1 -> start for queue1
head2 -> start for queue2
tail -> to get empty block
While popping if the block gets empty it is moved to tail and the head is moved to next node using pointer
Is this alright?
Interview Questions (1)
Design two queues using an array of fixed size N.
The interviewer said you can use an external data structure but the elements must be in the queue.
The problem here is that once the elements in the queue gets popped, it creates empty space which must be then utilized.
Summary
I interviewed with Rubrik for a New Grad 2025 role. After clearing an Online Assessment, I proceeded to two interview rounds focusing on system design and multithreading debugging, which ultimately resulted in a rejection.
Full Experience
Hello Everyone!! I wanted to share my interview experience with Rubrik for the 2025 Grad role. A recruiter reached out to me directly for this position. The overall process took place during the 2nd and 3rd week of September. First, I completed an Online Assessment which lasted 1 hour. It consisted of 1 DSA question (based on DP on strings, though I can’t share the exact problem) and 10 MCQs on Multithreading and Concurrency. I cleared the OA and got a call for interviews. The recruiter scheduled 2 interviews on consecutive days.
Round 1 had two interviewers present. The main question was to Design and implement a Linux file system. It was quite an open-ended problem, so I spent a good amount of time asking clarifying questions. I managed to fully implement three parts and partially complete a fourth part. The last 10 minutes were dedicated to an open Q&A with the interviewers.
Round 2 was a debugging round, held the next day. The interviewer presented me with a multithreading/concurrency-based code and tasked me with finding and fixing all bugs, then providing a proper running code within 50 minutes. I successfully identified the main bug, which was a deadlock, and attempted to fix it. Unfortunately, after my fix, the code failed to compile. I spent a significant amount of time trying to resolve this compilation issue and, consequently, couldn't address the other bugs. At the end, the interviewer explicitly mentioned that they expected a fully working code solution.
Result: I was rejected after these two rounds. Despite the outcome, it was a great learning experience, and I genuinely enjoyed the process. I hope sharing this helps others preparing for similar interviews. Feel free to drop any questions in the comments, and I'll be happy to answer them. All the best! ✨
Interview Questions (2)
Design and implement a Linux file system. This was an open-ended problem where I had to ask a lot of clarifying questions. I managed to fully implement 3 parts and partially complete the 4th part during the interview.
I was given a multithreading/concurrency-based code and asked to find and fix all bugs, then provide a proper running code within 50 minutes. I identified the main bug as a deadlock and attempted to fix it. Unfortunately, after my fix, the code failed to compile, and I couldn't resolve this or address other potential bugs.
Summary
I shared my interview experience at Rubrik for a G5 role, which included system coding, debugging, and a hiring manager round. I successfully completed the coding challenges focusing on graph algorithms, concurrency, and low-level system design, along with a behavioral discussion.
Full Experience
Round 1 - System Coding Round
This was graph problem which could be solved using topological sort. Interviewer was more focused on code quality, since this was not a DSA round. More focused towards low level design aspects. In the end she asked me how can I make the code thread safe. I was able to code fully working solution, ran it on few test cases. Also was able to answer the concurrency related questions.
Round 2 - Debugging Round
This was a standard producer consumer problem. He gave me a cpp code where multiple threads (producer and consumer) are trying to access the critical section. Was able to find the bug after one hint.
Round 3 - System Coding Round
This was again LLD + Concurrency round. I had to design a logical memory unit. Cpu can request for a page with given pageId. If the page exists in the logical memory we return it. Otherwise we fetch it from the physical memory. Also, you have to maintain all the page entries in the logical memory unit. And user may request for most recent or k-recent entries of a particular page. Solved the problem using hashmap and linked list. Where key of the hashmap is pageId and the linked list will store all the entries of that page. Was able to code fully working solution and ran it over few test cases.
Similar to round 1 he tested my concurrency knowledge and asked how can I make this code thread safe.
Round 4 - HM Round
This was a standard HM round. Where in depth discussion about my current project and product's arhitecture happend for 40-45 minutes. He was asking lot of cross questions and making sure I have in depth knowledge about my service and it's architecture. Then, he asked few behavioural questions like why do you want to leave current org etc.
Interview Questions (4)
I was given a graph problem that could be solved using topological sort. The interviewer focused on code quality and low-level design aspects. In the end, I was asked how to make the code thread safe.
This was a standard producer consumer problem. I was given a C++ code where multiple threads (producer and consumer) are trying to access the critical section, and I had to find the bug.
I had to design a logical memory unit. The CPU can request for a page with a given pageId. If the page exists in the logical memory, it is returned. Otherwise, it is fetched from the physical memory. I also had to maintain all the page entries in the logical memory unit, and the user might request for most recent or k-recent entries of a particular page. Similar to round 1, I was tested on my concurrency knowledge and asked how to make this code thread safe.
This was a standard hiring manager round. There was an in-depth discussion about my current project and the product's architecture for 40-45 minutes. The interviewer asked many cross-questions, ensuring I had in-depth knowledge about my service and its architecture. Then, a few behavioral questions were asked, such as "why do you want to leave your current organization?"
Summary
I recently attended G5 Interviews at Rubrik, which included an online coding test, two algorithmic coding rounds (one focused on concurrency), and a hiring manager discussion. I found the questions unique and successfully navigated the rounds.
Full Experience
I recently attended G5 Interviews at Rubrik. Hope it helps.
Experience: Over 1 year of experience at a well-known product-based MNC (not part of FANGG).
There were a total of 5 rounds:
- Online Coding Test
- Algo Coding
- System Coding 1
- System Coding 2
- Hiring Manager (HM)
Mode of Application: recruiter reached out on linkedin
Online Coding Test
Language used - C++
Online Coding test was pretty simple with 1 DSA qs (Easy-Medium BS) and some MCQ related to multithreading and OS
Algo Coding
Language used - C++
If you can solve LC-715, then you can solve that qs easily. I don't remember exact qs, but it was something to do with range modification and range updates. I solved it using Seg tree. There is no language restriction. Interviewer was fully supportive and cooperative.
System Coding 1
Language used - JAVA
This was the best interview round I have ever experienced so far. This round test your multithreading and concurrency area. They provided one coding platform link which has compatibility to run multithreaded code.
I cannot disclose exact Qs due to NDA, but if you know how bookMyShow ticket booking system works, you can arrive to this solution easily.
I took 10min extra for this round as I messed up my code somewhere and because of that, couple of threads were getting executed at a same time. Interviewer was co-operative and told me that a single line of your code change can fix your whole logic. I took 10min more and was able to debug code by myself. The interviewer seemed highly experienced in multithreading and was very particular about my choice of concurrency constructs such as CyclicBarrier, Semaphore, etc....
I got positive feedback from both the rounds and after 4-5 days HR schedule 2 more rounds. System Coding 2 and HM round.
System Coding 2
Language used - C++
This was pretty straight forward round for me. It was a medium to hard LC type problem (not available online). I solved it using multiset, basic interval merge logic combined with line sweep.
I don't remember exact problem but it was greedy problem and require some constructive logic building. Interviewer was pretty supportive. I solved the problem without any hints and my round was finished before 5min of scheduled time.
Hiring Manager (HM)
This was a deep down grill on work experience and also how we handle responsibility. There was also few discussions on projects, but mostly discussion was on experience as well as behavioral qs. This was a decent round.
The best part of whole interview process which I liked the most is - all qs are framed by rubrik internal team itself (this is what I feel). I have solve more than 3000+ qs on various platforms but haven't seen exact same qs (may be they do exist but I have not encountered them).
They not only test your coding ability but also test multithreading and concurrency area, and how well verse you are with handling exceptions.
Please comment if I have missed anything to add.
Cheers!!!
Interview Questions (3)
The round tested multithreading and concurrency. The question was a system coding problem, similar to designing a ticket booking system like BookMyShow, focusing on handling concurrent operations.
This was a medium to hard LeetCode type problem, a greedy problem requiring constructive logic building. I solved it using multiset, basic interval merge logic combined with line sweep.
Preparation Tips
I have solved more than 3000+ questions on various platforms, but noted that Rubrik's questions seemed internally framed and unique, not directly encountered before.
Summary
I recently interviewed for a Software Engineer (L4) position at Rubrik, undergoing five rounds focusing on system coding, algorithms, system design, and a hiring manager discussion. The process heavily emphasized multithreading, concurrency, and OS fundamentals, and I am currently awaiting a response from the recruiter.
Full Experience
I recently attended five interview rounds for the SWE (L4) role at Rubrik, which focused significantly on multithreading, concurrency, and synchronization techniques, along with OS fundamentals. The structure was as follows:
- System Coding 1: This round delved into concurrency, multithreading, process management, memory management, and synchronization concepts. I was asked to design a job scheduler that efficiently runs jobs with dependencies, assuming a function to get available jobs based on finished ones.
- Algo Coding: This round featured a Medium to Hard LeetCode-style question. I received a stream of data and for each new item, I needed to return the minimum absolute difference between any two elements among the last K elements in the stream.
- System Coding 2: The problem here involved designing a system for a playground accessible by only one team at a time, with a maximum of 10 concurrent players. The challenge was to manage multiple players from different teams trying to access it simultaneously, while also preventing player starvation.
- System Design: I was tasked with designing a system similar to LinkedIn Connections that could efficiently answer queries about the degree of connection between two users (e.g., 1st-degree for direct connections, 2nd-degree for friends of friends) for up to 1 billion users.
- Hiring Manager and Technical Deep Dive: This final round was a deep dive into one of my past projects, where I discussed challenges faced and decisions made. It also included several behavioral questions.
Interview Questions (4)
Design a job scheduler that runs all available jobs in an optimized manner, considering job dependencies. You can assume the existence of a function get_next_jobs(finished_jobs) that returns all jobs whose dependencies are fully satisfied based on the currently finished jobs. A job can only be executed after all of its parent (dependent) jobs are complete.
You will receive a stream of data. For each item, return the minimum absolute difference between any two elements among the last K elements in the stream.
There is a playground that can be accessed by only one team at a time, with a maximum of 10 players allowed concurrently. Multiple players from different teams may attempt to access the playground simultaneously. How would you design the system to assign players to the playground while enforcing these constraints? (They will ask about different approaches you can take to avoid starvation of any player)
Design a system similar to LinkedIn Connections that can answer the query: "How many levels (or degrees) of connection exist between two users?" For example, direct connections are 1st-degree, friends of friends are 2nd-degree, and so on. The system should efficiently handle up to 1 billion users.
Preparation Tips
To prepare for these interviews, I concentrated on mastering fundamentals, particularly in multithreading, concurrency, and OS concepts like memory management and process synchronization. For the system coding rounds, which differed from typical FAANG interviews, I gathered recent interview questions from platforms like LeetCode and Reddit. My approach involved solving one question at a time, identifying all necessary underlying concepts, and then studying those concepts in depth. I found it beneficial to treat the interviews as discussions, focusing on sharing my opinions and reasoning rather than just finding a perfect solution.
Summary
I interviewed for a G6 role at Rubrik in Bangalore. The interview process involved two technical questions, one on a custom multi-threaded job scheduler with dependencies and error handling, and another on parallel file copying. I was unfortunately rejected due to average feedback in round 2.
Full Experience
I underwent an interview process with Rubrik for a G6 position in Bangalore. The technical rounds presented challenging problems focusing on concurrent programming and custom system implementations. I ultimately received an average feedback in round 2, leading to my rejection.
Interview Questions (2)
There are some tasks which depend on each other. Example: b depends on completion of a, c depends on completion of a and b. There is a function you are provided which you can use to get this information: getDependentTasks(a) -> returns b, getDependentTasks(a,b) -> returns c. Implement a job scheduler with multiple threads such that all parent tasks are completed before child task (i.e., a should complete before b, then b should complete, then c). Initial input to the function is blank which returns 'a' so this is the starting point. Each task has a function called doWork() which you need to run. Keep in mind that if any of the task throws an exception, you have to immediately stop execution of all tasks and return. You are not allowed to use in-built Java libraries. Create blocking queues of your own, thread pools, executors - everything has to be created on your own using locks.
You are given 2 functions: pread(buffer, number of characters to be read, file name) and pwrite(buffer, number of characters to write, file name). You have to use these functions to write code which will read from a file and write it to another file. How would you do this parallely using multiple threads.
Summary
I had an interview experience for a Software Engineer role at Rubrik, which included multiple coding, system design, and behavioral rounds, ultimately resulting in a rejection after the fourth round.
Full Experience
Round 1: System Coding https://leetcode.com/problems/snapshot-array/description/
Round 2: System Coding There are N worker nodes, and we need to write apis: runTask() -> Runs a particular task on a node AddTask(nodeid, taskid) -> Adds a task to a particular node nodeid rebalanceTask() -> Moves tasks from one node to another if some node has lots of cpu intensive tasks. printTask() -> Prints the list of tasks in queue at each node.
To Add a task to a queue we can maintain a per node task_queue.
I did rebalancing based on the number of tasks that are currently pending in each node's queue to maintain the invariant that each node has atmax (sum of all the pending tasks in each node's queue)/total_number_of_nodes number of tasks at a moment.
Round 3: DS & Algo You are given a stream of person's strength(integers) you need to find out rank of current person in the stream(moving from left to right). We can assume stream can be stored in RAM. Eg. stream: [5, 4, 6, 1] Output: [1, 2, 1, 4] At t=0 only 5 is there so its rank is 1 as it is the highest strength At t=1, [5,4] are there and rank of 4 is 2 as it is the second highest strength At t=2 [5,4,6] are there and rank of 6 is 1 as it is the highest strength
It can be solved using Binary search trees. We need to insert strength at each point and find all the elements greater than the current element from the tree. Storing number of elements to the right of each BST node will help reduce the timecomplexity as we don't have to traverse to the right of the node. Interviewer wanted to implement Binary search trees instead of using the stl library set function.
Round 4: System Design HLD & LLD mix
Design a scalable and fault-tolerant data collection system that can collect logs and data from various sources (eg, application servers, tailing a file etc.) and route them to different destinations (e.g., Elasticsearch, Kafka, S3) for further processing and analysis.
The design round was very vague and interviewer didn't seem interested in contributing to discussion and providing any comments on the design. Didn't go well for me.
Round 5: Hiring Manager Didn't happened for me as i got rejected in Round 4
Overall it was a good experience. Recruiter donot responds to my request for getting feedback on individual rounds which is sad as i had invested a lot of time in preparing/giving the interviews.
Interview Questions (4)
There are N worker nodes, and we need to write apis: runTask() -> Runs a particular task on a node AddTask(nodeid, taskid) -> Adds a task to a particular node nodeid rebalanceTask() -> Moves tasks from one node to another if some node has lots of cpu intensive tasks. printTask() -> Prints the list of tasks in queue at each node.
You are given a stream of person's strength(integers) you need to find out rank of current person in the stream(moving from left to right). We can assume stream can be stored in RAM. Eg. stream: [5, 4, 6, 1] Output: [1, 2, 1, 4] At t=0 only 5 is there so its rank is 1 as it is the highest strength At t=1, [5,4] are there and rank of 4 is 2 as it is the second highest strength At t=2 [5,4,6] are there and rank of 6 is 1 as it is the highest strength
Design a scalable and fault-tolerant data collection system that can collect logs and data from various sources (eg, application servers, tailing a file etc.) and route them to different destinations (e.g., Elasticsearch, Kafka, S3) for further processing and analysis.
Preparation Tips
I had invested a lot of time in preparing/giving the interviews.
Summary
I interviewed for a Senior Software Engineer role at Rubrik, focusing on systems coding. The interview involved implementing a FIFO queue with specific memory and concurrency constraints.
Full Experience
I recently had an interview for a Senior Software Engineer position at Rubrik, which heavily focused on systems coding challenges. The main problem revolved around implementing a FIFO queue under strict memory management conditions, followed by complex multi-threading and memory sharing scenarios. I had to ensure no dynamic memory allocation while handling concurrent access and efficient partitioning of a large shared buffer between two independent queues.
Interview Questions (1)
Implement a FIFO Queue with the following methods:
put(int): Adds an item into the queue.get() int: Removes and returns an item from the queue in FIFO order.
Requirements:
- Use a fixed-sized memory buffer (e.g.,
[]int). - No dynamic memory allocation (not allocating new memory or objects as part of
putandget).
Follow-up 1:
- Support for multiple thread access.
Follow-up 2:
- Implement two queues that share the same fixed-sized memory buffer.
- Each queue must maintain its individual FIFO ordering.
- The size of this
int[]can be very large (100MB to 1GB+). - The usage of this fixed-sized array should be dynamically adjusted based on each individual queue's usage.
- Minimize memory wastage.