75 Questions

Time to time I get asked to test someone's technical knowledge, or to help practice. I've since tried to slowly create a set of 75 technical questions which someone can use to practice. I should note that these need to be done with someone else who is deeply knowlegable in the space so they can help you. These questions should generally be treated as open ended discussions with many possible answers

These 75 questions are broken up as such; 15 OS, 15 Networking, 15 Hardware, 15 Compilers, 15 Wild card. Difficulty is random. I will note that the wild card questions can be a bit odd.

Operating Systems

  1. What is a microkernel, and a monolithic kernel. Give two examples, then explain the difference in terms of performance and when/why they matter. Then explain how these issues can be mitigated in both
  2. (Note: this is bit more on the niche side, the person asking must be very educated on this to ask) What is Hetrogenous memory management, when, and where is it used? Explain split/unified address spaces and their pros/cons, contrast with manual staging buffers. Explain how you, in your ideal world, would try to implement it.
  3. Explain what happens physically and logically during a thread context switch on modern hardware. How does the kernel save/restore register states, switch page tables? What are the performance costs associated? Can this have any affect on the cache? Can these be exploited?
  4. TBD
  5. TBD
  6. TBD
  7. TBD
  8. TBD
  9. TBD
  10. TBD
  11. TBD
  12. TBD
  13. TBD
  14. TBD
  15. TBD

Networking

  1. What networking model is used in the real world, how does it contrat with the one that is typically taught (7 layer OSI model). Why do we use the 5 layer model instead? Explain every layer, and if you needed to block an attacker who is using a single machine/ip at what layer you'd do it.
  2. Trace an incoming TCP packet from the wire/fiber to the application. Explain the roles of a NIC, DMA, Ring Buffers, Hardware/Software Interupts, drivers, kernel stuff, syscalls, etc front to back?
  3. The Hug of death, otherwise known as a thundering herd is a big problem. What causes an OS kernel to become a bottleneck under extreme network traffic? Where do memory copies, context switches, and interrupt overhead slow down packet handling? What strategies exist to bypass or optimise them? When should/shouldn't they be used?
  4. What is a VLAN, where is it normally managed, when/where do I use it? Now why on earth would I ever want to virtualise it (vxvlan), what are the perfomance hits, can fragmantation occur? How can you mitigate these issues, can they always be mitigated? What is an example that you can think of where vxvlans were the best option, but still not a great option (Note: this last part is optional). How would you architect networks, would you intentionally use vxvlans, not design for them, or not use, but design for them?
  5. TBD
  6. TBD
  7. TBD
  8. TBD
  9. TBD
  10. TBD
  11. TBD
  12. TBD
  13. TBD
  14. TBD
  15. TBD

Hardware

  1. What is a branch predictor? Where do they live, what do they do, what kinds exist? Explain why they are/aren't important as well as how we can write code around them, or for them
  2. What happens when there is a cache miss, or a branch mis prediction? What physically happens within the CPU? What is a branch target buffer, and what is areturn address stack? How can they affect the pipeline, what parts are apart of a pipeline out of curiosity?
  3. (Note: very few are capable of answering this question) Explain what a side channel attack is, and give a simple example of one. If you understand your hardware well, can you explain one way which you may have ever thought of exploiting some behaviour as a side channel attack? (One example would be Zen's memory branch predictor behaviour, as a perceptron you can tell what's been getting executed a lot. I will leave it there and let you continue)
  4. TBD
  5. TBD
  6. TBD
  7. TBD
  8. TBD
  9. TBD
  10. TBD
  11. TBD
  12. TBD
  13. TBD
  14. TBD
  15. TBD

Compilers

  1. Can you explain how a compiler optimises code? If you can, then write out some code in any language, and translate it to some intermediate representation (you can make it up), then show the algorthm used to optimise it and apply it. Translate it to some asm, then decompile it back to code. Then repeat with a more complicated piece of code or algorthm till you can no longer. After you're done this, take a break
  2. (Note: Super niche and specific to LLVM stuff) What is a front-end, middle-end, back-end? Where does MLIR fit in here (explain what MLIR if they do not, not knowing acronyms/formal names is common). Can you give an example of why it got added, as well as an example of how it's useful? Now can you remember/make up some version of MLIR for [insert your own math operation] and show me how it's used to optimise SIMT/SIMD/[??? random vector stuff] operations?
  3. TBD
  4. TBD
  5. TBD
  6. TBD
  7. TBD
  8. TBD
  9. TBD
  10. TBD
  11. TBD
  12. TBD
  13. TBD
  14. TBD
  15. TBD

Wild Card