由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 有人来讨论下OOD的题目通常怎么答吗?
相关主题
Principal Software Engineer的工资Multiple Openings for ME/EE/CS in Santa Clara, California
招人,又招人了。Multiple Openings in Santa Clara, CA
3 openings-SF Bay Area Candidates ONLY. Thanks!一些面向对象的基本问题
关于design pattern请问大牛们,设计题如何复习?
job opening at scottsdale, AZ谈谈刚面的一个design题
Principal Engineer position open at Amazon几个OOP的面试题
中国上海职位:Software Architect康州金融公司 Interactive Broker , AQR 面经
Sponsor Green card (Within 6 month) for software Engineer电话及onsite面试的一些小提示
相关话题的讨论汇总
话题: svn话题: ood话题: design话题: class话题: file
进入JobHunting版参与讨论
1 (共1页)
r******n
发帖数: 170
1
今天又被一道这种题目弄郁闷了,那人叫我OOD设计一个version control system,比如
就是SVN,怎么design? 我大致说job是个class, file是个class,然后不同的文件格式
可以subclass file, job里面可以包含check-in, check-out等methods;file里面
property有content,version#,有个compare method等。然后,他问如何实现svn
status功能,我就说可以把两个file vector中的file进行比较,返回有修改的file
list。似乎还问了如何实现branch功能,总之最后似乎电面的人十分不满意我的答案,
直接说“that's not what I expect to hear. wish you good luck in job hunting,
blablabla” ......
的确不太会答这类题。因为这类题目太含糊,店面时,基本都是说完题目,我基本也得
马上回答。所以我一般都是挑出几个最明显的component,说这几个东西要成为class,
大致说下可以有一些property(name,age, color etc..), methods(set, get和特别明
显的需求)。然后就开始想有没有subclass,表明我知道inheritage,polymorphism的
概念;假如有公有资源,就会说是否要加上mutex。除此之外,往往就不知道咋想了。
各种design pattern大致也知道些,不过总觉得这时候不太容易一下子,把一个具体的
design题扯到pattern上。
不太清楚interview到底想听到啥关键字之类的,有大牛能以SVN这题为例讲讲不?
f**********t
发帖数: 1001
2
帮忙re

system,比如
文件格式
file里面
现svn
file
案,
job hunting,

class,

【在 r******n 的大作中提到】
: 今天又被一道这种题目弄郁闷了,那人叫我OOD设计一个version control system,比如
: 就是SVN,怎么design? 我大致说job是个class, file是个class,然后不同的文件格式
: 可以subclass file, job里面可以包含check-in, check-out等methods;file里面
: property有content,version#,有个compare method等。然后,他问如何实现svn
: status功能,我就说可以把两个file vector中的file进行比较,返回有修改的file
: list。似乎还问了如何实现branch功能,总之最后似乎电面的人十分不满意我的答案,
: 直接说“that's not what I expect to hear. wish you good luck in job hunting,
: blablabla” ......
: 的确不太会答这类题。因为这类题目太含糊,店面时,基本都是说完题目,我基本也得
: 马上回答。所以我一般都是挑出几个最明显的component,说这几个东西要成为class,

s*****n
发帖数: 5488
3
傻逼公司出的傻逼题目。没有OOA这么大的系统怎么做OOD? 而且电门里面怎么好交流?

hunting,

【在 r******n 的大作中提到】
: 今天又被一道这种题目弄郁闷了,那人叫我OOD设计一个version control system,比如
: 就是SVN,怎么design? 我大致说job是个class, file是个class,然后不同的文件格式
: 可以subclass file, job里面可以包含check-in, check-out等methods;file里面
: property有content,version#,有个compare method等。然后,他问如何实现svn
: status功能,我就说可以把两个file vector中的file进行比较,返回有修改的file
: list。似乎还问了如何实现branch功能,总之最后似乎电面的人十分不满意我的答案,
: 直接说“that's not what I expect to hear. wish you good luck in job hunting,
: blablabla” ......
: 的确不太会答这类题。因为这类题目太含糊,店面时,基本都是说完题目,我基本也得
: 马上回答。所以我一般都是挑出几个最明显的component,说这几个东西要成为class,

m*********2
发帖数: 701
4
为啥这公司傻逼?
这道题蛮好的啊
OOAD就是可以把复杂的东西Abstract了

【在 s*****n 的大作中提到】
: 傻逼公司出的傻逼题目。没有OOA这么大的系统怎么做OOD? 而且电门里面怎么好交流?
:
: hunting,

