PracHub
QuestionsCoachesLearningGuidesInterview Prep

Quick Overview

This question evaluates competence in designing an efficient, stateful ledger API and associated data structures, emphasizing correctness under invalid inputs, performance at scale, integer overflow handling, unit testing for edge cases, and transactional (atomic batch) behavior.

  • Medium
  • Coinbase
  • Coding & Algorithms
  • Software Engineer

Implement a Simple Banking Ledger

Company: Coinbase

Role: Software Engineer

Category: Coding & Algorithms

Difficulty: Medium

Interview Round: Onsite

Design and implement a banking ledger for n accounts labeled 1..n with initial balances. Provide an API: deposit(id, amount) -> bool, withdraw(id, amount) -> bool, transfer(fromId, toId, amount) -> bool. Rules: return false for invalid account IDs or insufficient funds; otherwise apply updates and return true. Constraints: up to 200,000 operations, amounts up to 10^12, target O( 1) per operation and O(n) space; assume single-threaded execution. Sub-questions: write unit tests for edge cases (invalid IDs, zero/negative amounts, overflow), extend to support atomic batches of operations with rollback on partial failure, and analyze time/space complexity and common pitfalls (e.g., integer overflow).

Quick Answer: This question evaluates competence in designing an efficient, stateful ledger API and associated data structures, emphasizing correctness under invalid inputs, performance at scale, integer overflow handling, unit testing for edge cases, and transactional (atomic batch) behavior.

Process deposit, withdraw, and transfer operations on 1-indexed accounts with validation.

Constraints

  • Accounts are labeled 1..n
  • Amounts must be positive

Examples

Input: ([100, 50], [('deposit', 1, 25), ('withdraw', 2, 70), ('transfer', 1, 2, 50)])

Expected Output: {'results': [True, False, True], 'balances': [75, 100]}

Explanation: Valid and invalid operations.

Input: ([0], [('withdraw', 1, 1), ('deposit', 2, 5), ('deposit', 1, 0)])

Expected Output: {'results': [False, False, False], 'balances': [0]}

Explanation: Invalid ids and nonpositive amounts.

Input: ([10, 0], [('transfer', 1, 1, 5)])

Expected Output: {'results': [True], 'balances': [10, 0]}

Explanation: Self-transfer is valid and leaves balance unchanged.

Hints

  1. Validate before mutating so failed operations leave balances unchanged.
Last updated: Jun 27, 2026

Loading coding console...

PracHub

Master your tech interviews with 8,000+ real questions from top companies.

Product

  • Questions
  • Learning Tracks
  • Interview Guides
  • Resources
  • Premium
  • For Universities
  • Student Access

Browse

  • By Company
  • By Role
  • By Category
  • Topic Hubs
  • SQL Questions
  • AI Coding Questions
  • Compare Platforms
  • Discord Community

Support

  • support@prachub.com
  • (916) 541-4762

Legal

  • Privacy Policy
  • Terms of Service
  • About Us

© 2026 PracHub. All rights reserved.

Related Coding Questions

  • Implement a Coin-Constrained Jump Strategy - Coinbase (hard)
  • Implement an In-Memory Database - Coinbase (hard)
  • Implement Game Physics and Block Mining - Coinbase (hard)
  • Compute Total Manual Distance - Coinbase (medium)
  • Implement a Flappy Bird Jump Agent - Coinbase