Total Pageviews

Friday, October 11, 2013

practice interview questions 2

http://www.hanselman.com/blog/BuildingWebAppsWithASPNETJumpStart8HoursOfFREETrainingVideos.aspx

I do a LOT of interviewing here, and for a while we were hiring ASP.NET people.  Here's some of the questions that I asked them.  I came up with these questions because you'd "just know" this stuff if you spent time working on a REAL WORLD ASP.NET site - through design, development, debugging, production debugging, and deployment.
Do they suck? Did I miss any?  How do you think people did?
  • From constructor to destructor (taking into consideration Dispose() and the concept of non-deterministic finalization), what the are events fired as part of the ASP.NET System.Web.UI.Page lifecycle. Why are they important? What interesting things can you do at each?
  • What are ASHX files?  What are HttpHandlers?  Where can they be configured?
  • What is needed to configure a new extension for use in ASP.NET? For example, what if I wanted my system to serve ASPX files with a *.jsp extension?
  • What events fire when binding data to a data grid? What are they good for?
  • Explain how PostBacks work, on both the client-side and server-side. How do I chain my own JavaScript into the client side without losing PostBack functionality?
  • How does ViewState work and why is it either useful or evil?
  • What is the OO relationship between an ASPX page and its CS/VB code behind file in ASP.NET 1.1? in 2.0?
  • What happens from the point an HTTP request is received on a TCP/IP port up until the Page fires the On_Load event?
  • How does IIS communicate at runtime with ASP.NET?  Where is ASP.NET at runtime in IIS5? IIS6?
  • What is an assembly binding redirect? Where are the places an administrator or developer can affect how assembly binding policy is applied?
  • Compare and contrast LoadLibrary(), CoCreateInstance(), CreateObject() and Assembly.Load().

A while back, I posted a list of ASP.NET Interview QuestionsConventional wisdom was split, with about half the folks saying I was nuts and that it was a list of trivia. The others said basically "Ya, those are good. I'd probably have to look a few up." To me, that's the right response.
Certainly I wasn't trying to boil all of .NET Software Development down to a few simple "trivia" questions. However, I WAS trying to get folks thinking. I believe that really good ASP.NET (and for that matter, WinForms) is a little [read: lot] more than just draging a control onto a designer and hoping for the best. A good race driver knows his car - what it can do and what it can't.
So, here's another list...a greatly expanded list, for your consumption (with attribution). I wrote this on a plane last week on the way from Boise to Portland. I tried to take into consideration the concerns that my lists contain unreasonable trivia. I tried to make a list that was organized by section. If you've never down ASP.NET, you obviously won't know all the ASP.NET section. If you're an indenpendant consultant, you may never come upon some of these concepts. However, ever question here has come up more than once in the last 4 years of my time at Corillian. So, knowing groking these questions may not make you a good or bad developer, but it WILL save you time when problems arise. 
What Great .NET Developers Ought To Know
Everyone who writes code
  • Describe the difference between a Thread and a Process?
  • What is a Windows Service and how does its lifecycle differ from a "standard" EXE?
  • What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?
  • What is the difference between an EXE and a DLL?
  • What is strong-typing versus weak-typing? Which is preferred? Why?
  • Corillian's product is a "Component Container." Name at least 3 component containers that ship now with the Windows Server Family.
  • What is a PID? How is it useful when troubleshooting a system?
  • How many processes can listen on a single TCP/IP port?
  • What is the GAC? What problem does it solve?
Mid-Level .NET Developer
  • Describe the difference between Interface-oriented, Object-oriented and Aspect-oriented programming.
  • Describe what an Interface is and how it’s different from a Class.
  • What is Reflection?
  • What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP?
  • Are the type system represented by XmlSchema and the CLS isomorphic?
  • Conceptually, what is the difference between early-binding and late-binding?
  • Is using Assembly.Load a static reference or dynamic reference?
  • When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?
  • What is an Asssembly Qualified Name? Is it a filename? How is it different?
  • Is this valid? Assembly.Load("foo.dll");
  • How is a strongly-named assembly different from one that isn’t strongly-named?
  • Can DateTimes be null?
  • What is the JIT? What is NGEN? What are limitations and benefits of each?
  • How does the generational garbage collector in the .NET CLR manage object lifetime? What is non-deterministic finalization?
  • What is the difference between Finalize() and Dispose()?
  • How is the using() pattern useful? What is IDisposable? How does it support deterministic finalization?
  • What does this useful command line do? tasklist /m "mscor*"
  • What is the difference between in-proc and out-of-proc?
  • What technology enables out-of-proc communication in .NET?
  • When you’re running a component within ASP.NET, what process is it running within on Windows XP? Windows 2000? Windows 2003?
