当前位置:  开发笔记 > 编程语言 > 正文

专业面试的意外答案

如何解决《专业面试的意外答案》经验,为你挑选了1个好方法。

这是一个100%的理论问题,也许是基于意见的.

在一次专业的采访中,我得到了一个印刷页面,里面有很多写得很好,格式不正确的两个代码,class可以在演讲中逐行分析.让我们把这些数据结构AB.没有问题陈述或有关预期行为的任何信息.

然而,他们的一个问题真让我生气.

在确定了算法的可疑行为以及许多潜在和实际错误后,他们要求我再确定一个错误.我发现了其他一些明显的问题,但我并没有弄清楚他们想要什么.好吧,当他们告诉我答案时,它引起了我的注意.的简化版本A,并B为下面的(我只留下这是他们的想法有一部分的方法):

template 
class A
{
public:

    // elements are dynamically allocated on the heap

    const T& getValue(unsigned i) const // I'm not even sure it was const
    {
        // return element at position 'i'
    }

    virtual void setValue(unsigned i, const T &value)
    {
        // sets the element at position 'i'
    }
};

template 
class B: public A
{
public:

    virtual void setValue(unsigned i, const T &value)
    {
        // set the element at position 'i' using A::setValue()
        // then sort all elements in descending order
    }
};

好吧,解决方案不是编译,运行时或逻辑错误.甚至没有这些潜在的风险. 错误是:因为B::setValue种种之后,你的数据放在一个元素,你不能测试你在给定位置访问的数据是否是相同的,你存储在该指定位置的.但是A你可以做到这一点.之间的这种不匹配的行为AB被认为是一个错误(和他们补充说,它是不是一个错误,但它仍然是一个错误).

我认为这完全是一个设计选择(因为整个过程B是维护已排序的数据),我不会说这是一个错误,特别是没有问题陈述或有关预期行为的任何信息.它甚至没有违反多态的概念或概念.

你会认为它是一个错误?



1> eerorika..:

我们可以决定它是类的接口的一部分,A更具体地说是一个post条件A::getValue,它A::getValue必须返回相同的值,该值在之前被分配A::setValue到同一个索引中.

如果指定了这样的后置条件,那么违反后置条件的派生类将违反Liskov替换原则.这将是一个设计错误.


在练习中没有指明这种后置条件是否存在,或者是否应该存在.没有后置条件,没有设计错误(至少不是我正在讨论的错误).

是否应该存在(可能由您的访调员假设)后期条件应由层次结构的设计者决定.在你的面试中你是谁.后置条件是否为层次结构的良好设计将取决于类的建模.如果A模特有类似的东西std::array- 那就是它的相似之处 - 那么在我看来,后期条件肯定是一个很好的设计选择.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有