I had applied for the Systems pool. Before the interview, we were asked to select two background subjects and I chose Computer Architecture and Operating Systems. Along with that, we also had to choose a couple of research areas which I don’t remember (and it didn’t really make a difference either in the interview.)
My interview was taken by four professors - Prof Arka, Prof Govind, Prof Uday and Prof Gopinath.
I don’t remember the answers that I gave, but here are the questions that I was asked:
1. What is atomicity? Why do we need it?
2. Can you implement a lock with TestAndSet?
3. Can you implement the lock and unlock functions as well?
4. What is multithreading? How does it work?
5. Suppose I have a single core - does multithreading still help? There is one core, one processor - can multithreading still give an advantage?6. What is TLB? How many levels of
TLB are usually present?
7. Walk me through the entire process of what happens when we issue a Load/Store instruction.
I mentioned virtual addresses somewhere in the answer.
8. What is a virtual address? What is the difference between virtual and physical?
9. Do you access a cache with virtual address or physical address? Are there any pros and cons of each?
10. What if I force you to use virtual addresses to access the cache?
He kept saying good good in between, so that helped me realise that I was somewhat on the right track. Then Prof Govind said let’s move to DSA now, which I was and am horrible at.
1. Find the inorder successor in a binary search tree.
2. Find the height of a binary tree.
They didn’t want the overall idea, but proper, working code of the two. I stumbled in the first one and was able to come up with only the naive approach, I solved the second one properly.
I mentioned to them in between that sir you haven’t asked a lot from Arch, and they went “Yeah we know you know that, we want to see if you can code or not.”
Then came Uday sir:
1. You have an array, find two numbers with sum up to a given value X and report the indices.
I told them the naive one which was n^2, and then the nlogn one which involved sorting. They asked me to keep optimising it further and I said I think we can further optimise it by using a hash table. He said okay, now write proper, functional code for the same - not just the overall idea or pseudocode, but proper functional code with all the function calls and stuff.
I told him that this will take O(n) but then he said that’s fine, I want to know the constant as well. So, there was a lot of to and forth on this topic My high-level idea was correct, but it didn’t translate to proper, functional code at all. Then he asked me the average-case complexity for the same and it ended there.
Overall, my DSA section was a hot mess.
Then came the slightly out of the box part.
Prof Gopinath, who was silent all this while, started asking.
He was like, okay, how can an operating system be designed to consume less power?
I was like but OS is a software thingy sir, without hardware support it'll be difficult and threw in a couple of more ideas that maybe if the processor detects it's heating, it can send an interrupt to the CPU or something like that. He then asked me, “have you heard about DVFS?”
I hadn’t and was about to guess it was something related to file systems (since Prof Gopinath has a lot of work in storage lol) but I didn’t and said no I haven’t. Then there was some to and forth and whatever idea I put across, he seemed to shoot it down.
And that’s it, that was the end of the interview. It lasted around 55 minutes and was on Teams. They finally selected three people in the Systems pool, and I was informed that I was at the top of the list.