Data structures, algorithms, algorithm analysis, various discrete math topics (set theory and number theory, a bit of graph theory, are usually included in a typical CS undergrad curriculum), models of concurrency, models of computing (lambda calculus, Turing machines), complexity classes, Chomsky hierarchy, type theory (some might consider this more advanced, varies by school and its lean towards practical or theoretical CS), systems of logic.
If software engineering whiteboard interviews are anything to go by, strictly hash tables. Hash tables are the only thing that matter, unless of course the interview process is broken...
Bonus points if some kind of list requirement comes up and you deftly maneuver the conversation back to using your hash table with array indexes as keys.
Dan Grossman's "Programming Languages" series on Coursera was important in helping me connect the dots. And that was after only completing the first of three parts of the course...
Data structures, algorithms, algorithm analysis, various discrete math topics (set theory and number theory, a bit of graph theory, are usually included in a typical CS undergrad curriculum), models of concurrency, models of computing (lambda calculus, Turing machines), complexity classes, Chomsky hierarchy, type theory (some might consider this more advanced, varies by school and its lean towards practical or theoretical CS), systems of logic.