我应该拥有哪些C#知识?

时间:2009-07-07 13:34:48

标签: c#

一个非常开放的问题。我一直用C#编程 过去5个月做了我完成的小项目 成功。

今天我去接受C#角色的采访。第一个问题 是'告诉我关于拳击'。根据我的经验,我没有 知道这家伙的意思。毋庸置疑 没那么好。其他问题是'为什么不是它 建议使用ArrayList int','告诉我你的意思 了解线程'等等。

我真的不希望这种情况再发生,所以我打算这样做 花一些时间在C#上阅读(和练习)更多。一世 明白最好的学习方式是编码,但是 编码不会真正帮助我回答这个问题 关于'拳击'例如。

我不是要求你回答上述技术问题。 事实上,我直接知道他们的回答 谷歌接受采访后,我是如何意识到我的 C#知识有限。

我的问题是:在您看来,哪些知识应该是什么 C#开发者有?理想情况下,如果可以的话会更好 对它进行分类(任何人都应该没有基本知识 例外,高级知识,专家知识等)。没必要 详细说明。对你列出的任何内容进行研究 对我来说是一个很好的锻炼。

9 个答案:

答案 0 :(得分:12)

我希望有人去找专业的C#工作来了解:

  • 泛型和通用集合
  • 接口(一般)
  • 接口(具体),即 -
    • IDisposable:如何将其集成到语言中以及为什么
    • IEnumerable:包括常用扩展方法,迭代器块和延迟执行
  • .Net中的序列化概述(可能没有完成,但要了解它是什么,并知道在命名空间heirarchy和文档中查看的位置)
  • .Net中的Xml概述(与序列化相同)
  • 线程概念概述(与xml /序列化相同)。理解为什么大多数线程安全的集合都没有的加分点。
  • 在至少一个项目中使用过匿名委托/ lambdas,因此也对闭包有基本的了解。
  • 从winforms,wpf,webforms或MVC中的至少一个中轻松解释一些基本概念
  • 能够回答.Net BCL中特定公共类的一些简单问题:即来自System.Data(想想参数化查询!)和System.IO(文件流,路径)。
  • 垃圾收集:何时应该调用GC.Collect(提示:几乎从不)以及为什么

答案 1 :(得分:10)

这是一个很好的清单:What Great .NET Developers Ought To Know

答案 2 :(得分:8)

我很久以前在学校时的个人经历。

我去银行看望我的父亲。那时,他的大部分时间都在处理账目并确保每件事都有效。我看到的是他试图计算/计算大数和计算(基本加法/乘法......)。

在注意到他之后,我问他:爸爸,如果你所要做的只是基本的补充和增殖,为什么还要学习直到毕业?

他的回答是:虽然你不必使用你所获得的所有知识,但这些知识可以帮助你做出学问的决定。

提出你的问题:虽然你不必使用整套概念,但知道它们存在会帮助你在编码时做出正确的决定。

我的建议以及其他发布的建议是尝试每天花一些时间在stackoverflow上。

祝你好运。

答案 3 :(得分:5)

一位优秀的面试官不会在琐事上烧烤你。这就是我们拥有Google的原因。一个好的面试官会找到你不认识的地方,并在那里问你问题,因为这是找到你面对的事情时最好的地方,当你遇到一些你没有下来的事情时。

我能为访谈提供的最佳建议是不要过多担心技术琐事。相反,在面试中,专注于解决问题的技巧。如果你不知道什么,不要试图隐藏它,只是承认它。如果你认为你知道,可以说“我不确定,但我认为就是这样。”也不要让人感到沮丧 - 在这一点上,通常面试官会给你一个提示。这不仅仅是给你答案,它是测试的另一部分 - 看看,如果在正确的方向上轻推,你可以从那里推断出来。

对于拳击/ ArrayList / int问题,如果我正在采访你并且你不了解拳击,我会给你一个拳击所做的基本描述。然后我会问你,知道我刚刚告诉你的内容,为什么你会认为在ArrayList中使用int可能是个坏主意。

