OOP在访谈期间用于编码测试的问题

时间:2008-10-29 04:31:42

标签: oop

作为第二次采访,我让人们坐下来编写代码......我试着让问题真的与技术无关。

我的编程问题,我没有真正运用人们的OO能力。我倾向于尝试在2小时内解决编码问题。所以,我一直在努力找到一个足够小的问题并且足够参与其中暴露了人们的OO设计技能。

有什么建议吗?

9 个答案:

答案 0 :(得分:16)

这是我在一些培训中使用的一个问题,看起来很简单但是非常难以操作:

创建将正确表示以下构造的模型类:

  1. 定义一个Shape对象,其中对象是任意二维图形,并具有以下特征:名称,周长和表面区域。
  2. 定义一个圆,保留并准确输出上述Shape形状特征的值。
  3. 定义三角形。这一次,三角形的名称应该考虑它是等边的(所有三边是相同的长度),等腰线(只有两边是相同的长度),或斜角面(没有两边是相同的)。
  4. 你可以继续使用四边形(包括正方形,矩形,菱形等)和其他多边形。

    他们解决上述问题的方式可以揭示那些了解OOP的人与那些不了解OOP的人。

答案 1 :(得分:6)

理想情况下,您希望提出一个看似困难的问题,但如果您在OO术语中思考,那么它就会有一个简单,优雅,明显的解决方案

也许:

  • 我们需要控制对客户网站的访问
  • 每个客户可能有一个或多个人访问该网站
  • 来自不同客户的不同人员可能能够查看网站的不同部分
  • 同一个人可能为多个客户工作
  • 客户希望根据人员,部门,团队或项目管理权限

使用面向对象技术为此设计解决方案


一个OO解决方案是拥有Person,Customer,Account和AccountPermissions,其中Account指定Person和Customer以及可选的Parent Account。使用递归的Account对象会折叠直接ERD解决方案可能产生的麻烦的人/团队/部门/项目结构

答案 2 :(得分:3)

我使用了FizzBuzz Programming Test。令人震惊的是可以证实该文章的主张。作为第二次跟进,我已经让候选人计算模拟时钟上指针之间的角度。我们安装了安装了VS 2008的笔记本电脑和存根。他们所要做的就是填写实施内容。

我总是对这两个问题的候选人表现不佳感到震惊。我真的是。

答案 3 :(得分:2)

设计社会保障应用程序是我在采访中向很多人提出的问题。

关于这一点的好处是每个人都知道它是如何工作的以及要跟踪的事情。 他们还必须证明他们的设计是合理的,这真的有助于我进入他们的脑袋:) (因为这里有很多灵活性)

亲切的问候,

答案 4 :(得分:1)

在面试中人们是否做了一些编码,我有点问这个问题: 告诉我您最近使用面向对象编程解决的问题。您会惊讶于人们无法回答这个简单的问题。很多时候,我得到一个空白的凝视,或者他们说“你的意思是什么?我在.NET中编程,这都是面向对象的。”

答案 5 :(得分:0)

这些不是专门的OO问题,但请查看标记为interview-questions

的其他问题

编辑:如何实施一些design patterns?我没有该领域的最佳知识,但似乎你会得到两个问题的价格。您可以在一个问题中测试OO和设计模式。

答案 6 :(得分:0)

某种简单的GUI怎么样?它有继承,压倒,可能是事件。如果你的意思是他们实际上作为测试的一部分实现,那么你可以用一个OnPaint()给他们一个空白的窗口形式,并告诉他们去它。

答案 7 :(得分:0)

你可能比让他们设计一个具有单进程实现的MapReduce库更糟糕。接口是否仍适用于分布式实施?什么是例外处理政策?是否应该特别支持在管道中链接MapReduce作业?输入和输出的接口是什么?如何将输入分块?一个作业中的不同输入可以用于不同的映射器吗?什么默认值是合理的?

Python中的一个很好的解决方案需要一页代码。

答案 8 :(得分:-1)

我有一套非常简单的套装。这个想法主要是用它们来过滤 out 那些真正不了解他们的东西的人而不是过滤 in 摇滚明星。

这些都是5分钟的白板式问题,所以它们真的不那么难。但是编写代码并通过它进行讨论的行为揭示了很多关于候选人的行为 - 而且通过谈话揭露那些本来可以通过谈话获得BS的人是很棒的。

  • 写一个方法,以圆的半径作为参数,并返回圆的区域(你会惊讶于有多少人在这个上挣扎!)
  • 编写一个程序,从命令行接受一系列数字作为参数。添加它们,并打印总和
  • 写一个充当键控计数器的类(基本上是一个跟踪每个键被“计数”的次数的地图)