Take a look at this blog post by Steve Yegge (formerly of Amazon, now at Google):
- The Five Essential Phone Screen Questions
It goes into some detail about the the five most important concepts that developers should be required to know:
- Basic programming (including recursion, file I/O, formatted output, loops etc)
- Object oriented design (including design patterns etc). You should be able to produce sensible OO designs as well as understanding the concepts.
- Scripting and regexes.
- Data structures — lists, sets, hashtables, trees, graphs, and so on — as well as Big O notation and algorithmic complexity.
- Bits, bytes and binary numbers — how numbers are represented within the computer, and how to manipulate them.