Square logo

Square Interview Questions

15 practice questions for Square technical interviews

Square software engineer interviews cover algorithms, data structures, system design, and coding problems drawn from real interview rounds.

Software Engineer Backend Engineer Frontend Engineer Full Stack Engineer Mobile Engineer Data Engineer Data Scientist ML Engineer DevOps Engineer DevOps Engineer Product Manager SRE Security Engineer Engineering Manager Data Analyst UX/UI Designer QA Engineer
coding Medium Verified Question #1

1. Connect Four


Category: Grid/matrix coding problem

Question Design a ConnectFour class that implements the Connect Four board game. The board is a 6-row by 7-column grid. Two players take turns...

Input: 2D grid
Output: Printed output
coding Medium Verified Question #2

2. Page Navigator


Category: Sliding window coding problem

Question Design a PageNavigator class that simulates a paginated view with a sliding window. Given a total number of pages and a window size, the...

Input: List
Output: Computed result
coding Medium Verified Question #3

3. Grid Exits


Category: Grid/matrix coding problem

Question You are given a 2D grid containing open cells (".") and walls ("#"). An exit is any open cell on the border of the grid that is...

Input: 2D grid
Output: Integer
coding Medium Verified Question #4

4. Item Price Manager


Category: Algorithm coding problem

Question Design an ItemPriceManager class that tracks the price history of an item over time and supports querying the price at any date and the...

Input: Given input
Output: Computed result
coding Easy Verified Question #5

5. Pig Latin Translator


Category: Algorithm coding problem

Question Translate a sentence into Pig Latin using the following rules: Rules: 1. If a word begins with a vowel (a, e, i, o, u),...

Input: Given input
Output: Computed result
coding Medium Verified Question #6

6. Frequency Merge Tree


Category: Tree coding problem

Question Given a string, build a Frequency Merge Tree as follows: 1. Count the frequency of each character in the string. 2. Create a leaf node...

Input: String
Output: Computed result
coding Easy Verified Question #7

7. Obstacle Grid Blocks


Category: Grid/matrix coding problem

Question You are given two integers R and C representing the number of rows and columns in a grid (0-indexed). You are also given a list...

Input: 2D grid
Output: Computed result
coding Medium Verified Question #8

8. Soccer Tournament Tracker


Category: String coding problem

Question

Input: Array of strings
Output: Array
coding Easy Verified Question #9

9. Candy Bag Matcher


Category: String coding problem

Question

Input: Array of strings
Output: Array
coding Medium binary search #1

1. Binary Search — Find the square root of a number

Background: In the payment processing system at Square, efficient mathematical computations can enhance performance and accuracy. Finding the square root of numbers can be critical in calculations involving rates and fees.
Problem statement: Given a non-negative integer x, implement a function that returns the integer part of the square root of x. The square root is defined as the number y such that y * y <= x < (y + 1) * (y + 1). You should implement this using binary search.
Function signature:
  • def my_sqrt(x: int) -> int:


Example 1:
  • Input: x = 8

  • Output: 2

  • Explanation: The square root of 8 is 2.828..., so the integer part is 2.


Example 2:
  • Input: x = 16

  • Output: 4

  • Explanation: The square root of 16 is 4.


Constraints:
  • 0 <= x <= 2 * 10^9
coding Medium heap #2

2. [Heap] — Find the k most frequent elements in a dataset

Background: Square handles significant financial data and user transactions where analyzing trends is crucial for strategic decisions. Identifying the most frequent elements from a set of transactions can help in understanding the most popular features or identifies patterns in user behavior.
Problem statement: Given a list of integers, nums, representing transaction IDs, and an integer k, return the k most frequent elements. You need to implement the function topKFrequent(nums: List[int], k: int) -> List[int].
Function/class signature:
  • def topKFrequent(nums: List[int], k: int) -> List[int]:

Example 1:
  • Input: nums = [1,1,1,2,2,3], k = 2

  • Output: [1, 2]

  • Explanation: 1 appears three times, while 2 appears twice. Therefore, the top two frequent elements are 1 and 2.

Example 2:
  • Input: nums = [1], k = 1

  • Output: [1]

  • Explanation: Since there’s only one element, 1, it is the only frequent element.

Constraints:
  • 1 <= nums.length <= 10^5

  • 0 <= nums[i] < 10^4

  • 1 <= k <= number of unique elements in the array


system design Senior messaging #3

3. Design a Notification System — A scalable service for managing notification dispatches


Background: Square relies heavily on real-time notifications for transactions, updates, and user interactions. A robust notification system can enhance user experience by promptly informing them about critical actions within the Square ecosystem.
Requirements:
1. The system must handle multiple notification types (e.g., email, push, SMS).
2. Notifications should be queued and delivered asynchronously to ensure a smooth user experience.
3. Implement throttling to manage rate limits for notification delivery.
4. The system should support user preferences for notification channels and types.
5. Provide metrics for notification delivery success and failure.
Class API:
  • send_notification(user_id: str, message: str, notification_type: str) -> bool

Sends a notification to the specified user and returns whether the notification was successfully queued.
  • set_preferences(user_id: str, preferences: dict) -> None

Updates the notification preferences for a user.
  • get_status(notification_id: str) -> dict

Returns the delivery status of the notification with the given ID.
  • flush_queue() -> None

