I must've interviewed a hundred or more developers and my advice is to start with practical coding questions. Even simple code tests will save you a lot of time. Most of the people I have interviewed could answer theory questions quite well, but only a small fraction are what I would call good coders.
For example, I generally start with the following question:
"Given an array of ints, write some code that creates an another array of the same size and copies the elements to the new array but in the reverse order."
I imagine that most readers would consider this question ridiculously easy, but I found that nearly three quarters of interviewees struggled with this test.
If they got past that question, I would ask them to repeat the task, but this time they should reverse the elements in place. The answer should be something like:
for (int i=0; i < (data.length / 2); i++)
data[i] = data[data.length - 1 - i];
The first time through nearly everyone misses that you should only go half way through the array. Watching them fix that bug gives you a good inkling as to how they solve problems and how sharp they are.
Next I would usually get them to sort the array using bubblesort, but by this stage I usually have a reasonably good sense of whether they are worth hiring.
Total interview time using this method: 10-15 mins. Continue with theory or tool questions afterwards if you like, but I cannot recommend enough starting with the practical coding portion of the interview.