Senior Developers/Architects
  • What’s wrong with a line like this? DateTime.Parse(myString);
  • What are PDBs? Where must they be located for debugging to work?
  • What is cyclomatic complexity and why is it important?
  • Write a standard lock() plus “double check” to create a critical section around a variable access.
  • What is FullTrust? Do GAC’ed assemblies have FullTrust?
  • What benefit does your code receive if you decorate it with attributes demanding specific Security permissions?
  • What does this do? gacutil /l | find /i "Corillian"
  • What does this do? sn -t foo.dll
  • What ports must be open for DCOM over a firewall? What is the purpose of Port 135?
  • Contrast OOP and SOA. What are tenets of each?
  • How does the XmlSerializer work? What ACL permissions does a process using it require?
  • Why is catch(Exception) almost always a bad idea?
  • What is the difference between Debug.Write and Trace.Write? When should each be used?
  • 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?
  • Contrast the use of an abstract base class against an interface?
  • What is the difference between a.Equals(b) and a == b?
  • In the context of a comparison, what is object identity versus object equivalence?
  • How would one do a deep copy in .NET?
  • Explain current thinking around IClonable.
  • What is boxing?
  • Is string a value type or a reference type?
  • What is the significance of the "PropertySpecified" pattern used by the XmlSerializer? What problem does it attempt to solve?
  • Why are out parameters a bad idea in .NET? Are they?
  • Can attributes be placed on specific parameters to a method? Why is this useful?
C# Component Developers
  • Juxtapose the use of override with new. What is shadowing?
  • Explain the use of virtual, sealed, override, and abstract.
  • Explain the importance and use of each component of this string: Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d
  • Explain the differences between public, protected, private and internal.
  • What benefit do you get from using a Primary Interop Assembly (PIA)?
  • By what mechanism does NUnit know what methods to test?
  • 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()?
  • Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?
  • What is this? Can this be used within a static method?
ASP.NET (UI) Developers
  • Describe how a browser-based Form POST becomes a Server-Side event like Button1_OnClick.
  • What is a PostBack?
  • What is ViewState? How is it encoded? Is it encrypted? Who uses ViewState?
  • What is the <machinekey> element and what two ASP.NET technologies is it used for?
  • What three Session State providers are available in ASP.NET 1.1? What are the pros and cons of each?
  • What is Web Gardening? How would using it affect a design?
  • Given one ASP.NET application, how many application objects does it have on a single proc box? A dual? A dual with Web Gardening enabled? How would this affect a design?
  • 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.
  • 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?
  • Describe ways to present an arbitrary endpoint (URL) and route requests to that endpoint to ASP.NET.
  • Explain how cookies work. Give an example of Cookie abuse.
  • Explain the importance of HttpRequest.ValidateInput()?
  • What kind of data is passed via HTTP Headers?
  • Juxtapose the HTTP verbs GET and POST. What is HEAD?
  • Name and describe at least a half dozen HTTP Status Codes and what they express to the requesting client.
  • How does if-not-modified-since work? How can it be programmatically implemented with ASP.NET?
    Explain <@OutputCache%> and the usage of VaryByParam, VaryByHeader.
  • How does VaryByCustom work?
  • 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)?
Developers using XML
  • What is the purpose of XML Namespaces?
  • When is the DOM appropriate for use? When is it not? Are there size limitations?
  • What is the WS-I Basic Profile and why is it important?
  • Write a small XML document that uses a default namespace and a qualified (prefixed) namespace. Include elements from both namespace.
  • What is the one fundamental difference between Elements and Attributes?
  • What is the difference between Well-Formed XML and Valid XML?
  • How would you validate XML using .NET?
  • Why is this almost always a bad idea? When is it a good idea? myXmlDocument.SelectNodes("//mynode");
  • Describe the difference between pull-style parsers (XmlReader) and eventing-readers (Sax)
  • What is the difference between XPathDocument and XmlDocument? Describe situations where one should be used over the other.
  • What is the difference between an XML "Fragment" and an XML "Document."
  • What does it meant to say “the canonical” form of XML?
  • Why is the XML InfoSet specification different from the Xml DOM? What does the InfoSet attempt to solve?
  • Contrast DTDs versus XSDs. What are their similarities and differences? Which is preferred and why?
  • Does System.Xml support DTDs? How?
  • Can any XML Schema be represented as an object graph? Vice versa?

ABOUT SCOTT

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. I am a failed stand-up comic, a cornrower, and a book author.
facebook twitter  subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web


