DoorDash | L4 SDE Onsite | NYC
Anonymous User
1363

Had a virtual onsite with DoorDash for a mid-level L4 Software Engineer role. Very long process.

Phone Screen

At DoorDash, we need to make sure that drivers are available at popular locations to deliver food.
There are certain location clusters in a city that need drivers, and a driver can only cover certain location clusters.
A location cluster is considered “covered” if the driver can deliver for the entire location cluster.
How many location clusters are covered?

Provided:
driver_available_locations = {
{1,1,1,0,0},
{0,1,1,1,1},
{0,0,0,0,0],
{1,0,0,1,0],
{1,1,0,1,1}
}
drivers_needed_at = {
{1,1,1,0,0},
{0,0,1,1,1},
{0,1,0,0,0},
{1,0,1,1,0},
{0,1,0,1,0}
}

Return: Int indicating number of location cluster covered
3

Onsite

Round 1: Design File System (Trie solution)

Implement an in-memory key-value store, for storing a value in a specific path.

Definitions:

  • Path is a "/" separated string (e.g. "/first/second")
  • Value are all strings (e.g. "value")
  • The root with path "/" should have a value of "#"

API:

  • get(path): String -> returns the value of a the node at the given path
  • set(path, value) -> changes the value of a given node to the new value. Should error out if the path does not currently exist
  • create(path, value) -> creates a new node and sets it to the given value. Should error out if the node already exists or if the node’s parent does not exist. I.e. "/level1/level2" cannot be created if /level1 has not already been created.
  • delete(path) -> deletes a node, but ONLY if it has no children

Clarification:

  • get(): a user can only retrieve value from an existing node in the path.
  • set(): a user can only set the value on an existing node. Cannot set root's value.
  • create(): a user can only create node one level deeper than the existing node.
  • delete(): a user can only delete node without children. Cannot delete root.

Basically looking for the trie solution of https://leetcode.com/problems/design-file-system/ + set() and delete() functionality. They explicitly wanted a Trie-based solution, won't consider any other method of solving.

Round 2: Hiring Manager Chat

Typical Hiring Manager chat. Very disorganized though, the manager said he didn't have any questions prepared, and usually just asks whatever. That's fine I guess. Then he asked typical hiring manager questions:

  • Tell me about a project you did at your current company
  • Any technical challenges? What did you learn? What would you do differently?
  • Tell me about a time you had a conflict with someone else on how to approach something.
  • Tell me about a time you had to argue for one side of a tradeoff

Round 3: Largest Rectangle in a Histogram

Exact same problem as https://leetcode.com/problems/largest-rectangle-in-histogram/

Round 4: Systems Design & "Domain Knowledge"

This was a terrible round. It started off with introductions, then a "Domain Knowledge" section. However, this "Domain Knowledge" section was basically just asking the exact same questions that I was asked during the Hiring Manager chat:

  • Pick a project in current company, give overview
  • Technical challenges faced during project?
  • Biggest learning?
  • What would you do differently from technical perspective?

Nothing about it was "domain" specific. Waste of 15 minutes, IMO, espeacially since it seemed like the interviewer wasn't even paying attention (they ask the question, then look away and start browsing other tabs/windows, before coming back to ask the next question).

Then was the Systems Design question:

In 6 months from now, DoorDash is going to sponsor a charity event by releasing a new app that allows people to make a donation to one of 10 charities. (This donation app has nothing to do with DoorDash or food).

Assume we already developed the iOS, Android and web UI frontends. The UI has a form which contains fields for first name, last name, email, payment card info, a dropdown to pick a charity, a dollar amount and finally a big donate button on the bottom.
The app will only really be used for 3 days because the charity event starts on a Friday and will only be online that Friday through Sunday. During those 3 days, millions of donations are expected. We estimate we might collect $100m in donations for the 10 charities we are working with.

We negotiated with a 3rd party payment provider called Braintree Payments API who’s got a very simple REST API - you POST the payment card info to their endpoint and they return a 201 created response. We really want to use them because they are giving us a nice low transaction fee for each donation since this is a special event for non profits.

The application does not need to disburse money into the 10 non-profit bank accounts - we will dump all of the funds collected in a single account and our CFO will manually write checks out of that account after the donations event is over.

The thing about this interview is that the interviewer refused to answer anything, every question about a design choice was met with a variation of "up to you", "whatever you think is reasonable", "don't have to but you could", etc.

Once the requirements & scope was "clarified", I moved on to the high-level overview. The entire time the interviewer was not even paying attention -- sitting in silence, and I could clearly see he was browsing through other windows/tabs, alternating between monitors, switching to his phone, etc. I had to explicitly call for his attention multiple times. The conversation was entirely one-sided: I would talk about tradeoffs, make a decision based on those tradeoffs, and then ask if that makes sense or any feedback — no response.

I felt like this round was just doomed from the start. Extremely rude experience.

Good luck to everyone else, would not recommend.

Comments (2)