我的公司即将招聘 .NET 开发人员 。我们在各种 .NET 平台上工作:ASP.NET、Compact Framework、Windowsforms、Web 服务。我想编制一份好问题的清单/目录,这是一种最低标准,看看申请人是否有经验。所以,我的问题是:
*您认为优秀的 *.NET 程序员应该能够回答 哪些问题 ?
我也将其视为我自己的 清单 ,以便了解我自己的缺陷在哪里 (有很多......) 。
*更新:要明确的是,我们不仅仅测试 .NET 知识,解决问题的能力和一般编程技能对我们来说更为重要。
基本问题包括:
我认为要求您的申请人完成一个简单的编码练习通常会有所帮助,例如:
接下来,寻找具体的技术诀窍:
对于一个熟练的 C# 程序员来说,这些都不是特别难回答的问题,它们应该让你很好地了解你的申请者的特殊优势。您可能还想处理一些使用特定设计模式的问题/代码示例。
[编辑澄清] :
似乎很多人不明白我为什么要问这些类型的问题。让我谈谈一些人的评论(我不是直接引用,而是转述):
问: 最后一次有人使用 volatile 或弱引用是什么时候?
答: 当我进行技术面试时,我会看一个人是否了解 .NET 的高级 和 低级特性。易失性和弱引用是 .NET 提供的两个低级特性——即使这些特性在实践中不经常使用,这些问题的答案也非常具有启发性:
对 volatile 的良好理解表明,一个人了解编译器优化如何改变代码的正确性,线程如何保留在任何给定时间可能不同步的共享状态的本地副本,并且对多线程代码的某些复杂性知之甚少.
对弱引用的良好理解表明人们了解垃圾收集器的内部细节以及它如何决定何时释放内存。当然,你可以问候选人“垃圾收集器是如何工作的”,但询问弱引用会得到更好、更周到的回答。
.NET 是一种相当抽象的语言,但明星开发人员几乎总是对 CLR 和 .NET 运行时的低级细节有深入的了解。
问: 为什么有人需要实现自己的哈希表或链表?
答: 我并不是说 Dictionary 类是劣等的,或者人们应该滚动他们自己的哈希表。这是一个基本问题,它测试一个人是否对数据结构有 最低限度的 了解。这就是这些问题所要测试的:最低限度的理解。
你在数据结构 101 的第一天就了解了这些哈希表和链表。如果有人不能从头开始编写哈希表或链表,那么他们的技术知识就有 很大 的差距。
问: 为什么这些问题如此粗俗?
答: 因为这个帖子的标题是“每个优秀的 .NET 开发人员都应该知道的问题”。每个 .NET 开发人员的职业生涯都是从编写 crud 应用程序开始的,而 90% 的应用程序开发人员都与业务线应用程序有关。
我认为在大多数情况下,测试一个人对业务线应用程序知识的问题是合适的,除非您正在寻找非常特定领域的开发人员,例如编译器开发、游戏引擎开发、定理证明、图像处理等.