Monday, February 21, 2005 9:14:04 PM UTC
I have such a list of questions for Windows Forms, but I'm pleased if someone knows the answers to half of them. The problem is that the framework is so big, and there are so many related technologies, that it's just not possible to know it all. What each individual knows is heavily skewed by the real-world problems he or she has had to solve.

So, while such lists have value, an interviewer should not read too much into a person's lack of knowledge about one specific area. Heck, the reason I'm not working for Microsoft today is that a gearhead C++ guy didn't think I knew enough about the Windows API. (He asked a question about accessing an API function, and I told him I did that a couple of years back, wrapped it up in a VB function, and never thought about it again. That was evidently not the answer he wanted.)
Monday, February 21, 2005 9:36:19 PM UTC
The guy before me basicly answered my main question, but I was also wondering at what level would you consider a person who knew all the information for thier given classification?
Kris Gray
Monday, February 21, 2005 9:36:50 PM UTC
Geez, Scott. I guess I should quit now. This is depressing. ;)
Monday, February 21, 2005 9:48:41 PM UTC
I'd consider someone very senior if they knew all of these questions.
Monday, February 21, 2005 11:11:08 PM UTC
I'm looking forward to the followup post with the answers. :o)
Monday, February 21, 2005 11:55:47 PM UTC
My first take is, this is a much better list than the last one. (read: less trivialities.) It's reasonable stuff you should have encountered if you work in that area of the framework.
Tuesday, February 22, 2005 1:16:42 AM UTC
OK, if this list is what a real employer is looking for, why is it that the MS Certs require you to know almost none of these questions?
Tuesday, February 22, 2005 1:51:00 AM UTC
I would move "What is this? Can this be used within a static method?" to "Everyone who writes code". If you don't *get* objects, you can appear to write good code but sooner or later it will all fall on your head.

I'm still trying to decide if I'm going to ask any of these sorts of questions in the interviews I'll be starting soon for a senior ASP.NET dev. I know I'm going to ask candidates to write code. I think I will end up asking a few of these as well. As usual Scott, you rock and you're just-in-time, too!

Kate
Tuesday, February 22, 2005 5:06:19 AM UTC
Even though I don't know half the answers to these questions I think it's a pretty good list for .NET Interview questions. Let's face it, if someone gets all these correct then you'd probably want to hire them! ;-) I'm going to take this on board and work through the ones I don't know the answers to -- and learn something. Thanks for the list Scott. Nice one!
Tuesday, February 22, 2005 5:12:41 AM UTC
I think a great .NET developer should also know proper grammar (ref title of post). ;)

These lists are a nice way to gauge technical experience, but they lack any way to discover if a developer is truly a great developer. A truly great developer knows how to work well in a team. You ever have a developer who knew the answer to all these questions but would trash talk and degrade anyone who didn't (I've met one)? A truly great developer understands that construction is only a small portion of a project lifecycle.
Tuesday, February 22, 2005 6:38:40 AM UTC
I think haacked is right!

Perhaps you'll meet someone who never had any opportunity to work at great projects and could never prove he could be a great developer. Those people might be(come) great developers, but until then they just were great at home. At home, you can do great things, that are totally worthless for the business. They might've created great software, which isn't divided into layers, etc, etc. I hope you get my point, I cannot express myself currently that good in English ;)

I still think it's a great list though. Peolpe who DO know these questions, can be considered great developers. You'll still have to figure out if they're great for your company and/or team. But when hiring them, you can start with a good salary. The other can prove himself later on and earn his big paycheck then.
Tuesday, February 22, 2005 8:05:57 AM UTC
Ya, I know the title is all goofed now, but if I change the title, the permalink will change. :(
Tuesday, February 22, 2005 8:45:19 AM UTC
I can see that changing in the next version of Dasblog. :)
Tuesday, February 22, 2005 8:50:25 AM UTC
You can indeed Tim...I suspect I'll have to include a LIST of permalinks (a journal) for each title. Had I noticed it earlier it wouldn't have been a big deal.
Tuesday, February 22, 2005 9:49:02 AM UTC
Very complete list, and quite challenging !
I would move some question into another category, though.
For example:

Into "Everyone who writes code" category:

What is the difference between Dispose() and Finalize()
What is boxing ?
Is string a value or a reference type ?
Explain the use of virtual, sealed, abstract, override.
Explain the difference between public, private, protected and internal modifiers.
What is this ? Can it be used within static methods ?

Into "Mid-level developer":

What does this do? gacutil /l | find /i "Corillian"
Why is catch(Exception) almost always a bad idea?
Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?