c******t
发帖数: 391
5
帮顶,我也答不好OOD,是不是自己简单画一个UML会帮助理解一点?
记得看到一篇文章里面写的OOD四大原则就是找出entity, 分析每个entity对应method
, 设计子类继承,以及如果collaboration。
请指正:)
f****4
发帖数: 1359
6
做desgin的时候,最重要的是要了解客户(这里是面试的那人)到低要求是啥。你可以
说一下SVN有那些功能,然后问他你的desgin是否要全部cover这些功能。(一般情况,
一个面试的时间里面不可能把所有细节都cover到,别人会让你就某一个细节详细问的
)要是这些功能你不知道,你可以让人家解释一下。这个过程,是你了解需求的过程。
需求了解之后,你要做一些假设,比如这个系统是一个小系统,那就不需要对
scalability做考虑;大系统需要考虑scalability和performance(你可以先给出一个
可行方案,然后再改进;但是你一开始就提到你已经考虑这个问题了;这和后面别人反
问你scalability和performance怎么处理,你再改进是两回事了)
假设完之后,你需要把这个系统大体框架及各个部分的功能解释一边。比如,你的SVN
就压根没提到处理数据库的模块。。。
然后对主要模块进行类定义,函数定义。这里的定义,一定要cover到前面的需求。要
当心,在这个过程中,面的人完全会要一个新的功能,然后你的desgin解决不了。这个
时候,你前面的需求分析就起作用了——这是一个需求变更,所以,我需要重新desgin
我的方案。
如果这是一个onsite问题,在白板上大致写下讨论过程,类名成员变量,函数名;如果
是电话面试,那就必须和面的人来回的交流;而不是你自己blabla的说你认为的方案。
Good luck

hunting,

【在 r******n 的大作中提到】
: 今天又被一道这种题目弄郁闷了,那人叫我OOD设计一个version control system,比如
: 就是SVN,怎么design? 我大致说job是个class, file是个class,然后不同的文件格式
: 可以subclass file, job里面可以包含check-in, check-out等methods;file里面
: property有content,version#,有个compare method等。然后,他问如何实现svn
: status功能,我就说可以把两个file vector中的file进行比较,返回有修改的file
: list。似乎还问了如何实现branch功能,总之最后似乎电面的人十分不满意我的答案,
: 直接说“that's not what I expect to hear. wish you good luck in job hunting,
: blablabla” ......
: 的确不太会答这类题。因为这类题目太含糊,店面时,基本都是说完题目,我基本也得
: 马上回答。所以我一般都是挑出几个最明显的component,说这几个东西要成为class,

c******t
发帖数: 391
7
赞细节! 请问一下,所谓的需求变更和重新设计,是不是涉及到refactoring、接口设
计和design pattern相关的知识呢?

SVN

【在 f****4 的大作中提到】
: 做desgin的时候,最重要的是要了解客户(这里是面试的那人)到低要求是啥。你可以
: 说一下SVN有那些功能,然后问他你的desgin是否要全部cover这些功能。(一般情况,
: 一个面试的时间里面不可能把所有细节都cover到,别人会让你就某一个细节详细问的
: )要是这些功能你不知道,你可以让人家解释一下。这个过程,是你了解需求的过程。
: 需求了解之后,你要做一些假设,比如这个系统是一个小系统,那就不需要对
: scalability做考虑;大系统需要考虑scalability和performance(你可以先给出一个
: 可行方案,然后再改进;但是你一开始就提到你已经考虑这个问题了;这和后面别人反
: 问你scalability和performance怎么处理,你再改进是两回事了)
: 假设完之后,你需要把这个系统大体框架及各个部分的功能解释一边。比如,你的SVN
: 就压根没提到处理数据库的模块。。。

f****4
发帖数: 1359
8
需求变更是像这么个东西:
你一开始被要求设计一个手机,你设计了
结果人家说要这个手机能剃胡子,那这就是需求变更
refactoring象这么个东西:
你把你的车换了更好的轮胎,引擎,刹车
车还是车,只是内在更好了
接口设计像这么个东西:
你设计了个5叉插座,然后厂家都生产了5叉插头,产品大卖
然后,你突然要求修改5叉为6叉——你让人家已经生产的产品怎么办?剪掉插头,自己
再绑一个上去?(其实你也知道没这么简单的)
所有public出去的接口,等你再想修改的时候就没那么简单了(除非没一个人用过这个
接口)
design pattern就像说明书
告诉了你碰到啥样的情况,可以用啥样的办法来设计
其实,很多时候,系统要是根本就没有变化,根本不需要修改设计,不要做
refactoring的话,design pattern的最大优势根本体现不出来