在任何采访中都会有一件事情是关注要求,期望的结果,边界条件或边缘情况。由于大多数编程面试问题都属于“编写此方法”类别,因此请确保您获得以下正确答案:

1)方法的输入 2)方法的预期输出 3)边界和边缘情况。

这听起来很荒谬,但令人惊讶的是,有多少开发人员,即使是有经验的开发人员,也不会费心思考这些事情。代码解决了一个问题 - 如果您不能正确理解问题,则无法正确解决问题。

答案 4 :(得分:2)

我不得不说,如果面试官可能会因为他或她访问网页而认为某人有更多的.NET / C#经验,那么面试官就会失败。我自己采访过很多人,我真的很喜欢给他们解决一些容易理解的问题的方法,并要求他们在白板上写一些代码。即使他们已经记住了Scott Hanselman博客上每个问题的答案,我也会学到很多关于他们在语言中的舒适程度,以及他们如何解决问题。我正在寻找开发人员,而不是Trivial Pursuit,.NET Developer Edition的合作伙伴。

也就是说,跟上像Hanselman这样的博客是一个很好的方式来跟上行话。您可以在真空中编写C#多年,完全理解强类型List< int>的优点。在ArrayList上,但从未实际使用术语“拳击”。但是在接受采访时要花费更多的时间来询问“通过列表< int>而不是int的ArrayList”来描述迭代的优势,而不是要问,“告诉我有关拳击的事情。”另外,实际上研究Hanselman的.NET面试问题的答案(特别是如果你探索细节并问“为什么?”)将使你成为一个更好的开发者。所以一定要继续阅读汉塞尔曼。

还有一个注意事项......如果我问某人String是引用类型还是值类型,并且他们只是说“嗯......参考类型”,我就不会像我想如果回答是,“嗯......参考类型,但这是一个有趣的问题。” “为什么会这样?”,我说......“因为字符串是实现的,所以字符串是不可变的,允许你使用它来安全地使用它作为哈希键。或者将它传递给方法,知道值因此在某种程度上,字符串可以像价值类型一样行动......“这将是一次很棒的对话,让我问,”所以告诉我更多关于为什么哈希键应该是不可变的......“

这不仅仅是正确回答50/50问题与第二个回答中的所有其他信息之间的区别。与受访者进行智能对话后,我认为一旦受访者成为我的同事,我就会定期进行类似的智能对话。而这正是我一直在寻找的东西。

答案 5 :(得分:0)

还取决于角色。如果这被宣传为初级角色,那么线程问题就有点困难......有时代理商/雇主会有不切实际的期望。

答案 6 :(得分:0)

类似的事情发生在我的重要其他人参加驾驶考试。州警官说,“绕道而行”,她不知道他在说什么。我们俩都认为环形交叉路口是一种带有大圆圈的道路布局,而不是指导员的意思。所以我知道你的意思。

编程工作面试各不相同。有些人认为你不能在面试中很好地评判程序员,并且愿意给那些给人留下好印象的人一个机会。其他人都是非常艰苦的事情,只有那些资格过高的人才能通过,你可能会惊讶于你经常接到这些电话的回电。

答案 7 :(得分:0)

这是我最近一直在思考自己的事情。使用C#,但不确定我缺少什么。

我订购了

Microsoft® .NET Framework Application Development Foundation

其中涵盖了与C#

相关的许多内容

同时查看C# in Depth

已经阅读了其中一些内容。有来自高质量作者的一些很好的信息。

通过Jon Skeet的blog

进行销售

答案 8 :(得分:-12)

五个月没有拳击知识?亲爱的,亲爱的,男孩。我会毫不犹豫地站在你的位置。为什么,我记得那些宁静的日子,当时我和你一样,同样缺乏我工艺工具的一些基本知识。但是,小伙子,不要绝望!你有时间和学习的欲望。让我们立即分发一些您可能用于未来利益的知识!好哇!

阅读CLR Via C#封面以涵盖。拿一本Linq书(不能推荐任何一本书)。使用WPF编写应用程序(用于xaml)。我认为这三件事现在会给你最大的收获。