Into "Senior developer":
When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?

Moreover, I think some questions cannot be easily assigned to one of the developer-level categories.
For example, you can ask:

What is the difference between OOP and SOA ?
-- or --
Contrast the use of an abstract base class against an interface.

to all kind of developers, and the answer you'll get will be very different according to the developer's knowledge.

I personally think that a senior developer will prove its deep knowledge of the .NET technology if he can provide a good answer to the two questions above, rather than if he knows what sn- t foo.dll does :-)

However, thanks for the good list, I'm going to study/review a few topics after I relized I could not provide a good answer to some of your questions !

Claudio


Tuesday, February 22, 2005 3:02:09 PM UTC
Scott,
The list is interesting, but I don't agree with your levels.
For example, "Can DateTimes be null?" or "Is string a value type or a reference type?" are things EVERYONE should know, because they are important to write code from day 0.

Also, I've been working for 3 years in .NET and never heard of Corillian. And, while I know what PIDs are, I don't think everybody needs them.

There are a lot of examples, but I think these ones are representative enough.
Diego Mijelshon
Tuesday, February 22, 2005 3:26:14 PM UTC
Getting to the point here - Okay so, if someone does know all the answers, how much $ can he ask for?
Tuesday, February 22, 2005 3:35:53 PM UTC
The list is challenging for sure. However I think that the mode of
thinking in using such lists lets talent slip through the cracks.
Einstein said to never memorize anything you can look up, so knowing
what gacutil /l | find /i "Corillian" does would, for me, start with
gacutil /?. I would guess that it would list all of Corillian's
assemblies in the gac, but I've never used gacutil before. Granted
I'm not a "great" .Net developer, just one learning to hopefully be
great one day.

Often times in the NFL quarter backs change teams and/or have to work
with new offensive cooridinators who have totally different offenses
than what the quarterback knows. If they brought in the quarterback
for an interview and started quizzing him on plays from their playbook
that he hadn't seen before, he could end looking terrible. However,
does he have the fundamental skills required by an NFL quarterback?
If so then he can probably quickly learn the new offense and be a
great player for the team.

Having said all of that, I'm going to learn everything on the list ;)
Jamin Guy
Tuesday, February 22, 2005 4:01:52 PM UTC
Haacked: " A truly great developer understands that construction is only a small portion of a project lifecycle."

Hard to overemphasize this point. One question I always ask in interviews goes something like this: "You've been told by the project sponser that the project absolutely has to be done in two months - commitments to major clients have been made, etc. etc. You know that's impossible, and that a minimum of six months will be needed. What do you do?"

There are several reasonable answers to this, depending on circumstances. But the tone and quality of the answer will tell you a lot about this person's understanding of the software development process.

Or if I were choosing between:

A) a young, motivated developer who can't answer the list very well, but has a great attitude and seems to have a good potential to learn

B) a whiz kid who knows all the answers but has the people skills of a snapping turtle and can give you a thousand reasons why everything that's ever gone wrong in his projects are "somebody else's fault"

I'm picking A every time.
Tuesday, February 22, 2005 5:50:01 PM UTC
> Getting to the point here - Okay so, if someone does know all the answers, how much $ can he ask for?

It's more like "how many years until all the developers in India memorize this list"?

What you should be asking is, "can I come up with a list like this?" Being able to answer all the questions is a red herring-- it won't save your job. People with the ability to *CREATE* the lists are the ones who will keep their jobs.
Tuesday, February 22, 2005 5:51:40 PM UTC
Billy, there are many correct answers to your question such as...

#1 I tell the project sponsor "No Problem!" and then quit the day before it's due to be delivered to QA."

#2 I tell the project sponsor "No problem. I've fortunately have the ability to bend space and time to conform to your warped sense of reality."

#3 I tell the sponsor to perform an anatomically impossible act and start verbally abusing the sales team.

#4 From that day forth, I would only speak in a long dead language like Aramaic and point fingers at my coworkers.

Be sure to give one of these answers in your next interview.
Tuesday, February 22, 2005 6:03:21 PM UTC
Haacked, interestingly enough, I recommended answer #1 in my first book when I discussed dysfunctional development environments. It's certainly true that sometimes circumstances put you in a situation in which you cannot succeed. And leaving is an honorable way out (presuming you are not breaking other existing commitments by doing so).

But some don't have as many options as others, and some may not be ready to write off an otherwise good position for one impossible demand. While we may gain some satisfaction using the flip answers #2 and #3 among ourselves, we have to face the fact that those outside the process simply lack the perspective to understand the limitations of software development. So attempts at education, while not succeeding as often as I'd like, are not totally pointless.

