g*****g 发帖数: 34805 | 1 你这个完全是概念错误,singleton顾名思义,是为了保证系统只有一个instance,跟
全局变量完全没有关系。比如大部分的spring bean完全没有instance variable,都是
singleton,难道也能说是为了全局变量?同时,singleton也不能保证thread safe,
是否thread safe纯粹看具体实现。Spring bean至于传统singleton的一大优势是可以
继承,这个在写架构里也很有用。
回到为什么要保证只有一个instance,通常不过因为初始化比较慢,为了节省资源和快
速处理而已。在server端的程序这个很常见,而且eager init才是常见的形式。你读读
Spring IoC就明白了。
Singleton |
|
p*****2 发帖数: 21240 | 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. |
|
g*****g 发帖数: 34805 | 3 我一直强调的是,既然是可以抽象总结的东西,就可以用框架来实现。特别是
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 发帖数: 21240 | 4 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
applicati... 阅读全帖 |
|
p*****2 发帖数: 21240 | 5
看来这次你概念错误了。
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 attri... 阅读全帖 |
|
g*****g 发帖数: 34805 | 6 这个没有什么错,这就是我为什么强调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 |
|
x****d 发帖数: 1766 | 7 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? |
|
p*****2 发帖数: 21240 | 8
been
我感觉主要的原因是global variable名声太不好了,所以很多人一看到就深恶痛绝。
但是,C语言里global variable多了去了,不OS kernel写的好好的?所以用global
variable也不是什么大不了的,用了软件就不work了?一个事物的出现毕竟有它的理由
。什么东西都有好的一方面和坏的一方面,没有绝对。所以我同意你的观点。但是总的
原则是不能滥用,能少用就少用,合适的地方用。不过这样的讨论好在可以给我这种新
手加强理解。我感觉还是挺好的。虽然最后观点不一样,但是确实理解更深了一层。 |
|
d**e 发帖数: 6098 | 9 这个跟"男朋友问女朋友今晚吃什么"那个古老笑话一个样,都是值得大家鄙视. |
|
|
p*****2 发帖数: 21240 | 11
错.
我的理解DP是对OO缺陷的补充。因此OO设计必然离不开DP。我看了DP以后发现不用DP的
OO很难设计好。当然了DP里面很多都是common sense,你就算没学过,可能不经意间已
经用了。对于Java程序员来说,不懂DP我很难理解。从本版来看,Java大牛goodbug和
zhaoce对DP理解的都很深入,明显工作中常用,或者常接触。
想了解一下。如果不涉及DP的话,那么OO design里面还有啥东西呀?就是封装,继承
和多态吗? |
|
|
d**e 发帖数: 6098 | 13 这里也没怎么说到pattern.
http://en.wikipedia.org/wiki/Object-oriented_design
我的理解是面试中就是答好这些东西就行了,硬用dp可能会有点走火魔的可能.正如你说
的,非常可能是不经意间就已经用了某些pattern,所以我觉得说得通就可以了.
我特意向我们组的同事确认一下他expect的是什么,他也说是这些,他说从来不需要面试
者需要知道什么pattern不pattern的东西,就只需要就划清楚各个object间的关系就好
了,但如果能很清楚表达什么哪个DP适合又好使好用的话,是可以加分,但不是必需.还有
,他从不在OOD上面拒人,除非面试者真的答得好离谱或者完全不知从何下手.
不如找NND或者gate出来印证一下好了. |
|
|
|
p*****2 发帖数: 21240 | 16
再问一点。OO design跟UML,database有关系吗?也就是说回答问题的时候需要画UML
,和设计DB吗? |
|
g**e 发帖数: 6127 | 17 amzn问的是design question,从来没说是OO design question。至少我没听有人这么
说过。其实基本就是done说的那样,没有要求用什么高级pattern。但是基本的OO概念
(二爷提到的多态,继承,封装)应该有。有个哥们设计停车场,把所有方法和object
全写在一个class里面,说他不懂OO据他不冤吧。
对付amzn的design question,弄清楚问题和要求,思路和结构清晰,考虑scalability
和flexibility,最后写点大方向的code就差不多了。
你说
面试
就好
还有 |
|
p*****2 发帖数: 21240 | 18
这个我看过。我不太清楚是不是NND这个就代表了A的面试。因为我也问过一些A的,他
们也说不太清楚,他们面试的时候没碰到过。另外关于NND这个design我也有点问题
在兽一下OO的继承关系(比如car有tru
ck, sedan, SUV啥的;Lot有大lot,小lot,残帕啥的)
这东西需要继承吗? |
|
d**e 发帖数: 6098 | 19 我也没面过,但画图可以更好表达自己的思路.
反正我英文不好,我大部分时间都是以图说话....
UML |
|
p*****2 发帖数: 21240 | 20
object
scalability
说的不错。但是有点自相矛盾呀。你说不是OO design,那就是system design吧。但是
你又说OO基本概念应该有。这不是矛盾吗?System design跟OO没有必然关系呀?比如
人家就用procedural 或者FP design也不一定用OO呀?这点能不能解释一下? |
|
d**e 发帖数: 6098 | 21 这个继承也没什么问题吧?
不过也就是打个比方,我觉得说得在理就好了,没有对错. |
|
d**********x 发帖数: 4083 | 22 一个和蔼可亲的老爷爷问我的那个客户端是怎么做的
我给他解释了layered structure,他就ok了 |
|
d**e 发帖数: 6098 | 23 你说起procedural,我同事也提到了,他就说用c惯了的人可能是没有oo的概念,那么他全
部用函数来design也没问题,只要他说得有条有理.但如上面gate说的全部东西都在一个
class里面就不行... |
|
p*****2 发帖数: 21240 | 24
感觉对于parking lot没必要继承。设个属性就好了。 |
|
|
|
d**********x 发帖数: 4083 | 27 以前无聊做的一个小程序,他问我做过的项目里面哪个最好玩,我就跟他说是那个了。。 |
|
p*****2 发帖数: 21240 | 28
。。
太牛了。无聊一搞就拿到A的offer。膜拜呀。 |
|
d**********x 发帖数: 4083 | 29 这个小东西其实就两万行代码,用来上telnet bbs的
我跟他说,这东西比较古老,现在很小众了,那位老爷爷就乐了,说当年我上bbs的时
候还是用email sync的那种呢。。然后就问了问我这玩意的结构,各层协议是怎么实现
的。。。
后面又问了问rotated sorted array的binary search,c++ stl的实现细节什么的
所以有时候运气很重要。。。bar raiser撞枪口上了,你说我怎么办。。 |
|
p*****2 发帖数: 21240 | 30
哈哈。牛呀。你当时是fresh吗?fresh做了2万行代码已经很不错了。不给offer就怪了
。 |
|
|
|
|
p*****2 发帖数: 21240 | 34
你太幸福了。跟这么多大牛一起同事。我们这里都是老头。 |
|
d**********x 发帖数: 4083 | 35 其实我工作过两年了,只是java和distributed实在不熟悉,估计这边不会给我title的
权当码工内部再次转行了 |
|
|
|
d**********x 发帖数: 4083 | 38 还不行。。现在有太多要学的东西了。我目标是三年之后可以问心无愧收下这句话。 |
|
|
k***x 发帖数: 6799 | 40 不是有个phd算法不错,最后说OOD不行被据了么? |
|
d**********x 发帖数: 4083 | 41 回g2,咱暂时在西雅图,以后估计要跑irvine |
|
i***h 发帖数: 12655 | 42 LZ你不是第一次标题党了
面试设计就是看你对大一点的软件结构有没有概念,
对工作过的尤其重要
OO不是目的,清晰易扩展和维护才是 |
|
|
p*****2 发帖数: 21240 | 44
能不能展开说说?比如那个parking lot,怎么设计算是对软件结构有概念?清晰易扩
展维护? |
|
i***h 发帖数: 12655 | 45 什么parking lot?
没看全楼,把题说一下?
OO简单说就是封装呗,核心就是以后可能的改变尽量少地影响软件其它部分
pattern最大的意义就是把常用的有用设计总结了一下
让大家有个共同语言
不然你说应该用”singleton", 同事说应该用"单子态”,影响交流么 |
|
p*****2 发帖数: 21240 | 46
就是设计一个parking lot,你不用OO先设计一个看看。 |
|
i***h 发帖数: 12655 | 47 面试这个题的话是一个交流过程
太麻烦了,我就不做了,而且我肯定会用OO
除了软件设计外,也看你在实际工作中和同事的交流
一半就先问要求,问界面
然後谈可能的方案,利弊
想象以后的可能改动是什么,所以会做什么样的设计选择
比如界面:存车,取车,计算时间,收费,空位管理
对应的use case, test case
然後谈内部数据结构,blabla |
|
p*****2 发帖数: 21240 | 48
这我就confused了,你前边说跟OO没关系,现在又说你肯定会用OO。
然後谈内部数据结构
其实我比较关心的是这个部分。不知道你不用DP会怎么设计。 |
|
i***h 发帖数: 12655 | 49 最终目的是那个
現在大家想出了OOD,也不知道有没有更好的方法
至于这个停车场,你想想其实是不是和内存管理一个东西? |
|
p*****2 发帖数: 21240 | 50
至于这个停车场,你想想其实是不是和内存管理一个东西?
能ZKSS吗? |
|