|
x****o 发帖数: 21566 | 2 来源:王垠的博客
有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一
些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验
的问题,所以想在这里做一个总结。
总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是
可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从
《设计模式》(通常叫做 GoF,“Gang of Four”,“四人帮”)这本书在 1994 年发
表以来,“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
里程序的严重复杂化以及效率低下。
GoF 借鉴的是一个叫 Christopher Alexander 的建筑师的做法。Alexander 给一些建
筑学里的“设计模式”起了名字,试图让建筑师们有一些“共同语言”。可惜的是,
Alexander 后来自己都承认,他的实验失败了。因为这些固定的模式,并没能有效地传
递精髓的知识,没能让新手成长为出色的建筑师。
照搬模式东拼西凑,而不能抓住事物的本质,没有“灵感”,其实是设计不出好东西的
。这就像... 阅读全帖 |
|
i****c 发帖数: 102 | 3 个人理解:
设计类的面试题至少有三种
1)直接考察某设计模式,如解释何时使用bridge模式,或写出多线程安全的singleton
等
2)间接考察设计模式,如设计一些典型的应用如围棋(flyweight),计算器(factory
)等
3)设计简单系统,如设计restaurant reservation system。设计模式未必能直接套用
到这些系统上。
软件设计的最终目标是开发出符合实际的系统。一方面要做到简单实用,另一方面要考
虑可扩展性和可维护性。这两方面在现实系统中往往是需要tradeoff的。
设计模式说白了就是几个牛人总结了部分设计技巧。能不能用,要不要用设计模式,都
是由具体系统需求决定的。
我的建议是:把那两本书弄得烂熟,然后再忘掉它们(听起来起来很玄的样子) |
|
f****4 发帖数: 1359 | 4 要看设计模式的话,可以看这本
Head First Design Patterns (深入浅出设计模式)
这本书,相当的深入浅出。每个模式通过犯错,纠错,犯错,纠错的过程进行解释
看完后的个人收获,不是记住了几个模式;而是怎么解决问题,怎么balance
还有,如果是刚毕业找工作的话,很少会给问到设计模式,就是问到也集中在
Singleton, Factory VS Abstract Factory异同,Observer 和 MVC这几个上面。花太
多时间,没有必要。 |
|
s****y 发帖数: 503 | 5 J2EE开发中,常用的设计模式有哪些呢?
面试中一般喜欢问哪些设计模式呢?
单例、工厂、包装、代理,还有哪些必须要知道的呢? |
|
p*****2 发帖数: 21240 | 6
pattern
比如这篇文章。http://coolshell.cn/articles/8961.html
前些天发了一篇《如此理解面向对象编程》的文章,然后引起了大家的热议。然后我在
微博上说了一句——“那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来
实现罢了……OO的设计模式思想和Unix的设计思想基本没什么差别”,结果引来了一点
点争议。所以,我写下这篇文章把我的观点说明一下。我希望这样可以让大家更容易地
理解什么是设计模式。我顺便帮OO和 Unix/Linux搞搞基。 |
|
G***l 发帖数: 355 | 7 “那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来
实现罢了……OO的设计模式思想和Unix的设计思想基本没什么差别”
你这句话不对啊,那23个gof的设计模式就是针对OO的呀,怎么能说半毛钱关系没有呢? |
|
h*****g 发帖数: 312 | 8 对没工作经验,刚毕业的学生来说?
具体的,【大话设计模式】或【Head First Design Patterns 】自看哪几个设计模式
就足够面试了?
谢谢! |
|
c******t 发帖数: 391 | 9 看过一点图文版的head first DP, 感觉那23种设计模式,如果没有在实际项目中用到
、用熟的话,很难灵活地套用解决实际问题,不知道大家有什么学习设计模式的相关经
验, 能不能分享一下?
thanks! |
|
H**********5 发帖数: 2012 | 10 算法题无非就是拼时间和精力。智商没问题花个半年都可以搞定medium和hard之间的题。
真正牛的是设计模式的人。
我有一次终面被完爆,让我分析一个模块用各种设计模式实现的trade off. |
|
z*********n 发帖数: 1451 | 11 设计模式现在还有人考?感觉这几年不爱考这玩意了。设计模式没啥高深的,不如现在
考分布式系统
设计难。 |
|
H**********5 发帖数: 2012 | 12 考的,烙印特别喜欢考。尤其是那种上了年纪的烙印
: 设计模式现在还有人考?感觉这几年不爱考这玩意了。设计模式没啥高深的,不
如现在
: 考分布式系统
: 设计难。
|
|
l***i 发帖数: 289 | 13 代码中的哪些问题影响了库的扩展性呢?
每个设计模式都是为了解决·特定·代码问题的。有了具体的问题,才能谈采用何种设
计模式。
而且并不是所有问题都需要应用设计模式来解决的,有些问题只用基本的重构手法就能
解决。 |
|
t****a 发帖数: 1212 | 14 Paul Graham和Peter Novig好像也就说说lisp自带设计模式的优点无需费力,顺带吹吹
FP强大的地方,但好像没有说设计模式对C/Java这样的主流传统型语言程序带来的好坏
?王垠就直接开始砍了啊,直接下结论说是坏的?他的根据在哪里啊,自己猜的么?哎
,太过自信了吧。 |
|
p*****2 发帖数: 21240 | 15
结。
是不是他反对的主要是设计模式的教条化。因为确实存在这个现象。我觉得他想说的是
搞Java的不要总以为DP才是软件设计。软件不是都要去这么设计的。根据你的观点,软
件不做大,根本就体会不出DP的优势。因此,DP到处都用确实有教条化的嫌疑,因为不
是什么软件都会做那么大的。
“设计模式”这个词有了新的,扭曲的含义。它变成了一种教条,带来了公司
里程序的严重复杂化以及效率低下。 |
|
s****y 发帖数: 503 | 16 前台是iPad,用iOS native API和Java后台用Restful进行通讯,所以没有浏览器了,
Java端应该怎么实现MVC这些设计模式呢?
Model和以前是一样的,View没有了,变成了Restful,那么怎么实现Controller呢?因
为这个项目是企业级应用,所以不能用框架,只能用J2EE技术,像 JAX-RS、JAX-WS、
CDI、Bean Validation等。
我以前开源框架用多了,让我自己直接写,我一时有些想不明白,Java端应该用什么样
的设计模式?应该实现呢? |
|
P***y 发帖数: 2885 | 17 哎,我在自学设计模式。没有见过大作业是什么样子的。可以发给我参考一下吗? |
|
K******g 发帖数: 1870 | 18 我觉得这个可能需要用multiple inheritance.一个base class: Animal.然后下面分
为birds, mammals, fishes, etc,都是animal的derived classes,再下面,比如,
bird又分为pigeon, duck, eagle,等等,继承了bird。
每一个class里包含了一个list of all subclasses。
请问又什么设计模式可以套用improve这个设计的吗?我考虑了composite pattern,但
是好像不适合这个。
请OO设计的高手指教。多谢。 |
|
|
|
i****c 发帖数: 102 | 21 LZ提到的那本大话设计模式应该更好懂,虽然有点粗糙。 |
|
c*****a 发帖数: 1638 | 22 如果你是复习,看head first design pattern
如果你第一次看,最好把GoF设计模式那书的前3章看一下。 |
|
A**u 发帖数: 2458 | 23 在看 Gamma Erich 四人帮的
Design Patterns Elements of Reusable Object-Oriented Software
abstract factory 那几页,看了好几天,都看不明白。
请教大家,对付面试,有什么好的书推荐呢?
不会java, 搜索版面,大家对head on patterns 很推崇,
但那本书是java的, c++ java实现不同,那是不是不合适用来准备c++呢?
有没有 推荐的c++ 设计模式呢 |
|
T******7 发帖数: 1419 | 24 flg 面試 或者硅谷hot startup面,一般问设计模式么?
需要掌握到什么程度? |
|
a*****u 发帖数: 1712 | 25 问系统设计不问设计模式
★ 发自iPhone App: ChineseWeb 8.7 |
|
|
m*******n 发帖数: 305 | 27 被出设计模式的面试题,你就应该意识到对方不想让你过。 |
|
p*u 发帖数: 2454 | 28 design patterns早就被视为一种over-engineering的,滥用OO的行为准则,业界早已
不再提倡。
而在公元2018年还在鼓吹设计模式牛X的才是真牛人的,是真的纯傻逼。 |
|
q***s 发帖数: 2243 | 29 从网上下载了一个Flash Builder 4.7,跟着教材来学习,教材上(2010年版本)说有
设计模式,但是在这个Flash Builder 4.7中却找不到。
请问大家是不是也这样? |
|
q***s 发帖数: 2243 | 30 从网上下载了一个Flash Builder 4.7,跟着教材来学习,教材上(2010年版本)说有
设计模式,但是在这个Flash Builder 4.7中却找不到。
请问大家是不是也这样? |
|
S****z 发帖数: 666 | 31 经常不是搞个什么function object吗?
那这个function object跟那个被他调用的类在设计模式里面是啥关系啥模式?
class compare_class {
public:
bool operator() (A a, A b) const {
return a.data < b.data;
}
};
比如这个compare_class跟class A是啥关系? |
|
g*****g 发帖数: 34805 | 32 这哥们就是井底观天。设计模式的目的本来就不是精巧简洁,而是减少耦合,使得不同
代码可以修改而不互相影响。
当项目更大的时候,在Client端通常采用plugin的结构,在server端则是SOA。使得不
同的team,可以有不同的release schedule。Twitter从ruby转向java/scala,主因之
一就是后者的层次分明。
http://www.infoq.com/articles/twitter-java-use
Twitter has gradually been moving more and more of its stack to the JVM. The
change is partially motivated by oft-cited advantages of the JVM, such as
performance and scalability, but is also driven by a desire for better
encapsulation of individual services, and other architectu... 阅读全帖 |
|
|
t****a 发帖数: 1212 | 34 没参与过大项目,没看懂过那些设计模式,所以不敢乱评论啊。以前有阵子还挺喜欢王
垠的,因为他崇尚开源,在PL领域懂的很多。现在才发现他真什么都敢评论,没听说他
也是软件工程领域的专家啊。 |
|
j******c 发帖数: 294 | 35 设计模式不是特定语言的,GoF的书用的是C++例子,当时可能还没有Java |
|
h********3 发帖数: 2075 | 36 我们软件工程课上老师说,设计模式实际当中最大的好处是communication上便捷。
The |
|
i***o 发帖数: 750 | 37 搞得好像在java 和 design pattern 之前没有大规模项目似的。
design pattern 很多东西是错的,最多也就是一家之言。前面有人提的,除了java到
底多少人提个所谓设计模式?
deployment |
|
g*****g 发帖数: 34805 | 38 你用类库吗?类库里就有大量的设计模式。你不写不等于你不用。 |
|
z****e 发帖数: 54598 | 39 概念混乱啊
j2ee只是一个标准
开源不开源跟这个没半毛钱关系
开源一样可以j2ee
其次就是,web service也是一堆标准
你用框架只是可以省去理解标准的时间
但是如果你想自己impl,当然是从标准本身入手比较简单
从网络协议开始,xml和json格式开始,而不是从阅读他人代码开始
阅读他人代码是最低效,最愚蠢的学习方式,除非是学习设计模式
这种没有办法绕开,因为本身就是教人怎么写代码
但是其它任何基础理论的学习,都不应该以阅读代码的方式进行
而应该从原理入手,原理不懂,看了代码更晕菜 |
|
A*******e 发帖数: 2419 | 40 四人帮那本有点老。head first那本是不是太简单了?
好虫的设计模式哪里学的? |
|
|
r*****n 发帖数: 4844 | 42 前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么
经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业
项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至
少10年通用。
回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末
节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的
编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows
的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成
本太高了。
微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编
程革命史》
所以... 阅读全帖 |
|
n******r 发帖数: 869 | 43 贡献好文:
http://coolshell.cn/articles/4990.html
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to
those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉
我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,
于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来
了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进
阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文章。
我的这个朋友把这篇文章取名叫Build Your Programming Technical Skills,我实在
不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一
个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩
。这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾
经学习过的一些技术(今天明显... 阅读全帖 |
|
f*******1 发帖数: 59 | 44 做一下广告:一家以省政府牵头,有30亿启动资金的民营银行要在上海建立科技和业务
中心。银行以互联网为主,做支付,借贷,理财,境内外转账,etc。
诚征拥有海外多年互联网金融工作及学习的背景,熟悉海内外互联网金融发展趋势,具
有创新理念,致力于归国投生于科技金融事业的人士
公司氛围将秉承创业精神,股权激励,以技术团队为主,占到60%或以上。公司主管将
于四月中旬来美现场招聘。
有意者或者有认识的朋友感兴趣 请与[email protected]/* */联系, 谢谢
招聘岗位:
业务类
资产管理产品设计
工作职责:
1、负责资产项目的引入、流程设计、机构、产品及项目准入、协议签署、除外部渠道
产品引入以外的商务谈判等工作;
2、协助配合持续期管理室和综合财务室与业务的相关工作;
3、牵头完善资管产品部资产引入的有关制度、办法、流程;
工作要求:
1、国外重点院校本科及以上金融相关学历;
2、有资产管理产品设计相关经验5年以上,了解市场客户需求和市场产品动态,具有产
品创新精神;
3、有较强的沟通能力和执行力,有高度的责任心和团队协作精神,能承受较强的工作
压力;
4、热爱移动... 阅读全帖 |
|
z*******3 发帖数: 13709 | 45 很多概念本身并不难
比如abstract class
但是这种是属于被淘汰的部分
基本上我已经不用了
就很像vector,hashtable这种
要说概念,我肯定知道
但是例子,真不好找
还有就是那个suspend
这种都属于被淘汰边缘的技术
除了学习的时候,老师要求,其他时候,谁用这些东西
有些都明确被deprecated了
不是说这些东西难,是要求我说这些东西,本身就反应了一点
就是这一行,legacy code很多
这一行,我前后面了三家公司
一家小的,一家是domestic制霸,最后一家是这片大陆上最大的
区别就好比getafe和竞技马德里和皇家马德里的区别一样
小公司知名度低,而马德里城内都是竞技马德里的球迷,离开马德里
就是皇马的天下了
那家小的,后来进去混了一个月左右,觉得很无聊,他们代码写的很好了
很健壮了,我没有搞头,虽然我不是很喜欢他们的结构
那家domestic的呢,我后来想了想,有机会吹的时候,没有吹
笔试还高分通过,当时知道结果之后有些自大,就木有准备了
稍微有些遗憾,但是这个经验非常重要,我仔细总结了一下
觉得吹还是有必要的,而且很关键,因为对方问问题都是基... 阅读全帖 |
|
z***s 发帖数: 3241 | 46 http://coolshell.cn/articles/8745.html
如此理解面向对象编程
2012年12月13日陈皓发表评论阅读评论 20,225 人阅读
从Rob Pike 的 Google+上的一个推看到了一篇叫《Understanding Object Oriented
Programming》的文章,我先把这篇文章简述一下,然后再说说老牌黑客Rob Pike的评
论。
先看这篇教程是怎么来讲述OOP的。它先给了下面这个问题,这个问题需要输出一段关
于操作系统的文字:假设Unix很不错,Windows很差。
这个把下面这段代码描述成是Hacker Solution。(这帮人觉得下面这叫黑客?我估计
这帮人真是没看过C语言的代码)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class PrintOS
{
public static void main(final String[] args)
{
String osName = System.getProperty("... 阅读全帖 |
|
N***m 发帖数: 4460 | 47 转一段别人的话:
Design patterns are hurting good design more than they’re helping it.
很多程序员把设计模式奉为天神,他们过度的追求设计模式以至都都忘了需求是什么,
结果整个系统设计被设计模式搞得乱七八糟,我们叫这种编程为“设计模式驱动编程”
,正如第一点所说,如果你不懂得用自己的大脑思考的话,知其然,不知所以然的话,
那么你不但得不到其好处,反而受其所累。
马逊还很喜欢考这 |
|
m******t 发帖数: 1171 | 48 码农们过来,老王给你们号脉了。
http://news.mydrivers.com/1/292/292325.htm
说实话,虽然似乎为之奋斗了十多年,在真正进入软件行业的短短一年之后,我已经对
它感到相当的厌倦了。这并不是说这个行业没有前景,而是在这个行业工作,其实很难
得到心理上的快乐。
人们说女怕嫁错郎,男怕入错行。我并不认为自己入错了行,我仍然很喜欢设计程序和
语言,而且我显然是这个领域的王牌之一。然而我却看到了这个行业里的无限混沌,让
我觉得喘不过气来。几十年的垃圾设计堆积在那里,却没有人试图把它们清理掉,权威
主义盛行。无论你在哪个公司,哪个地方,只要跟程序员说话,十有八九会谈不来。非
常扫兴不说,甚至感觉很伤自尊。
久而久之我发现了,由于程序员工作的性质,他们受到的“熏陶”,形成了一种行业性
的心理疾病。这里我就简单的把我所观察到的一些症状总结一下。
无自知之明
由于程序员的工作最近几年比较容易找,工资还不错,所以很多程序员往往只看到自己
的肚脐眼,看不到自己在整个社会里的位置其实并不是那么的关键和重要。很多程序员
除了自己会的那点东西,几乎对其它领域和事情完全不感兴趣,... 阅读全帖 |
|
u******e 发帖数: 758 | 49 刚刚和amazon的recruiter通完电话,确认拿到offer,他正在发email
95k+15k
大概打算从了,希望板上有讨价还价经验的朋友可以给点经验争取最大利益^_^
另外,因为身份问题,我十月前要先去amazon北京,类似这期间的pay之类的问题有谁有
经验的?
鉴于NDA和某w同学,面经里问题我尽量只涉及方向不说具体内容。
先说下我的基本情况吧,应该有点励志效果:
学历只有国内大学cs的本科,还因为身体原因延毕了半年-_-之后在杭州找的一个小公司
的SDE工作了1年半,拿L1来了公司在美国的总部作PM。公司规模很小,不到20人,很多
东西是一团乱麻,工作不到2年后于去年12月跟老板吵翻,离职开始找工作。
L1签证到今年2月就过期了,所以算是黑着身份找的,想想也挺不容易的。
简历自己写的,然后托朋友改了一下(还不是cs的人,只是帮我改了些语法和排版)。
一开始是在monster上投的,发现这样投实在是石沉大海。之后开始直接上各公司主页上
的career里投,疯狂的时候只看position,连requirements都不仔细看就扔出去了,而
且一般都是一家公司投7,8个职位的... 阅读全帖 |
|
p*****2 发帖数: 21240 | 50 先打个草稿
首先,GoF设计模式要解决的问题不少都是因为OO不承认全局变量和函数造成的。
其次,设计模式的三个准则:中意与组合而不是继承, 依赖于接口而不是实现,高内
聚低耦合
第三,设计模式分为creational, structural, behaviroal。
Strategy: OO不承认函数造成的
Decrator: 就是平时常常提到的wrapper, 也属于中意与组合而不是继承
Factory: 感觉是纯OO的东西。Factory method有两种,一种是effective Java里谈的
,一种是GoF里谈的,我觉得都属于design pattern的范畴,但是要注意区分。因为平
时所说的DP一般指GoF,但是我感觉前者可能更常用,所以这个比较容易confused。面
试比较容易考到,感觉应该跟面试官说清楚。
Observer: 太常用了,平时见到的什么event,notification都是这个pattern。
Chain of Responsibility: 一看就想到了exception。除此之外,貌似driver的stack
也是这个意思。
Singleton:... 阅读全帖 |
|