The interview started with formal introductions, after which the interviewer directly moved to C++. He first asked about the differences between C-style arrays and vectors, followed by some discussion on how vectors work internally. He then asked me to implement a vector class supporting resizing and element access through the [] operator. We also discussed memory management in C++, particularly what gets allocated on the stack and the heap.
The discussion then shifted towards OS concepts. He started with TLBs and asked how they differ from cache and main memory. We discussed whether different processes have separate TLBs and, if not, how multiple processes are handled. This was followed by questions on page faults, page replacement policies, and context switching, including what exactly is stored during a context switch and how it is executed.
After this, he gave me a CP question: Binary Tree Cameras (https://leetcode.com/problems/binary-tree-cameras/description/). My initial idea was a DP solution with two states, but the interviewer pointed out an edge case where it would fail. I then modified my approach to use three states, which handled all cases correctly. He was particularly interested in how I dealt with edge cases. He asked me to write pseudocode, and throughout the process, I kept explaining my thought process. The interviewer was quite helpful and actively discussed different cases with me.
Towards the end, he seemed satisfied with the discussion, and an HR joined the call to inform me that Round 2 would begin shortly.
The second interviewer started directly with CP questions. The first problem was as follows: there are (N) nodes, and at time (0), you are at node (1). Connections between nodes are given along with the time required for a signal to travel through them. Additionally, each node has an extinction time, after which it disappears. For every node, we had to determine whether a signal starting from node (1) at time (0) could reach it, and if yes, at what time.
My first instinct was to think in terms of DSU, since disappearing nodes seemed to partition the graph. However, after thinking for a while, I realised that the problem could be solved by modifying Dijkstra’s algorithm. I explained the approach to him, and he then asked me to code it. Since that wrapped up fairly quickly, he moved on to another problem.
The next question was on the 2-SAT problem (https://cp-algorithms.com/graph/2SAT.html). The same problem also exists on CSES, but I had never solved it before. Initially, I could not think of a solution. I mentioned that it reminded me of concepts from our discrete mathematics course, particularly CNF representations of Boolean expressions, although I was unsure how that would translate into code. He then gave me a hint to think in terms of graphs, and after spending some time on it, I was eventually able to visualise the solution and understand the implementation. He did not ask me to code this problem.
The interview then moved back to CS fundamentals. We discussed concurrency, what it is and how it is achieved. The conversation later shifted towards different synchronisation primitives and locks, along with how they are implemented at both the hardware and software levels. He also asked about cache coherence and coherence protocols.
After this, he picked up my limit order book project from my resume. He asked about the different components I had implemented, the optimisations I had made to reduce latency, and the metrics I used to evaluate performance. I also discussed the 99th and 99.9th percentile latencies, since those are particularly relevant in such systems.
He then focused on the SPSC lock-free ring buffer, which was part of the project, and asked me to implement its basic functions in their editor. Along with the implementation, he wanted me to explain the reasoning behind the optimisations I had made. This naturally led to a discussion on memory barriers, compiler reordering, and the role of std::atomic, including how it differs from traditional locks.
After the technical discussion, an HR joined the meeting. The conversation was fairly casual. He mentioned that his younger brother had graduated from IIT BHU and talked about his visits to Varanasi. He asked me how I found the city and also discussed the Mathematics and Computing curriculum, what courses we study, how it differs from CSE, and whether I find the courses useful.
After this discussion, he asked me to stay in the meeting for some time while they discussed internally. Around 15–20 minutes later, he informed me that a lead HR from their Singapore team would be joining the call. She introduced herself as the lead HR and had a brief discussion with me about the interview process and my overall experience. Towards the end of the conversation, she informed me that they would like to extend me an offer :)