共用方式為


My Favorite Interview Question

I've given plenty of interviews in my day. Almost all of them have been for highly technical positions; typically software development. Of all the interview questions I've ever asked, this one is my absolute favorite:

  "Write a function that can take the derivative of a single variable polynomial of any order. Perform this operation using the smallest number of operations possible."

Now, normally the people freak - and that's okay. They hear "derivative" and start flailing around, their brain short circuiting from the stress of the interview situation, until they aren't entirely certain if a derivative is a mathematical construct or the pet name of a certain species of spotted owl. I would typically continue on to give them an example of a taking a derivative, just to refresh their memory. I also tell them that the function can take whatever input they feel is neccessary. I then give them 15 minutes to work on this.

No one has ever come close to answering the question right. Well, one guy did, and I hired him. Of the rest of the people that I hired, they all got close - but here's the trick. The question wasn't about finding the right answer. The question was about finding out how your brain worked by a) stressing you and b) requiring you to think logically under that stress.

 Anyone care to take a stab at it? Brownie points for the first person to get it right. :)

Comments

  • Anonymous
    May 08, 2009
    PingBack from http://microsoft-sharepoint.simplynetdev.com/my-favorite-interview-question/
  • Anonymous
    May 08, 2009
    The comment has been removed
  • Anonymous
    May 09, 2009
    I think you expect a polynomial as output. I will like this. I'll represent a polynomialAx^(n) + Bx^(n-1) + ... + Cas an array of length (n+1) like[A, B, ..., C]with 0 wherever necessary.For e.g. 4x^(3) + 5x will be represented as [4, 0, 5, 0].Now to calculate derivative, I just need to multiply the ith value of input with the exponent of x at that point. Moreover, the output will contain one term less than input.int[] derivative(int[] input) { if (input == null || input.length < 1)   return null; int order = input.length - 1; int[] output = new int[order]; // note: 1 less for (int i = 0; i < output.length; i++)   output[i] = input[i]*(order - i); return output;}
  • Anonymous
    May 09, 2009
    I want more information. Is this a numerical derivative such as dferg thinks or more symbolic as bsanghvi thinks? Also, what are some examples of single variable polynomial of any order? "x^2+x" might be single variable or might not depending on how you are defining it.I think the example "x^2" fits while "x^2 + x" doesn't given a single variable and an order as input. My answer there then is:def derivative(variable, order): return order * (variable ^ (order - 1));You'd then find the derivative of x^2 at x=3 using:derivative(3, 2)and get a result of6There are, of course, issues of floating point and so forth. But if you used a duck-typed language, the above code could even work whether you wanted a symolic result or a numerical result depending on how operators are overloaded on the input objects. Fun stuff.
  • Anonymous
    May 09, 2009
    The comment has been removed