Stripe phone screen 4 part interview experience
Stripe Interview | Round 1
Stripe SDE Intern Phone Screen
sde internstripe intern vo experience
Software Engineer InternStripe Phone Screen | Senior Software Engineer Interview
Senior Software Engineer1 more experiences below
Summary
I experienced a 4-part phone screen for Stripe, focusing on building a fraud detection system from data integrity to smart error reporting.
Full Experience
I recently went through a 4-part phone screen with Stripe, which was quite an experience focusing on building a comprehensive fraud detection system. It started with fundamental data integrity checks and progressively moved towards more complex risk analysis and user behavior matching, culminating in a smart error reporting mechanism.
Interview Questions (4)
This section focused on building foundational data-integrity checks for fraud detection. The prompt was very long, but the logic itself was simple. I was tasked to read six fields from a CSV file and verify that all fields were non-empty.
On top of the basic transaction information, this part introduced two core risk-control rules:
- Amount rule: the transaction amount must fall within the business-defined normal range.
- Payment-method rule: the payment method must not appear in the blocked method list.
If a transaction violated any of these conditions, it was flagged as SUSPICIOUS.
This section required validating whether the transaction aligned with the user’s behavioral baseline. I had to ensure that at least 50% of the behavioral attributes—such as commonly used spending countries, typical time ranges, and average transaction-amount intervals—matched the user’s historical behavior. The implementation involved feature extraction, normalization, and computing a match ratio. If the current transaction’s match ratio was below 50%, it was classified as a behavior mismatch and flagged as SUSPICIOUS.
The final section implemented smart error reporting, replacing the vague label “SUSPICIOUS” with specific error codes. The system outputs up to two error codes according to priority. If there are no issues, it outputs “OK”. The output report must maintain column alignment for readability.
Summary
I participated in a coding round at Stripe where I was presented with an 'Invoice Reconciliation' problem, requiring me to match incoming payments to invoices based on memo lines and amounts.
Full Experience
I encountered a coding challenge at Stripe centered around an invoice reconciliation task. The problem involved parsing payment and invoice details from structured strings and then matching them based on a memo line, which specified the target invoice, and ensuring the payment amount was correctly applied.
Interview Questions (1)
Stripe's Invoicing product allows businesses to create and send invoices to their customers. While many invoices can be paid directly, there are cases where standalone payments need to be reconciled with open invoices for a customer.
Your task is to write a program that matches incoming payments to their corresponding invoices based on the payment's memo line. An example input string for a payment looks like this:
payment="paymentABC,500,Paying off: invoiceC", invoices=["invoiceA,2024-01-01,100", "invoiceB,2024-02-01,200", "invoiceC,2023-01-30,1000"]
(Payment Format) Each comma-separated element represents a different piece of information about the payment:1. The payment ID (e.g. payment123)
2. The payment amount (in USD minor units e.g. $1.00 = 100)
3. The memo line, which always follows the format "Paying off: {INVOICE}"
(Invoices format) Each comma-separated element represents a different piece of information about the payment:
1. The invoice ID
2. The due-date for that invoice
3. The amount due on the invoice (in USD minor units e.g. $1.00 = 100)
Example input:
f("payment5,1000,Paying off: invoiceC", ["invoiceA,2024-01-01,100", "invoiceB,2024-02-01,200", "invoiceC,2023-01-30,1000"])
Should return:
payment5 pays off 1000 for invoiceC due on 2023-01-30
Summary
I had a phone screen interview for an SDE Intern position at Stripe, which involved two coding challenges focusing on data processing and tiered pricing logic.
Full Experience
I recently had a phone screen for an SDE Intern role at Stripe. The interview primarily focused on my coding skills, presenting me with two distinct problems. I found both problems to be quite straightforward and was able to articulate my approach clearly. The interview flow was smooth, covering the problem descriptions, my proposed solutions, and then coding them out.
Interview Questions (2)
Each order contains a country, a product, and a quantity; each product has a fixed unit shipping fee. I was asked to compute the total shipping cost for all orders.
The unit price was no longer fixed; instead, it changed based on quantity tiers. For example: 1–10 units cost USD 1 per unit, and 11–20 units cost USD 0.8 per unit. I needed to calculate the total cost by summing across these pricing tiers.
Summary
I had a virtual onsite interview experience at Stripe for an intern position, which involved three progressively complex coding problems focused on calculating shipping costs based on various pricing rules and edge cases.
Full Experience
Stripe Intern Virtual Onsite Experience
My virtual onsite interview experience at Stripe consisted of three distinct levels, each building upon the complexity of the previous one, all centered around a shipping cost calculation problem. It was a rigorous assessment of my coding ability, logic, and edge case handling.
The first stage was relatively straightforward, designed to test my basic programming and data parsing skills. It quickly ramped up, introducing more dynamic pricing structures and intricate rules.
Level 2 was clearly the logical core, where the problem became much more dynamic and required careful thought to manage incremental costs and various product brackets. The final level, Level 3, added another layer of complexity by introducing different calculation modes, pushing me to integrate distinct logic paths within the same solution.
Overall, it was a challenging but engaging experience that thoroughly tested my problem-solving capabilities.
Interview Questions (3)
The first problem involved calculating the total price based on an order object and a country-specific flat shipping table. I needed to compute the total price by summing each item’s unit price multiplied by its quantity, and then add a flat shipping fee based on the country. For example, in the U.S., if a mouse has a unit price of 550 and a laptop is 1000, the total shipping fee for the U.S. might be 16,000. Canada would have similar logic. The main tasks were handling JSON parsing and basic loop logic to aggregate the costs.
Building upon Level 1, shipping costs were no longer a fixed price but dynamically varied based on quantity—an “incremental cost” model. Each product could have multiple cost brackets, defined by quantity ranges. My task was to determine which bracket the current item's quantity fell into, then multiply the corresponding unit price from that bracket by the quantity, and sum it up. The problem highlighted the need for clear logic and correct handling of edge cases, such as maxQuantity = null, which indicated no upper bound for a bracket. Correctly matching the rule and accumulating the price was critical.
This stage introduced a new layer on top of Level 2: a 'type' concept with two calculation modes—'fixed' and 'incremental.' The 'incremental' mode functioned identically to Level 2. However, the 'fixed' mode meant that within a specific quantity bracket, the total price for that item was fixed and did not increase linearly with the quantity. For example, if I bought two laptops and they fell into a 'fixed' cost bracket of 1000, the total charge for those laptops would be 1000, not 2000. The primary challenge was integrating both these pricing logics ('fixed' and 'incremental') within the same calculation loop while ensuring correctness.
Summary
I had a phone screen interview with Stripe for a Senior Software Engineer role. The interview focused on a two-part problem involving shipping cost calculation, which I managed to solve within the given time. I'm uncertain about the outcome, but I'll wait and see.
Full Experience
I recently had a phone screen interview for a Senior Software Engineer position at Stripe. The interview presented a coding challenge in two parts, both revolving around calculating shipping costs based on varying parameters. I successfully solved the first part, which involved a basic calculation using fixed product costs per country, in about 20 minutes. The second part introduced more complexity, requiring me to handle quantity-based discounts where costs were defined in slabs. I managed to tackle this part as well before we ran out of time. The interviewer mentioned I needed to solve as many parts as possible within 45 minutes, which I did. However, I have a feeling I might not receive a callback, but I'm keeping my options open.
Interview Questions (2)
You are given two JavaScript objects: order and shipping. You need to calculate the total shipping cost for the given country in the order object.
order = { "country": "US", "items": [ {"product": "mouse", "quantity": 5}, {"product": "laptop", "quantity": 2} ] }
shipping = { "US": [ {"product": "mouse", "cost": 500}, {"product": "laptop", "cost": 1000} ], "CA": [ {"product": "mouse", "cost": 700}, {"product": "laptop", "cost": 1200} ] }
In this example, the total shipping cost would be 5 * 500 + 2 * 1000 = 4500.
Extend the previous problem. Now, if discounts are given for different quantities, how would you calculate the shipping cost? The shipping object has been modified to include quantity-based cost slabs.
shipping = {
"CA": [
{"product": "mouse", "cost": 500},
{"product": "laptop", "cost": 1000}
],
"US": [
{"product": "mouse",
"cost": [{
minQuantity:0,
maxQuantity:2,
cost: 200
},
{
minQuantity:3,
maxQuantity:null,
cost: 700
}
]
},
{"product": "laptop",
"cost": [{
minQuantity:0,
maxQuantity:null,
cost: 700
}
]
}
]
}
Using the original order (5 mice, 2 laptops in US), the shipping cost would be (3 * 200 + 2 * 700) + (2 * 700) = 600 + 1400 + 1400 = 3400. (Note: The provided example calculation 3 * 200 + 2 * 700 + 2 * 700 implicitly assumes 5 mice, where 3 fall into the minQuantity:3 slab and 2 into the minQuantity:0, maxQuantity:2 slab, which is a bit ambiguous; a more direct interpretation would be finding the *single* applicable slab for the *total* quantity of 5 mice, which is minQuantity:3, cost: 700, making it 5 * 700. However, following the example calculation 3 * 200 + 2 * 700 + 2 * 700, it implies a weighted average or a specific interpretation of how to apply multiple slabs for a single quantity. For clarity, I will assume finding the *single best matching slab* for the total quantity based on minQuantity being less than or equal to item quantity and maxQuantity being greater than or equal to item quantity, or null.)
Summary
I had a phone screen for an L2 backend position at Stripe in Bangalore, India, which involved a string parsing and reconciliation problem related to their Invoicing product. I found it challenging due to the unexpected requirement to generate test cases and am not optimistic about the outcome.
Full Experience
Had my phonescreen for Stripe L2 position (Bangalore, India). This was the problem: Stripe’s Invoicing product allows businesses to create and send invoices to their customers. While many invoices can be paid directly, there are cases where standalone payments need to be reconciled with open invoices for a customer.
Your task is to write a program that matches incoming payments to their corresponding invoices based on the payment’s memo line.
You are given: • A payment string • A list of invoice strings
The payment string is a comma-separated string containing:
- The payment ID (e.g., “payment123”)
- The payment amount in USD minor units (e.g., $1.00 = 100)
- The memo line, which always follows the format “Paying off: {INVOICE_ID}”
Each invoice string is also comma-separated and contains:
- The invoice ID
- The due date of the invoice (e.g., “2024-01-01”)
- The amount due in USD minor units
You need to: • Parse the payment and invoices. • Find the invoice mentioned in the memo line. • Output a formatted string describing the reconciliation.
Input Example: payment = "payment5,1000,Paying off: invoiceC" invoices = [ "invoiceA,2024-01-01,100", "invoiceB,2024-02-01,200", "invoiceC,2023-01-30,1000" ]
Expected Output: payment5 pays off 1000 for invoiceC due on 2023-01-30
Interview Questions (1)
Stripe’s Invoicing product allows businesses to create and send invoices to their customers. While many invoices can be paid directly, there are cases where standalone payments need to be reconciled with open invoices for a customer.
Your task is to write a program that matches incoming payments to their corresponding invoices based on the payment’s memo line.
You are given: • A payment string • A list of invoice strings
The payment string is a comma-separated string containing:
- The payment ID (e.g., “payment123”)
- The payment amount in USD minor units (e.g., $1.00 = 100)
- The memo line, which always follows the format “Paying off: {INVOICE_ID}”
Each invoice string is also comma-separated and contains:
- The invoice ID
- The due date of the invoice (e.g., “2024-01-01”)
- The amount due in USD minor units
You need to: • Parse the payment and invoices. • Find the invoice mentioned in the memo line. • Output a formatted string describing the reconciliation.
Input Example: payment = "payment5,1000,Paying off: invoiceC" invoices = [ "invoiceA,2024-01-01,100", "invoiceB,2024-02-01,200", "invoiceC,2023-01-30,1000" ]
Expected Output: payment5 pays off 1000 for invoiceC due on 2023-01-30
Be ready to generate the input on your own and write your own test cases to test the solution(more than 2).
Preparation Tips
I was aware that string parsing is popular in stripe interviews, but wasnt expecting the above two. I was thinking that i will be asked to write the solution function and then there will be test cases against which the code will be run. So a lot of time got wasted there. Not expecting much.