Processes and sends notifications in the queue.
Example 1:
Input: send_notification('userA', 'Your payment was successful!', 'email') → Output: True → Explanation: The notification is queued successfully.
Example 2:
Input: set_preferences('userA', {'email': False, 'SMS': True}) → Output: None → Explanation: User preferences are updated without error.
Constraints:
  • Maximum of 100,000 notifications queued at any time.

  • User preferences can only be updated once per hour.

  • Notification delivery attempts are capped at 3 per notification.
system design Medium api design #4

4. Design PaymentProcessor — Class to handle payment transactions for Square


Background: Square's PaymentProcessor is critical for managing payment transactions efficiently and securely. Given the diverse payment methods and rigorous security standards in financial transactions, a robust structure to process and manage payment details is essential.
Requirements:
1. The class must allow adding supported payment methods (e.g., credit card, digital wallet).
2. It should validate payment details before processing the request.
3. The processor has to maintain a history of transactions and their statuses.
4. It should allow querying transaction history by transaction ID.
5. The class should implement concurrency control to handle multiple payment requests.
Class API:
  • add_payment_method(method: str) -> None: Adds a new payment method to be supported.

  • process_payment(transaction_id: str, amount: float, method: str) -> str: Processes a payment and returns the transaction status.

  • get_transaction_status(transaction_id: str) -> str: Retrieves the status of a given transaction.

  • get_transaction_history() -> List[Dict[str, Any]]: Returns a list of all transactions.


Example 1:
  • Input: add_payment_method("Credit Card") → Output: None → Explanation: Adds "Credit Card" as a valid payment method.

  • Input: process_payment("txn_123", 100.00, "Credit Card") → Output: "Success" → Explanation: Processes a payment for 100.00 using the credit card method.


Constraints:
  • Maximum of 10 different payment methods.

  • Each transaction must not exceed $10,000.

  • Up to 1000 concurrent transactions can be processed.
system design Medium api design #5

5. Design an End-to-End Banking System — a system that can manage user accounts, transactions, and balances.


Background: Square is expanding its offerings in the financial services domain, allowing users to manage their money seamlessly. A well-defined banking system is integral for these operations to maintain accuracy, security, and efficiency.
Problem Statement: Design a banking system that can handle multiple users, manage account creation, and allow transactions such as deposits and withdrawals while ensuring that account balances are accurately maintained. The system should support basic user authentication, and should not allow overdrafts in accounts. Make sure to implement appropriate error handling for each transaction.
Class Signature:
  • class BankAccount: - represents an individual user account.

- def __init__(self, account_id: str, initial_balance: float) -> None: - initializes a new account with a unique ID and balance.
- def deposit(self, amount: float) -> str: - deposits a specified amount into the account.
- def withdraw(self, amount: float) -> str: - withdraws a specified amount from the account.
- def get_balance(self) -> float: - returns the current balance of the account.
Example 1:
  • Input: account = BankAccount('12345', 100.0); account.deposit(50.0); account.withdraw(30.0)

  • Output: account.get_balance()120.0

  • Explanation: The account was initialized with 100.0, deposited 50.0, and withdrew 30.0, resulting in a balance of 120.0.


Example 2:
  • Input: account = BankAccount('67890', 200.0); account.withdraw(250.0)

  • Output: account.get_balance()200.0

  • Explanation: Attempting to withdraw 250.0 exceeds the current balance, so the withdrawal is rejected and the balance remains 200.0.


Constraints:
  • The account_id must be a unique string.

  • The initial_balance must be a non-negative float.

  • The amount for deposits and withdrawals must be a positive float.

  • Withdrawals must not exceed the current balance.
system design Medium api design #6

6. Design a Banking System — create an end-to-end banking system model.


Background: Square taps into the financial technology landscape, supporting transactions and banking operations for merchants and customers alike. A robust banking system is essential for facilitating transactions, maintaining account information, and managing user trust.
Requirements:
1. Manage user accounts and transactions.
2. Support basic operations like deposits, withdrawals, and fund transfers.
3. Implement transaction logging for auditing purposes.
4. Provide user authentication and authorization mechanisms.
Class API:
  • class User: Represents a bank user.

- def __init__(self, user_id: str, name: str) -> None: Initializes a new user with ID and name.
- def deposit(self, amount: float) -> None: Deposits a specified amount into the user's account.
- def withdraw(self, amount: float) -> None: Withdraws a specified amount from the user's account.
  • class Transaction: Represents a transaction in the banking system.

- def __init__(self, user_id: str, amount: float, type: str) -> None: Initializes a new transaction with user ID, amount, and type (deposit/withdraw).
  • class Bank: Main class for interaction.

- def create_user(self, name: str) -> User: Creates a new user.
- def transfer(self, from_user: User, to_user: User, amount: float) -> None: Transfers funding between users.
Example 1:
  • Input sequence: Create a user, deposit 100, withdraw 50 → Output: Account balance is 50.

  • Explanation: The user can perform deposit and withdraw operations, altering their balance accordingly.


Constraints:
  • Maximum of 1000 users.

  • Transaction amounts must be positive and capped at 10,000.

  • Users cannot withdraw more than their current balance.

Start practicing Square questions

Sign up for free to access walkthroughs, AI-generated questions, and more.

Get Started Free