Guide to Hiring Developers - Part III

This is the third of a three-article series that touch upon the subject of hiring developers. The first article had to do with CV screening. The second article discussed the process of the 1st interview, which is the equivalent of the phone screening that several companies do. The final part discusses the process of the 2nd interview. The 2nd interview is 100% technical in nature. My target is to see the candidate's level of technical expertise plus some things about her character. I have three main goals in this interview:

  1. Assess the candidate's technical expertise.
  2. See how the candidate reacts to difficult questions.
  3. Bring the candidate down to earth.

In my effort to assess the candidate's technical expertise I am following a kind of binary search. You can’t just accidentally know what the Global Interface Table is unless you have actually used it. And if you have used it then stakes are high that you have a rather good grasp of COM apartments. So, answering a difficult question tells me lots of things without having to ask too much.

To help me in this process I have compiled a list of questions for a C++/Windows/COM/Database programmer, which is presented later on in this article.

Some questions are really fundamental (to me at least) and some are really TOUGH. Remember: Not all questions are meant for all candidates. Depending on the candidate’s level, you make the appropriate questions. This is just a quick reference so that I don't forget the questions :-)

What do I mean by fundamental?
Virtual Memory? Uhhh... isn’t that dynamic memory allocated from the heap?
Address Space? Yeah I know that! It’s in the pagefile!

What do I mean by tough?
Certainly not mindless trivia. Not things you can just look up in a reference and know what it’s all about:
Thread Local Storage? Well I can look it up sir, but I think it is some sort of in memory transactional file system.

Some candidates actually try to second-guess the answers! And some others even answer back with a question!!! That’s a truly bad sign, for me at least. Are they really asking ME to tell them???

Being afraid and\or unable to answer in cold blood "I don’t know", is a quality that I strongly DISLIKE in people. Ignorance is natural. There are MEGATERABYTES of knowledge out there. Do they really think that I am so dumb as to seriously expect a graduate to know what the MultiThreaded Apartment is??? Or do they really think that they can work on a 1M LOC C++ project when they have never heard of Virtual Memory?

Their reactions to the questions that they don’t know are crucially important, not the actual answers. Are they curious to find out what the answer is, or do they just sit back dumbfounded staring to the void?

Now, many a candidate thinks he is a hot-shot programmer when they come to me:
Top-Gun is my name, Coding is my game.

Some of my technical questions are meant to bring such candidates down-to-earth, and of course make the salary issue a little bit more flexible for my company ;-)
What I essentially try to convey is:
Look dude, you might think that you are a hot-shot, but guys like you are dime a dozen in this shop. You might be in the marines, but we are the Navy Seals.

TLS? We have done that.
COM methods taking a variable number of arguments? Sure.
IDispatchEx? Yeap.
COM+ Distributed Transactions? Piece of cake.
COM+ Distributed transactions with BYOT from C++? Now that was a tough one...
Device Drivers? Be our guest.
Printer Drivers? Come on...
3D graphics? No sweat.
Multithreaded database processing? Yawn...
Dynamic MFC forms (user can add or remove DB fields at runtime)? Yeap.
Dynamic Class Generation at runtime (.NET CODEDOM)? Oh yeah :-)
IDispatch-like Web Services? You name it!

Of course we are in the Navy Seals of software development, or at least I think so :-) Btw, I forgot to mention that modesty is another one of my virtues... Anyway, if you are not the Navy Seals, then don’t try the TOUGH questions. You will just make a fool of yourself.

How do you think you would look to a candidate if you said something like:
We are doing really really hardcore, mega-heavy-weight development using MS Access97 in this shop. Our lead programmer is the ultimate VB guru and he has a question for you: Do you by any chance happen to know what the Free Threaded Marshaller is?
Yeah sure… I am such a really really hardcore mega-heavy-weight developer that I have never heard of database servers, so I do my really really hardcore mega-heavy-weight development in Access97 and VB5. Indeed VB5, because VB6 really sucks.

So here is the list of questions:

C/C++

  • What is an abstract class? What is a pure virtual function, and how does the syntax goes about?
  • Can an abstract class have data members?
  • Can a pure virtual function have a body?
  • What is an ‘interface’?
  • What are const member functions?
  • Can we overload member functions only based on constness?
  • What are mutable data members?
  • What is an explicit constructor?
  • What is the dynamic_cast?
  • What is const_cast?
  • What is a Down-Cast, Cross-Cast?
  • Can we apply dynamic_cast to all kinds of classes?
  • Can we apply dynamic_cast to a reference?
  • What are templates?
  • What is Template specialization?
  • Can templates have static member functions and data?
  • What are template member functions?
  • What are anonymous structures\unions?
  • C++ Exception Handling, Stack unwinding,Exception Safety

COM\ATL

  • What are COM interfaces?
  • What are GUIDs, UUIDs, IIDs?
  • What is IUnkown? Does it have any special purpose?
  • What is IDispatch? OLE Automation?
  • What are OLE Automation Compatible types?
  • What is COM Server Registration? Where is this information stored?
  • What is a ProgID?
  • What are dual interfaces?

COM Apartment models:

  • What is a COM class factory object?
  • What is an STA?
  • What is an MTA?
  • What is the “Main STA”?
  • How many MTAs can a process have?
  • An MTA COM object creates an in-process apartment-threaded COM object. In what apartment will the new object live?
  • Explain in-process\out-of-process COM servers?
  • What are COM proxies? When and by whom are they created?
  • What is marshalling?
  • What is the Global Interface Table (GIT)?
  • What is the free-threaded marshaller?
  • What is COM aggregation?
  • What about COM interfaces and inheritance?

Operating Systems & Windows

  • Explain virtual memory & memory page protection?
  • What is a memory access violation?
  • What is the difference between the stack and the heap?
  • Do you know that Structured Exception Handling is?
  • Can I allocate dynamically memory on the stack?
  • How many heaps can a windows process have?
  • What is a thread?
  • Which functions are used to create threads?
  • What is the 'UI thread'?
  • What is TLS (Thread Local Storage)?
  • What is a Critical Section?
  • What is an event?
  • What are the intelocked functions?
  • What do we have to link with when doing multithreading?
  • What is the DLL base address? What is DLL rebasing?
  • What are DLL exported functions?
  • Calling conventions: _cdecl VS stdcall?

Database Theory

  • What is a transaction? What is commit and rollback?
  • Do you know what Foreign Keys are?
  • Do you know what Referential Integrity means?
  • Do you know what Table Normalization means?
  • Do you know what Stored Procedures are?
  • Do you know what Triggers are?
  • Do you know what Cursors are?
  • What is the difference between an INNER and a LEFT JOIN?
  • Do you know what the Transaction Log is?
  • What does ACID stands for?
  • Do you know what Isolation Levels are?
  • What is your opinion on the usage of NULLable fields?

About the author: Dimitris Staikos has been working as a software pro since 1995. He worked for over five years writing Windows kernel mode device drivers and related applications. Then he joined LogicDIS (www.logicdis.gr) where he first served as a Senior Developer for three years and then promoted to R&D Manager and served for two years. Now he is planning to start up his own micro ISV. In his immense free time, he plays the electric guitar, piano, and has two kids who keep life fun.