But I think we're probably close together in general concept, and here's a test to see. About three years ago, I ran across a book in a bookstore entitled "How to Survive a Death March Project". I started to pick it up, thinking, "I might get some interesting tips out of this." Then I came to my senses and put it down, realizing that I am NEVER going to allow myself to be involved in such a project again. Life's too short for such nonsense. In that in line with your thinking?
Tuesday, February 22, 2005 6:56:26 PM UTC
One of the headings: C# Component (HI, TP) Developers needs to be unbulleted so it pulls out like the ASP heading...
Chris Kinsman
Tuesday, February 22, 2005 8:09:25 PM UTC
Will you be posting the answers for those of us less fortunate of having the knowledge to complete your list?
phuturekrewhotmail.com (Aaron)
Tuesday, February 22, 2005 9:36:46 PM UTC
Scott (and everyone else), I want to thank you for reminding me that I still have TONS to learn! I've cancelled digital cable at my house and brought all my computer books upstairs. I've got a stack as tall as I am to read!
http://www.devcow.com/weblogs/PermaLink,guid,bf5f8170-969d-4e73-b2d2-86139ae8efed.aspx
Tuesday, February 22, 2005 11:42:04 PM UTC
I didn't expect this, but this fellow posted a bunch of the answers!
http://www.ayende.com/Blog/PermaLink,guid,b6e3e8ce-4a6e-4cf0-af70-d360be9e8c76.aspx
Wednesday, February 23, 2005 11:14:02 AM UTC
I don't see what all the flak is (especially when you did this last time). They seem like standard questions fo rme in knowledge of the areas.
Wednesday, February 23, 2005 3:52:42 PM UTC
I agree with several of the voices on this thread that you can't judge an applicant's competancy simply by her ability to answer a set of fact based questions any more than you can judge a person's intelligence by her ability to win on "Jeopardy!". Simply put, an individual's knowledge of facts is only one aspect of her ability to solve problems, it does not address the more important factors that go into making a good employee in general like:

1. How does she solve problems (as opposed to how does she regurgitate facts)?
2. How does she interact with others?
3. How does she deal with adverse situations?
4. How well does she communicate?
5. How well does she perform under pressure?
etc.

There are numerous factors that outweigh an individual's ability to memorize. Of course, knowing the answers to a set of questinos is useful since it *could* indicate experience in the topic area, but it is by no means a gauranteed method of finding a well rounded developer.
Wednesday, February 23, 2005 4:26:08 PM UTC
Hmm, the only three I couldn't answer are the ones listed below, and I'm talking about detailed insightful answers. In the XML, I couldn't provide the same level of insights but I gave reasonable answers.

* Can attributes be placed on specific parameters to a method? Why is this useful?

* What is cyclomatic complexity and why is it important?

* What does this do? gacutil /l | find /i "Corillian"

------------------

I have a question of my own that I've asked many sr. developers and friends and coworkers and architects but thus far, I haven't recieved the correct answer. If you look this up or try it out before you answer than you've cheated < giggles >.

In C#, what is the difference between passing an object by ref and by value? (Yes, there is an important difference, a difference that has caused days of debugging because of pre-disposed assumptions we have about it).

... No cheating. Whats the answer? ... Scott? Anyone? I'll post the answer in my next post.

Shawn B.
Wednesday, February 23, 2005 4:34:40 PM UTC
Okay,

First, Charles Chen sums up my sentiments quite well. I like to measure technical ability but teamwork is very important. Sometimes I have to compromise because good developers with a good attitude are very difficult to find, but for higher level positions its a requirement and there is no compromise.

I recently went to a new company (2 months ago) to be an archict and the Software Direct I reported to started when I started, but he had a very demeaning attitude and lots of micromanagement. When confronted about being micromanaged, he said if I don't like it I can leave. Well, I left and returned to my previous company (which I started at yesterday). He's been programming for 30 years. I've been doing it for only 15 (8 professionally, I don't could C-64/Apple IIe hacking professional).

When I interview, I put much less emphasis on what they know than I do on how they present themselves and how they solve problems and interact with other members of the team. Of course, I've not hired people before because I couldn't guage how they were technically because there is a certain minimum competance I expect. I don't want cowboys that will come in and do things their way or no way and re-write all the code because its not what they are used ito.

Anyway... the answer to my question above:

