每个优秀的.NET开发人员应该能够回答的问题?

时间:2008-12-13 17:47:34

标签: .net

我的公司即将雇用 .NET开发人员。我们在各种.NET平台上工作:ASP.NET,Compact Framework,Windowsforms,Web Services。我想编制好的问题列表/目录,这是一种最低标准,以确定申请人是否有经验。所以,我的问题是:

您认为 .NET程序员能够回复会有什么问题

我自己也会将其视为核对清单,以便了解我自己的缺陷(有很多......)

alt text

*更新:它希望明确表示我们不仅仅测试.NET知识,而且解决问题的能力和一般编程技能对我们来说更为重要。

25 个答案:

答案 0 :(得分:171)

答案 1 :(得分:135)

我在Scott Hanselmanblog上找到了这些列表:

以下是我认为这些帖子中最重要的问题,分为几类。我编辑并重新安排了它们。幸运的是,对于大多数这些问题,Stack Overflow已经有了一个很好的答案。只需按照链接(我将尽快更新它们)

与平台无关的.NET问题

ASP.NET

答案 2 :(得分:94)

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

例如,我不是Compact Framework的人,所以如果你走向那个方向我可能会失败。但如果我需要使用它,我可以做一些研究并直接进入。

Joel的书Smart and Gets Things Done,对招聘开发者有很好的建议,并且有很多关于要问的问题。我强烈推荐它。

答案 3 :(得分:66)

我想如果我正在采访有LINQ经验的人,我可能只是要求他们解释LINQ。如果他们可以解释延迟执行,流式传输,IEnumerable / IEnumerator接口,foreach,迭代器块,表达式树(无论如何),那么他们可以应对其余的。 (不可否认,他们可能是“好”的开发人员而不是“获得”LINQ - 我真的在考虑他们声称知道足够的LINQ以使其成为公平问题的情况。)

过去我曾经问过几个已经列出的问题,还有一些问题:

  • 参考和价值类型之间的差异
  • 通过引用传递vs按值传递
  • IDisposable和终结者
  • 字符串,不变性,字符编码
  • 浮点
  • 代表
  • 泛型
  • Nullable types

答案 4 :(得分:42)

我和那些正在寻找解决问题能力的人在一起,而不是那些你可以从'101顶级.NET面试Qs和As'中查找和记忆的东西。

仅仅举个例子,我倾向于“知道”我每天需要使用的东西。我倾向于忘记(以后必须重新查找)我很少使用的东西。

如果你想在面试中绊倒我,那将非常容易。

尽管如此,我已经为一个系统构建了大部分基础架构,并为其WinForms和ASP.NET版本使用相同的Business Objects和Data层,我们的代码库非常强大且可重用,足以让我们能够支持和开发20多个不同配置版本的网站,以及越来越多(目前为5个)WinForms应用程序......

......由两个开发团队组成。

我曾经在一个团队中担任技术主管,我的工作涉及很多招聘和面试。我最大的错误就是雇佣了一个比我们所有其他人都更了解我们使用的技术的人,包括我,我认为自己是一名专家。他知道一切......

...除了如何编写满足要求的代码,或者除了他自己以外的任何人都可以理解的代码。当我最终说服总理不续签合同时,他写的每一件事都必须重写。

明智地构建你的访谈......

答案 5 :(得分:34)

Jon Skeet是谁?

答案 6 :(得分:33)

我被问过的好问题是

  • 您认为关于.NET的内容是什么?
  • 您认为关于.NET的错误是什么?

看看候选人会想出什么会很有趣,你肯定会对他/她如何使用这个框架有所了解。

答案 7 :(得分:18)

我总是会自己寻找软技能 - 没有双关语意。如此优秀的OO设计,测试驱动的开发,良好的多语言(编程)语言背景和全面的通用智能(以及完成事情 - 我猜测!)。

智能开发人员在学习您需要他们知道的各项技术时应该没有任何问题,即使他们以前从未查看过它们 - 所以我不会过多担心围绕WCF / compact框架等的具体问题

我会让他们写一些代码 - 找出他们所知道的以及他们如何运作的最好方法。任何人都可以记住“参考类型和值类型之间有什么区别?”的答案。

答案 8 :(得分:13)

实话?

“什么是.NET?”

如果他们可以给你一个明确的答案,那就是.NET是什么,不是什么,它是如何使用的,它由哪些元素组成......等等......如果他们能说服你知道它是什么,那么他们很有可能很清楚这一点。

事实是,许多人并不真正知道.NET是什么。甚至那些为它编写程序的人。

答案 9 :(得分:11)

没有,真的。可能有一些非常简单的问题,世界上最聪明的人都不知道答案。不是因为它们很难,而仅仅是因为它们没有碰到它。您应该查看整个软件包和开发人员的技能,而不是他们是否可以回答任意问题。

如果问题很容易用一两句话来回答,那么告诉不认识的人很容易。您应该寻找他们对概念和推理能力的理解,而不是他们回答“每个.NET开发人员应该能够回答的问题”的能力。

答案 10 :(得分:10)

了解参考和价值类型之间的区别。

知道事件存储为硬引用(即记得取消注册事件或应用程序会泄漏内存)。

字符串是不可变的。

答案 11 :(得分:6)

Martin Fowler prefers design skills over platform knowledge。另一方面,您可以提出一个问题,它将显示设计模式和.NET平台的知识,如下所示:

  • 您知道的名称设计模式和原则以及如何在.NET Framework中使用它们?

答案 12 :(得分:4)

我建议询问他们定期阅读的博客以及他们所做过的个人编程项目,因为这将显示出学习的意愿和对编程的热情。

答案 13 :(得分:3)

“哪个ASP:你在生产中使用的控件是什么?为什么?”

