Redian新闻
>
GoF看完了以后感觉面试中OO设计就是扯淡
avatar
GoF看完了以后感觉面试中OO设计就是扯淡# JobHunting - 待字闺中
T1
1
keyboard掉了几个key,一看居然还在warranty之内,就要求换keyboard,居然非要把
整机寄过去,我说我还得用本本呢都不行,lenovo当时同样的情况二话没说就寄了新
keyboard出来,也不用退旧的。
$95买的dead laptop,卖家声称主板破裂,结果回来拆拆装装就好了,什么问题没有,
以前不turn on是power adapter是坏的。
去网上查了sn,居然还在warranty之内。dv4-1281us,很新的model了。
本来挺好的一laptop,我这一拆一装,把lcd的bezel弄裂了,买一个得花$50左右呢。
avatar
p*2
2
OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
能design的完美呢?
比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
你用design pattern, 面试官可能会说你over design。
你不用design pattern, 面试官可能会说你design 不 flexible
你用继承,面试官可能会说你反OO,影响了封装性。
你用接口,面试官可能会说你增加了不必要的冗余代码
总之OO内部的意见就不统一,OO的三大特性都有问题。
封装性造成了不承认全局变量,因此出了Singleton pattern, 然后Singleton又被批评
反OO
继承性本来可以防止冗余,但是增加了耦合,被批评影响了封装性,所以有了中意与组
合而不是继承,继承能不用就不用
多态性承认行为的存在,但是又不承认函数的存在,其实行为本身就是函数,造成了很
多不必要的麻烦
我感觉是有点无所适从,不知道有没有大牛指点一下。OO design面试怎么搞才对?
avatar
d*1
3
哈哈 所以我活生生被我的HP整成HP黑了
么事 上次你那个sony不是赚大发了么

【在 T1 的大作中提到】
: keyboard掉了几个key,一看居然还在warranty之内,就要求换keyboard,居然非要把
: 整机寄过去,我说我还得用本本呢都不行,lenovo当时同样的情况二话没说就寄了新
: keyboard出来,也不用退旧的。
: $95买的dead laptop,卖家声称主板破裂,结果回来拆拆装装就好了,什么问题没有,
: 以前不turn on是power adapter是坏的。
: 去网上查了sn,居然还在warranty之内。dv4-1281us,很新的model了。
: 本来挺好的一laptop,我这一拆一装,把lcd的bezel弄裂了,买一个得花$50左右呢。

avatar
r*e
4
我是对这玩意一知半懂,所以就不从技术上讨论了。
但是如果我完全明白利弊的话,我会优缺点都提,然后
问面试官他们工作中怎么用。让他多说几句话也能磨蹭点时间,
反正我该说的也都说了,只要对方不是傻子就能看出你是个
明白人。

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
T1
5
这个本来应该也很赚的,C2D T6400, 4GB, 320GB, DVDRW, wireless abgn, 12 cell
battery, 还在一年期的warranty之内。tnnd的那个卖本本的非说他打开看过,主板有
个裂纹,是个hairline,一般看不见,我就信以为真了,拆的时候也没看manual,胡乱
硬拆,损坏了不少塑料件,否则,换个ac adapter就一台新电脑,本来成色还好,就是
却两个键。

【在 d*****1 的大作中提到】
: 哈哈 所以我活生生被我的HP整成HP黑了
: 么事 上次你那个sony不是赚大发了么

avatar
z*y
6
代码题目全写好了就行了,我怎么感觉design问题也就是走个过场,只要能自圆其说就
可以了。你跟面试官聊得开心就好了 扯扯淡就完了
avatar
T1
7
hp要给2nd day的shipping label和packaging material,还可以。
claim的只是key掉了,不知道寄过去,他们看到坏的bezel会不会顺手给换了,还是觉
得电脑被abuse了,invalidate warranty,连keyboard也不给修了。

【在 d*****1 的大作中提到】
: 哈哈 所以我活生生被我的HP整成HP黑了
: 么事 上次你那个sony不是赚大发了么

avatar
p*2
8
我突发奇想,觉得OO design的题实在是妙,以后面某族人可以这样?
问:你用了Java几年了,知道design pattern吗?
No. (面试结束,feedback: 不爱学习)
Yes.
问:那你知道这个DP吗?能解释一下吗?
No. (面试结束,学习能力有问题)
Yes. 解释不清楚。(面试结束,理解能力有问题)
如果能回答出来。继续问:那你知道这个DP吗?解释一下。
如果某一个没回答好。(面试结束,feedback里面只说这个)
如果23个都能回答好。
问:那我们做一个OO design的题吧?
如果不用DP。(面试结束。不能运用所学的知识在项目中)
如果用DP。(面试结束,此人只会套pattern,不能灵活设计,加入team会有大问题的)
更详细的feedback
他用这个pattern是违反OO原则的,
他用这个pattern会引起代码不必要的复杂性,以后很难维护
等等,等等。
avatar
t*e
9
多年前我的dell本也是说掉了,就直接寄了个新的过来

【在 T1 的大作中提到】
: hp要给2nd day的shipping label和packaging material,还可以。
: claim的只是key掉了,不知道寄过去,他们看到坏的bezel会不会顺手给换了,还是觉
: 得电脑被abuse了,invalidate warranty,连keyboard也不给修了。

avatar
p*2
10

要看什么公司,A经常用这个来锯人

【在 z*******y 的大作中提到】
: 代码题目全写好了就行了,我怎么感觉design问题也就是走个过场,只要能自圆其说就
: 可以了。你跟面试官聊得开心就好了 扯扯淡就完了

avatar
a*e
11
bso。。。。。

【在 T1 的大作中提到】
: keyboard掉了几个key,一看居然还在warranty之内,就要求换keyboard,居然非要把
: 整机寄过去,我说我还得用本本呢都不行,lenovo当时同样的情况二话没说就寄了新
: keyboard出来,也不用退旧的。
: $95买的dead laptop,卖家声称主板破裂,结果回来拆拆装装就好了,什么问题没有,
: 以前不turn on是power adapter是坏的。
: 去网上查了sn,居然还在warranty之内。dv4-1281us,很新的model了。
: 本来挺好的一laptop,我这一拆一装,把lcd的bezel弄裂了,买一个得花$50左右呢。

avatar
p*2
12

这个建议不错。不能跳进面试官设计的圈套中。不过贼一些的面试官是不跟你讨论的。

【在 r*****e 的大作中提到】
: 我是对这玩意一知半懂,所以就不从技术上讨论了。
: 但是如果我完全明白利弊的话,我会优缺点都提,然后
: 问面试官他们工作中怎么用。让他多说几句话也能磨蹭点时间,
: 反正我该说的也都说了,只要对方不是傻子就能看出你是个
: 明白人。
:
: design

avatar
r*e
13
前提是得知道得差不多才行啊,先说个一溜够,再反问。
否则净问对方或回避,那肯定完蛋。

【在 p*****2 的大作中提到】
:
: 这个建议不错。不能跳进面试官设计的圈套中。不过贼一些的面试官是不跟你讨论的。

avatar
j*g
15
面试官想搞你,本来就是很容易,和design pattern有什么关系。

【在 p*****2 的大作中提到】
: 我突发奇想,觉得OO design的题实在是妙,以后面某族人可以这样?
: 问:你用了Java几年了,知道design pattern吗?
: No. (面试结束,feedback: 不爱学习)
: Yes.
: 问:那你知道这个DP吗?能解释一下吗?
: No. (面试结束,学习能力有问题)
: Yes. 解释不清楚。(面试结束,理解能力有问题)
: 如果能回答出来。继续问:那你知道这个DP吗?解释一下。
: 如果某一个没回答好。(面试结束,feedback里面只说这个)
: 如果23个都能回答好。

avatar
T*s
17
高,说不定人家已经这样玩了
说你行你就行,不行也行
说你不行你就行不行,行也不行

【在 p*****2 的大作中提到】
: 我突发奇想,觉得OO design的题实在是妙,以后面某族人可以这样?
: 问:你用了Java几年了,知道design pattern吗?
: No. (面试结束,feedback: 不爱学习)
: Yes.
: 问:那你知道这个DP吗?能解释一下吗?
: No. (面试结束,学习能力有问题)
: Yes. 解释不清楚。(面试结束,理解能力有问题)
: 如果能回答出来。继续问:那你知道这个DP吗?解释一下。
: 如果某一个没回答好。(面试结束,feedback里面只说这个)
: 如果23个都能回答好。

avatar
q*x
18
二弟,全局变量和单点不是一回事吧。全局变量是一个类型和名字组合到处都可访问。
单点是这个类型只能有一个。

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
19

你说的很对。全局变量比单点更灵活,因此有了全局变量不但解决了单点问题,还可以
同一个类型有几个全局实例,因此应用更广泛。根据孤独霸的说法,Spring里的
Singleton已经进化到了全局变量了。

【在 q****x 的大作中提到】
: 二弟,全局变量和单点不是一回事吧。全局变量是一个类型和名字组合到处都可访问。
: 单点是这个类型只能有一个。
:
: design

avatar
p*2
20

是。昨天已经讨论过了。A家的一个组就是这么玩的。说别人不懂OO锯掉了。

【在 T*********s 的大作中提到】
: 高,说不定人家已经这样玩了
: 说你行你就行,不行也行
: 说你不行你就行不行,行也不行

avatar
p*2
21

相对来说算法整人更难一些,因为答案还是比较标准的。除非feedback作假,否则HC还
是能判断的。如果你的题目太难,太偏,HC也清楚。OO的话随意度就大多了。

【在 j******g 的大作中提到】
: 面试官想搞你,本来就是很容易,和design pattern有什么关系。
avatar
x*d
22
grandpa 2, i understand where you come from.
However, design is art, not science, right?
For example, One piece of GoF advice was “favor aggregation over
inheritance.” it means, don’t inherit. Instead, delegate from one object
to another. But it also says, use inheritance to
hide variation, not to achieve reuse of code.
So, you see it is very subtle, you can give a lot of blah blah blah to the
interviewer, as long as you can make yourself likable, you will get the
offer. Some questions' intention is not getting a coder, but a coder who the
boss can go having beer together.
avatar
w*z
23
grandpa? 你把大家对二爷的敬仰提升到一个新的高度。

the

【在 x****d 的大作中提到】
: grandpa 2, i understand where you come from.
: However, design is art, not science, right?
: For example, One piece of GoF advice was “favor aggregation over
: inheritance.” it means, don’t inherit. Instead, delegate from one object
: to another. But it also says, use inheritance to
: hide variation, not to achieve reuse of code.
: So, you see it is very subtle, you can give a lot of blah blah blah to the
: interviewer, as long as you can make yourself likable, you will get the
: offer. Some questions' intention is not getting a coder, but a coder who the
: boss can go having beer together.

avatar
l*b
24
这种本来就是有需求就上,没需求就不用。没人说一定要Pattern才能写code的吧?
Pattern用多了也不见的code就多清晰,多美丽了吧?
avatar
p*2
25

我第一次看到的时候迷惑了好一会儿。

【在 w**z 的大作中提到】
: grandpa? 你把大家对二爷的敬仰提升到一个新的高度。
:
: the

avatar
p*2
26

我的感觉如果OO的话,很难不用pattern。如果不是OO的话,那GoF就不一定有用了。