【在 c******t 的大作中提到】
: 赞细节! 请问一下,所谓的需求变更和重新设计,是不是涉及到refactoring、接口设
: 计和design pattern相关的知识呢?
:
: SVN

r******n
发帖数: 170
9
多谢详细的回复。
我的理解你说的第一个design阶段,就是OOA。但是通常这里要求设计的对象,默认都
是大家都知道的东西,比如chess game, vending machine, SVN。所以基本的功能需求
,可以说是明确的,的确是可以跳过这一步。因为面试者基本也就是要的现有功能。我
之前碰到的面试者基本不会要你去做这种详细的analysis,基本就是上来就问有哪些key
class (fzzh24的意思是:我们应该把话题引到回功能需求的讨论?我觉得这样子往
往在店面时会耗太多时间吧。)。我觉得这块最难,因为每个class内具体的method,
attribute,会有很多很多,面试者似乎也不需要你把它们都说出来。所以,我觉得最
困难的就是如何想到把面试者想听到的这些key class全部报出来,是最关键的。接下
来的pattern, 通常简单的subclass, composition 就能搞定面试者的需求。要是面试
者这时候提出一些具体的feature,往往就是引导你往现有class里加method,或者希望
你提出一个新class,然后怎么class interaction。
我的理解最难的地方就是:对一个貌似熟悉的事物的design题上来,我们通常都是作为
用户来熟悉这个事物的。也就是我们只熟悉最后这个主class的public interface,但
是它后面需要哪些key support class,往往在店面听完问题1-2分钟马上开始说,很不
容易。比如你说的SVN后面有数据库的概念,我的确压根就没想到,或者说压根就不知
道。

SVN

【在 f****4 的大作中提到】
: 做desgin的时候,最重要的是要了解客户(这里是面试的那人)到低要求是啥。你可以
: 说一下SVN有那些功能,然后问他你的desgin是否要全部cover这些功能。(一般情况,
: 一个面试的时间里面不可能把所有细节都cover到,别人会让你就某一个细节详细问的
: )要是这些功能你不知道,你可以让人家解释一下。这个过程,是你了解需求的过程。
: 需求了解之后,你要做一些假设,比如这个系统是一个小系统,那就不需要对
: scalability做考虑;大系统需要考虑scalability和performance(你可以先给出一个
: 可行方案,然后再改进;但是你一开始就提到你已经考虑这个问题了;这和后面别人反
: 问你scalability和performance怎么处理,你再改进是两回事了)
: 假设完之后,你需要把这个系统大体框架及各个部分的功能解释一边。比如,你的SVN
: 就压根没提到处理数据库的模块。。。

f****4
发帖数: 1359
10
数据库是SVN数据库,我也不知道svn到底是怎么存储的
OOA就是交流的过程,哪怕是电面也是这样
SVN的话,你可以说支持创建SVN数据库,支持文件add, commit,update,这是最基本
的功能了。这时候,面的人可能就要求你增加branch的概念。在OOA的时候就让他提出
来,比在最后追问好多了。

key

【在 r******n 的大作中提到】
: 多谢详细的回复。
: 我的理解你说的第一个design阶段,就是OOA。但是通常这里要求设计的对象,默认都
: 是大家都知道的东西,比如chess game, vending machine, SVN。所以基本的功能需求
: ,可以说是明确的,的确是可以跳过这一步。因为面试者基本也就是要的现有功能。我
: 之前碰到的面试者基本不会要你去做这种详细的analysis,基本就是上来就问有哪些key
: class (fzzh24的意思是:我们应该把话题引到回功能需求的讨论?我觉得这样子往
: 往在店面时会耗太多时间吧。)。我觉得这块最难,因为每个class内具体的method,
: attribute,会有很多很多,面试者似乎也不需要你把它们都说出来。所以,我觉得最
: 困难的就是如何想到把面试者想听到的这些key class全部报出来,是最关键的。接下
: 来的pattern, 通常简单的subclass, composition 就能搞定面试者的需求。要是面试

