Category: String coding problem# Question You are building a simplified card game where each player has a hand of cards and the higher-rated hand wins. Each hand contains exactly...Input: String Output: Computed result
codingHardVerified Question#2
2. [AI Enabled Coding] Design Logger
Category: Array coding problem# Question You need to design a logger library for a new application. The design should be able to allow us to easily add future loggers, like a db...Input: Array Output: Printed output
codingMediumVerified Question#3
3. [AI Enabled Coding] Food Delivery Company
Category: String coding problem# Question You are building a driver payment system for a food delivery company. The accounting team needs to track how much money is owed to drivers...Input: String Output: Integer
codingHardVerified Question#4
4. [AI Enabled Coding] Rule Evaluator
Category: String coding problem# Question You need to build a rule evaluation system for a corporate credit card platform. Managers should be able to create rules that enforce...Input: List Output: Computed result
system designHardVerified Question#5
5. Top 5 Rippling System Design Questions
Category: Sliding window system design problemThese are commonly asked system design questions from Rippling interviewsInput: Given input Output: Computed result
technicalMediumVerified Question#6
6. How to pass AI Enabled Coding Rounds From FAANG Interviewer
Category: Algorithm coding problem# Tips For AI Coding Rounds AI coding rounds are not as different from regular coding rounds as you might think. The interviewer still needs to get...Input: Given input Output: Computed result
codingHardclosure#1
1. [OA] Debounced Function — Implement a debounced search function for Rippling's employee directory
When users type into the search box of the employee directory, we want to provide suggestions after they stop typing for a short period to improve user experience. Problem statement: Implement a function debounce that takes a function func and a delay in milliseconds wait. It should return a new function that, when invoked repeatedly, will only invoke func after wait milliseconds have passed since the last time the returned function was invoked. Example 1: Input: const search = debounce((term) => console.log(term), 300); search('John'); search('John Doe'); Output: // waits until 300 ms after the last call and then prints 'John Doe' Example 2: Input: const log = debounce(() => console.log('Hello'), 1000); log(); log(); log(); Output: // waits 1000 ms to log 'Hello' once only Constraints: - wait will be a positive integer and 0 < wait <= 1000.
codingMediumclosure#2
2. [OA] Closure — Create a dynamic form state management for Rippling's onboarding process
Rippling needs an efficient way to manage dynamic forms where the number of fields can change based on user input. This requires maintaining state across various form components. Problem statement: Implement a function createFormManager that returns an object with methods to handle the state of form fields. The object should have the following methods: - setField(name: string, value: any): void - Set the value of a field. - getField(name: string): any - Get the value of a field. - getAllFields(): { [key: string]: any } - Get the values of all fields. Example 1: Input: const form = createFormManager(); form.setField('email', 'test@mail.com'); Output: form.getField('email'); Explanation: Returns 'test@mail.com'. Example 2: Input: form.setField('age', 30); Output: form.getAllFields(); Explanation: Returns { email: 'test@mail.com', age: 30 } Constraints: - 1 <= name.length <= 100 - value can be of any type, but must be a simple value (string, number, etc.).
system designSeniorapi design#3
3. [OA] Virtual DOM Differ — Design an efficient differ for Rippling's rendering engine
Rippling uses a virtual DOM to efficiently update the UI without affecting the performance. Implement a differ that can detect changes, add new elements, or remove old ones. Problem Statement: Design a class VDOMDiffer that compares two virtual DOM trees and returns the changes necessary to update the real DOM. It should have the following method: - diff(oldTree: VNode, newTree: VNode): Array<Change> - Compare the old and new trees and return an array of changes, where each change is an object containing the type and the data needed to apply the change. Example 1: Input: const oldTree = { tag: 'div', children: [] }; const newTree = { tag: 'div', children: [{ tag: 'span', children: [] }] }; Output: diff(oldTree, newTree); Explanation: Returns an array indicating that a 'span' should be added. Example 2: Input: const oldTree = { tag: 'h1', children: [] }; const newTree = { tag: 'h1', children: [{ tag: 'strong', children: [] }] }; Output: diff(oldTree, newTree); Explanation: Indicates that 'strong' should be added. Constraints: - The trees are given in the form of nested objects where each node has a tag and children array.
system designSeniorapi design#4
4. [OA] Client-Side Router — Build a lightweight router for Rippling's single-page application
Rippling's frontend framework needs a way to manage different views by changing the URL and rendering content without full page reloads. This must provide smooth navigation for a better user experience. Problem Statement: Design a class Router that allows registering routes and navigating between them. It should have the following methods: - register(route: string, view: Function): void - Register a new route with its corresponding view. - navigate(route: string): void - Navigate to a new route and render the corresponding view. - getCurrentRoute(): string - Return the current route. Example 1: Input: const router = new Router(); router.register('/home', () => console.log('Home view')); Output: router.navigate('/home'); Explanation: Logs 'Home view'. Example 2: Input: router.register('/about', () => console.log('About view')); router.navigate('/about'); Output: Logs 'About view'. Constraints: - You can assume that routes are always distinct and valid.