I applied for the System Software Engineer role at Nvidia through the company portal on Workday. I received an online assessment which consisted of two coding questions (easy-medium difficulty), C++ output questions, OS MCQs (hard), and COA MCQs (medium). I scored 178/185 on the assessment and was invited to an onsite interview.
My first interview round was 1.5 hours long. The interviewer started with a casual discussion about my competitive programming background and interests. We then discussed GPUs and their role in computers. The remainder of the interview focused on C++ and OS.
The first interview included questions on bit manipulation, pointers, endianness, cache, threads, RAM, paging, and linked lists. I was asked to write code for reversing bits in a range of an integer, checking if a C++ compiler is using little endian or big endian, and reversing a linked list. I was also asked to explain the output of a C++ code snippet involving the increment operator.
My second interview round was also 1.5 hours long and included two interviewers. The first interviewer asked questions about semaphores, threads, and shared memory. I was asked to write code to print numbers 1 to N using N threads in sequence. I was also asked about cache write-back policies.
The second interviewer asked questions about C++, including output questions, bit manipulation, variable storage locations, templates, inline functions, and the lifecycle of a C program. I was also asked about loaders, linkers, static libraries, and dynamic libraries.
The final part of the interview included a discussion on real-time operating systems (RTOS). I was asked to propose a solution for a client who wants their fan to automatically change speed based on room temperature using multiple temperature measurement devices.
My final interview round was a managerial round that lasted 1 hour. The interviewer discussed their role and then asked me about my previous interview rounds. The round included technical questions on data structures and algorithms, operating systems, and C++. I was asked to write code to check if a linked list is a palindrome, explain concepts related to semaphores, mutexes, paging, virtual addresses, and physical addresses, and discuss my interests and future plans.
Overall, the interview process was challenging but rewarding. I found the interviewers to be knowledgeable and engaging. I would recommend preparing for C++, OS, COA, bit manipulation, and pointers for anyone interviewing at Nvidia.