How it worked:
- I applied on WaterlooWorks
- Their recruiter reached out via email, and scheduled two interviews each for 45 minutes
First Interview
- What’s an MMU?
- What’s the point of virtual addressing?
- What’s a process?
- What are the different memory sectors for a process?
- Dynamic Library vs Static Library?
- What’s the concept of trashing?
- What’s Latency vs Bandwidth?
- We have a DDR memory controller, with clock speed of 1.5GHz and a 64-bit address bus.
- What’s the information bandwidth?
- What’s the latency? Can we ask about latency?
- What are the different things we need to think about when handling multiple threads?
- What’s API compatibility and what’s ABI compatibility?
- What’s the UNIX call for linking a library?
- What are different ways of linking libraries?
Second Interview
- What are the steps in the compilation process?
- What does a linker do?
- What does a loader do?
- What's the entry point to your program?
- What's the linker for gnu's C toolchain?
- What's the memory layout of a process?
- Is there any problems with the code snippet below?
char *hello(void) { return "hello"; } int main(void) { char* hi = hello(); printf("%s\n", hi); return 0; }
Offer?
yeet