【在 l**b 的大作中提到】
: 这种本来就是有需求就上,没需求就不用。没人说一定要Pattern才能写code的吧?
: Pattern用多了也不见的code就多清晰,多美丽了吧?

avatar
p*2
27

the
design is art, not science, right?
说实话,这句我不是很明白。能ZKSS吗?
我的意思是说,编程序有不同的方法,OO只是其中一种,而且OO本身也有很多问题,所
以因为别人不懂OO就reject不是很公平。相对而言,算法更靠谱。比如gate大牛说过一
个人不懂tree,但是你给他讲了这个数据结构以后,他就马上理解,很快把代码写好。
如果没有做过OO的,你给他讲一下,他很难应用到面试中去。但是如果他聪明的话,OO
不是多难高深的东西。

【在 x****d 的大作中提到】
: grandpa 2, i understand where you come from.
: However, design is art, not science, right?
: For example, One piece of GoF advice was “favor aggregation over
: inheritance.” it means, don’t inherit. Instead, delegate from one object
: to another. But it also says, use inheritance to
: hide variation, not to achieve reuse of code.
: So, you see it is very subtle, you can give a lot of blah blah blah to the
: interviewer, as long as you can make yourself likable, you will get the
: offer. Some questions' intention is not getting a coder, but a coder who the
: boss can go having beer together.

avatar
p*2
28
不过如果把OO跟behavioral 归在一类,我到同意。
avatar
x*d
29

Martin Fowler says, Refactoring is the process of changing a software system
in such a way that it does not alter the external behavior of the code yet
improves its internal structure. It is a disciplined way to clean up code
that minimizes the chances of introducing bugs. In essence when you refactor
you are improving the design of the code after it has been written.
So, it is not necessary to have the design done perfect in the first place,
or forcing ourselves using all patterns in OO monogramming, otherwise we don
't need to do refactoring.
The key is using the correct amount of design when is needed.
Using an interface where one may or may not be needed is not necessarily a
bad thing if everyone understands interfaces. But in other situations, it is
a bad thing raising complexity, for example, a value object to hold a
parameter, say, when one isn't necessary.

【在 p*****2 的大作中提到】
: 不过如果把OO跟behavioral 归在一类,我到同意。
avatar
x*d
30

OO
Should I call you 2ye if not grandpa? LOL
It is hard to ZK too much. Basically design is for aesthetics reason, (kind
of, though is not 100% correct to say so), it is not about external behavior
or it is functionality, as seen in Martin Fowler quote. Whatever about
aesthetics features we can call it art. Am I right?

【在 p*****2 的大作中提到】
: 不过如果把OO跟behavioral 归在一类,我到同意。
avatar
p*2
31
这正是我的观点呀

【在 x****d 的大作中提到】
:
: OO
: Should I call you 2ye if not grandpa? LOL
: It is hard to ZK too much. Basically design is for aesthetics reason, (kind
: of, though is not 100% correct to say so), it is not about external behavior
: or it is functionality, as seen in Martin Fowler quote. Whatever about
: aesthetics features we can call it art. Am I right?

avatar
g*x
32
二爷,我对您老的崇拜又多了一分!
国人面我,当我问你怎么想的,好的会跟我讲讲他的想法,如果不会,正好学习了;也
有的说时间不多了继续问下一个问题。A3几乎都说这个问题很OPEN,没有正确答案,
我继续追问,也死活不说;个别的哈哈一笑,说公司规定不能说答案。
感谢你出的这个好点子,周五就用在毛子哥身上试试, 以便我看中的一同胞通过。

【在 p*****2 的大作中提到】
: 我突发奇想,觉得OO design的题实在是妙,以后面某族人可以这样?
: 问:你用了Java几年了,知道design pattern吗?
: No. (面试结束,feedback: 不爱学习)
: Yes.
: 问:那你知道这个DP吗?能解释一下吗?
: No. (面试结束,学习能力有问题)
: Yes. 解释不清楚。(面试结束,理解能力有问题)
: 如果能回答出来。继续问:那你知道这个DP吗?解释一下。
: 如果某一个没回答好。(面试结束,feedback里面只说这个)
: 如果23个都能回答好。

avatar
p*2
33

kind
behavior
你这个我明白。我不明白的是这个
design is art, not science, right?

【在 x****d 的大作中提到】
:
: OO
: Should I call you 2ye if not grandpa? LOL
: It is hard to ZK too much. Basically design is for aesthetics reason, (kind
: of, though is not 100% correct to say so), it is not about external behavior
: or it is functionality, as seen in Martin Fowler quote. Whatever about
: aesthetics features we can call it art. Am I right?

avatar
x*d
34
I don't understand what you don't understand ah....

【在 p*****2 的大作中提到】
:
: kind
: behavior
: 你这个我明白。我不明白的是这个
: design is art, not science, right?

avatar
p*2
35

art跟science是一对矛盾体吗?

【在 x****d 的大作中提到】
: I don't understand what you don't understand ah....
avatar
p*2
36

哈哈。不要客气。这是我看板上大家面试的经历总结的。

【在 g****x 的大作中提到】
: 二爷,我对您老的崇拜又多了一分!
: 国人面我,当我问你怎么想的,好的会跟我讲讲他的想法,如果不会,正好学习了;也
: 有的说时间不多了继续问下一个问题。A3几乎都说这个问题很OPEN,没有正确答案,
: 我继续追问,也死活不说;个别的哈哈一笑,说公司规定不能说答案。
: 感谢你出的这个好点子,周五就用在毛子哥身上试试, 以便我看中的一同胞通过。

avatar
t*a
37
同意design就是art。和算法不同,art之间的比较不是简单的空间时间什么的,而且也
没有标准答案。
avatar
p*2
38

大牛你有没有什么书或者资源讲OO design是art不是science的呢?这个我想搞明白点
。functional design也是art不是science吗?是不是任何design都是art不是science


【在 t****a 的大作中提到】
: 同意design就是art。和算法不同,art之间的比较不是简单的空间时间什么的,而且也
: 没有标准答案。

avatar
s*s
39
假定楼主的前提设定是正确的,
那么,可以得到的推论是:
出这种题目来面试,要么这个面试官要搞掉你(譬如阿三们),因为怎么样都能挑出错
来;
要么面试官有心放水,也就随便聊聊,磨磨时间,无伤大雅。
不知道是不是这样?

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
40

还有一种就是作为behavioral来面,考察communication, team work等等。其实这些也
挺重要的。

【在 s**s 的大作中提到】
: 假定楼主的前提设定是正确的,
: 那么,可以得到的推论是:
: 出这种题目来面试,要么这个面试官要搞掉你(譬如阿三们),因为怎么样都能挑出错
: 来;
: 要么面试官有心放水,也就随便聊聊,磨磨时间,无伤大雅。
: 不知道是不是这样?
:
: design

avatar
k*e
41
面试重要的不是答案的正确与否,是你这个人要入面试官的法眼啊

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
42

确实

【在 k****e 的大作中提到】
: 面试重要的不是答案的正确与否,是你这个人要入面试官的法眼啊
:
: design

avatar
w*z
43
每个人的taste都是不一样。我们组,两哥们,一个最讨厌inheritenc,一个就特别喜
欢用,谁对谁错?个人喜好不同啦。

science

【在 p*****2 的大作中提到】
:
: 确实

avatar
Q*e
44
好像C++的创建者对创建C++后悔不已, 忘记从哪里读的了

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
45

就是有这个问题。

【在 w**z 的大作中提到】
: 每个人的taste都是不一样。我们组,两哥们,一个最讨厌inheritenc,一个就特别喜
: 欢用,谁对谁错?个人喜好不同啦。
:
: science

avatar
y*n
46
面试中,有些东西是我们可控的,有些东西是我们不可控的。
我们只能尽量把可控的东西做好,尽量完美,无懈可击。
对于不可控的,就自然选择吧。比如:面试官歧视华人,嫉贤妒能,或者看不懂你代码
的优化...。这种情况我们真的需要无底线地修改自己来迎合面试官的癖好吗?当然,
求职养家的和骑驴找马的会有不同的权衡。
一个面试官可以痛恨singleton,甚至痛恨所有的design pattern。但是他会不会因为
我在面试中用了singleton就认为我一无是处不可救药罪大恶极?如果连这一点包容都
没有,废就废了吧,因为我真的不知道怎样和这样的人合作。(我在工作中的确碰到过
这样的人)
对于面试,我们不可能让所有的面试官都满意。我们只能尽量让多数人满意。
什么人更容易拿到offer,最简单一句话:别人愿意和你一起工作的人。
这个标准不仅仅指技术,还有个性,交流,见识,经验,甚至包含幽默感。

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
47

yishan大牛出手就是不一样。膜拜。

【在 y****n 的大作中提到】
: 面试中,有些东西是我们可控的,有些东西是我们不可控的。
: 我们只能尽量把可控的东西做好,尽量完美,无懈可击。
: 对于不可控的,就自然选择吧。比如:面试官歧视华人,嫉贤妒能,或者看不懂你代码
: 的优化...。这种情况我们真的需要无底线地修改自己来迎合面试官的癖好吗?当然,
: 求职养家的和骑驴找马的会有不同的权衡。
: 一个面试官可以痛恨singleton,甚至痛恨所有的design pattern。但是他会不会因为
: 我在面试中用了singleton就认为我一无是处不可救药罪大恶极?如果连这一点包容都
: 没有,废就废了吧,因为我真的不知道怎样和这样的人合作。(我在工作中的确碰到过
: 这样的人)
: 对于面试,我们不可能让所有的面试官都满意。我们只能尽量让多数人满意。

avatar
g*g
48
singleton是一个全局的行为,不是一个全局的变量。singleton更接近于一个static
function。只不过singleton的形式,可以有更复杂的控制。继承或者组合,纯粹看那
种更接近于现实世界的建模,而且不是一成不变的,重构从一种变成另一种是完全可以
的。OO的核心本来就是encapsulation,易于扩展,想着最初的设计把日后所有的变化
都考虑在内,是不现实的。需要考虑的是不该耦合的地方不要耦合,否则日后变化很困
难。

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
49

我不是说了吗?这些DP很多都是因为OO不承认全局变量和函数造成的。Singleton就是
弥补OO这些缺陷的。如果static function根本不需要instance。

【在 g*****g 的大作中提到】
: singleton是一个全局的行为,不是一个全局的变量。singleton更接近于一个static
: function。只不过singleton的形式,可以有更复杂的控制。继承或者组合,纯粹看那
: 种更接近于现实世界的建模,而且不是一成不变的,重构从一种变成另一种是完全可以
: 的。OO的核心本来就是encapsulation,易于扩展,想着最初的设计把日后所有的变化
: 都考虑在内,是不现实的。需要考虑的是不该耦合的地方不要耦合,否则日后变化很困
: 难。
:
: design

avatar
g*g
50
你说的这个我不明白。java如果你愿意,定义一个public static variable是完全可以
的,这就是你的全局变量,相应的有static init block来做初始化,有static
function来处理数据。用singleton纯粹是为了encapsulation,OO认为全局变量会
使得refactoring困难,使得数据不能保证consistency,所以推荐encapsulation,不
是因为实现不了的缺陷。我觉得你把因果搞反了。

【在 p*****2 的大作中提到】
:
: 我不是说了吗?这些DP很多都是因为OO不承认全局变量和函数造成的。Singleton就是
: 弥补OO这些缺陷的。如果static function根本不需要instance。

