🧠 Karat Round
The Karat round was structured around 5 rapid-fire system design questions followed by a coding problem.
⚙️ System Design (Rapid Fire)
I don’t remember the exact questions, but the theme was mostly around:
Performance improvement
Component design
System scalability
Trade-offs between DB, memory, and caching
These were not deep-dive design rounds but tested:
Quick structuring
Trade-off analysis
Communication of ideas
💻 Coding Problem
Problem:
You’re given a list of user actions like:
users : [["Alice", "Connect"], ["Bob", "Disconnect"], ["John", "Connect"]]
Goal: Group users by their action.
Expected Output:
{
"Connect": ["Alice", "John"],
"Disconnect": ["Bob"]
}
👨💻 Round 1: Technical Round 1
This round had two problems: one on interval assignment, and another on route matcher system design.
🏟️ Question 1:
Court Assignment (Interval Allocation)
Input: [[1, 4], [4, 5], [2, 4]]
Goal: Assign each interval to a court such that no overlapping intervals are on the same court. We have infine number of courts
Expected Output:
{
1: [[1, 4], [4, 5]],
2: [[2, 4]]
}Approach:
Sort intervals by start time
Use a min-heap to keep track of court end times
Assign to the first available court or open a new one
Round 3 : Code Design - Dynamic Route Mapping
Design a system to register routes and support wildcard path matching.
Examples:****
AddRoute("/a/b/c", "value1")
getRoute("/a/*/b") // value1
AddRoute("/a", "test");
getRoute("/a") //. test
Improved Design:
Used a Trie-based structure to support wildcards
Implemented logic to resolve * in any segment
Discussed performance and scalability for large route sets