分享
为什么问答平台  ›  专栏  ›  技术社区  ›  huaiyuan

你应该在什么时候理解参考文献? - At What point should you understand References?

  •  15
  • huaiyuan  · 技术社区  · 2 月前

    我在一个入门级程序员的面试中问了这样一个问题:

    var instance1 = new MyObject{Value = "hello"}
    var instance2 = instance1;
    
    instance1.Value = "bye";
    
    Console.WriteLine(instance1.Value);
    Console.WriteLine(instance2.Value);
    

    申请人以“你好”、“再见”作为答卷。

    我的一些同事说“指针”不再那么重要,或者这个问题不是能力的真正评判标准。

    他们是对的吗?

    编辑:要点是,myObject可能是一个结构。这是一个很好的观点。但是,我没有把我给被采访者的全部问题贴出来。完整的问题有一个类,它显然是一个类(而不是结构)。可以找到 here .

    13 回复  |  直到 9 年前
        1
  •  16
  •   Eric Lippert    9 年前

    我的一些同事说“指针”不再那么重要了

    理解引用语义和值语义之间的区别是至关重要的。它是语言和类型系统设计的基础。理解可以用指针实现引用对入门级C程序员来说并不是特别重要;理解通过引用复制和通过值复制之间的区别是非常重要的。

    或者说这个问题不是对能力的真正判断。

    这取决于你想测试的能力。如果快速准确地预测普通C程序行为的能力与你的工作有关,那么我认为这是一个很好的能力测试。

    如果确定什么时候没有足够的信息来解决问题,问正确的问题来获得信息的能力是相关的,那么是的,这是对相关能力的判断。(一个好的候选者会要求查看myObject类型和成员值的实现,而不是假设myObject是一个类,值是字符串类型的可变属性。)

    我说所有这些能力都是相关的,对于一个入门级的职位来说,这是一个合理的第一个问题。

        2
  •  18
  •   spender    9 年前

    他们完全错了。此外,这是一个关于引用的问题,而不是关于指针的问题。如果你不明白,你就不应该得到一份带薪工作。

        3
  •  10
  •   Will Vousden    9 年前

    这是非常基本的东西。这个问题甚至不是关于指针,而是关于C中的引用语义,这是语言最重要的方面之一。任何自称C程序员的人都必须理解这一点。

        4
  •  5
  •   Igby Largeman    9 年前

    你应该明白要点 在你离开大学之前很久。

    在注意到这个问题被标记为“C”之前,我写了上述内容。

    你不需要知道任何关于C语言程序指针的信息。也就是说,作为一名专业的程序员,我坚持我最初的陈述。

    另外,正如其他人所说,这个问题实际上是关于参考文献的。你真的必须理解作为一个C程序员的参考。

        5
  •  4
  •   Cory Petosky    9 年前

    在开始面试之前,你应该了解推荐信。

        6
  •  3
  •   lzcd    9 年前

    知道对象引用如何在C中工作,我认为这很重要。 (一个人可以在不知道任何事情的情况下生存很长一段时间…但这很少是你想要付费的OO代码)

    另一方面,指针也不多。

        7
  •  2
  •   C. Dragon 76    9 年前

    我认为这是一个公平的问题。

    尽管你不能简单地以及格/不及格为基础对这个问题进行评分。跟进问题,比如“为什么?”以及“行”instance1.value=“bye”的确切含义是什么; '或行'var instance2=instance1;'实际执行吗?'开始一个关于引擎盖下面发生了什么的对话。你会学到很多关于一个候选人的知识,通过他们能进行多深的转化,以及他们是否能够遵循你的解释。

        8
  •  2
  •   Lee Treveil    9 年前

    如果候选人不能回答这个问题,说明他们对C的基本知识非常缺乏。让他们看看门,说再见!

        9
  •  2
  •   Rubys    9 年前

    即使你不使用指针和不安全的代码,你 一定地 应该理解这个概念并知道如何使用它。 如果你要在C语言中工作,我可以原谅你不知道指针算术,因为你很可能不会使用它,也很可能不应该使用它。 但是,即使在管理C世界中,指针也存在于我们周围。

    string s = "abc"  
    int a = 3;
    

    这两个变量之一,实际上是一个指针(引用。无论什么。同样的事情。哪一个?老实说,一个不知道这一点的人需要用C找一年的工作,然后他肯定会理解这一点。

    想象一下,这个家伙必须编写一个接受引用字符串的函数。它是:

    1. 不变的
    2. 对不可变对象的引用。
    3. 对不可变对象的引用。(不变性与指针无关。如果它是不变的,那就更令人困惑了。

    这个人会发疯的,试图弄清楚如果他没有事先在C中失去他的指点童贞。或者更糟糕的是,假设代码的某些关键部分使用了一个字典,其中包含了类中的一些有价值的信息,而这个人更改了其中一个值,从而更改了对象的getHashValue,并导致您“丢失”实例。

    即使SANE C开发人员在代码中不使用显式指针,也不意味着不隐式使用指针。

    每一个优秀的程序员都需要准确地理解他们的语言是如何抽象出来的,否则他永远无法正确地理解语言。要正确地执行C,您需要了解C,要正确地执行C,您需要了解汇编程序。

    另外,你的问题——就你所知,你的被采访者假设我的对象是一个结构。他很可能没有,但仍然如此。
    编辑:是的,与指针不同,引用不是固定的。但从概念上讲,没有什么区别。

        10
  •  1
  •   Esko Luontola    9 年前

    通过那个问题并不能说明某人的能力,但是 弱点 它很能说明这个人的 能力不足 . 理解参考与价值语义是 基本的 知道如何编程。

    如果一个人错了 mental model 关于程序将如何运行,他最多可以做“意外编程”。当事情出了问题,他就无法找出事情出了问题的原因。

        11
  •  1
  •   MindingData    9 年前

    老实说,我大约2个月前从微软的全套课程中毕业。诚然,我的编程时间比这长了一段时间,但我可以用C语言说,我已经花了大约2年的时间。

    我知道,事实上,这些问题在我的学习过程中出现过好几次,全班每个人都知道这一点,这是绝对的,100%的关键。事实上,我认为微软的考试中甚至有一些与之混合在一起。

    从学生的角度(尽管是高水平学生的角度),每个人都应该知道这一点。如果他们不知道,那么他们就不知道足够的核心编程(或逻辑),无法在编程中走得更远。

    作为旁注,我目前的工作在第二次面试中有一个小测验。他们让我编写了一个应用程序来测试素数、阶乘、写我自己的lastindexof以及其他一个我无法记忆的东西。

    我认为逻辑在编程中最重要。这不仅仅是了解C语言,更是一个逻辑问题。

        12
  •  1
  •   kyoryu    9 年前

    这对任何有过C_经验的人来说都不是一个好兆头。

    除非候选人 只是 学习这门语言,似乎很聪明,这对我来说几乎是一个交易破坏者。

    至少,像这样的知识缺口会告诉我需要很多指导。

        13
  •  0
  •   Tim    9 年前

    我们有一个技术问题列表,在面试过程中会向所有开发人员候选人提出这些问题。在这些问题中,必须正确回答一定数量的问题才能考虑候选人,理解C参考将是其中一个问题。