avatar
t*a
51
个人感觉,这些design的书讲的基本原则就那么一些,而且二爷说的对,有些原则间有
些冲突,要取舍。..因此,没有完美的答案。
设计程序有点像人生哲学,每个人看重的都不一样。不能说那个人的原则就是完全正确
的哪个人就是完全错误的,要看问题背景等等。
多看看总是好的,设计程序还是充满创意的一件事情,多些知识会帮助自己在给定的问
题领域上选择相对好的方法
我这点上现在比较混乱,等待大牛来批我好长点知识..

science

【在 p*****2 的大作中提到】
:
: 我不是说了吗?这些DP很多都是因为OO不承认全局变量和函数造成的。Singleton就是
: 弥补OO这些缺陷的。如果static function根本不需要instance。

avatar
x*d
52

Singleton is thread safe, public static variable is not thread safe. I agree
with peking2, singleton is used for the purpose global variable.

【在 g*****g 的大作中提到】
: 你说的这个我不明白。java如果你愿意,定义一个public static variable是完全可以
: 的,这就是你的全局变量,相应的有static init block来做初始化,有static
: function来处理数据。用singleton纯粹是为了encapsulation,OO认为全局变量会
: 使得refactoring困难,使得数据不能保证consistency,所以推荐encapsulation,不
: 是因为实现不了的缺陷。我觉得你把因果搞反了。

avatar
p*2
53

你搞public static variable完全反OO了。就是因为不能这么搞,所以需要Singleton


【在 g*****g 的大作中提到】
: 你说的这个我不明白。java如果你愿意,定义一个public static variable是完全可以
: 的,这就是你的全局变量,相应的有static init block来做初始化,有static
: function来处理数据。用singleton纯粹是为了encapsulation,OO认为全局变量会
: 使得refactoring困难,使得数据不能保证consistency,所以推荐encapsulation,不
: 是因为实现不了的缺陷。我觉得你把因果搞反了。

avatar
p*2
54

你说的这些我很赞同。我觉得应该看具体的问题,当然最后可能也是tradeoff

【在 t****a 的大作中提到】
: 个人感觉,这些design的书讲的基本原则就那么一些,而且二爷说的对,有些原则间有
: 些冲突,要取舍。..因此,没有完美的答案。
: 设计程序有点像人生哲学,每个人看重的都不一样。不能说那个人的原则就是完全正确
: 的哪个人就是完全错误的,要看问题背景等等。
: 多看看总是好的,设计程序还是充满创意的一件事情,多些知识会帮助自己在给定的问
: 题领域上选择相对好的方法
: 我这点上现在比较混乱,等待大牛来批我好长点知识..
:
: science

avatar
p*2
55
Singleton is used when a single object needs to be instantiated and all
requested object access goes through this particular instance. This object
can maintain state if desired.
Static Utility is used when you have a class that is just stateless utility
functions.. it does not maintain state. An instance of the object is never
instantiated.
我正在看这个问题。这是so far I found的。
avatar
p*2
56
现在我的理解
goodbug说的public static variable显然是反OO,不过如果定义成private static
variable, 并且accessor都synchronized (通过class lock),感觉还是可行的。因此
,Singleton的优势在于灵活。
static的办法是没有instance的。Singleton有一个instance,但是later on, 根据需
求的改变可能转变为flyweight, 或者factory pattern, 这样可扩展性比static 强多
了。不知道这里理解对不对。
avatar
p*2
57

因此static不能代表global variable,因为global variable同一个类型可能有几个变
量。所以Singleton是更接近的。

【在 p*****2 的大作中提到】
: 现在我的理解
: goodbug说的public static variable显然是反OO,不过如果定义成private static
: variable, 并且accessor都synchronized (通过class lock),感觉还是可行的。因此
: ,Singleton的优势在于灵活。
: static的办法是没有instance的。Singleton有一个instance,但是later on, 根据需
: 求的改变可能转变为flyweight, 或者factory pattern, 这样可扩展性比static 强多
: 了。不知道这里理解对不对。

avatar
g*g
58
你这个完全是概念错误,singleton顾名思义,是为了保证系统只有一个instance,跟
全局变量完全没有关系。比如大部分的spring bean完全没有instance variable,都是
singleton,难道也能说是为了全局变量?同时,singleton也不能保证thread safe,
是否thread safe纯粹看具体实现。Spring bean至于传统singleton的一大优势是可以
继承,这个在写架构里也很有用。
回到为什么要保证只有一个instance,通常不过因为初始化比较慢,为了节省资源和快
速处理而已。在server端的程序这个很常见,而且eager init才是常见的形式。你读读
Spring IoC就明白了。

Singleton

【在 p*****2 的大作中提到】
:
: 因此static不能代表global variable,因为global variable同一个类型可能有几个变
: 量。所以Singleton是更接近的。

avatar
p*2
59

照你的意思不学Spring就不能理解Singleton?GoF哪年出的呀?Spring影子还没有吧。
不过我在研究一下Singleton,这样讨论一下挺好的。

【在 g*****g 的大作中提到】
: 你这个完全是概念错误,singleton顾名思义,是为了保证系统只有一个instance,跟
: 全局变量完全没有关系。比如大部分的spring bean完全没有instance variable,都是
: singleton,难道也能说是为了全局变量?同时,singleton也不能保证thread safe,
: 是否thread safe纯粹看具体实现。Spring bean至于传统singleton的一大优势是可以
: 继承,这个在写架构里也很有用。
: 回到为什么要保证只有一个instance,通常不过因为初始化比较慢,为了节省资源和快
: 速处理而已。在server端的程序这个很常见,而且eager init才是常见的形式。你读读
: Spring IoC就明白了。
:
: Singleton

avatar
p*2
60
so far found.
Singletons are often preferred to global variables because:
They do not pollute the global name space (or, in languages with namespaces,
their containing namespace) with unnecessary variables.[8]
They permit lazy allocation and initialization, whereas global variables in
many languages will always consume resources.
avatar
g*g
61
我一直强调的是,既然是可以抽象总结的东西,就可以用框架来实现。特别是
Singleton这么常见的东西,已经写进了jee spec,无数DI架构都实现的了,可以说是
语言的一部分。纠结于语言原始的实现毫无意义,现实使用中写java的人没几个会去手
工实现singleton,所以讨论实现的细节根本没什么意义。spring也不是java里第一个
实现这个概念的,ejb才是。spring只不过简化了。
这些是原始语言的缺陷也好,不是缺陷也好,都不重要。因为比build in singleton的
语言比如scala比,@Singleton提供了更好的可定制性和可扩展性。这才是OO的核心,
OO从来没有打算用语言本身来完成一切,简单的语言,强大的类库才是OO流行的原因。
喜欢FP的人总是觉得Java 500行的东西FP 100行就能实现,却没有意识到那500行早就
有人实现了,调用只需要两行。

【在 p*****2 的大作中提到】
: so far found.
: Singletons are often preferred to global variables because:
: They do not pollute the global name space (or, in languages with namespaces,
: their containing namespace) with unnecessary variables.[8]
: They permit lazy allocation and initialization, whereas global variables in
: many languages will always consume resources.

avatar
p*2
62
from iOS best practice
Fixing the problem: Singleton
One way of fixing the “I need to put all my global variables in the
AppDelegate” is to use Singletons. A singleton is a design pattern (and
implementation) ensuring that a given class exists with one and only one
instance. The developer can now store like variables and implementations
together with the confidence that the same data will be retained throughout
the application. In fact, the AppDelegate is held in a singleton of your
application ([UIApplication sharedApplication]).
avatar
p*2
63

看来我们没讨论同一个东西。你讨论的是J2EE的Singleton,我讨论的是GoF的
singleton。

【在 g*****g 的大作中提到】
: 我一直强调的是,既然是可以抽象总结的东西,就可以用框架来实现。特别是
: Singleton这么常见的东西,已经写进了jee spec,无数DI架构都实现的了,可以说是
: 语言的一部分。纠结于语言原始的实现毫无意义,现实使用中写java的人没几个会去手
: 工实现singleton,所以讨论实现的细节根本没什么意义。spring也不是java里第一个
: 实现这个概念的,ejb才是。spring只不过简化了。
: 这些是原始语言的缺陷也好,不是缺陷也好,都不重要。因为比build in singleton的
: 语言比如scala比,@Singleton提供了更好的可定制性和可扩展性。这才是OO的核心,
: OO从来没有打算用语言本身来完成一切,简单的语言,强大的类库才是OO流行的原因。
: 喜欢FP的人总是觉得Java 500行的东西FP 100行就能实现,却没有意识到那500行早就
: 有人实现了,调用只需要两行。

avatar
g*g
64
j2ee的singleton同样是从GoF来的,只不过实现由框架提供了而已。

【在 p*****2 的大作中提到】
:
: 看来我们没讨论同一个东西。你讨论的是J2EE的Singleton,我讨论的是GoF的
: singleton。

avatar
p*2
65

看来这次你概念错误了。
Singleton bean in Spring and Singleton pattern is quite different. Singleton
pattern says that one and only one instance of a particular class will ever
be created per classloader.
THe scope of Spring singleton is described as per container per bean. It is
the scope of bean definition to a single object instance per Spring IoC
container. The default scope in Spring in Singleton.
Eventhough the default scope is singleton, you can change the scope of bean
by specifying the scope attribute of element.


【在 g*****g 的大作中提到】
: j2ee的singleton同样是从GoF来的,只不过实现由框架提供了而已。
avatar
g*g
66
这个没有什么错,这就是我为什么强调Spring bean是一个更灵活更强大的Singleton实
现。
缺省是Singleton,但如果你愿意每次产生一个instance也可以。或者说,Spring bean
是Singelton的超集。回到前面,也是我说Singleton并不保证thread safe的原因。如
果singleton thread safe,那prototype就没什么意义了。spring bean的灵活体现在
可以继承,可以控制eager/lazy,可以通过DI控制初始化的顺序等等。Singleton,说
到底是个construction pattern,spring DI提供了一系列精确控制。而无论什么FP语
言,built-
in都没达到同样的功能。
所以我说拿singleton来说这是OO语言的缺失是不公平的,类库是语言的一部分。发明
语言容易,实现大量的类库困难。

Singleton
ever
is
bean

【在 p*****2 的大作中提到】
:
: 看来这次你概念错误了。
: Singleton bean in Spring and Singleton pattern is quite different. Singleton
: pattern says that one and only one instance of a particular class will ever
: be created per classloader.
: THe scope of Spring singleton is described as per container per bean. It is
: the scope of bean definition to a single object instance per Spring IoC
: container. The default scope in Spring in Singleton.
: Eventhough the default scope is singleton, you can change the scope of bean
: by specifying the scope attribute of element.

avatar
x*d
67
personally i dont see the big deal of using or not of singleton. It has been
discussed so many times worldwide, so, what is the conclusion? the
discussion doesnt really make a programmer's life easier or worse. Check
stackoverflow, they have been debating, and use singleton antipattern feed
google, you see so many discuss, is it really a big deal?
avatar
p*2
68

