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

spl*_*tne 246 .net

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

您认为一个优秀的.NET程序员应该回答什么问题

我也将它视为自己的清单,以便了解我自己的赤字在哪里(有很多......).

替代文字

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

Jul*_*iet 171

基本问题包括:

我认为通常有助于您的申请人完成一个简单的编码练习,例如:

  • 编写自己的链表类而不使用内置类.
  • 编写自己的哈希表类而不使用内置类.
  • 编写一个代表二叉树的类.编写一个遍历树的所有节点的方法.
  • 编写一种方法,在不使用内置方法的情况下对数组执行二进制搜索.
  • 为博客绘制数据库架构.每个用户只有一个博客,每个博客有很多类别,每个类别有很多帖子,每个帖子可以属于多个类别.请求您的申请人撰写查询以提取具体信息.

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

  • (事件处理程序)使用自定义事件处理程序创建一个类,创建另一个挂钩到自定义事件处理程序的类.
  • (XML)加载XML文档并选择具有属性x,y和z的所有节点.
  • (函数式编程)创建一个接受另一个函数作为参数的函数.地图或折叠功能对此非常有用.
  • (反射)编写一个函数,确定一个类是否具有特定属性.
  • (正则表达式)编写一个正则表达式,从HTML块中删除所有标记.

对于熟练的C#程序员来说,这些都不是特别困难的问题,他们应该让您对申请人的特殊优势有所了解.您可能还想使用一些使用特定设计模式的问题/代码示例.

[编辑澄清]:

似乎很多人不明白为什么我会问这些类型的问题.让我谈谈几个民族的评论(我不是直接引用,而是代言):


问:最后一次使用挥发物或弱参考时间是什么时候?

答:当我进行技术访谈时,我会看一个人是否理解.NET 的高级低级功能.Volatiles和弱引用是.NET提供的两个低级功能 - 即使这些功能在实践中不经常使用,这些问题的答案也极具启发性:

  • 对volatile的一个很好的理解表明,一个人理解编译器优化如何改变代码的正确性,线程如何保持共享状态的本地副本,这些副本在任何给定时间都可能不同步,并且很少意识到多线程代码的一些复杂性.

  • 对弱引用的充分理解表明,一个人知道垃圾收集器的私密细节以及它如何决定何时释放内存.当然,你可以问候选人"垃圾收集器是如何工作的",但询问弱引用会得到更好,更周到的回复.

.NET是一种相当抽象的语言,但是明星开发人员几乎总是对CLR和.NET运行时的低级细节有深入的了解.


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

答:我并不是暗示Dictionary类是劣等的,或者人们应该推出自己的哈希表.这是一个基本问题,它测试一个人是否对数据结构的了解最少.这就是这些问题所测试的内容:最低限度的理解.

您将在数据结构101的第一天了解这些哈希表和链接列表.如果有人无法从头开始编写哈希表或链表,那么他们的技术知识就会有很大差距.


问:为什么这些问题如此严重?

答:因为这个主题的标题是"每个好的.NET开发人员应该知道的问题".每个.NET开发人员都开始编写crud应用程序的职业生涯,并且90%的所有应用程序开发人员都致力于生产线应用程序.

