我的公司即将招聘。net开发人员。我们在各种。net平台上工作:ASP。NET,紧凑框架,windows窗体,Web服务。我想整理一份好问题的清单/目录,这是一种衡量应聘者是否有经验的最低标准。我的问题是:

你认为一个优秀的。net程序员应该能够回答哪些问题?

我也会把它看作是我自己的一张清单,以便看到我自己的缺陷在哪里(有很多……)

*更新:它想要明确的是,我们不仅仅测试。net知识,解决问题的能力和一般的编程技能对我们来说更重要。


当前回答

我将提出一些问题,重点是理解使用dotnet之类的编程概念

托管环境和非托管环境之间的区别是什么? GC的利弊 JIT的利弊 如果我们需要开发应用程序X,我们可以使用dotnet吗?为什么?(这将确定他如何看待dotnet)

我还建议写一些小方法,让他用更好的dotnet类或标准方法重写它们,使它们具有更好的性能。 也写不正确的方法(在任何方面)逻辑或其他,并要求他纠正它们。

其他回答

我在Scott Hanselman的博客上找到了这些列表:

伟大的。net开发人员应该知道什么(更多。net面试问题) ASP。NET面试问题

以下是我从这些文章中归纳出来的最重要的问题。我编辑并重新编排了它们。幸运的是,对于这些问题中的大多数,在Stack Overflow上已经有了很好的答案。只要按照链接(我会尽快更新它们)。

与平台无关的。net问题

What is the difference between a thread and a process? What is the difference between an EXE and a DLL? What is strong-typing versus weak-typing? What is the difference between a.Equals(b) and a == b? What is boxing? Is string a value type or a reference type? What is the Global Assembly Cache (GAC)? What problem does it solve? What is an Interface and how is it different from a Class? What is Reflection? Conceptually, what is the difference between early-binding and late-binding? When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate? What is an Asssembly Qualified Name? Is it a filename? How is it different? How is a strongly-named assembly different from one that isn’t strongly-named? What does this do? sn -t foo.dll 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()? (external article) What is the difference between in-proc and out-of-proc? What technology enables out-of-proc communication in .NET? What is FullTrust? Do GAC’ed assemblies have FullTrust? 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? 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 the purpose of XML Namespaces? What is the difference between an XML "Fragment" and an XML "Document"? (XML Basics) How would you validate XML using .NET?

ASP。网

What is a PostBack? What is ViewState? How is it encoded? Is it encrypted? Who uses ViewState? Why is it either useful or evil? What Session State providers are available in ASP.NET? What are the pros and cons of each? What is the OO relationship between an ASPX page and its CS/VB code behind file? 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)? What are HttpHandlers? What are HttpModules? 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? How do cookies work? What is an example of Cookie abuse? What kind of data is passed via HTTP Headers? How does IIS communicate at runtime with ASP.NET? Where is ASP.NET at runtime in the different versions of IIS (5 to 7)?

这可能不是你想听到的,但我建议不要关注狭隘的技术,而是一般的编程和解决问题的技能。扎实的开发人员可以快速学习您想让他们做的任何事情。

举个例子,我并不是一个支持紧凑框架的人,所以如果你这么做的话,我可能会让你的面试失败。但如果我需要使用它,我可以做一些研究,然后直接投入。

Joel的书《Smart and Gets Things Done》为招聘开发者提供了很好的建议,其中有大量关于该问哪些问题的内容。我强烈推荐它。

我和那些寻找解决问题能力的人一样,而不是那种你可以从101个顶级。net面试问答中查找和记忆的东西。”

以我自己为例,我倾向于“知道”我每天需要使用的东西。我倾向于忘记(后来不得不重新查找)我很少使用的东西。

如果你想在面试中戳穿我,那很容易。

尽管如此,我已经为一个为WinForms和ASP使用相同的业务对象和数据层的系统构建和编码了大部分基础结构。我们的代码库足够健壮和可重用,我们能够支持和开发20多个不同配置的网站版本,以及越来越多的WinForms应用程序(目前是5个)……

... 两个人的开发团队。

我曾在一个团队中担任技术主管,我的工作涉及大量的招聘和面试。我最大的错误就是雇佣了一个对我们正在使用的技术了解得比我们其他人加起来还要多的人,包括我,而我认为自己是一个专家。他什么都知道……

... 除了如何编写满足要求的代码,或者除了他自己之外任何人都能理解的代码。当我最终说服首相不再续约时,他写的每一篇文章都必须重写。

明智地安排面试……

“你会在生产中使用ASP中的哪一种控制,为什么?”

这将很快告诉你,你的对象是否曾经真正构建和维护过一个大项目,以至于被datagrid和LinkButtons弄得精疲力竭,或者他是否仍处于“21天自学”的拖放阶段。

(答案是asp:Repeater, asp:PlaceHolder, asp:Literal和asp:Content)

以下是我用来筛选c#程序员职位的程序员的一些方法:

引用类型和值类型之间的区别是什么?

解释IDisposable接口,c#语言构造需要它,以及如何实现它。

如果将null作为参数传递给具有不允许该参数为空的契约的方法,您将抛出哪个异常?