been
我感觉主要的原因是global variable名声太不好了,所以很多人一看到就深恶痛绝。
但是,C语言里global variable多了去了,不OS kernel写的好好的?所以用global
variable也不是什么大不了的,用了软件就不work了?一个事物的出现毕竟有它的理由
。什么东西都有好的一方面和坏的一方面,没有绝对。所以我同意你的观点。但是总的
原则是不能滥用,能少用就少用,合适的地方用。不过这样的讨论好在可以给我这种新
手加强理解。我感觉还是挺好的。虽然最后观点不一样,但是确实理解更深了一层。

【在 x****d 的大作中提到】
: personally i dont see the big deal of using or not of singleton. It has been
: discussed so many times worldwide, so, what is the conclusion? the
: discussion doesnt really make a programmer's life easier or worse. Check
: stackoverflow, they have been debating, and use singleton antipattern feed
: google, you see so many discuss, is it really a big deal?

avatar
d*e
69
我觉得面试中OO设计并不扯谈,扯的是面试中需要扯那些pattern名堂.
个人认为面试中注重的是"Object-Oriented" Design,不是"Pattern" Design.如果扯那
么多"Pattern"的确是Over-design了.如果我是面试官,给面试者一个模型说要求OO设计
,那么只要他能理顺分析出需求,找得出需要的entity或者说是object,里面需要什么数
据,需要什么函数,各个entity间的关系就可以了.如果能清楚表达出哪个pattern可以加
分,但用哪个pattern或者说不出用哪个pattern绝不会减分,因为这个本来就没有对或错.
正比如说database里面table的normalization,昨天正好跟版上一位同学讨论过,根本就
不需要清楚说得出第一第二第三范式的定义是什么(除非面试官问定义...),因为我也不
知道,但能够把table间的关系分得清就可以了.
所以,我觉得一定要用GoF里面的东西套进去面试的OOD是有点扯...

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
d*e
70
这个跟"男朋友问女朋友今晚吃什么"那个古老笑话一个样,都是值得大家鄙视.

【在 p*****2 的大作中提到】
: 我突发奇想,觉得OO design的题实在是妙,以后面某族人可以这样?
: 问:你用了Java几年了,知道design pattern吗?
: No. (面试结束,feedback: 不爱学习)
: Yes.
: 问:那你知道这个DP吗?能解释一下吗?
: No. (面试结束,学习能力有问题)
: Yes. 解释不清楚。(面试结束,理解能力有问题)
: 如果能回答出来。继续问:那你知道这个DP吗?解释一下。
: 如果某一个没回答好。(面试结束,feedback里面只说这个)
: 如果23个都能回答好。

avatar
d*e
71
你为什么对这个念念不忘?

【在 p*****2 的大作中提到】
:
: been
: 我感觉主要的原因是global variable名声太不好了,所以很多人一看到就深恶痛绝。
: 但是,C语言里global variable多了去了,不OS kernel写的好好的?所以用global
: variable也不是什么大不了的,用了软件就不work了?一个事物的出现毕竟有它的理由
: 。什么东西都有好的一方面和坏的一方面,没有绝对。所以我同意你的观点。但是总的
: 原则是不能滥用,能少用就少用,合适的地方用。不过这样的讨论好在可以给我这种新
: 手加强理解。我感觉还是挺好的。虽然最后观点不一样,但是确实理解更深了一层。

avatar
p*2
72

错.
我的理解DP是对OO缺陷的补充。因此OO设计必然离不开DP。我看了DP以后发现不用DP的
OO很难设计好。当然了DP里面很多都是common sense,你就算没学过,可能不经意间已
经用了。对于Java程序员来说,不懂DP我很难理解。从本版来看,Java大牛goodbug和
zhaoce对DP理解的都很深入,明显工作中常用,或者常接触。
想了解一下。如果不涉及DP的话,那么OO design里面还有啥东西呀?就是封装,继承
和多态吗?

【在 d**e 的大作中提到】
: 我觉得面试中OO设计并不扯谈,扯的是面试中需要扯那些pattern名堂.
: 个人认为面试中注重的是"Object-Oriented" Design,不是"Pattern" Design.如果扯那
: 么多"Pattern"的确是Over-design了.如果我是面试官,给面试者一个模型说要求OO设计
: ,那么只要他能理顺分析出需求,找得出需要的entity或者说是object,里面需要什么数
: 据,需要什么函数,各个entity间的关系就可以了.如果能清楚表达出哪个pattern可以加
: 分,但用哪个pattern或者说不出用哪个pattern绝不会减分,因为这个本来就没有对或错.
: 正比如说database里面table的normalization,昨天正好跟版上一位同学讨论过,根本就
: 不需要清楚说得出第一第二第三范式的定义是什么(除非面试官问定义...),因为我也不
: 知道,但能够把table间的关系分得清就可以了.
: 所以,我觉得一定要用GoF里面的东西套进去面试的OOD是有点扯...

avatar
p*2
73

我记忆力那么差吗?

【在 d**e 的大作中提到】
: 你为什么对这个念念不忘?
avatar
d*e
74
这里也没怎么说到pattern.
http://en.wikipedia.org/wiki/Object-oriented_design
我的理解是面试中就是答好这些东西就行了,硬用dp可能会有点走火魔的可能.正如你说
的,非常可能是不经意间就已经用了某些pattern,所以我觉得说得通就可以了.
我特意向我们组的同事确认一下他expect的是什么,他也说是这些,他说从来不需要面试
者需要知道什么pattern不pattern的东西,就只需要就划清楚各个object间的关系就好
了,但如果能很清楚表达什么哪个DP适合又好使好用的话,是可以加分,但不是必需.还有
,他从不在OOD上面拒人,除非面试者真的答得好离谱或者完全不知从何下手.
不如找NND或者gate出来印证一下好了.

【在 p*****2 的大作中提到】
:
: 我记忆力那么差吗?

avatar
p*2
75

这个不错。多谢了。看来要求不算高呀。

【在 d**e 的大作中提到】
: 这里也没怎么说到pattern.
: http://en.wikipedia.org/wiki/Object-oriented_design
: 我的理解是面试中就是答好这些东西就行了,硬用dp可能会有点走火魔的可能.正如你说
: 的,非常可能是不经意间就已经用了某些pattern,所以我觉得说得通就可以了.
: 我特意向我们组的同事确认一下他expect的是什么,他也说是这些,他说从来不需要面试
: 者需要知道什么pattern不pattern的东西,就只需要就划清楚各个object间的关系就好
: 了,但如果能很清楚表达什么哪个DP适合又好使好用的话,是可以加分,但不是必需.还有
: ,他从不在OOD上面拒人,除非面试者真的答得好离谱或者完全不知从何下手.
: 不如找NND或者gate出来印证一下好了.

avatar
d*e
76
看看这里21楼,NND两年前说的也就是这些,不一定要提visitor, factory, singleton这
些pattern.
http://www.weiming.info/zhuti/JobHunting/31956527/

【在 p*****2 的大作中提到】
:
: 这个不错。多谢了。看来要求不算高呀。

avatar
p*2
77

再问一点。OO design跟UML,database有关系吗?也就是说回答问题的时候需要画UML
,和设计DB吗?

【在 d**e 的大作中提到】
: 这里也没怎么说到pattern.
: http://en.wikipedia.org/wiki/Object-oriented_design
: 我的理解是面试中就是答好这些东西就行了,硬用dp可能会有点走火魔的可能.正如你说
: 的,非常可能是不经意间就已经用了某些pattern,所以我觉得说得通就可以了.
: 我特意向我们组的同事确认一下他expect的是什么,他也说是这些,他说从来不需要面试
: 者需要知道什么pattern不pattern的东西,就只需要就划清楚各个object间的关系就好
: 了,但如果能很清楚表达什么哪个DP适合又好使好用的话,是可以加分,但不是必需.还有
: ,他从不在OOD上面拒人,除非面试者真的答得好离谱或者完全不知从何下手.
: 不如找NND或者gate出来印证一下好了.

avatar
g*e
78
amzn问的是design question,从来没说是OO design question。至少我没听有人这么
说过。其实基本就是done说的那样,没有要求用什么高级pattern。但是基本的OO概念
(二爷提到的多态,继承,封装)应该有。有个哥们设计停车场,把所有方法和object
全写在一个class里面,说他不懂OO据他不冤吧。
对付amzn的design question,弄清楚问题和要求,思路和结构清晰,考虑scalability
和flexibility,最后写点大方向的code就差不多了。

你说
面试
就好
还有

【在 p*****2 的大作中提到】
:
: 再问一点。OO design跟UML,database有关系吗?也就是说回答问题的时候需要画UML
: ,和设计DB吗?

avatar
p*2
79

这个我看过。我不太清楚是不是NND这个就代表了A的面试。因为我也问过一些A的,他
们也说不太清楚,他们面试的时候没碰到过。另外关于NND这个design我也有点问题
在兽一下OO的继承关系(比如car有tru
ck, sedan, SUV啥的;Lot有大lot,小lot,残帕啥的)
这东西需要继承吗?

【在 d**e 的大作中提到】
: 看看这里21楼,NND两年前说的也就是这些,不一定要提visitor, factory, singleton这
: 些pattern.
: http://www.weiming.info/zhuti/JobHunting/31956527/

avatar
d*e
80
我也没面过,但画图可以更好表达自己的思路.
反正我英文不好,我大部分时间都是以图说话....

UML

【在 p*****2 的大作中提到】
:
: 这个我看过。我不太清楚是不是NND这个就代表了A的面试。因为我也问过一些A的,他
: 们也说不太清楚,他们面试的时候没碰到过。另外关于NND这个design我也有点问题
: 在兽一下OO的继承关系(比如car有tru
: ck, sedan, SUV啥的;Lot有大lot,小lot,残帕啥的)
: 这东西需要继承吗?

avatar
p*2
81

object
scalability
说的不错。但是有点自相矛盾呀。你说不是OO design,那就是system design吧。但是
你又说OO基本概念应该有。这不是矛盾吗?System design跟OO没有必然关系呀?比如
人家就用procedural 或者FP design也不一定用OO呀?这点能不能解释一下?

【在 g**e 的大作中提到】
: amzn问的是design question,从来没说是OO design question。至少我没听有人这么
: 说过。其实基本就是done说的那样,没有要求用什么高级pattern。但是基本的OO概念
: (二爷提到的多态,继承,封装)应该有。有个哥们设计停车场,把所有方法和object
: 全写在一个class里面,说他不懂OO据他不冤吧。
: 对付amzn的design question,弄清楚问题和要求,思路和结构清晰,考虑scalability
: 和flexibility,最后写点大方向的code就差不多了。
:
: 你说
: 面试
: 就好

avatar
d*e
82
这个继承也没什么问题吧?
不过也就是打个比方,我觉得说得在理就好了,没有对错.

【在 p*****2 的大作中提到】
:
: object
: scalability
: 说的不错。但是有点自相矛盾呀。你说不是OO design,那就是system design吧。但是
: 你又说OO基本概念应该有。这不是矛盾吗?System design跟OO没有必然关系呀?比如
: 人家就用procedural 或者FP design也不一定用OO呀?这点能不能解释一下?

avatar
d*x
83
一个和蔼可亲的老爷爷问我的那个客户端是怎么做的
我给他解释了layered structure,他就ok了

【在 p*****2 的大作中提到】
:
: object
: scalability
: 说的不错。但是有点自相矛盾呀。你说不是OO design,那就是system design吧。但是
: 你又说OO基本概念应该有。这不是矛盾吗?System design跟OO没有必然关系呀?比如
: 人家就用procedural 或者FP design也不一定用OO呀?这点能不能解释一下?