我认为在大多数情况下测试人员对业务线应用程序知识的问题是合适的,除非您正在寻找具有特定利基的开发人员,例如编译器开发,游戏引擎开发,定理证明,图像处理等. .

  • 此列表中的一半项目是琐事问题.这对于找到好人来说无济于事,但是可能会让他们中的一些人厌烦地走出你的面试. (39认同)
  • 同样,我从未声明变量"Volatile"并且对XML做的很少,因此无法完成编程任务.然而 - 我是一位出版作家,赢得了一个主要的编程竞赛,并撰写了4个成功的产品,赢得了重要奖项. (33认同)
  • 因此,我不一定不同意你的清单 - 我只是不同意你对知识项目的描述为"基本".没有*硬*概念 - 但有些是非常具体的,并且对许多申请人来说并不熟悉.还是 - 再次 - 请接受我的道歉. (24认同)
  • `(正则表达式)编写一个正则表达式,从HTML块中删除所有标签. - **I SMELL TROUBLE** (15认同)
  • 我认为你的清单是探索优势和劣势的好方法,但它不是"基本"知识.正如格雷格指出的那样,我被"短路"操作员绊倒了,即使它们很简单,我经常使用它们:我刚刚忘记了这个名字.这会让我失去资格吗? (8认同)
  • 每次采访我都有.NET职位,其中包括:"string和StringBuilder有什么区别?" 和/或"你什么时候使用string vs. StringBuilder?" (6认同)
  • 他们大多看起来相当体面; 我不太相信的一个领域是"写一个哈希表",因为很多人都不需要这样做.询问数据结构更重要的是它们的性能/内存特性以及它如何影响它们的使用(恕我直言). (4认同)
  • 我会说这是一个荒谬的愚蠢名单.我不想为你工作! (4认同)
  • 我同意列表中的一些问题,绝对是基本的...但是其他人,比如volatile,xml,反射等,开发人员最近需要处理这些功能.几乎没有人在这些主题中工作至少6个月都很容易忘记API. (4认同)
  • 公主 - 我为粗鲁而道歉.让我更清楚地总结一下我的观点.在进行了大量的面试之后,我认为50位开发人员中没有一位会正确回答您的所有问题.添加所有编程任务根本不实用:它只需要太长时间. (3认同)
  • 我一直使用if(blah == null || blah.length == 4){}并且我知道如果满足第一个条件,编译器将不会费心测试第二个条件.我从来不知道它被称为"短路".换句话说,我知道这个概念,但不是用来描述它的词.你可以很好地使用这些问题中的大多数,但是你不能总是期望申请人知道正确的词来定义它们(除非他们是CS专业,在这种情况下他们更好地知道用于概念的英语单词而不仅仅是力学:-) (3认同)
  • "(正则表达式)编写一个正则表达式,从HTML块中删除所有标签." GAH!可怕的问题.我希望开发人员应该意识到这是一个棘手的问题并拒绝写出所说的正则表达式.永远不要使用正则表达式来解析HTML! (3认同)
  • 数据点:我是C#开发人员,我认为这些问题非常合理.除了ASP.NET特定的viewstate/sessionstate之外,我可以回答它们. (2认同)
  • 我想填写并说这些问题非常合理.我之所以回答这一点,那里没有任何好的问题 - 测试开发人员对琐事的了解并不是技巧的衡量标准.这个答案改变了我的想法.只要给出1或2个问题的回答错误,你就会很好. (2认同)
  • @Mark Brittingham - 是的,你必须知道一个短路的操作员是一个好的C#开发人员,否则你甚至不能编写像"if(string == null || string.Length!= 3)"这样的基本检查.这取决于他们. (2认同)
  • 内部与左连接是我一直要问的一个关键问题,因为我发现在他们的简历中有9/10的SQL申请人无法回答它. (2认同)
  • 好问题.问题2和3似乎是特定于ASP.NET的 - 编写例如WinForms文本编辑器的人也不必知道.如果他声称拥有ASP.NET经验,他当然应该能够回答这两个问题. (2认同)
  • Viewstate和sessionstate - 如果您正在招聘WinForms开发人员怎么办?DataTable和DataReader - 一旦进入O/RM,就不要使用这些.实现链表 - 自从25年前采用数据结构和算法以来,我还没有这样做过; 我总是使用库版本.我不希望开发人员能够从内存中编写Reflection代码.我会考虑使用正则表达式来解析反模式的HTML.我认为你正朝着正确的方向前进,但是你会错过很多优秀的开发人员和你现在的标准. (2认同)
  • 挥发性和弱参照是人们可能永远不会接触到的东西.突然间,当他们这样做时,他们很了解他们.我永远不会问这样一个问题来衡量经验.工程师可能很好地解决了旅行推销员,而没有触及过这个问题. (2认同)

spl*_*tne 135

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

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

平台无关的.NET问题

ASP.NET

  • 我知道开发人员知道这一切,但仍然看不出书.Open-Minded非常重要,此外,不要试图获得太多细节答案,只要确保他们理解这个概念. (8认同)
  • 您是否能够在面试情境中以清晰的方式描述通常需要2页甚至书的章节的概念.我不能不事先排练他们 (3认同)
  • 有些问题真的很愚蠢,比如Debug和Release版本之间的区别.是的,Visual Studio预定义了一些构建配置,但这不是一个独立于平台的问题.通过命令行或使用Mono编译的人可能不知道你在说什么. (2认同)

Bri*_*Kay 94

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

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

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

  • 是的,我们都必须知道大量的"狭隘技术".但对于我们所知道的每一个人,都有一堆我们不知道的(通常是因为我们不需要它们).我说你不想错过一个不了解SharePoint的优秀开发人员,因为他很快就会成为你最好的SharePoint人. (5认同)

Jon*_*eet 66

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

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

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

  • @splattne:别傻了,这是Jon Skeet的回答,所以就接受吧.这是不可避免的. (5认同)
  • 我正要说......重...你不问斯凯特! (3认同)

Chr*_*isA 42

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

仅仅举个例子,我倾向于"知道"我每天需要使用的东西.我倾向于忘记(后来不得不重新查看)我很少使用的东西.

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

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

......有两个开发团队.

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

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

明智地构建你的面试......


Ste*_*owe 34

Jon Skeet是谁?

  • 或者更好:你是Jon Skeet吗?;-) (11认同)
  • Skeet双向飞碟 (3认同)
  • 对Jon Skeet没有冒犯 - 但我认为Rick Strahl倾向于更频繁地出现我遇到的问题类型的答案. (2认同)

qui*_*qui 33

我被问到的好问题是

  • 您认为.NET有什么好处
  • 您认为.NET有什么不好

看看候选人会想出什么会很有趣,你肯定会学到很多关于他/她如何使用框架的知识.


Jen*_*fer 18

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

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

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

  • ......但如果你没有像面试官所期望的那样解决问题,你就会失败. (4认同)
  • 发现.询问死记硬背问题是在寻找麻烦.我工作的公司问老技术问题,但主要是:我有这些问题,这是一个白板,请告诉我你如何解决它们.可怕但有效. (2认同)

Eri*_*sch 13

说实话?

"什么是.NET?"

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

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


Gen*_*rts 11

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

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


Bri*_*sen 10

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

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

字符串是不可变的.


Dzm*_*uba 6

Martin Fowler 喜欢平台知识的设计技巧.另一方面,您可以提出一个问题,它将显示设计模式和.NET平台的知识,如下所示:

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


归档时间:

查看次数:

522955 次

最近记录:

12 年,10 月 前