Archive for May, 2009

May 4th 2009

More thoughts on interviews

My coworkers and I have begun the painful process of hiring again. After conducting too many interviews to count I have a few observations to make.

First and foremost the goal of the interview is to determine if the candidate is a good fit for the position. It’s also important, however, to use the interview to inform the candidate about the company, the position, and the department. There’s little point in finding a great candidate if you haven’t sold the candidate on the position and the team. To do all this consistently with a variety of candidates is difficult and takes practice.

Many interviewers conduct litmus tests more than interviews – they believe there are certain concepts that good developers innately understand. “What is a pointer?”, “How do you model a many-to-many relationship in the database?”, “How do you reverse a singly linked list?”

Skeptics deride these questions as mere trivia. They say that anyone can look algorithms and definitions up in books. The problem with such tests is that they set a bar for “good enough” but provide no way to measure between “good” and “great”. An effective interviewer increases the chances of making good hire by balancing the position requirements against the candidate’s skills, personality, and logistics (salary, title, benefits). Such tests don’t provide enough detail.

Another common problem with interviewing is the basic approach toward the the position. Some want to find candidates who are merely “good enough to be here”. This is a natural by-product of a litmus test interview. Such people honestly believe that interviewing cannot predict with enough accuracy a candidate’s chance of success. They prefer the mantra “Easy to hire, easy to fire”. A similar approach is to compare the candidates against each other and pick the best one. While a candidate may stand out when compared to other candidates, this provides little information about his fit for the position or the team. 

Before every interview I conduct, I review the candidate’s resume in advance. I highlight interview questions that apply to the technologies and experience stated in their resume. I remind myself what my friend told me before my first interview – that the interview process is as much selling the company, position, and team to the candidate as it is about gathering information from the candidate.

Some interviews go well, others do not. Sometimes we just don’t connect very well. Sometimes the problems are more systematic – my questions are too technical and oriented to microsoft technologies than the candidate is comfortable with. It’s important to try and evaluate the efficacy of the interview independently of one’s feelings about the candidate. Day to day most of the candidate’s work will have nothing to do with most of the people he meets during the interview. If we only hired people we related to, we’d never hire across gender or culture lines.

When I changed jobs a while back I lost access to my original list of interview questions. More importantly, I left the interview team that had proved so successful. My former colleagues are far better interviewers than I and I wanted a place to transcribe some of what we developed for future use. The following is what I’ve been able to piece together. In some places I have merely paraphrased their questions poorly. When possible I’ve included their original unblemished questions (with many thanks to Jed and Andrew) and I apologize in advance for the places where I’ve misquoted them.

Phone Screen:

Agenda:

  • Introduction
  • Present interview format
  • Company overview – size, location, culture, business niche
  • Position overview – skills, responsibilities, first project
  • Basic job questions
  • Technical questions (litmus)
  • Round out questions (if the interview looks promising)
  • Next steps
  • Decision timeline
  • Thank you

Questions:

  • Are you familiar with our company?
  • Describe your background and a bit about yourself.
  • Why are you looking for a job?
  • What kind of position are you looking for?
  • How much are you currently making?
  • When can you start?
  • What are the last several books you’ve read?
  • What blogs do you follow?

Technical Questions:

  • What is the difference between a class and an object?
  • What is the difference between a primary key and an index?
  • What is a singleton object? Can you give an example of one in the .net framework?
  • What is a static method? Can you give an example of one in the .net framework?
  • Put the following asp.net control events in order: Page_Load, PreRender, Button_OnClick.

Evaluation:

  • Can you understand this person when they describe their work? What about when they describe technical details?
  • Are the answers to technical questions precise?
  • Does the candidate show an interest in learning and applying new skills?

Computer Algorithms and Concepts Interview:

Questions:

  • What are some common programming patterns? What examples of patterns can you find in existing frameworks – .net, asp.net, jQuery, scriptaculous, Elmah, log4net, linq, etc
  • Pseudo-code the algorithm to reverse a doubly link list.
  • Pseudo-code an implementation for a stack using primitives.
  • Psuedo-code an implementation for removing “z” characters in a C style string.
  • What languages do you enjoy programming in? Why?
  • Imagine an asp.net webform with a single textbox and a single link-button. The user types in a value into the textbox and clicks the link-button.A postback is performed and the page reloads with the textbox already populated. – How does the textbox retain it’s value across the postback? Please be as specific as possible, describing all interactions between systems and communication protocols.
  • Suppose you have two user controls. One containing a databound list and another containing a link button. How would you rebind the list in the first control in the click event of the link button?