avatar
d*e
84
你说起procedural,我同事也提到了,他就说用c惯了的人可能是没有oo的概念,那么他全
部用函数来design也没问题,只要他说得有条有理.但如上面gate说的全部东西都在一个
class里面就不行...

【在 p*****2 的大作中提到】
:
: object
: scalability
: 说的不错。但是有点自相矛盾呀。你说不是OO design,那就是system design吧。但是
: 你又说OO基本概念应该有。这不是矛盾吗?System design跟OO没有必然关系呀?比如
: 人家就用procedural 或者FP design也不一定用OO呀?这点能不能解释一下?

avatar
n*3
85
弱问 GoF是神马
avatar
p*2
86

感觉对于parking lot没必要继承。设个属性就好了。

【在 d**e 的大作中提到】
: 这个继承也没什么问题吧?
: 不过也就是打个比方,我觉得说得在理就好了,没有对错.

avatar
p*2
87

什么客户端呀?

【在 d**********x 的大作中提到】
: 一个和蔼可亲的老爷爷问我的那个客户端是怎么做的
: 我给他解释了layered structure,他就ok了

avatar
p*2
88

明白。

【在 d**e 的大作中提到】
: 你说起procedural,我同事也提到了,他就说用c惯了的人可能是没有oo的概念,那么他全
: 部用函数来design也没问题,只要他说得有条有理.但如上面gate说的全部东西都在一个
: class里面就不行...

avatar
d*x
89
以前无聊做的一个小程序,他问我做过的项目里面哪个最好玩,我就跟他说是那个了。。

【在 p*****2 的大作中提到】
:
: 明白。

avatar
p*2
90

。。
太牛了。无聊一搞就拿到A的offer。膜拜呀。

【在 d**********x 的大作中提到】
: 以前无聊做的一个小程序,他问我做过的项目里面哪个最好玩,我就跟他说是那个了。。
avatar
d*x
91
这个小东西其实就两万行代码,用来上telnet bbs的
我跟他说,这东西比较古老,现在很小众了,那位老爷爷就乐了,说当年我上bbs的时
候还是用email sync的那种呢。。然后就问了问我这玩意的结构,各层协议是怎么实现
的。。。
后面又问了问rotated sorted array的binary search,c++ stl的实现细节什么的
所以有时候运气很重要。。。bar raiser撞枪口上了,你说我怎么办。。

【在 p*****2 的大作中提到】
:
: 。。
: 太牛了。无聊一搞就拿到A的offer。膜拜呀。

avatar
p*2
92

哈哈。牛呀。你当时是fresh吗?fresh做了2万行代码已经很不错了。不给offer就怪了


【在 d**********x 的大作中提到】
: 这个小东西其实就两万行代码,用来上telnet bbs的
: 我跟他说,这东西比较古老,现在很小众了,那位老爷爷就乐了,说当年我上bbs的时
: 候还是用email sync的那种呢。。然后就问了问我这玩意的结构,各层协议是怎么实现
: 的。。。
: 后面又问了问rotated sorted array的binary search,c++ stl的实现细节什么的
: 所以有时候运气很重要。。。bar raiser撞枪口上了,你说我怎么办。。

avatar
d*e
93
我一直想问...你是不是水木的dp2?

【在 d**********x 的大作中提到】
: 这个小东西其实就两万行代码,用来上telnet bbs的
: 我跟他说,这东西比较古老,现在很小众了,那位老爷爷就乐了,说当年我上bbs的时
: 候还是用email sync的那种呢。。然后就问了问我这玩意的结构,各层协议是怎么实现
: 的。。。
: 后面又问了问rotated sorted array的binary search,c++ stl的实现细节什么的
: 所以有时候运气很重要。。。bar raiser撞枪口上了,你说我怎么办。。

avatar
p*2
94

看来devil早就是名人了呀。牛。

【在 d**e 的大作中提到】
: 我一直想问...你是不是水木的dp2?
avatar
d*e
95
对啊,想不到是一个这么年轻的小弟弟

【在 p*****2 的大作中提到】
:
: 看来devil早就是名人了呀。牛。

avatar
p*2
96

你太幸福了。跟这么多大牛一起同事。我们这里都是老头。

【在 d**e 的大作中提到】
: 对啊,想不到是一个这么年轻的小弟弟
avatar
d*x
97
其实我工作过两年了,只是java和distributed实在不熟悉,估计这边不会给我title的
权当码工内部再次转行了

【在 p*****2 的大作中提到】
:
: 你太幸福了。跟这么多大牛一起同事。我们这里都是老头。

avatar
d*x
98
恩。。这边bbs不让注册三个字符的id。。。

【在 d**e 的大作中提到】
: 我一直想问...你是不是水木的dp2?
avatar
d*e
99
太牛了!从你平时的贴中看就知道已经不简单了.

【在 d**********x 的大作中提到】
: 恩。。这边bbs不让注册三个字符的id。。。
avatar
d*x
100
还不行。。现在有太多要学的东西了。我目标是三年之后可以问心无愧收下这句话。

【在 d**e 的大作中提到】
: 太牛了!从你平时的贴中看就知道已经不简单了.
avatar
p*2
101

你在弯曲还是seattle呀/

【在 d**********x 的大作中提到】
: 还不行。。现在有太多要学的东西了。我目标是三年之后可以问心无愧收下这句话。
avatar
k*x
102
不是有个phd算法不错,最后说OOD不行被据了么?

【在 d**e 的大作中提到】
: 这里也没怎么说到pattern.
: http://en.wikipedia.org/wiki/Object-oriented_design
: 我的理解是面试中就是答好这些东西就行了,硬用dp可能会有点走火魔的可能.正如你说
: 的,非常可能是不经意间就已经用了某些pattern,所以我觉得说得通就可以了.
: 我特意向我们组的同事确认一下他expect的是什么,他也说是这些,他说从来不需要面试
: 者需要知道什么pattern不pattern的东西,就只需要就划清楚各个object间的关系就好
: 了,但如果能很清楚表达什么哪个DP适合又好使好用的话,是可以加分,但不是必需.还有
: ,他从不在OOD上面拒人,除非面试者真的答得好离谱或者完全不知从何下手.
: 不如找NND或者gate出来印证一下好了.

avatar
d*x
103
回g2,咱暂时在西雅图,以后估计要跑irvine

【在 p*****2 的大作中提到】
:
: 你在弯曲还是seattle呀/

avatar
i*h
104
LZ你不是第一次标题党了
面试设计就是看你对大一点的软件结构有没有概念,
对工作过的尤其重要
OO不是目的,清晰易扩展和维护才是
avatar
d*e
105
看我原文“除非”开始那句话。。。

【在 k***x 的大作中提到】
: 不是有个phd算法不错,最后说OOD不行被据了么?
avatar
p*2
106

能不能展开说说?比如那个parking lot,怎么设计算是对软件结构有概念?清晰易扩
展维护?

【在 i***h 的大作中提到】
: LZ你不是第一次标题党了
: 面试设计就是看你对大一点的软件结构有没有概念,
: 对工作过的尤其重要
: OO不是目的,清晰易扩展和维护才是

avatar
i*h
107
什么parking lot?
没看全楼,把题说一下?
OO简单说就是封装呗,核心就是以后可能的改变尽量少地影响软件其它部分
pattern最大的意义就是把常用的有用设计总结了一下
让大家有个共同语言
不然你说应该用”singleton", 同事说应该用"单子态”,影响交流么

【在 p*****2 的大作中提到】
:
: 能不能展开说说?比如那个parking lot,怎么设计算是对软件结构有概念?清晰易扩
: 展维护?

avatar
p*2
108

就是设计一个parking lot,你不用OO先设计一个看看。

【在 i***h 的大作中提到】
: 什么parking lot?
: 没看全楼,把题说一下?
: OO简单说就是封装呗,核心就是以后可能的改变尽量少地影响软件其它部分
: pattern最大的意义就是把常用的有用设计总结了一下
: 让大家有个共同语言
: 不然你说应该用”singleton", 同事说应该用"单子态”,影响交流么

avatar
i*h
109
面试这个题的话是一个交流过程
太麻烦了,我就不做了,而且我肯定会用OO
除了软件设计外,也看你在实际工作中和同事的交流
一半就先问要求,问界面
然後谈可能的方案,利弊
想象以后的可能改动是什么,所以会做什么样的设计选择
比如界面:存车,取车,计算时间,收费,空位管理
对应的use case, test case
然後谈内部数据结构,blabla

【在 p*****2 的大作中提到】
:
: 就是设计一个parking lot,你不用OO先设计一个看看。

avatar
p*2
110

这我就confused了,你前边说跟OO没关系,现在又说你肯定会用OO。
然後谈内部数据结构
其实我比较关心的是这个部分。不知道你不用DP会怎么设计。

【在 i***h 的大作中提到】
: 面试这个题的话是一个交流过程
: 太麻烦了,我就不做了,而且我肯定会用OO
: 除了软件设计外,也看你在实际工作中和同事的交流
: 一半就先问要求,问界面
: 然後谈可能的方案,利弊
: 想象以后的可能改动是什么,所以会做什么样的设计选择
: 比如界面:存车,取车,计算时间,收费,空位管理
: 对应的use case, test case
: 然後谈内部数据结构,blabla

avatar
i*h
111
最终目的是那个
現在大家想出了OOD,也不知道有没有更好的方法
至于这个停车场,你想想其实是不是和内存管理一个东西?

【在 p*****2 的大作中提到】
:
: 这我就confused了,你前边说跟OO没关系,现在又说你肯定会用OO。
: 然後谈内部数据结构
: 其实我比较关心的是这个部分。不知道你不用DP会怎么设计。

avatar
p*2
112

至于这个停车场,你想想其实是不是和内存管理一个东西?
能ZKSS吗?

【在 i***h 的大作中提到】
: 最终目的是那个
: 現在大家想出了OOD,也不知道有没有更好的方法
: 至于这个停车场,你想想其实是不是和内存管理一个东西?

avatar
i*h
113
车位是内存
车辆是文件
要一个管理员分配内存
就是个简化的内存管理么

【在 p*****2 的大作中提到】
:
: 至于这个停车场,你想想其实是不是和内存管理一个东西?
: 能ZKSS吗?

avatar
p*2
114

没搞懂。内存里边放的东西一般不叫文件吧?停车场一般只要用空位就可以停吧?不需
要管理员分配吧?

【在 i***h 的大作中提到】
: 车位是内存
: 车辆是文件
: 要一个管理员分配内存
: 就是个简化的内存管理么

avatar
i*h
115
那就更简化了啊
只要个计数器算还有多少空位就可以了
你想的是一个你日常生活能见到的一般停车场,可是面试是要考你的软件设计不是?
然後系统升级就来了:
要计时收费怎么办?
要你分配车位怎么办?
有的车要预留车位怎么办?
车位要分大车和小车怎么办,收费要相应改变怎么办
如果valet parking, 要凭车号找到车位怎么办?

【在 p*****2 的大作中提到】
:
: 没搞懂。内存里边放的东西一般不叫文件吧?停车场一般只要用空位就可以停吧?不需
: 要管理员分配吧?

avatar
p*2
116

对呀。这么多变动如果不用DP能搞定吗?