In C#, if you pass an object byval and set it to null, you are setting a copy of the pointer to null and not the object itself (being passed in). If you pass as ref, then set it to null in the function, then you are setting the actual pointer to null and everything else that points to it. In both cases your are passing a pointer into the function, but in one case you are passing the pointer itself, or a copy of the pointer. I don't think this is the same behavior in VB.NET but I haven't tested it.
Shawn B.
Wednesday, February 23, 2005 4:46:29 PM UTC
Not to nit pick Shawn, but they are "References" not "Pointers." They refer-to rather than point-to. I personally don't like hearing C# programmers use the term "pointer" in an interview (outside the unsafe context), and if they do, I want to better understand what they are thinking.

The question you asked is a mid-level to everyone-should-know question. VB.NET has similar semantics.
Scott Hanselman
Wednesday, February 23, 2005 4:53:15 PM UTC
This list is bullshit.

For starters, if someone did actually know the answers I WOULD NOT hire them. They would probably be a total wet noodle book worm with no interpersonal skills and creativity.

Also, there is nothing that would relate to real-world problem.

Also, most companies would not hire such a person that knew all the answers. He/she would probably want more money than what the job paid. He/she should work for MSFT or just write arcane books.

Oh, and BTW, most of these questions are trival information to make the author sound smart.
Ed
Wednesday, February 23, 2005 5:08:26 PM UTC
Good stuff Ed. Nice to not leave your email address, full name, or website. It adds credibility.

I'm glad the list makes me sound smart. It wasn't the intent, but a nice side effect according to you.

Thanks also for indicating the triviality of the list - I look forward to your follow-up posting of the answers.
Wednesday, February 23, 2005 5:26:43 PM UTC
Scott,

While I'll agree, the question isn't very advanced, but I've asked more people than I can count (I've guestimate) 50 or so over the last year and not one person has correctly answered the question. You didn't even answer it. And the terminology "pointer" I'll concurr is incorrect, old habbits die hard. Nonetheless, most people answer the question (in fact, I've even seen it in an MCSD study guide in the past this way too) that when you pass an object it passes a reference to the object (which is correct). But it never makes the distinction that if you pass an object as ref and set it to null in the method that you are actually setting the object to null everywhere (even outside the method) and if you pass it by value then you are only setting the local copy to null.

While everyone should know it, I've yet to encounter someone who has answered it correctly. You might be the exception (not being synical here) but everyone in person I've asked (which isn't many I'll admit) hasn't gotten it (even some prominant people in the community).
Shawn B.
Wednesday, February 23, 2005 5:33:48 PM UTC
Scott, I think this is a good list, much improved over the previous. It is thought provoking. No matter how much you *I* think you *I* know I found myself second-guessing when my answers were correct. I looked at the list just now of answers in the link provided, I have more detailed explainations perhaps I'll post. It is a fun excercise anyway, I like guaging my readiness. Anyway, thanks for posting these and the others.

Concerning Ed., I'm glad to know you wouldn't hire me because I probably wouldn't want to work for you (or someone with the attitude your project in your post). I could answer them and I guarantee I'm not being paid anymore than I'm worth but I won't accept a Jr. developers wage, either... I'm well beyond Jr. and can demonstrate very quickly.

I don't view these questions as a end-all-be-all for determining anything in an interview. But just because someone can answer them doesn't mean they have no interpersonal skills. When I interview, I dig deeper into the personality and teamwork skills than I do technical, unless they are applying for a technical position (Architect?). I expect people to know there stuff, I guage that by a mix of questions (like these posted) and problem solving and hands on troubleshooting.
Shawn B.
Wednesday, February 23, 2005 7:06:12 PM UTC
All,

While I disagree with the idea of this kind of list, I don't think that Scott is using this as his only criteria during an interview. At least I hope not. The big problem I have with these types of lists is that they are just facts devoid of context and don't provide any insight into a persons thought process (how hippie-esque of me to want insight into someones thought process).

I don't think it's nit-picky to correct someone who says "pointers" instead of "references" wrt .NET variables. ESPECIALLY if that someone had plastered ".NET Expert" on their resume as it's sitting in front of me. It's like calling your wife "my girlfriend". Although the two titles are similar, there is a WORLD of difference between the two. :)
Thursday, February 24, 2005 4:36:10 PM UTC
Unfortunately, someone who can answer all of these questions correctly would quite possibly be a terrible hire. You can't tell the difference between someone who knows all the answers to these questions because they've paid their dues in the trenches versus someone who has a great memory and has read a couple of C#/.NET books.

For a truly useful hiring guide, check out http://www.joelonsoftware.com/articles/fog0000000073.html

