Monday, May 23

Interviewing

It's that time of the year where I have to be a barstad and put people through hell for no other reason than my own enjoyment. Ok, not quite, but it is currently recruiting season in my place of work, and as the resident C# guru (yes, I'm equally astonished), I've become a required part of the screening process.

So armed with my standard crib sheet (posted below, mainly for Zubs to show me up with) and a particular air of authority, I've spent the last week interviewing various people all at least 5 years older than I am, but in balance for a contract that will pay much more than what I earn. I couldn't have set up a more explosive situation if I tried.

But it's been a mixed bag. The general trend is that of poor quality, with most not being able to answer anything past the most basic questions. More exciting was the guy that appeared to want to punch me (I managed to keep my smile, but I'm sure that didn't help much), to a guy I had already interviewed (and rejected) last year.

So here I am questioning my interview technique both in the technical sense and personal sense. Are my questions too difficult? Am I too smug in the interview room? Am I not being flexible and considering at least in part the answers I was not expecting? Maybe, but there was one guy who thoroughly impressed me (and will probably get a contract in return), and so I'm assured I don't hate on everyone put in front of me.

Of course I'm still young and new to this and interviewer technique probably requires as much practice to get right as interviewing technique does. Still, there are times when I leave an interview and feel like a right git for putting these people through such an ordeal. Alternatively perhaps I'm flattering myself with the idea that they even consider it more than just a bad interview. Or more likely, perhaps you just can't get the help nowadays.

My interview questions:

1) Explain the key benefits that .NET etc have brought to development.

An essay question, so it's more about how he says stuff rather than what he says. If he gets stuck, you could prompt him with it's multilingual abilities, a rich framework, and native support for existing technologies like COM XML etc.

2) What is a property and how/why would you use one?

A straight forward factual/syntactical question. The format is as follows:

/////

private int PrivateIntegerVariable

int IntegerProperty
{
get
{
return PrivateIntegerVariable;
}
set
{
PrivateIntegerVariable = value;
}
}

/////

The point being that you can provide access to a private field via a kind of wrapper. The above is just returning and setting it quite straightforwardly, but in the get and set parts you can do almost anything that a method can (for example checking for valid values). Worth mentioning that they are effectively get/set methods (and compiled as such), so ask what the differences are. Can be used as databinding members.

3) What's the difference/relationship between a delegate and an event?

A bit of a subtle one so probably hard. Basically you don't have full access to an event; you can only remove event handlers which you have added yourself. Otherwise the same.

4) You have a method in a webservice that returns the trades executed today. It takes a lot of time to run each time it is called, and is called by multiple consumers at a faster rate than method takes to return. What would you do to make the service more efficient?

Another open question to check his problem solving skills. One possible solution is to queue up requests after the first one which will also deal with caching the results to provide to any outstanding requests. I'm sure there's more than one solution.

5) You have an object of unknown type that you only get a reference to at runtime. What part of the Framework would you use to a) analyse it and b) possibly exploit it?

Simply "Reflection". If he wants to expand, let him, but don't expect him to be a complete MSDN reference.