【在 i***h 的大作中提到】
: 那就更简化了啊
: 只要个计数器算还有多少空位就可以了
: 你想的是一个你日常生活能见到的一般停车场,可是面试是要考你的软件设计不是?
: 然後系统升级就来了:
: 要计时收费怎么办?
: 要你分配车位怎么办?
: 有的车要预留车位怎么办?
: 车位要分大车和小车怎么办,收费要相应改变怎么办
: 如果valet parking, 要凭车号找到车位怎么办?

avatar
i*h
117
你要有DP套,当然可以用啊
那个和OOD不矛盾吧

【在 p*****2 的大作中提到】
:
: 对呀。这么多变动如果不用DP能搞定吗?

avatar
k*x
118
围观禅宗和密宗高手辩论。。。
avatar
p*2
119

所以不是又转回来了吗?
system design 引到了 OO design,
OO design 引到了 extensibility, 然后引到了DP
所以我说搞OO肯定会用到DP的。这个说法没问题吧?我很难想象不用DP,OO怎么能
design的好。如果真的不用DP,OO design就会漏洞百出的。这也是我想亲眼看看你们
不用DP怎么做OO design。可是没人给我一个例子。CC150上的例子也是问题特别的多。

【在 i***h 的大作中提到】
: 你要有DP套,当然可以用啊
: 那个和OOD不矛盾吧

avatar
i*h
120
除非被要求或者你要BSO,
这个题还真不需要DP
OO思路就够了
当然搞完后你去对DP肯定能对上一点甚至很多,
不然GoF的书为什么能成经典呢
我想说的真正意思是OO/DP的核心思想是模块化的易于维护和扩展的设计
OO/DP是我们現在知道尽量做到这点的一个设计方法,
不了解这个,光为了OO而OO是没学懂啊

【在 p*****2 的大作中提到】
:
: 所以不是又转回来了吗?
: system design 引到了 OO design,
: OO design 引到了 extensibility, 然后引到了DP
: 所以我说搞OO肯定会用到DP的。这个说法没问题吧?我很难想象不用DP,OO怎么能
: design的好。如果真的不用DP,OO design就会漏洞百出的。这也是我想亲眼看看你们
: 不用DP怎么做OO design。可是没人给我一个例子。CC150上的例子也是问题特别的多。

avatar
p*2
121

真正意思是OO/DP的核心思想是模块化的易于维护和扩展的设计
模块化的易于维护和扩展的设计跟OO有什么关系呢?

【在 i***h 的大作中提到】
: 除非被要求或者你要BSO,
: 这个题还真不需要DP
: OO思路就够了
: 当然搞完后你去对DP肯定能对上一点甚至很多,
: 不然GoF的书为什么能成经典呢
: 我想说的真正意思是OO/DP的核心思想是模块化的易于维护和扩展的设计
: OO/DP是我们現在知道尽量做到这点的一个设计方法,
: 不了解这个,光为了OO而OO是没学懂啊

avatar
g*g
122
high cohesion, low coupling is the principle of OO.
And that has been proved most effective in maintenance and extension.
In theory, any language can achieve that. In reality, OO forces you to
achieve that.

【在 p*****2 的大作中提到】
:
: 真正意思是OO/DP的核心思想是模块化的易于维护和扩展的设计
: 模块化的易于维护和扩展的设计跟OO有什么关系呢?

avatar
p*2
123

你的意思如果去面C的职位就可以不按照high cohesion, low coupling 的原则来设计


【在 g*****g 的大作中提到】
: high cohesion, low coupling is the principle of OO.
: And that has been proved most effective in maintenance and extension.
: In theory, any language can achieve that. In reality, OO forces you to
: achieve that.

avatar
i*h
124
gosh, you are arguing just for argument's sake
OO helps/facilitates you to do better high cohesion, low coupling design.
does that logically mean without this tool you should NOT do good design?

【在 p*****2 的大作中提到】
:
: 你的意思如果去面C的职位就可以不按照high cohesion, low coupling 的原则来设计
: ?

avatar
p*2
125

我的意思是high cohesion, low coupling跟OO没什么必然关系。

【在 i***h 的大作中提到】
: gosh, you are arguing just for argument's sake
: OO helps/facilitates you to do better high cohesion, low coupling design.
: does that logically mean without this tool you should NOT do good design?

avatar
g*g
126
encapsulation就是high cohesion, low coupling的集中体现,怎么能叫没什么关系。
世界上绝大多数大型系统都是OO语言写的,够说明问题了。

【在 p*****2 的大作中提到】
:
: 我的意思是high cohesion, low coupling跟OO没什么必然关系。

avatar
p*2
127

encapsulation是OO的一大特性不假,但是并不是OO独有的。相反,OO的另一大特性
inheritance还破坏了encapsulation,所以需要DP作为OO的补充。像C语言这种非OO的,
因为没有inheritance, 相反更加保护了encapsulation。

【在 g*****g 的大作中提到】
: encapsulation就是high cohesion, low coupling的集中体现,怎么能叫没什么关系。
: 世界上绝大多数大型系统都是OO语言写的,够说明问题了。

avatar
i*h
128
每个字我都认识
就是不知道你在说什么

【在 p*****2 的大作中提到】
:
: encapsulation是OO的一大特性不假,但是并不是OO独有的。相反,OO的另一大特性
: inheritance还破坏了encapsulation,所以需要DP作为OO的补充。像C语言这种非OO的,
: 因为没有inheritance, 相反更加保护了encapsulation。

avatar
p*2
129

所以说如果只懂OO的话就会有很大的局限性。有时间可以多学学其他方式的编程。OO的
人总是把OO的一些概念给垮大了。其实没有那么神奇。这个王垠也批判过了。

【在 i***h 的大作中提到】
: 每个字我都认识
: 就是不知道你在说什么

avatar
f*4
130
好像GoF里面有提到过DP最初是从建筑设计借鉴过来的(?),大意是说,在解决同一
问题的各种设计的方案中,提炼出的具有通用性的,好的设计方案。以此在设计者之间
传递知识,经验。
我的理解就是,审核的人在问设计的人“XXX问题你是怎么解决的?”设计的说“我用
了YYY DP”。“哦,那没问题了”
所以,我对DP主要侧重在怎么实现;解决什么问题;好处是什么,缺点是什么。只有当
问题匹配的时候才会套用DP。
其次,OO和DP都是为了方便你的代码修改以适应新的需求。如果有个模块能用DP,但是
,这个模块只是被实现一次,以后永远不会有新的修改需求,你需要用DP么?答案是不
用,与其花时间在DP上,不如把注释写好点,帮助以后的维护。
当然,会有人来争论,说说不定以后有改变,用DP怎么这么好。但design的一个经常被
忽略的原则就是,永远不要把你认为的,好的,可能的需求考虑近来。需求是什么就是
什么。如果你认为有问题,应该提出来,在需求分析中解决问题;而不是在设计阶段,
由你的设计来cover你认为正确的,应该的需求。
说了这么多,主要是为了解释面试的时候(其实工作的时候也是同一个道理)怎么应对
。面的人不是简单的要你回答一个DP或者几个DP的名字;他们也没指望你在短短的时间
里面把DP解释一遍。大多数情况,他们给你一个模棱两可的问题,问你怎么解决。你需
要一点点把需求弄清楚,这个过程就是和他们聊的过程。基于你了解到的需求,给个设
计方案,要能符合所有的需求。这个时候戏肉来了,他们会告诉你,有新的要求来了,
blablabla。考验你的时候到了,你得调整你的设计,适应这些需求。他们会说,又有
新要求来了,你再改。新要求,再改。新要求,再改。
所以,多话点时间在理解一个DP为什么被提出来其实比死记硬背有用。
我也有和面试的同事聊过,最低限度就是希望你的方案自圆其说而已;能用上DP的时候
,提到个名字,他们也就知道你知道了。更多的就看你能不能处理后来的那些新的变化。
还有,说design 是 art有点忽悠了。keep it simple,design也是

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
131

你说的非常好。基本上所有观点都跟我符合。我只有一点疑问。下边这两段话貌似有些
矛盾。而且工作中真的很难把需求搞的很清楚。很多情况下都是在开发的过程中需求会
产生变化。所以不知道你下边第一段话是怎么得来的?我觉得有点理想化了。不知道你
能不能ZKSS呢?
当然,会有人来争论,说说不定以后有改变,用DP怎么这么好。但design的一个经常被
忽略的原则就是,永远不要把你认为的,好的,可能的需求考虑近来。需求是什么就是
什么。如果你认为有问题,应该提出来,在需求分析中解决问题;而不是在设计阶段,
由你的设计来cover你认为正确的,应该的需求。
这个时候戏肉来了,他们会告诉你,有新的要求来了,
blablabla。考验你的时候到了,你得调整你的设计,适应这些需求。他们会说,又有
新要求来了,你再改。新要求,再改。新要求,再改。

【在 f****4 的大作中提到】
: 好像GoF里面有提到过DP最初是从建筑设计借鉴过来的(?),大意是说,在解决同一
: 问题的各种设计的方案中,提炼出的具有通用性的,好的设计方案。以此在设计者之间
: 传递知识,经验。
: 我的理解就是,审核的人在问设计的人“XXX问题你是怎么解决的?”设计的说“我用
: 了YYY DP”。“哦,那没问题了”
: 所以,我对DP主要侧重在怎么实现;解决什么问题;好处是什么,缺点是什么。只有当
: 问题匹配的时候才会套用DP。
: 其次,OO和DP都是为了方便你的代码修改以适应新的需求。如果有个模块能用DP,但是
: ,这个模块只是被实现一次,以后永远不会有新的修改需求,你需要用DP么?答案是不
: 用,与其花时间在DP上,不如把注释写好点,帮助以后的维护。

avatar
d*x
132
alexander
我找过几个学建筑的问了,人根本不知道有这人。。。= =

【在 f****4 的大作中提到】
: 好像GoF里面有提到过DP最初是从建筑设计借鉴过来的(?),大意是说,在解决同一
: 问题的各种设计的方案中,提炼出的具有通用性的,好的设计方案。以此在设计者之间
: 传递知识,经验。
: 我的理解就是,审核的人在问设计的人“XXX问题你是怎么解决的?”设计的说“我用
: 了YYY DP”。“哦,那没问题了”
: 所以,我对DP主要侧重在怎么实现;解决什么问题;好处是什么,缺点是什么。只有当
: 问题匹配的时候才会套用DP。
: 其次,OO和DP都是为了方便你的代码修改以适应新的需求。如果有个模块能用DP,但是
: ,这个模块只是被实现一次,以后永远不会有新的修改需求,你需要用DP么?答案是不
: 用,与其花时间在DP上,不如把注释写好点,帮助以后的维护。

avatar
p*2
133

这个信息很牛逼。那搞建筑的有pattern吗?

【在 d**********x 的大作中提到】
: alexander
: 我找过几个学建筑的问了,人根本不知道有这人。。。= =

avatar
d*x
134
这个倒是没问,基本上接着就扯architect的工作了。。

【在 p*****2 的大作中提到】
:
: 这个信息很牛逼。那搞建筑的有pattern吗?

