Much more important than specific programming language knowledge, problem solving will show you how the candidate tackle daily problems that will happen often in her new position. List problems you (or current/previous staff) have faced before and ask her how would she solve that and why. If the answer is different from what was done before, show your solution and ask her to comment on the differences.
Below are some examples of technical problems in development that I have faced or been asked in interviews.
How would you get all primes from 1 to N? In how many ways (combined?) can you optimize the brute-force approach?
Suppose there is a process creating new random numbers every few seconds that you need to store. Suppose you need to search on them several times per second. Which data structure would you use to hold the numbers and what algorithm would you use to find a given number?
Given a text file, how would you build an index to search for words in it? And fragments of words?
How would you model a web server? The program must be able to accept several connections at the same time, process them independently and give the right answer in a reasonable time. The server needs only to read static text files.
You have a program that allow users to consult a database and make changes on it. Explain the generic model you would do and why. How good this model would scale?
You need to do some operations in matrices or some regular expressions and your language doesn't have native support for it. Would you develop it yourself or search for external libraries? If developing yourself, how would be your approach to it? Otherwise, where would you search for the libraries?
Suppose you have a program that access a particular database but you use it in too many places and passing the connection by argument is becoming a nightmare, what would you do to solve this problem in an elegant way?
You have several programs using the same log infrastructure. The format is the same but the frequency and order of the messages are different, yet you can recognize some patterns on it. What would be your approach to build a parser to generate automatic reports?
The company you work for have lots of libraries being used in lots of places and being actively maintained by other developers and you need to use most of them in a daily basis. What would you do to simplify your use of those libraries and assure you always have an up-to-date and compatible version of them?
You found a similar function in three completely unrelated parts of the code you maintain, what would you do?
When extending your code you found out that one of the new functions does something similar (but not identical) to something you did before in the same codebase. Explain in which cases you would refactor the old code.
Suppose that, in the previous situation the old code was really old and in a library that other people are using in production and you don't have any recursive tests for it. How far would you go to refactor that code?
Which languages do you actively use? If you could choose a few languages to continue programming / learn, which would you choose and why?
Your company have a USB key they use as hard-lock (hardware security device with a secret key inside), which programming language would you use to communicate with the device?
Which programming languages would you use to develop a brand new website (suppose the company have no web applications so far)?
When building a program that will deal with the customer via a graphic interface, over the network to some servers and with the hardware (such as USB devices). Would you use a single programming language or a modular approach?
You're integrating hundreds of small other programs that need to run in a non-trivial sequence (graph-like dependency structure) into one single, or just a few, processes. How far would you go to re-write the programs into less platforms/libraries/programming languages?