I also disagree with the basic premise that a great .NET developer ought to know these things. I'd rather have a problem solver than a Jeopardy! champ on my team any day.
James Osbone
Thursday, February 24, 2005 10:24:25 PM UTC
> I also disagree with the basic premise that a great .NET developer ought to know these things. I'd rather have a problem solver than a Jeopardy! champ on my team any day.

You guys miss the point (and you didn't see Scott's PREVIOUS list, which was FAR more Jeopardy-like, but I digress).

I don't think Scott is saying that every .NET developer should know the answer to *all* these questions.

A .NET developer working in these areas should have run into the topics covered by these questions, enough to at least understand the question and provide a reasonable response. That implies that they're thinking about what they are doing and asking "why does it work this way?" and "what other ways could I do this?"-- and that's much more useful. Those are the people you want to hire.

I talk more about this here:
http://www.codinghorror.com/blog/archives/000220.html
Thursday, February 24, 2005 11:32:40 PM UTC
What you don't get out of these questions are any of the intangibles. I have worked with people who could answer all of those questions who have the attention span of a gnat. So they run around with large egos doing what I think is the most fun (and hence often easiest because it is fun) 60-75% of development but leave the last part of actually *finishing* a software product to others (which I think is 95% of the work).

Ring a bell?
jack
Friday, February 25, 2005 4:52:55 PM UTC
I think it is possible for people to know the answers to all these questions especially if they are a consultant who at one point or another has been confronted with the need to know these answers. I'm sure Scott knows the answers as he wrote the questions. I know I was able to answer all but 3 of the questions but that is because I spend every waking hour of my life in a never ending quest to know more more more more and how and why things work.

The kinds of people who are likely to know the answer to more of these questions that the average joe are likely to be the kinds of people who have to constantly know how things work at a deep level, people who don't just do it because its a job, but rather a passion. I can't speak for everyone on that so don't take it as an over-generalization. I realize good people can be swamped.

I guess my point is that I wouldn't be scared if someone knew all the answers. But really, what is more important than anyone who can answer the questions, is how well they work on a team, their attitude, and how they approach problem solving (especially complicated problems). However, whether they read the answers in a book or learned it by experience, is somewhat minor. Some of what I know I read in books and trade magazines and online. Much of what I know I learned by experience. At some point, what I've learned will connect with what I'm actually doing. In many cases, what I've learned by reading but not doing, I've been able to assist other people in their problem solving.

What's important is that they understand conceptually (with regards to answering a list of questions) and not by fact-memorization otherwise indeed, the knowledge would be mostly useless.

But with all interviews questions, they shouldn't be the reason for hiring/not hiring, but only as a guide. There are so many more aspects to measure in a candidate than technical ability. I would even hire someone who couldn't answer most of these questions, if they were an otherwise motivated, good-attitide person, and want to achieve more than they can imagine. After all, that sounds a lot like me and I've accomplished some amazing things. And some of those things I accomplished while not being able to answer any of these questions. At some point we need to learn, and we are always learning because no one knows it all.
Shawn B.
Friday, February 25, 2005 5:04:56 PM UTC
Those who object to the questions are missing a point. Did Scott say that people who couldn't answer the questions would not be hired? Take for example the person who posted some answers to them... for one he wrote "What does this do? sn -t foo.dll
Does something to the strong name of the dll, probably show you the details of it, don't recall sn's CUI in my head. " This is a GREAT answer. It shows that you at least know what sn is for, and that backs up your claim that you're an enterprise .NET developer (well if you had no idea what sn was, or couldn't show me that you did, should I hire you?) If the person went on to say "I can fire up a dos box and go sn ? to see the options" then that shows me the person has actually used sn at least once (knows it runs at a command prompt) and knows how to look stuff up. That's actually different than someone who says they would Google for it.

Hire for attitude, train for skills... but the attitudes I want include "fast learner", "excited by our technologies", "knows where to look stuff up" and "remembers a lot of details." These questions serve as an opportunity to illustrate those attitudes.

Here's another example: during a code review of an ASP.NET system, you discover that a number of different pages are storing unrelated values in viewstate under the key "id". For example one page puts the customer is in viewstate("id"), another the employee id, and so on. What would you recommend be done?

How a candidate answers this will reveal technical experience as well as team dynamics and what kinds of process they like.
Friday, February 25, 2005 7:01:02 PM UTC
Heck, I don't even know what CUI stands for. Had to Google it.

<-- will never get hired by Scott H now. ;)
Saturday, February 26, 2005 5:46:34 AM UTC
Good questions, Scott. I totally agree with someone who posted a comment here that the people who can come up with the questions like these are the real skillful ones. That being said, I translated your questions for everyone into Japanese and answered them.

