Interesting thread. Having been working as a "developer" for about 2 years. I'm shocked that I know 20% of what has been mentioned (might have to do with terminology). Any idea where I should start in studying this. Doing my Informatics degree from second semester this year but in the interim. Where do I start?
Any good question tries to get an understanding of how well the candidate understands both theory and practice, as well as how well they are able to combine the two. The theory to my first question (random memory access), is a gateway to a discussion on fault tolerant computing, how memory sub-systems work, and the distinct roles played by the OS and processor architecture for memory access. So, the theoretical, and functional basics would be covered in an OS and architecture class, while anyone with experience or interest in systems programming will likely take it further. Someone with a strong interest in optimization and performance programming, would also certainly encounter these topics early in their research/career.
My second question (dot product) touches on several aspects of processor architecture, compiler optimization (and knowing when and how it can and can not optimize), as well as numerical computing. There are generally classes on the first two, and some universities have courses on numerical computing. Really understanding what a dot product is, and why it is such a fundamental operation, would require some maths courses. For me, most of this knowledge comes from work experience and practice - my suggestion is to try write a ray-tracer, and then make it fast - very educational in so many aspects of computing, and also very satisfying.
Gnome's questions would be covered by a course in Java (preferably as a demo language for OO theory, rather than a course on syntax of course) + several years of experience using it, and understanding of network and internet technology (generally covered insufficiently in CS classes, so you would also have had to do your own research, or worked in this area to give a really good answer), and a relevant university course on math. I encountered one way functions in an "applied algebra" course (coding theory), a computer security course, and at least one of the various theoretical CS modules I did as an undergrad. Most universities offer courses (usually at honours level) on distributed computing and/or HPC, which may touch on the CAP theorem (unless it's just a front for a GPU programming course

).
In the interview's I've been too, we are given a "test" to solve, figure that out and you get called in for a face-time interview. And that was it,
Many jobs, especially the ones for more junior to mid-level candidates are very straightforward to interview for. They need someone who can code in language Z, test if they can code in language Z (or similar language Z'

). They need someone who knows technology X, they can test for knowledge/skill on technology X.
For more senior roles, they often need someone to participate in the design of the overall system - choosing the technology, architecting the software, designig the regression infrastructure, or even better: they have to hire someone who can do job Y, because no current employee even knows where to start. In those scenarios, the job description is way more nebulous and the interview tends to be much more about ascertaining interest, skill, ability to communicate, ability to apply theory, depth and breadth of knowledge, lateral thinking, etc. Actually getting the answers correct off pat, becomes far less important, than the candidate convincing the interviewer that s/he has the ability to solve complex problems independently. I've actually been amazed at how well some top devs progress with a problem in a field they've only briefly touched. Anyway, this is often where the more esoteric questions come from. (Well, that and junior interviewers who expect concrete answers to hazy, ill-defined riddles - sigh

).