Backend Engineer | Zenskar
JP Morgan Chase | SDE 3 | YOE 3.4
Microsoft SDE - 2 | Interview Experience | Status Pending
eBay || SWE3 Interview Experience || Bangalore
Bloomberg | Interview Experience | Senior Software Engineer | NYC | Nov 2025
Coinbase IC4 | India | Offer
Summary
I successfully navigated through a multi-round interview process for an IC4 role at Coinbase in India, which included online assessments, behavioral, tech execution, and domain-specific interviews, ultimately leading to an offer.
Full Experience
I applied for the IC4 role at Coinbase through LinkedIn in January 2025. The interview process was comprehensive and challenging, consisting of several rounds which I ultimately cleared to receive an offer.
Round 1 - Logical Reasoning OA
This initial online assessment focused on basic mathematical problems and image pattern recognition questions. It was a standard test of logical abilities.
Round 2 - Code Signal OA
In this round, I was tasked with implementing a Key-Value Store that could handle two keys: a primary key and a sub-key. The problem had four levels of complexity. It shared similarities with the LeetCode "Time-Based Key-Value Store" but introduced the additional layer of a sub-key. The required operations included retrieving all values for a main key, getting the latest value for a specific key-sub_key pair, fetching a value at a given timestamp for a key-sub_key, and deletion operations for both main keys and sub-keys.
Round 3 - Foundational Interview
This was a standard behavioral interview round where I discussed my past experiences, how I handled challenges, and my approach to teamwork and problem-solving.
Round 4 - Tech Execution Interview
This round was heavily focused on practical coding problems, particularly around iterators, and progressed through multiple levels:
- Level 1: I had to write an alternate iterator for a list of lists. This was conceptual similar to the Zigzag Iterator on LeetCode, but instead of just two lists, my solution needed to accommodate 'n' lists within the main list. For example, given
lists = [[0, 1, 2], [], [3, 4], [5]], the expected output was0, 3, 5, 1, 4, 2. - Level 2: My next task was to implement a range iterator that could correctly handle negative step values. An example provided was
start = 0, end = 10, step = 2, which should produce[0, 2, 4, 6, 8, 10]. - Level 3: I then wrote a basic list iterator for a simple list, such as
list = [0, 1, 2, 3, 4, 5], to iterate through its elements sequentially. - Level 4: The final challenge in this round involved modifying the iterator class from Level 1. Instead of taking a list of lists, it needed to accept a list of diverse iterator objects (which could be instances of my previously built range iterator and list iterator) and print the numbers in an alternating fashion from all contained iterators.
Round 5 - Domain Interview
In this round, I was presented with a list of transactions and asked to design and implement a generic search API. This API needed to filter transactions based on a combination of specific fields and values, supporting operations like "=", ">", "<", etc. It was an open-ended problem, so I had to define the input structure for the filters myself.
The follow-up discussion revolved around pagination:
- I explained what pagination is and why it's a necessary feature in many applications.
- We discussed various techniques used for implementing pagination.
- I detailed how to choose an appropriate cursor ID column when implementing cursor-based pagination.
- Finally, I had to enhance my search API code to incorporate support for cursor-based pagination.
Overall, the interviewers were very helpful and supportive, providing guidance whenever I encountered difficulties. The recruiter was also excellent, keeping me well-informed with frequent updates and constructive feedback throughout the entire process.
Interview Questions (6)
Implement a key-value store that supports two keys (a main key and a sub-key) and timestamps. It should allow storing multiple values for a key-sub_key pair over time. The system needs to support operations such as:
- Return all values associated with a main key.
- Return the latest value for a specific main key and sub_key.
- Return the value for a specific main key and sub_key at a given timestamp.
- Delete a main key.
- Delete a sub-key (implying deleting all entries for that sub-key under any main key).
Write an alternate iterator for a list of lists. Similar to the ZigZag Iterator (LeetCode), but instead of just two lists, it should handle 'n' lists. The iterator should yield elements from the lists in an alternating fashion, skipping empty lists.
Example: lists = [[0, 1, 2], [], [3, 4], [5]]
Output should be: 0, 3, 5, 1, 4, 2
Implement a range iterator that supports both positive and negative steps.
Example:
start = 0
end = 10
step = 2
Output should be [0, 2, 4, 6, 8, 10]
Implement a basic iterator for a given list.
Example:
list = [0, 1, 2, 3, 4, 5]
Output should be: 0, 1, 2, 3, 4, 5
Modify the N-ary ZigZag Iterator class (from Level 1) to accept a list of iterator objects instead of raw lists. The input list can contain a mix of different iterator types (e.g., custom Range Iterator, List Iterator). The goal is to print numbers in an alternating fashion across these diverse iterators.
Design and implement a generic search API that can filter a list of transactions based on a combination of specific fields and values. The filters should support operations like '=', '>', '<', etc. The input structure for filters is open-ended, requiring the candidate to define it. Example Transactions:
[
{id: 1, time: 1, userId: 1, amount: 10},
{id: 2, time: 2, userId: 3, amount: 10},
{id: 3, time: 3, userId: 4, amount: 11},
{id: 4, time: 4, userId: 2, amount: 12}
]
Follow-up questions include:
- Explain pagination and its necessity.
- Discuss various techniques used for implementing pagination.
- How to choose a cursor ID column when using cursor-based pagination?
- Enhance the implemented code to support cursor-based pagination.