Analysis:

  • Can the candidate communicate ideas and concepts well?
  • Do they understand basic patterns and apply them?
  • Do they understand basic algorithms and apply them?
  • Can they site programming principles (SRP, OCP, etc.)?
  • Are they comfortable comparing languages – utility, style, imperative vs. declarative, functional etc.?
  • How did they react when they didn’t know something?
  • How did they work through something they didn’t know?

Manager Interview:

Questions:

tell me about:

  • The best manager (or managerial experience) you had. what did they do well?
  • The worst manager (or experience) you had. what did they do poorly?
  • How you learned a new technology
  • The most difficult challenge you faced (tech or non-tech) and how you overcame it
  • Your proudest moment on the job
  • Working solo / in a small group / in a big group — what do you like about each?
  • Working with teams outside of development (design/qa/etc.)
  • Working with customers
  • Leading on projects/features
  • Working with task/bug tracking systems
  • Aan improvement you would like to have made or did make at your last job
  • Your experience with using/creating standards or best practices

Analysis:

  • How did the candidate work with others? Were those interactions portrayed in a positive light?
  • How driven are they (can they help you make the changes you want to make)?
  • Where they are on the lone wolf scale/mad scientist scale?

 

The goal with the following interview is to evaluate the candidate’s knowledge on a variety of topics. If their resume indicates they have four years of experience programming Asp.net, do they know what you’d expect them to know?

Technical Interview (inital question list from Scott Hanselman here):

Questions:

Web Infrastructure:

  • How many processes can listen on a single TCP/IP port?
  • What is a PostBack?
  • Juxtapose the HTTP verbs GET and POST. What data is contained in each?
  • What kind of data is passed via HTTP Headers?
  • What is HEAD in an html document?
  • Explain how cookies work. Give an example of Cookie abuse.
  • What are the basic html elements that can be placed within the <body> tag?
  • How is a user session maintained by the server?

Basic ASP.Net:

  • When you’re running a component within ASP.NET, what process is it running within on Windows XP? Windows 2000? Windows 2003?
  • What is ViewState? How is it encoded? Is it encrypted? Who uses ViewState?
  • What three Session State providers are available in ASP.NET 1.1? What are the pros and cons of each?
  • What is the difference between a Server Control and a User control? What is a composite control?
  • Put the following events in order for a postback of an aspbutton server control:
    Page_init(), Page_load(), button_onclick()
  • What is the web.config used for?
  • Describe a method to implement paging of a set of records without rerunning the query for each page request. Where can the data be stored?
  • What are the options to handle unhandled exceptions in ASP.Net?
  • What is the difference between ClientId and Id of a web control?
  • What are the difference column types of a datagrid?
  • How do you set the client side onclick event of a control from the code behind?
  • How does a checkboxlist render?
  • How do you dynamically put javascript on a page? Where do you store the javascript in your project?

