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

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

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

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


当前回答

基本问题包括:

Whats the difference between an abstract class and interface? When would you want to use them? What's the difference between a left join and an inner join? What's the difference between viewstate and sessionstate? What's the difference between overriding and overloading a method? Explain how both are done. What's the difference between protected and internal? What about "protected internal"? How do short-circuited operators work? Explain what the StringBuilder class is and why you'd want to use it? What's the difference between a static method and a non-static method? What does the "volatile" keyword in C# mean? Explain what happens when you pass a "ref" or "out" parameter into a method. What's the difference between those two keywords? What's a weakreference? When would you want to use one? What's the difference between a DataTable and a DataReader? What's the difference between a value-type and a reference type? What does the "readonly" keyword in C# mean?

我认为要求申请人完成简单的编码练习通常会有所帮助,例如:

Write your own linked list class without using the built-in classes. Write your own hashtable class without using the built-in classes. Write a class that represents a binary tree. Write a method that traverses all nodes of the tree. Write a method to perform a binary search on an array without using built-in methods. Draw a database schema for a blog. Each user only has one blog, each blog has many categories, each category has many posts, and each post can belong to more than one category. Ask your applicant to write queries to pull specific information out.

接下来,寻找具体的技术诀窍:

(Event handlers) Create a class with a custom event handler, create another class which hooks onto the custom event handler. (XML) Load an XML document and select all of the nodes with properties x, y, and z. (Functional programming) Create a function that accepts another function as a parameter. A Map or Fold function works really good for this. (Reflection) Write a function which determines if a class has a particular attribute. (Regex) Write a regular expression which removes all tags from a block of HTML.

对于一个熟练的c#程序员来说,这些问题都不是特别难回答的,它们应该能让你很好地了解申请人的特殊优势。您可能还想使用一些使用特定设计模式的问题/代码示例。

[编辑澄清]:

似乎很多人都不理解我为什么会问这些问题。让我来谈谈一些人的评论(我不是直接引用,而是转述):


问:上一次有人使用挥发物或弱引用是什么时候?

答:当我进行技术面试时,我会看一个人是否理解。net的高级和低级特性。volatile和弱引用是。net提供的两个低级特性——即使这些特性在实践中不经常使用,这些问题的答案也非常具有启发性:

A good understanding of volatiles demonstrates that a person understands how compiler optimizations change the correctness of code, how threads keep local copies of shared state which may be out of sync at any given time, and is minimally aware of some of the complexities of multithreaded code. A good understanding of weak references demonstrates that a person knows about the intimate details of the garbage collector and how it decides when to free memory. Sure, you could ask candidates "how does a garbage collector work", but asking about weak references gets a much better, more thoughtful reply.

. net是一种相当抽象的语言,但明星开发人员几乎总是对CLR和. net运行时的底层细节有深刻的理解。


问:为什么每个人都需要实现自己的哈希表或链表?

答:我并不是在暗示Dictionary类是劣等的,或者人们应该滚动自己的哈希表。这是一个基本问题,测试一个人是否对数据结构有最低限度的理解。这就是这些问题要测试的:最低限度的理解。

在数据结构101课程的第一天,您将了解这些哈希表和链表。如果有人不能从头开始编写哈希表或链表,那么他们在技术知识方面存在巨大的差距。


问:为什么这些问题都与原油有关?

答:因为这篇文章的标题是“每一个优秀的。net开发人员应该知道的问题”。每个。net开发人员的职业生涯都是从编写糟糕的应用程序开始的,而90%以开发应用程序为生的人都与业务线应用程序有关。

我认为在大多数情况下,测试一个人对业务线应用程序的知识是合适的,除非你在寻找非常特定领域的开发人员,如编译器开发、游戏引擎开发、定理证明、图像处理等。

其他回答

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

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

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

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

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

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

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

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

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

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

明智地安排面试……

诚实?

“什么是。net ?”

如果他们能给你一个明确的答案,关于。net是什么,不是什么,它是如何使用的,它是由什么元素组成的,等等……如果他们能让你相信他们知道这是什么,那么他们很有可能非常了解。

事实上,很多人并不真正知道。net是什么。甚至包括那些为它写程序的人。

还有一些:

局部类。那么它的局限性呢? 密封类 如何在。net中进行本地化? 数据库连接 各种配置文件 代表vs事件 非托管dll访问 反射 泛型类 .NET 3.5最热 单元测试框架。

了解引用类型和值类型之间的区别。

要知道事件是作为硬引用存储的(也就是说,要记得取消事件注册,否则应用程序将会泄漏内存)。

字符串是不可变的。