相关主题
Principal Engineer position open at AmazonMultiple Openings for ME/EE/CS in Santa Clara, California
中国上海职位:Software ArchitectMultiple Openings in Santa Clara, CA
Sponsor Green card (Within 6 month) for software Engineer一些面向对象的基本问题
进入JobHunting版参与讨论
s*****n
发帖数: 5488
11
面试官:现在,你要做一个app,读入一个文件名,该文件可以是xml、excel表格、
blah blah(他一共举了四种不同的文件名),然后把它显示在一个窗口里。画出你需
要的模块来。
我:好的,我需要一个parse文件的模块,一个显示文件的模块……
面试官:假设这些你都已经有了。你有了四个API,可以分别读入并且parse我说的这四
种文件,你也有了一个API可以用来显示被parse好的文件。
看一个很适合电面的OOD例子。很小很具体。
如果你知道用polymorphism. good enough.
如果你知道在加上一个simple factory来最小化client side changes. almost
correct.
面管想扩展的话,还可以很多分支可以问。
而题目SVN这个问题,居然有人考虑到数据库这种实现层面的问题了。估计100个人有
100个回答方法。你说到底面试这人是知道还是不知道OOD呢?
A家就爱问这种傻比问题感觉还很好。类似的例子还有那个正则表达式查电话的问题。
人家不是不会,而是误解了你要问的问题。
f****4
发帖数: 1359
12
都说了,数据库是SVN数据库。。。
英文叫做 SVN reposity

【在 s*****n 的大作中提到】
: 面试官:现在,你要做一个app,读入一个文件名,该文件可以是xml、excel表格、
: blah blah(他一共举了四种不同的文件名),然后把它显示在一个窗口里。画出你需
: 要的模块来。
: 我:好的,我需要一个parse文件的模块,一个显示文件的模块……
: 面试官:假设这些你都已经有了。你有了四个API,可以分别读入并且parse我说的这四
: 种文件,你也有了一个API可以用来显示被parse好的文件。
: 看一个很适合电面的OOD例子。很小很具体。
: 如果你知道用polymorphism. good enough.
: 如果你知道在加上一个simple factory来最小化client side changes. almost
: correct.

m*********2
发帖数: 701
13
“估计100个人有
100个回答方法。你说到底面试这人是知道还是不知道OOD呢”
他只是想知道你的想法
there is no right or wrong answer.
I hope all interview questions are like this.

【在 s*****n 的大作中提到】
: 面试官:现在,你要做一个app,读入一个文件名,该文件可以是xml、excel表格、
: blah blah(他一共举了四种不同的文件名),然后把它显示在一个窗口里。画出你需
: 要的模块来。
: 我:好的,我需要一个parse文件的模块,一个显示文件的模块……
: 面试官:假设这些你都已经有了。你有了四个API,可以分别读入并且parse我说的这四
: 种文件,你也有了一个API可以用来显示被parse好的文件。
: 看一个很适合电面的OOD例子。很小很具体。
: 如果你知道用polymorphism. good enough.
: 如果你知道在加上一个simple factory来最小化client side changes. almost
: correct.

t******e
发帖数: 98
14
这个总结很好,要赞!设计类的面试问题对于有工作经验的申请者非常重要,很多时候
是区分
senior/junior level的分水岭。我也来分享一下最近碰到的A公司设计面试题。题目就
是设计类
似于ebay的bid功能。我感觉在解答这类问题之前一定要和面试官好好沟通,摸清楚对
方想要考察的
是哪个层面,最好按照top down design 的思路,首先保证大的方向是对方想要的。比
如这个问
题我一上来就按照OOD的思路列出backend部分需要的模块,以及各个object之间的
interaction,有了对象操作的定义如何设计文件存储结构等等。但是讲了一半发现面
试官想要的
其实是整体architecture的设计,类似于multiple tier system design,而不是只见树
木不
见森林的ADT描述。面试的时候碰到这类设计问题一定要问清楚specification和use
cases,否
则答非所问会给对方留下很不好的印象。但是话说回来,这类问题就像是高考中的作文
主观性太强,
一方面面试者需要有很好的积累,另一方面面试官也应该有很好的修养,懂得如何分别
对待面试者给
出的千奇百怪的解答。我在M公司工作做过不少设计,也参加过同事的design review,
我敢肯定地
说不同的review committee 对同一份design spec给出的feedback会截然不同,甚至在
很多
具体实现上会给出大相径庭的建议。关于准备这类问题的书籍,推荐"Agile Software
Development: Principles, Patterns and Practices",希望能有所帮助。