Advanced ASP.Net:

  • What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP?
  • Are threads reused in ASP.NET between reqeusts? Does every HttpRequest get its own thread? Should you use Thread Local storage with ASP.NET?
  • Is the [ThreadStatic] attribute useful in ASP.NET? Are there side effects? Good or bad?
  • Give an example of how using an HttpHandler could simplify an existing design that serves Check Images from an .aspx page.
  • Describe how a browser-based Form POST becomes a Server-Side event like Button1_OnClick.
  • What kinds of events can an HttpModule subscribe to? What influence can they have on an implementation? What can be done without recompiling the ASP.NET Application?
  • Explain the importance of HttpRequest.ValidateInput()
  • How would one implement ASP.NET HTML output caching, caching outgoing versions of pages generated via all values of q= except where q=5 (as in http://localhost/page.aspx?q=5)?
  • Explain <@OutputCache%> and the usage of VaryByParam, VaryByHeader, VaryByCustom work?
  • Suppose you’re setting javascript functions to control events dynamically. What javascript problems can occur when the page is downloading?
  • What must be true of all objects placed in the session?
  • Suppose you have a datagrid with a template column. The template column contains an asplinkbutton. How can you find a reference to this button in the datagrid’s ItemDataBound Event? Why would the asplinkbutton not be found for a particular row?

Basic OO Developer stuff:

  • Describe what an Interface is and how it’s different from a Class. Contrast the use of an abstract base class against an interface?
  • What is Reflection?
  • What is the difference between a.Equals(b) and a == b? In the context of a comparison, what is object identity versus object equivalence?
  • What is boxing?
  • Explain the differences between public, protected, private and internal (friend in VB)

Basic Windows Stuff:

  • Describe the difference between a Thread and a Process?
  • What is the difference between an EXE and a DLL?
  • What technology enables out-of-proc communication in .NET?

Basic DotNet Stuff:

  • What is strong-typing versus weak-typing? Which is preferred? Why?
  • What is the GAC? What problem does it solve?
  • Conceptually, what is the difference between early-binding and late-binding?
  • How is a strongly-named assembly different from one that isn’t strongly-named?
  • Can DateTimes be null?
  • What are PDBs? Where must they be located for debugging to work?
  • Why is catch(Exception) almost always a bad idea?
  • What is the difference between a Debug and Release build? Is there a significant speed difference? Why or why not?
  • Does JITting occur per-assembly or per-method? How does this affect the working set?
  • Is string a value type or a reference type?
  • Explain the use of virtual, sealed, override, and abstract (C#) or MustOverride, NotInheritable, Overrides, MustInherit (VB.Net)
  • What is the difference between: catch(Exception e){throw e;} and catch(Exception e){throw;}
  • What is the difference between typeof(foo) and myFoo.GetType()?
  • What is a static (Shared in VB) method?
  • What is this (Me in VB)? Can this be used within a static method?
  • What data structures does the .Net framework provide for working with data from a database?
  • What are some options to store database connection settings?

Advanced DotNet Stuff:

  • What is the difference between Finalize() and Dispose()?
  • What is the JIT? What is NGEN? What are limitations and benefits of each?
  • What’s wrong with a line like this? DateTime.Parse(myString);
  • How does the XmlSerializer work?
  • By what mechanism does NUnit know what methods to test?
  • What is remoting? How is it different than DCOM? When is it used?
  • What are the advantages and disadvantages to using the SOAP formatter vs. the binary formatter for serialization? What the advantages and disadvantages to implementing ISerializable for a class?
  • Are collections serializable? Are they threadsafe? Are exceptions serializable?

ASP.NET Ajax:

  • What is Ajax?
  • What is ASP.NET AJAX?
  • What role does the ScriptManager play?
  • Can we use multiple ScriptManager on a page?
  • What is the role of a ScriptManagerProxy?
  • What are the requirements to run ASP.NET AJAX applications on a server?
  • Can I use ASP.NET AJAX with any other technology apart from ASP.NET?
  • How can you cancel an Asynchronous postback?
  • Difference between Server-Side AJAX framework and Client-side AJAX framework?
  • Explain the UpdatePanel?
  • Explain the behavior/extender model. What does it provide over older asp.net javascript implementations.
  • How can you debug ASP.NET AJAX applications?
  • Can we call Server-Side code (C# or VB.NET code) from javascript?
  • Can you nest UpdatePanel within each other?
  • How is the page performance affected by multiple update panels?
  • How can you to add JavaScript to a page when performing an asynchronous postback?
  • Use the ScriptManager class. This class contains several methods like the RegisterStartupScript(), RegisterClientScriptBlock(), RegisterClientScriptInclude(), RegisterArrayDeclaration(),RegisterClientScriptResource(), RegisterExpandoAttribute(), RegisterOnSubmitStatement()
  • Explain differences between the page execution lifecycle of an ASP.NET page and an ASP.NET AJAX page
  • Explain the AJAX Client life-cycle events.
  • Is the ASP.NET AJAX Control Toolkit(AjaxControlToolkit.dll) installed in the Global Assembly Cache?

Database Development (MS SQL oriented):

  • What is a stored procedure? When would you use one?
  • What is a view? When would you use one?
  • What is the difference between a stored procedure and a view?
  • Write a query with a simple join between two tables that have a one to many relationship.
  • What is a temporary table? What are the different types of temporary tables? Why should one try to avoid using them?
  • What is the purpose of the Having clause? What is the purpose of the Group by clause?
  • Suppose you have a large text field in a table with many rows. Give examples of solutions to searching text fields in MS MSQL
  • When do we use the UPDATE_STATISTICS command?
  • Which TCP/IP port does SQL Server run on?
  • Can you tell me the difference between DELETE & TRUNCATE commands?
  • What is the purpose of the transaction log?
  • What is BCP? When do we use it?
  • What is referential integrity? What are the advantages of it?
  • What is database normalization?
  • What are two different kinds of indices in MS SQL?
  • What is the basic functions for master, msdb, tempdb databases?

Analysis:

  • Did the candidate’s knowledge match up to their resume?
  • Did the candidate know the underlying technologies of the frameworks they used? Were they interested in learning?
  • How well did the candidate express themselves? Did they ever say they didn’t know something? Did they try to work through any questions?

No Comments yet »