I picked two basic questions from your blog yesterday and asked them of an interviewee at my company. I asked him the difference between a process and a thread. He went, "Well, you know... there are so many classes in .NET Framework..." As you can tell by now, the guy didn't get the job. Of course, that's not the only reason why we didn't hire him, but I didn't like the fact that he didn't even attempt to answer the question. And it seems to be a very basic question to me if you have a B.S. degree in computer science, which his resume stated. (I have B.A. degree in education...)
Saturday, February 26, 2005 5:47:27 AM UTC
Good questions, Scott. I totally agree with someone who posted a comment here that the people who can come up with the questions like these are the real skillful ones. That being said, I translated your questions for everyone into Japanese and answered them.

I picked two basic questions from your blog yesterday and asked them of an interviewee at my company. I asked him the difference between a process and a thread. He went, "Well, you know... there are so many classes in .NET Framework..." As you can tell by now, the guy didn't get the job. Of course, that's not the only reason why we didn't hire him, but I didn't like the fact that he didn't even attempt to answer the question. And it seems to be a very basic question to me if you have a B.S. degree in computer science, which his resume stated. (I have B.A. degree in education...)
Saturday, February 26, 2005 5:48:51 AM UTC
Sorry for the duplicate messange and here is the URL where I translated your questions into Japanese.
http://www.vbaspcoder.com/PermaLink,guid,dc1d767c-f102-4747-aaa6-6e09c3bf98be.aspx
Tuesday, March 15, 2005 7:14:51 PM UTC
In my experience giving candidates strait quiz questions rarely finds good people. It only takes one or two of these questions to tell if someone lied on their CV asking many more is futile and tends to make candidates nervous and defensive.

You can usually teach people most of these technology skills anyway if they lack them, it is much harder to teach them general problem solving skills that stand the test of time.

Scott Berkun gives a different view of what to ask in this essay: http://www.scottberkun.com/essays/essay39.htm

Follow this and you are more likely to get at a candidates soft skills which are so important when building a team.
Friday, March 18, 2005 5:12:24 AM UTC
Billy, yes, that is inline with my thinking. That's why I'm independent now. ;)
Sunday, March 20, 2005 10:23:21 PM UTC
Way cool brain teasers.

Is there an answer key somewhere?
Saturday, April 02, 2005 10:06:56 AM UTC
This list confirms my expectations of .NET developers. It points to a culture where memorization of the minutia of a very poorly-designed API is considered a virtue, and elegance is simply unheard of.

Until your organization begins to select people on the basis of their ability to *invent*, and *imagine* a creative solution to an open-ended question, it will be more of the same old, same old.

Face it: "great .NET developer" is as much of an oxymoron as "Windows XP Security". Great developers don't tolerate the platform on which .NET runs.
J. Random Poster
Wednesday, April 20, 2005 7:27:32 AM UTC
OK, I give up... What is the difference between typeof(foo) and foo.GetType()?

Obviously typeof operates on types and .GetType() works for instances but is there anything else? Something more magical? I'm hoping typeof() is quicker because it *could* be evaluated at compile time or something?
Josh Twist
Tuesday, April 26, 2005 12:57:39 AM UTC
Lists like this are pointless and are of no value to ANYONE. You can create a million lists like this and still be no closer to the end... such is the complexity of the framework.

Understanding processes and architectures are key, not specific questions on xml libraries for eg.... because they are always in flux.
fuckmeupthegoatass
Sunday, July 17, 2005 7:15:34 PM UTC
Hi,

I have an interview next week. Can you please post some sample interview questions on .NET? I found a few sites below that have some questions, but need a few more samples to feel confident!

http://techinterviews.com

http://www.interviewboard.com

Thanks.

- Prashant
Prashant
Thursday, November 03, 2005 6:25:11 PM UTC
Why is it, for being more of a mid-level developer (4 years), I know more answers to Senior-level questions than the mid-level ones? :0
d
Friday, December 02, 2005 8:05:59 PM UTC
Hey thanks scott :)

i have an interview next week..
let me ask u these questions (to clear my mind :) )

which one of these will u prefer as an answere from an interviewee:
1> Textual answere
2> Practical answere
3> Mixture of both
4> or a confident bluff (not always, but at some instances)

what impresses u most in an interviewee?
attitude( &/or confidence) or knowledge level

How was ur first interview? ( ;) )

(well , i cant think of anymore questions right now, i will be asking as soon as they come ;) )

i think the questions framed are good and covers most of the knowledge level one expects from a s/w developer (at their specific levels)