SVN

【在 f****4 的大作中提到】
: 做desgin的时候,最重要的是要了解客户(这里是面试的那人)到低要求是啥。你可以
: 说一下SVN有那些功能,然后问他你的desgin是否要全部cover这些功能。(一般情况,
: 一个面试的时间里面不可能把所有细节都cover到,别人会让你就某一个细节详细问的
: )要是这些功能你不知道,你可以让人家解释一下。这个过程,是你了解需求的过程。
: 需求了解之后,你要做一些假设,比如这个系统是一个小系统,那就不需要对
: scalability做考虑;大系统需要考虑scalability和performance(你可以先给出一个
: 可行方案,然后再改进;但是你一开始就提到你已经考虑这个问题了;这和后面别人反
: 问你scalability和performance怎么处理,你再改进是两回事了)
: 假设完之后,你需要把这个系统大体框架及各个部分的功能解释一边。比如,你的SVN
: 就压根没提到处理数据库的模块。。。

m*********2
发帖数: 701
15
赞, exactly!

【在 t******e 的大作中提到】
: 这个总结很好,要赞!设计类的面试问题对于有工作经验的申请者非常重要,很多时候
: 是区分
: senior/junior level的分水岭。我也来分享一下最近碰到的A公司设计面试题。题目就
: 是设计类
: 似于ebay的bid功能。我感觉在解答这类问题之前一定要和面试官好好沟通,摸清楚对
: 方想要考察的
: 是哪个层面,最好按照top down design 的思路,首先保证大的方向是对方想要的。比
: 如这个问
: 题我一上来就按照OOD的思路列出backend部分需要的模块,以及各个object之间的
: interaction,有了对象操作的定义如何设计文件存储结构等等。但是讲了一半发现面

f****4
发帖数: 1359
16
Agile处理需求变更,快速原型法都是非常强大——只要是客户,都会喜欢的
关于OOA和OOD还有一点,可能大家都没注意到的是:这问题问的人是一个什么角色
如果那个人是搞系统架构的,你要回答的几乎就是high level design的东西,具体实
现环节,可以大胆假设已经有相关模块了。需要注意的是,这个时候系统功能会显的更
重要。这里不但是现有功能还要对可预测的新政功能留下支持的余地。
如果那人是个project leader,他会更关心detail design的东西。也就是说,上面那
些你假设已经有的东西,这里可能会对某一些要求你进行设计。
如果那人是个Sr Engineer,他会更关心implementation design,包括函数接口,变量
,数据库实现,并发等等
给个极端的例子,我给一个mananger问到“如何才能把你thesis做的东西,转换成产品
,并且卖给客户”。我的回答是从技术上说的。人家最后只说了一句话“我会告诉他,
我这产品能帮你省钱/赚钱”

【在 t******e 的大作中提到】
: 这个总结很好,要赞!设计类的面试问题对于有工作经验的申请者非常重要,很多时候
: 是区分
: senior/junior level的分水岭。我也来分享一下最近碰到的A公司设计面试题。题目就
: 是设计类
: 似于ebay的bid功能。我感觉在解答这类问题之前一定要和面试官好好沟通,摸清楚对
: 方想要考察的
: 是哪个层面,最好按照top down design 的思路,首先保证大的方向是对方想要的。比
: 如这个问
: 题我一上来就按照OOD的思路列出backend部分需要的模块,以及各个object之间的
: interaction,有了对象操作的定义如何设计文件存储结构等等。但是讲了一半发现面

n********p
发帖数: 708
17
mark~~~~~~~~~~~~
b***j
发帖数: 336
18
这么好的thread为啥没mark?
1 (共1页)
进入JobHunting版参与讨论
相关主题
电话及onsite面试的一些小提示job opening at scottsdale, AZ
Amazon面经Principal Engineer position open at Amazon
OOD amazon questions中国上海职位:Software Architect
Amazon OO Design 经典题的思考Sponsor Green card (Within 6 month) for software Engineer
Principal Software Engineer的工资Multiple Openings for ME/EE/CS in Santa Clara, California
招人,又招人了。Multiple Openings in Santa Clara, CA
3 openings-SF Bay Area Candidates ONLY. Thanks!一些面向对象的基本问题
关于design pattern请问大牛们,设计题如何复习?
相关话题的讨论汇总
话题: svn话题: ood话题: design话题: class话题: file