我在一次入门级程序员的采访中问过这样的问题:
var instance1 = new MyObject{Value = "hello"}
var instance2 = instance1;
instance1.Value = "bye";
Console.WriteLine(instance1.Value);
Console.WriteLine(instance2.Value);
申请人回答“你好”,“再见”作为输出。
我的一些同事说“指针”不再重要,或者这个问题不是真正的能力判断。
他们是对的吗?
编辑:有人指出MyObject可能是一个结构。这是一个好点。但是,我没有发布我给受访者的完整问题。完整的问题有一个类,显然是一个类(不是结构)。它可以找到here。
答案 0 :(得分:18)
他们绝对错了。此外,这是一个关于引用的问题,而不是指针。如果你没有得到它,你就不值得写C#的付费工作。
答案 1 :(得分:16)
我的一些同事说“指针”不再重要了
理解引用语义和值语义之间的区别至关重要。它是语言和类型系统设计的基础。了解引用可以用指针实现与入门级C#程序员并不特别相关;理解按引用复制和按值复制之间的区别是非常重要的。
或者这个问题不是真正的能力判断。
那取决于你试图测试的能力。如果能够快速准确地预测琐碎的C#程序的行为与你的工作相关,那么我会说这是一个很好的能力测试。
如果能够确定何时没有足够的信息来解决问题,并提出正确的问题以获取该信息,那么这些能力是相关的,那么是的,这是对相关能力的判断。 (一个好的候选者会要求查看myObject类型和成员Value的实现,而不是假设myObject是一个类,而Value是string类型的可变属性。)
我说所有这些能力都是相关的,这对入门级职位来说是一个合理的第一个问题。
答案 2 :(得分:10)
这是非常基本的东西。问题甚至不是关于指针,它是关于C#中的引用语义,这是该语言最重要的方面之一。任何自称为C#程序员的人都必须理解这一点。
答案 3 :(得分:5)
你应该在离开大学之前很久就理解指针和。
我写了上面的内容之前注意到这个问题被标记为C#。
您无需了解有关C#中程序指针的任何信息。也就是说,我坚持一般意义上的专业程序员的原始陈述。
此外,正如其他人所说,这个问题实际上是关于参考。你真的必须理解成为C#程序员的引用。
答案 4 :(得分:4)
在开始进行C#面试之前,您应该先了解参考资料。
答案 5 :(得分:3)
知道对象引用如何在C#中起作用我认为很重要。 (人们可以在不知道任何事情的情况下长期存活......但很少有你想要支付的OO代码)
另一方面,指针不是那么多。答案 6 :(得分:2)
我认为这是一个公平的问题。
请确保您不会简单地在简单的通过/失败基础上对此问题进行评分。跟进“为什么?”之类的问题。和“究竟是什么行'instance1.Value =”bye“; '或line'var instance2 = instance1;'实际上做了什么?“开始一个关于幕后发生的事情的对话。你会通过他们能够进行转换的程度以及是否能够按照你的解释来了解候选人的大量信息。
答案 7 :(得分:2)
如果候选人无法回答这个问题,那么他们对C#的基本知识就显得非常缺乏。给他们看门,再说再见!
答案 8 :(得分:2)
即使您不使用指针和不安全的代码,肯定应该理解这个概念并知道如何使用它。 如果你要在C#中工作,我可以原谅不知道指针算术,因为你很可能不会使用它,并且很可能不应该使用它。 但是即使在托管的C#世界中,我们周围也存在指针。
string s = "abc"
int a = 3;
这两个变量中的一个实际上是一个指针(Reference.Whatever。相同的东西)。哪一个?老实说,一个不知道需要用C工作一年的人,之后他肯定会明白这一点。
想象一下这个家伙必须编写一个带有引用字符串的函数。它是:
如果他事先没有在C中失去他的指针童贞,这个男人就会疯狂地想弄清楚。或者更糟糕的是,想象一下代码的一些关键部分使用包含类中一些有价值信息的Dictionary,这个人改变其中一个值,这会改变对象的GetHashValue,并导致你“丢失”实例。 / p>
即使理智的C#开发人员不在代码中使用显式指针,也不意味着指针不会被隐式使用。
每个优秀的程序员都需要准确理解他们的语言摘要是什么,否则他将永远无法正确理解语言。要正确地做C#,你需要知道C,要正确地做C,你需要知道汇编程序。
另外,你的问题 - 就你所知,你的受访者认为myObject是一个结构。他很可能没有,但仍然 编辑:是的,与指针不同,引用不是固定的。但从概念上讲,确实没有区别。
答案 9 :(得分:1)
传递这个问题对于某人的能力并没有太多说明,但是失败它非常关注这个人的缺乏能力。理解参考与价值语义是基础知道如何编程。
如果一个人对程序的行为方式有错误mental model,他最多可以“偶然编程”。当出现问题时,他将无法找出出错的原因。
答案 10 :(得分:1)
老实说,我大约2个月前从完整的微软课程毕业。不可否认,我已经编程了一段时间,但是我会说在C#中我已经使用了大约2年。
我知道一个事实,这些问题在我的学习过程中出现了几次,并且绝对是100%的批评,班上的每个人都知道这一点。事实上,我认为微软考试中甚至有一些混合使用它。
从学生的角度来看(虽然是高水平学生的观点),每个人都应该知道这一点。如果他们不这样做,那么他们就不会知道足够的核心编程(或逻辑)来使其在编程方面有所作为。
作为旁注,我目前的工作在第二次面试中进行了一次小测试。他们让我编写了一个应用程序来测试Prime数字,Factorials,编写我自己的LastIndexOf以及另一个我不记得的应用程序。
我认为逻辑在编程中最重要。而不仅仅是了解C#语言,这更像是一个逻辑问题。
答案 11 :(得分:1)
对于任何有C#经验的人来说,这不是一个好兆头。
除非候选人只是学习这门语言,并且看起来非常精彩,否则对我来说这将是一个破坏性的事情。
至少,像这样知识的漏洞会告诉我需要进行大量的辅导。
答案 12 :(得分:0)
我们列出了在面试过程中向所有开发人员候选人提出的技术问题清单。在这些问题中,必须正确回答一定数量才能考虑候选人,理解C#参考将是其中一个问题。