Status: ~2 YOE, Backend SDE
Position: SDE 2 at Blinkit
Location: India
Date: June 2026
Round 1: DSA + Resume Deep Dive (60 Mins)
The round was split roughly 20/40 between my past work and problem-solving.
Part 1: Resume Discussion (~20 mins)
The interviewer skipped generic introductions and went straight into the architecture of my past projects.
Grilled heavily on a backend migration project listed on my resume.
Asked about the "Why" behind specific database/framework choices, the trade-offs we accepted, and how we handled backward compatibility.
Probed to separate my exact individual contribution from the wider team's output.
Takeaway: The bar for project ownership is high. Do not put a system on your resume for an SDE-2 role unless you can sketch its failure modes and justify the network calls down to the packet level.
Part 2: Coding (~40 mins)
Problem: Insert Delete GetRandom O(1)
Discussion & Approach:
Acknowledged that a standard Array gives O(1) for getRandom() via random indexing, but O(N) for remove() due to element shifting.
Proposed combining a vector (to store the values) with an unordered_map (to store value -> vector_index).
The trick for deletion: To keep it O(1), look up the target's index in the map, swap the target element with the last element in the vector, update the swapped element's index in the map, pop_back() the vector, and erase() the target from the map.
Wrote the clean implementation:
C++
class RandomizedSet {
private:
vector nums;
unordered_map<int, int> valToIndex;
public:
RandomizedSet() {}
bool insert(int val) {
if (valToIndex.find(val) != valToIndex.end()) return false;
nums.push_back(val);
valToIndex[val] = nums.size() - 1;
return true;
}
bool remove(int val) {
if (valToIndex.find(val) == valToIndex.end()) return false;
int lastVal = nums.back();
int idx = valToIndex[val];
nums[idx] = lastVal;
valToIndex[lastVal] = idx;
nums.pop_back();
valToIndex.erase(val);
return true;
}
int getRandom() {
return nums[rand() % nums.size()];
}};
Result:
Got the automated rejection email a few days later.
Hard to pinpoint the exact failure vector—the code ran optimal time/space and handled the edge cases, so it likely came down to the resume deep-dive not hitting their exact scale expectations, or just an brutal curve on execution speed.
Dusting it off. On to the next one.