【问题标题】:OOP Problems to use for Coding Tests during interviews面试期间用于编码测试的 OOP 问题
【发布时间】:2008-10-29 04:31:42
【问题描述】:

作为第二次面试,我让人们坐下来编写代码...我尝试让问题真正独立于技术。

我遇到的编程问题并没有真正锻炼人们的 OO 能力。我倾向于尝试在 2 小时内解决编码问题。因此,我一直在努力寻找一个足够小且涉及足够多的问题,以暴露人们的 OO 设计技能。

有什么建议吗?

【问题讨论】:

  • 2 小时!?!为什么不直接解决您的团队遇到的问题并将其提供给他们。这样你就可以获得 2 小时的免费工作时间!
  • 之前尝试过.....通常最终会过多地谈论问题域而不是解决任何问题。此外,如果您为许多不同的人设置相同的问题,它会为您提供一个很好的比较基础
  • 如果您要对现有答案投反对票并发表评论,请将您的问题重新标记为“long OO”问题。
  • 一个问题需要 2 小时?你的白板有多大?
  • Graphain:其他人投了反对票...

标签: oop


【解决方案1】:

这是我在一些培训中使用的问题,看起来很简单,但在 OOP 方面却很棘手:

创建能够正确表示以下结构的模型类:

  1. 定义一个 Shape 对象,该对象是任何二维图形,并具有以下特征:名称、周长和表面积。
  2. 定义一个圆形,保留并准确输出上述形状特征的值。
  3. 定义一个三角形。这一次,三角形的名称应该考虑它是等边的(所有 3 条边长度相同)、等腰线(只有 2 条边长度相同)或不等边(没有 2 条边长度相同)。李>

您可以继续使用四边形(包括正方形、矩形、菱形等)和其他多边形。

他们解决上述问题的方式将揭示了解 OOP 的人和不了解 OOP 的人。

【讨论】:

    【解决方案2】:

    理想情况下,您希望提出一个看似困难但有一个简单、优雅、明显的解决方案的问题如果您以 OO 术语考虑

    也许:

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

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


    一个 OO 解决方案是有一个人、一个客户、一个帐户和 AccountPermissions,其中帐户指定一个人和一个客户以及一个可选的父帐户。使用递归 Account 对象会破坏直接 ERD 解决方案可能产生的繁琐的人员/团队/部门/项目结构

    【讨论】:

      【解决方案3】:

      我使用了FizzBuzz Programming Test。并且令人震惊地可以证实文章的说法。作为第二次跟进,我要求候选人计算模拟时钟上指针之间的角度。我们设置了一台安装了 VS 2008 并且存根就位的笔记本电脑。他们所要做的就是填写执行。

      我总是对候选人在这两个问题上的糟糕表现感到震惊。我真的是。

      【讨论】:

      • 是的,我在初次面试中使用了几个这样的问题。有时候真的很意外!!!一旦他们进入我在这里谈论的面试,通常他们至少应该能够进行基本的编码
      【解决方案4】:

      设计社会保障应用程序是我在面试时问过很多人的问题。

      这样做的好处是每个人都知道它的工作原理以及要跟踪的内容。 他们还必须证明他们的设计是合理的,这真的有助于我深入他们的头脑:) (因为这里有很多灵活性)

      亲切的问候,

      【讨论】:

      • 你能解释一下这是什么吗?我对社会保障申请不熟悉,我正在寻找面试测试。
      【解决方案5】:

      无论人们是否在面试中进行编码,我都会提出以下问题: 告诉我你最近使用面向对象编程解决的一个问题。你会惊讶于人们经常无法回答这个简单的问题。很多时候,我的眼神都是空白的,或者他们会说“你是什么意思?我在 .NET 中编程,这都是面向对象的。”

      【讨论】:

      • 是的,我通常会在第一次采访中介绍这类内容......是的,这真的很令人惊讶
      【解决方案6】:

      这些不是专门的面向对象问题,但请查看标记为 interview-questions 的其他问题

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

      【讨论】:

      • 是的....我看过那些...类似于我现在所做的...我真的想要从 OO 的角度来看一些有趣的东西。通常我喜欢 OO 类型的游戏,但很难找到一款足够小而且参与度足够的游戏
      • 我有点想要一个问题,他们可能会抛出一些设计模式(或者更好的是,采用最合适的设计模式切片)。但这完全取决于他们如何/他们设计什么
      【解决方案7】:

      一些简单的 GUI 怎么样。它有继承,覆盖,可能是事件。如果您的意思是让他们实际实施作为测试的一部分,那么您可以给他们一个带有 OnPaint() 的空白窗口窗体并告诉他们去做。

      【讨论】:

        【解决方案8】:

        您可能比要求他们设计一个具有单进程实现的 MapReduce 库做得更糟。该接口仍然适用于分布式实现吗?异常处理策略是什么?是否应该特别支持在管道中链接 MapReduce 作业?输入和输出的接口是什么?输入是如何分块的?一项工作中的不同输入可以转到不同的映射器吗?什么默认值是合理的?

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

        【讨论】:

          【解决方案9】:

          我有一个超级简单的集合。这个想法主要是用它们来过滤真正不了解他们的东西的人,而不是过滤in摇滚明星。

          这些都是 5 分钟的白板式问题,所以真的没有那么难。但是编写代码并通过它进行交谈的行为揭示了很多关于候选人的信息 - 并且非常适合揭露那些本来可以通过谈话来BS的人。

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

          【讨论】:

          • a) 不是每个人都会记得他们头脑中的转换数学 - 并不意味着他们不是优秀的程序员。 b) 同样并没有表明他们擅长 OOP,只是他们做了很多命令行应用程序。 C) 就一个好问题而言,比其他人更有建设性。
          • 完全没用的答案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-09-20
          • 2013-10-23
          • 2016-07-18
          • 2018-10-01
          • 2021-08-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多