avatar
f*4
135
"設計模式這個術語是由Erich Gamma等人在1990年代從建筑设计領域引入到計算機科學
的。它是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。"
http://zh.wikipedia.org/wiki/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%
Patterns originated as an architectural concept by Christopher Alexander (
1977/79). In 1987, Kent Beck and Ward Cunningham began experimenting with
the idea of applying patterns to programming and presented their results at
the OOPSLA conference that year.[3][4] In the following years, Beck,
Cunningham and others followed up on this work.
http://en.wikipedia.org/wiki/Software_design_pattern
我手头上没有Gof的那本书,大概是10年前看的。只能找找在线的。
1977的,估计现在在建筑里面也快死了。据学建筑的朋友说,建筑也分流派的,每个流
派都视自己为正解,别的流派都是小孩子的玩意。有点类似我们说的文人相轻。我那朋
友是芝加哥学派的。

【在 d**********x 的大作中提到】
: alexander
: 我找过几个学建筑的问了,人根本不知道有这人。。。= =

avatar
f*4
136
ZKSS,展开说说?
没看前面的具体内容,如果你的观点和我一致的话:
你要弄清楚,需求分析和设计是2码事。实际工作中需求永远都会变的。但是进入到设
计的时候需求应该已经是明确了。这个是很重要的差别。现在一些敏捷开发模式,2者
区别不是很明显;如果那样的话,你需要在设计的时候把你设计所满足的需求列举出来
。有些重要的设计假设必须得到客户确认。
当然,有些极端情况是,在你东西没出来前,客户自己都不知道要些什么。这种情况下
面你就没必要进入设计阶段,给他们弄个界面,和他们讨论流程。把这些东西文档化,
就是你的需求;然后再做设计。

【在 p*****2 的大作中提到】
:
: 这个信息很牛逼。那搞建筑的有pattern吗?

avatar
f*4
137
软件设计以简洁为美。
最稳定最有生命力的往往都是最简洁的那个。

【在 t****a 的大作中提到】
: 同意design就是art。和算法不同,art之间的比较不是简单的空间时间什么的,而且也
: 没有标准答案。

avatar
f*4
138
好虫说得对,你把先后因果弄颠倒了。
你现在理解的DP,是基于OO实现的DP。但是DP的本意是通用的设计方案。这也是为啥定
义DP的地方用得是一段话,而不是一个类图。Gof是严格按照这个形式定义DP的,后来
的资料大多都是以实现来定义DP。
说回Singleton和全局变量的问题
在C里面没有OO,能实现Singleton么?
对全局变量A提供一个访问接口(可以是函数,可以是个domain socket,可以是个
pipeline。。。)
Coding stand加一条“访问A必须通过接口,违反者将被开除”
这个方案算Singleton么?
手头上没有Gof的书,不过对照你贴的
“Singleton is used when a single object needs to be instantiated and all
requested object access goes through this particular instance. This object
can maintain state if desired.”
你看看有地方违反了没。
类工厂和抽象类工厂,C压根就没有类的概念
但是,你把所有struct的创建集中到一个模块里面,统一处理,这算不算一个pattern?
再给你来个更搞的,C本身没有多态的概念,但是通过定义和维护函数指针table,C也
可以实现多态的效果。深度探索C++对象模型 对多态的实现讲的比较多。那你说C到底
算实现了多态,还是没有实现?

【在 p*****2 的大作中提到】
:
: 这个信息很牛逼。那搞建筑的有pattern吗?

avatar
p*2
139

我的意思是工作的时候做设计不能一点扩展性没有,完全只考虑当前的需求,也不能扩
展性考虑太多,影响了设计的简洁性。两者之间需要一个balance。

【在 f****4 的大作中提到】
: ZKSS,展开说说?
: 没看前面的具体内容,如果你的观点和我一致的话:
: 你要弄清楚,需求分析和设计是2码事。实际工作中需求永远都会变的。但是进入到设
: 计的时候需求应该已经是明确了。这个是很重要的差别。现在一些敏捷开发模式,2者
: 区别不是很明显;如果那样的话,你需要在设计的时候把你设计所满足的需求列举出来
: 。有些重要的设计假设必须得到客户确认。
: 当然,有些极端情况是,在你东西没出来前,客户自己都不知道要些什么。这种情况下
: 面你就没必要进入设计阶段,给他们弄个界面,和他们讨论流程。把这些东西文档化,
: 就是你的需求;然后再做设计。

avatar
p*2
140

感觉你对DP的理解并没有比我更清晰。有时间看看我的三层DP的文章吧。摘选一段如下
。如果不在一个范畴里讨论DP就没什么意思了。
http://blog.sina.com.cn/s/blog_b9285de20101k0ql.html
我发现在DP的讨论中,大家往往把general DP和GoF DP混在一起,比如王垠的那篇博客
就犯了这个错误。他是用FP的角度去把OO DP当作general DP来看待了,所以基本上是
驴唇不对马嘴。OO DP就是OO的,要讨论就需要在OO的范畴来讨论,出了OO的范畴就没
意思了。当然了,王垠博客的作用是让OO的崇拜者清醒一下,因为OO的崇拜者也经常拿
OO DP当作general DP来宣扬,这个也是一个错误。

【在 f****4 的大作中提到】
: 好虫说得对,你把先后因果弄颠倒了。
: 你现在理解的DP,是基于OO实现的DP。但是DP的本意是通用的设计方案。这也是为啥定
: 义DP的地方用得是一段话,而不是一个类图。Gof是严格按照这个形式定义DP的,后来
: 的资料大多都是以实现来定义DP。
: 说回Singleton和全局变量的问题
: 在C里面没有OO,能实现Singleton么?
: 对全局变量A提供一个访问接口(可以是函数,可以是个domain socket,可以是个
: pipeline。。。)
: Coding stand加一条“访问A必须通过接口,违反者将被开除”
: 这个方案算Singleton么?

avatar
p*2
141
类工厂和抽象类工厂,C压根就没有类的概念
但是,你把所有struct的创建集中到一个模块里面,统一处理,这算不算一个pattern?
这个根本就不是factory pattern。看来你的理解有些问题。建议你再回头学习一下。
Factory pattern是纯OO的pattern。
avatar
f*4
142
看了一下你的3层DP,同意你的观点:混起来之后完全没法讨论。
所以,你前面提到的“DP是为了满足OO缺陷的观点”是指特指OO DP?就算那样全局变
量+控制接口也是可以实现singleton;只是OO的特性提供了更好的实现方式。而不是因
为全局访问的要求破坏了OO特性才引入singleton。是先有了singleton的需求再有的OO
singleton的实现。
还有,你的blog关于mvc的描述。Gof的时候还没有3层控制的普遍需求。mvc是在web编
程才作为越来越普遍的一个需求。然后GoF的23种DP,现在已经消亡了很多。现在常用
的大约在15种左右。然后有一堆java DP。

【在 p*****2 的大作中提到】
: 类工厂和抽象类工厂,C压根就没有类的概念
: 但是,你把所有struct的创建集中到一个模块里面,统一处理,这算不算一个pattern?
: 这个根本就不是factory pattern。看来你的理解有些问题。建议你再回头学习一下。
: Factory pattern是纯OO的pattern。

avatar
x*d
143
I got a DP question today. Would anyone try?
What is the benefit of using Java NIO, what design pattern NIO uses, compare
that pattern with other similar pattern(s).
avatar
f*4
144
我都问“这算不算一个pattern”了
注意是pattern而不是factory pattern。用你理解的说法是 General DP
还有factory pattern的目的不是为了纯OO,是为了创建对象。

pattern?

【在 p*****2 的大作中提到】
: 类工厂和抽象类工厂,C压根就没有类的概念
: 但是,你把所有struct的创建集中到一个模块里面,统一处理,这算不算一个pattern?
: 这个根本就不是factory pattern。看来你的理解有些问题。建议你再回头学习一下。
: Factory pattern是纯OO的pattern。

avatar
p*2
145

看我的标题,就是讨论GoF的。如果把DP发散了讨论就不好搞了。不过你说的这个一般
叫做factory method, 而不叫做factory method pattern。感觉主要是跟GoF的做区分
。但是,这个我认为是一个pattern.不过有没有一个正式的名字呢?这个我还没搞明白
。比如你如果说factory,别人可能认为你指的是GoF的factory。所以跟别人交流的时
候,怎么表达这个pattern呢?总不能每次都解释一遍吧?

【在 f****4 的大作中提到】
: 我都问“这算不算一个pattern”了
: 注意是pattern而不是factory pattern。用你理解的说法是 General DP
: 还有factory pattern的目的不是为了纯OO,是为了创建对象。
:
: pattern?

avatar
p*2
146
然后GoF的23种DP,现在已经消亡了很多。现在常用
的大约在15种左右。然后有一堆java DP。
大牛能不能说说哪8种现在基本不用了?一堆Java DP那些很常用?多谢了。
avatar
f*4
147
那会我也不知道你把Gof归类在OO DP的范畴里面啊。
Gof一直给我当作General DP的。就因为Gof 的DP定义最规范的原因。
这个的确是个问题,但貌似没有统一的标准。我尽量会回避这些容易引起歧义的名字,
以定义要解决的问题和给出解决方案替代。OOD的话就是给类图+口头解释。能懂的自然
懂了,不能懂的,你就是用对了名词还是不懂。

【在 p*****2 的大作中提到】
: 然后GoF的23种DP,现在已经消亡了很多。现在常用
: 的大约在15种左右。然后有一堆java DP。
: 大牛能不能说说哪8种现在基本不用了?一堆Java DP那些很常用?多谢了。

avatar
f*4
148
不是大牛,只是在这个area比你早上路几年
我回去找找,最常见的大概在12种左右。有些新提出的问题,然后有了些新的DP。有些
老问题,貌似不再是常见问题了,对应的DP就消亡了。java DP我真心不熟,你可以和
好虫探讨探讨。
关于java里面大量用到DP,我的个人理解(有局限性,轻喷)是java本身的哲学(不知
道怎么说正确,借用哲学一词)决定的:有现成的就用现成的,不要再发明一遍轮子。
然后java里面巨多的framework,lib,在解决通用问题的时候,能上DP就上DP。这样一
是保证方案的有效性,二是保证实现的速度;三是保证别人看代码的时候能够快速的理
解。如果没有现成的DP,那就自己创建一个,别人觉得好的话就照着用,用得多了,也
就成通用的DP了,比如MVC

【在 p*****2 的大作中提到】
: 然后GoF的23种DP,现在已经消亡了很多。现在常用
: 的大约在15种左右。然后有一堆java DP。
: 大牛能不能说说哪8种现在基本不用了?一堆Java DP那些很常用?多谢了。

avatar
p*2
149

compare
NIO是啥东西呀?

【在 x****d 的大作中提到】
: I got a DP question today. Would anyone try?
: What is the benefit of using Java NIO, what design pattern NIO uses, compare
: that pattern with other similar pattern(s).

avatar
p*2
150

其实GoF作为general DP也没什么大问题。主要是讨论的时候就乱了。所以想分清楚点。
看来名称的不统一的确是个问题呀。这也是GoF的一个重要价值了。

【在 f****4 的大作中提到】
: 那会我也不知道你把Gof归类在OO DP的范畴里面啊。
: Gof一直给我当作General DP的。就因为Gof 的DP定义最规范的原因。
: 这个的确是个问题,但貌似没有统一的标准。我尽量会回避这些容易引起歧义的名字,
: 以定义要解决的问题和给出解决方案替代。OOD的话就是给类图+口头解释。能懂的自然
: 懂了,不能懂的,你就是用对了名词还是不懂。

avatar
p*2
151

