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.