您将如何评估面向对象的设计技能?[关闭]


Answers:


10

您可以展示一些简单问题的OO设计,并讨论它的作用,优缺点,是否足够灵活,可以改进什么以及如何进行。

如果您需要继续进行讨论,请询问此人对代码某些方面的看法,而不要提出主要问题。

重要的是要记住讨论是重要的,而不是您事先知道答案。任何体面的开发人员都应该能够指出一些您之前从未想到的代码。


我喜欢这种采访方式,它是讨论而不是问答。
罗汉·蒙加

5

与人讨论开放式设计问题。查看他/她如何建立系统模型,提出什么样的问题,设计如何响应新信息而变化。

史蒂夫·耶格(Steve Yegge)在他的一篇博客文章中提到的一个很好的例子是,要求人们提出XML的对象模型。


您能给我链接吗:)
Rohan Monga 2010年

1
@bronzebeard -在这里你去- sites.google.com/site/steveyegge2/...。他实际上是在谈论面向对象的HTML建模-但我认为XML可能是该问题的更严格的版本:)
talonx 2010年

4

对所有最流行的设计模式都有很好的了解,可以证明候选人实际上正在寻找解决其设计问题的方法。

能够讨论它们并知道何时应用它们,这很好地表明了他理解它们。

询问他过去的经历中的用法也可能会有所帮助。


这是对了解C#中重载的工作方式的测试,但几乎不是针对OOAD设计技能的测试。
user281377

你是完全正确的。我更改您的问题的速度太快了。

4
但是,您可以了解设计模式,而从未听说过该概念。在我知道他们有名字之前,我就一直在使用责任链,观察员和控制者之类的东西。注意不要假定因为某人不知道某个模式的名称而无法胜任使用它。
Michael K

@Michael:是的,这当然就是为什么最好先问一下如何解决某个问题,然后再讨论模式的实际名称的原因。我知道很多人每天都在使用这种策略模式,但不知道这样叫它。他们只是通过思考“创造”了它,就像最初的四个小组一样。区别在于后者写了一本关于该主题的书。

注意,“四人帮”通过查看其他项目中使用的OO代码获得了模式。他们绝不承认任何设计,只是承认它们并以一致的方式描述它们。
Macneil 2010年

3

不要进行词汇测验。“定义继承”或“面向对象设计的3个特征”是一个问题,不会告诉您有关个人技能的任何信息,而只是告诉您自从上次阅读教科书以来的时间。我遇到了几位伟大的程序员,他们每天都使用这些技能,但是如果要求给出正式定义,他们会感到窒息。


2

将要求他写下房间或任何其他虚拟实体的业务对象,类和接口/方法


2

如果可能,请索取示例代码。

否则,找到一些过程代码作为示例(或一些设计欠佳的OO代码),然后询问他们如何重新设计,推广和改进它。确保程序具有额外的上下文,以便重新设计可以有意义。

最终,您要测试的内容-设计-是主观的。因此,您的评估应该是开放式的,以便提供多种可能的好的解决方案,而不仅仅是一个解决方案。然后,考虑对需求的可能更改,这些更改将迫使接口发生更改:它们如何处理?


1

阅读《 Head First设计模式》一书。本书中的所有示例均始于面向对象的问题,而最终以“设计”模式结束。他们还说明了为什么某些OOP的概念会取得有限的结果,以及为什么某些比其他的要好。

即使是《设计模式》这本书,也充满了OOP的问题:-)


我对此一无所知,因为本书中的所有示例都专门针对一种设计模式或另一种。如果您只有足够的理论知识,您将能够弄明白这一点,但这并不反映实际的应用
Rohan Monga 2010年

1

从简单开始:OOP到底是什么?

您可以从询问OOP的基本前提开始:抽象,多态性,继承和封装。深思熟虑的好食物,可以使他们热身。

给他们一个问题

接下来,向他们提出可能涉及模式的问题。不必命名或使用模式,但是如果他们在该领域有经验,他们的方法可能会产生一些效果。

也许是动态文本输入验证。您希望能够逐个字符地验证输入的字符,以查看它是有效的日期,时间还是ISO8601格式的日期和时间。每次按键,您都会获得输入字符串的副本,并且可以返回布尔值以指示文本是否至少以一种格式保持良好。请他们讨论并使用OO设计原则草绘设计。

等你聊完了

  1. 控制器(触发变更事件并评估响应的东西),
  2. 观察者(验证者响应变更事件),
  3. 策略(每个验证器代表确定输入是否有效的另一种方式),

如果他们了解OOD,那么您将有一个很好的主意。

再次给他们同样的问题,但是这次要求不同的设计

现在,要求他们在不使用观察者模式的情况下重新设计系统(如果他们提到过)-他们可能选择采用责任链方法或命令模式。您并不在乎哪个,您知道他们对所涉及的原理有合理的了解。

即使他们不采用基于模式的方法,只是聆听他们试图将问题分解为相关功能的方法,也会产生您所追求的结果。


1

我倾向于选择一个现实世界的场景,这是任何人都熟悉的†,并要求他们标识实体;所涉及的演员;它们之间有什么相互作用;可以抽象出通用特征的地方;需要考虑哪些属性。

是的,您可以要求他们坐下来绘制UML,是的,您可以要求他们在一些OOP实施细节上搜索问题,以查看他们是否可以“开始运作”。

但是,雇主在团队中真正需要的是一种能够理解所涉及概念并可以将其应用到任何情况的思想。嵌入概念后,即可快速了解具体信息。


†熟悉度高,没有与代码帮助的联系:一家人早上使用浴室;做晚饭; 上班的公交路线; 汽车的组装。


0

似乎工作得很好,实际上只需要几秒钟:请他们设计对象模型。没关系的。这绝对是微不足道的。实际上,不要不必要地拖出测试,这可能是微不足道的。

如果他们写的第一件事是对象,那么他们对OO的理解已经领先于99%的同行。如果他们写的第一件事是一堂课,请请他们外出并派遣下一个候选人,然后考虑为什么将其称为OOP而不是COP。


虽然我明白您的意思,但我认为我可能会有些措手不及。当我“自由思考”设计解决方案时,我倾向于使用UML类符号,即使这并不是我的图表真正的意思。
肯·亨德森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.