你是搞C++的吗?一会儿问问goodbug怎么怎样能系统学一下Java非GoF的常见pattern。
你知不知道有关于C的design pattern,或者类似的东西。这个我想看看。

【在 f****4 的大作中提到】
: 不是大牛,只是在这个area比你早上路几年
: 我回去找找,最常见的大概在12种左右。有些新提出的问题,然后有了些新的DP。有些
: 老问题,貌似不再是常见问题了,对应的DP就消亡了。java DP我真心不熟,你可以和
: 好虫探讨探讨。
: 关于java里面大量用到DP,我的个人理解(有局限性,轻喷)是java本身的哲学(不知
: 道怎么说正确,借用哲学一词)决定的:有现成的就用现成的,不要再发明一遍轮子。
: 然后java里面巨多的framework,lib,在解决通用问题的时候,能上DP就上DP。这样一
: 是保证方案的有效性,二是保证实现的速度;三是保证别人看代码的时候能够快速的理
: 解。如果没有现成的DP,那就自己创建一个,别人觉得好的话就照着用,用得多了,也
: 就成通用的DP了,比如MVC

avatar
p*2
152

是这个吗?这个算DP吗?
New I/O, usually called NIO, is a collection of Java programming language
APIs that offer features for intensive I/O operations. It was introduced
with the J2SE 1.4 release of Java by Sun Microsystems to complement an
existing standard I/O. NIO was developed under the Java Community Process as
JSR 51.[1] An extension to NIO that offers a new file system API, called
NIO2, was released with Java SE 7 ("Dolphin").[2]

【在 p*****2 的大作中提到】
:
: 你是搞C++的吗?一会儿问问goodbug怎么怎样能系统学一下Java非GoF的常见pattern。
: 你知不知道有关于C的design pattern,或者类似的东西。这个我想看看。

avatar
d*x
153

GoF开篇就是用MVC做的例子

OO
如下
博客
上是
就没
常拿

【在 f****4 的大作中提到】
: 看了一下你的3层DP,同意你的观点:混起来之后完全没法讨论。
: 所以,你前面提到的“DP是为了满足OO缺陷的观点”是指特指OO DP?就算那样全局变
: 量+控制接口也是可以实现singleton;只是OO的特性提供了更好的实现方式。而不是因
: 为全局访问的要求破坏了OO特性才引入singleton。是先有了singleton的需求再有的OO
: singleton的实现。
: 还有,你的blog关于mvc的描述。Gof的时候还没有3层控制的普遍需求。mvc是在web编
: 程才作为越来越普遍的一个需求。然后GoF的23种DP,现在已经消亡了很多。现在常用
: 的大约在15种左右。然后有一堆java DP。

avatar
f*4
154
手头上没有Gof,谁有的给翻一下看看里面有MVC不。

【在 d**********x 的大作中提到】
: 扯
: GoF开篇就是用MVC做的例子
:
: OO
: 如下
: 博客
: 上是
: 就没
: 常拿

avatar
d*x
155
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-
点书的图像,然后往下拉,看Design Patterns in Smalltalk MVC。
大多数人看GoF的时候就是翻一遍23种设计模式。
其实MVC在smalltalk里面就有了。我个人认为之所以MVC不被列在GoF的design pattern
里面,是因为MVC模式是"Architecture"层次,而不是"Design"层次的pattern。

【在 f****4 的大作中提到】
: 手头上没有Gof,谁有的给翻一下看看里面有MVC不。
avatar
f*4
156
不管MVC算不算Gof DP,Gof的确是提到MVC了。时间太长,忘记了。
Google了一下
http://www.dofactory.com/topic/1226/about-mvc-and-gof-patterns.
Hi,
Well, no MVC is not one of the GoF patterns. They are not at the same level.
MVC is what is called an architectural pattern while GoF patterns are
design patterns.
However, when implementing MVC you can take advantage of existing patterns.
Take the Head First Design Patterns book they build MVC using Strategy,
Composite, and Observer pattern. And I'm sure that there exists other
implementations of the MVC pattern using other design patterns. I have also
seen MVC being done using the Command pattern.
Needless to say, even though MVC is not a GoF pattern, it is still a very
useful one. GoF patterns are only a few of all existing patterns out there.
http://stackoverflow.com/questions/9119657/how-do-gang-of-four-
Taken at face value, this example reflects a design that decouples views
from models. But the design is applicable to a more general problem:
decoupling objects so that changes to one can affect any number of others
without requiring the changed object to know details of the others. This
more general design is described by the Observer (page 293) design pattern.
Another feature of MVC is that views can be nested. For example, a control
panel of buttons might be implemented as a complex view containing nested
button views. The user interface for an object inspector can consist of
nested views that may be reused in a debugger. MVC supports nested views
with the CompositeView class, a subclass of View. CompositeView objects act
just like View objects; a composite view can be used wherever a view can be
used, but it also contains and manages nested views.
Again, we could think of this as a design that lets us treat a composite
view just like we treat one of its components. But the design is applicable
to a more general problem, which occurs whenever we want to group objects
and treat the group like an individual object. This more general design is
described by the Composite (163) design pattern. It lets you create a class
hierarchy in which some subclasses define primitive objects (e.g., Button)
and other classes define composite objects (CompositeView) that assemble the
primitives into more complex objects.
MVC also lets you change the way a view responds to user input without
changing its visual presentation. You might want to change the way it
responds to the keyboard, for example, or have it use a pop-up menu instead
of command keys. MVC encapsulates the response mechanism in a Controller
object. There is a class hierarchy of controllers, making it easy to create
a new controller as a variation on an existing one.
A view uses an instance of a Controller subclass to implement a particular
response strategy; to implement a different strategy, simply replace the
instance with a different kind of controller. It's even possible to change a
view's controller at run-time to let the view change the way it responds to
user input. For example, a view can be disabled so that it doesn't accept
input simply by giving it a controller that ignores input events.
The View-Controller relationship is an example of the Strategy (315) design
pattern. A Strategy is an object that represents an algorithm. It's useful
when you want to replace the algorithm either statically or dynamically,
when you have a lot of variants of the algorithm, or when the algorithm has
complex data structures that you want to encapsulate.
MVC uses other design patterns, such as Factory Method (107) to specify the
default controller class for a view and Decorator (175) to add scrolling to
a view. But the main relationships in MVC are given by the Observer,
Composite, and Strategy design patterns.
avatar
A*i
157
看见前面有人说C不能实现单例我就笑了
avatar
f*4
158
见前面的回帖
这部分我就记得把model和view分开了。java的mvc pattern大致了解了一下就想当然的
以为是2个东西了~
不做UI,也没动力去搞mvc。。。

pattern

【在 d**********x 的大作中提到】
: http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-
: 点书的图像,然后往下拉,看Design Patterns in Smalltalk MVC。
: 大多数人看GoF的时候就是翻一遍23种设计模式。
: 其实MVC在smalltalk里面就有了。我个人认为之所以MVC不被列在GoF的design pattern
: 里面,是因为MVC模式是"Architecture"层次,而不是"Design"层次的pattern。

avatar
d*x
159
http://en.wikipedia.org/wiki/Architectural_pattern
read this

design

【在 p*****2 的大作中提到】
: OO现在最流行,以前没有意识,看了design pattern之后发现问题实在是太多了。OO是
: 反计算机的,GoF很多流行的pattern又是反OO的,所以非常的矛盾。无论你怎么设计都
: 会被别人挑错。为了面试只能迎合面试官的胃口。这也就解释了为什么我对OO design
: 的题一直心里发毛的原因。因为很难design里边没有毛病。OO本身就有缺陷,你怎么可
: 能design的完美呢?
: 比如你用Singleton, 很多人痛恨Singleton,你可能就完了。
: 你用design pattern, 面试官可能会说你over design。
: 你不用design pattern, 面试官可能会说你design 不 flexible
: 你用继承,面试官可能会说你反OO,影响了封装性。
: 你用接口,面试官可能会说你增加了不必要的冗余代码

avatar
p*2
160

大牛就是不一样。有理有据呀。关于architectural pattern,有没有什么类似GoF的著
作呢?这个归类是谁来完成的?不过MVC当作design pattern,我感觉也不是不可以的,
至少在某些应用下。

【在 d**********x 的大作中提到】
: http://en.wikipedia.org/wiki/Architectural_pattern
: read this
:
: design

avatar
d*x
161
就别大牛了。。去年正好学过一点相关的东西而已。。。
我浏览过一些扯淡的书是谈这个的,但是都很过时了,所以我下半年打算学点java的
framework,看看它们是不是真的站在architecture角度思考设计的。。。

的,

【在 p*****2 的大作中提到】
:
: 大牛就是不一样。有理有据呀。关于architectural pattern,有没有什么类似GoF的著
: 作呢?这个归类是谁来完成的?不过MVC当作design pattern,我感觉也不是不可以的,
: 至少在某些应用下。

avatar
p*2
162

不错。有什么学习计划吗?现在感觉J2EE不一定用,但是看看思想应该挺不错的。

【在 d**********x 的大作中提到】
: 就别大牛了。。去年正好学过一点相关的东西而已。。。
: 我浏览过一些扯淡的书是谈这个的,但是都很过时了,所以我下半年打算学点java的
: framework,看看它们是不是真的站在architecture角度思考设计的。。。
:
: 的,

avatar
x*d
163
Yes, it is this one.
The question asked what DP NIO uses? Who said it is DP?

as

【在 p*****2 的大作中提到】
:
: 不错。有什么学习计划吗?现在感觉J2EE不一定用,但是看看思想应该挺不错的。

avatar
p*2
164

这个就不懂了。有点太specific了。得看看具体的才能知道。估计goodbug可以给很好
的回答吧。而且问题里的DP也不一定是GoF的DP吧。

【在 x****d 的大作中提到】
: Yes, it is this one.
: The question asked what DP NIO uses? Who said it is DP?
:
: as

avatar
d*x
165
打算看spring和hadoop
J2EE的大体框架是最近正在看的

【在 p*****2 的大作中提到】
:
: 这个就不懂了。有点太specific了。得看看具体的才能知道。估计goodbug可以给很好
: 的回答吧。而且问题里的DP也不一定是GoF的DP吧。

avatar
f*4
166
常用的:
Observer Pattern
Decorator Pattern
Factory Pattern (含Abstract Factory Pattern)
Singleton Pattern
Command Pattern
Adapter&Facade Pattern
Template Method Pattern
Iterator&Composite Pattern
State Pattern
Proxy Pattern
次常用的:
Bridge
Builder
Chain of Responsibility
Flyweight
Interpreter
Mediator
Memento
Prototype
Visitor
http://www.amazon.com/Patterns-Enterprise-Application-Architect
这本书推荐看一下。实践讲得比较多~

【在 p*****2 的大作中提到】
: 然后GoF的23种DP,现在已经消亡了很多。现在常用
: 的大约在15种左右。然后有一堆java DP。
: 大牛能不能说说哪8种现在基本不用了?一堆Java DP那些很常用?多谢了。

avatar
p*2
167

不错。how about strategy?

【在 f****4 的大作中提到】
: 常用的:
: Observer Pattern
: Decorator Pattern
: Factory Pattern (含Abstract Factory Pattern)
: Singleton Pattern
: Command Pattern
: Adapter&Facade Pattern
: Template Method Pattern
: Iterator&Composite Pattern
: State Pattern

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。