Coinbase IC4 | India | Offer

coinbase logo
coinbase
ic4indiaOffer
February 8, 20250 reads

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 was 0, 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)

Q1
Key-Value Store with Two Keys and Timestamps
Data Structures & AlgorithmsMedium

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).
Q2
N-ary ZigZag Iterator
Data Structures & AlgorithmsMedium

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

Q3
Custom Range Iterator with Negative Step
Data Structures & AlgorithmsEasy

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]

Q4
Basic List Iterator
Data Structures & AlgorithmsEasy

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

Q5
Polymorphic Iterator for Mixed Types
Data Structures & AlgorithmsMedium

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.

Q6
Generic Transaction Search API with Filtering and Pagination
System DesignHard

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.
Discussion (0)

Share your thoughts and ask questions

Join the Discussion

Sign in with Google to share your thoughts and ask questions

No comments yet

Be the first to share your thoughts and start the discussion!