这将很快告诉你,你的主题是否真的已经建立并维护了一个大型项目足够长的时间,以便被DataGrids和LinkBut​​ton焚烧,或者他是否还在拖拽/拖放“在21天内自学”阶段。< / p>

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

答案 14 :(得分:3)

以下是一些我用来过滤程序员申请C#程序员的工作:

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

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

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

答案 15 :(得分:2)

这很有意思,并且冒着被我投票放在首位的风险,因为我天生聋,被问到这样的问题需要更多努力来表达我个人的想法。

说实话,我真的不会读太多典型的问题,因为潜在的范例是'你能用多少声音表达你的想法和理解?',这就是面试官在寻找。沟通总是我最大的弱点,因为我的方式很容易让人感到沮丧。

拥有知识并且知道所有类型是理想的但不幸的是,有一些我不知道的事情,但如果你真的不知道答案并承认它,不要害怕而不是虚张声势。如果一位面试官问我上面提到的一个问题,我不会确定或误解/误解这个问题,我会提前说出来,这可能是个人尴尬,但已经学会了解决这个问题。

你会感到惊讶的是,实际上会有多少人在胡扯和虚张声势,在一天结束的时候,他们会以他们的“裤子”来比喻说出来。

我的2点, 最好的祝福, 汤姆。

答案 16 :(得分:2)

我将建议一些问题,重点是使用dotnet来理解编程概念,如

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

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

答案 17 :(得分:2)

这是一个变量问题,而不是现在应该能够完全回答的问题,但是你应该能够在适当的时候回答:

“.NET框架为完成任务X提供了什么?”

或更具体地说:

“.NET框架是否包含一个执行X的对象?”

例如,我最近花了几个小时开发一个优化的对象来存储一个布尔数组并对其进行操作,例如进行收集方式NOT,OR,XOR,AND,设置所有值等。直到我完成所有单元测试并调整它以获得最佳性能之后,才意识到我的“BoolArray”对象已经存在于.NET框架中,名称为“BitArray”。

这可能是一个难以回答的问题,因为很多时候关于使用什么对象/帮助者的最佳答案是您不了解或完全理解的问题。如果每个人都真正了解简单的StringBuilder,这个基本工具可以提高性能,那么.NET世界将会是多么美妙。

答案 18 :(得分:2)

什么是线程?

什么是GC?

答案 19 :(得分:2)

我不会问那些“从教科书中得到一些东西”的问题,而是要问一些修补的东西,比如:

  • foreach循环在普通C#中做了什么? (期待他编写一个迭代器循环。)
  • 什么是单身人士?
  • 让他/她解析String to Datetime(期望他/她使用TryParse而不是try / catch)
  • 实施单身人士,战略和命令模式
  • 让他/她重构一段代码进行测试。期待他/她将外部服务从被测单元中抽象出来并实现他自己的测试双重服务(不提供模拟框架)

这些并非100%肯定,具体取决于我可能会问他们的人:

  • 让他/她保护一个来自null输入的方法(期望他/她使用多个返回来减少嵌套)
  • 对象初始化程序如何工作(期望他/她编写线程安全的分配)

此外,我会问他他/她是如何学习他/她的东西以及他/她正在阅读的内容(博客,书籍)。

答案 20 :(得分:2)

还有一些:

  1. 部分课程。它的局限性?
  2. 密封课程
  3. 如何在.NET中完成本地化?
  4. 数据库连接
  5. 各种配置文件
  6. 代表与活动
  7. 非托管dll访问
  8. 思考
  9. 通用类
  10. .NET 3.5中最热门的
  11. 您使用的单元测试框架。

答案 21 :(得分:2)

除了已经提到的一些问题之外,我还喜欢以下内容:

  • 什么是代表?
  • 应用域名是什么?
  • 您何时会使用lock关键字?
  • 标准库通用集合类是否安全?
  • 什么是扩展方法?
  • XmlDocument和XmlReader之间有什么区别?
  • 如何从应用程序配置文件中读取配置设置?

答案 22 :(得分:1)

还有一些:

垃圾收集的限制是什么。

了解终结者和IDisposable。

请注意线程池以及何时使用它。

如果您正在进行GUI应用程序 - 请注意Windows GUI是单线程的。

使用foreach(我看到很多人在做MoveNext等)。

答案 23 :(得分:1)

我认为这不应该仅仅是问题,我知道有几个人在采访他们时很聪明,但是一旦他们得到真实的东西,他们就是太完美主义者,我会说他们无法对这项任务进行悲惨的编码。

我曾经接受过采访,我有点喜欢第一位雇主给我一份技术问卷填写30分钟的方法。如果一个人成功,那么他将被要求进行1小时的面试,内容涉及人格判断和角色发现问题以及技术术语。

然后我被要求在6小时内开发一个三页的Web应用程序。应用程序中的约束巧妙地涵盖了应用程序开发的主要方面,如小型ERD,分层设计,UI一致性,控制特定问题,如在GridView中使用单选按钮,在网页上获取和显示数据库中的图像类型,一个算法开发,安全性,加密,散列,数据表示和操作。

然后第二天,他们对开发的应用程序进行了30分钟的讨论,讨论了性能瓶颈领域以及设计和使用算法的改进。 1小时可选测试,以改善您在上一步中开发的具有特定条件的算法。

所以花了相当多的时间,但这样你就可以确保你招聘的人至少知道那些对优秀开发者来说必不可少的概念。

答案 24 :(得分:0)

我更愿意给他一个问题并要求他使用你知道的.net的功能解决它,为什么你认为这是最好的解决方案。

这将破坏候选人在技术,分析和解决问题技能方面的几乎所有能力以及他解决问题的方法。