From: http://www.cnitblog.com/SmartJacky/articles/Management.html
在研究大量成功企业领导者的案例后,我们发现,这些最优秀的企业领导人知道自己需要什么,并能尽全部的努力去达到自己的目标,他们懂得做人、善于决策、充
满热忱、持续创新、架构关系、激励团队以及赢得拥戴……最成功的企业家所共同具有的良好习惯和素质,使得这些企业领导人能够脱颖而出。
第一个习惯:懂得做人。会做人,别人喜欢你,愿意和你合作,才容易成事。怎么让别人喜欢自己呢?好的企业领导者都习惯于能真诚地欣赏他人的优点,对人诚实、正直、公正、和善和宽容,对其他人的生活、工作表示深切的关心与兴趣。
台湾著名企业家张忠谋在黑金横行的社会大环境下依然从来不走后门、不走政商关系,更拒绝钻法律漏洞,赢得企业界和民众的极大尊重,官员也因此从来不敢故意刁难他的企业。
第二个习惯:善于决策。面对不断变化的市场,企业经营方案总是不止一个,决策就是要对各种方案进行分析、比较,然后选择一个最佳方案。企业领导者的价值在于“做正确的事情”,同时帮助各阶层的主管“把事情做正确”。
四川长虹总裁倪润峰1996年率先拿起价格武器将彩电大幅降价,从而确立国产彩电的主导地位,正是看准市场、果断决策的典型。
第三个习惯:相信自己。成功的企业领导者都有很强的信心,他们既会在自己内心里相信自己,也会在公众面前表现出这种自信心。成功学的研究成果表明:成功的欲望是创造和拥有财富的源泉。
英特尔总裁葛洛夫认为“只有偏执狂才能生存”,坚持与自信成就了英特尔今天的伟业。
第四个习惯:明确目标,什么是领导?世界级企管大师班尼士下了个定义:“创造一个令下属追求的前景和目标,将它转化为大家的行为,并完成或达到所追求的
前景和目标。”企业领导者们知道,要使员工能奉献于企业共同的远景,就必须使目标深植于每一个员工的心中,必须和每个员工信守的价值观相一致;否则,不可
能激发这种热情。
有“神奇教练”之称的米卢蒂诺维奇已经创造纪录,他所带的每支队伍都有一个明确的目标,就是打进世界杯的决赛圈。
第五个习惯:充满热忱。热忱有时候比领导者的才能重要,若二者兼具,则天下无敌。产生持久的热忱方法之一是定出一个目标,努力工作达到这个目标,而在达到这个目标之后,再定出另一个目标,再去努力达到。这样做可以提供兴奋和挑战,如此就可以帮助个人维持热忱而不坠。
第六个习惯:顽强精神。如果说有一种素质几乎为所有的成功企业领导者所拥有的话那就是顽强精神。所谓顽强,并不是达到愚蠢地步的顽固,它是一种下决心要
取得结果的精神。在管理实践中,作为一个领导者,你手下的人都希望领导是一个不屈不挠的人。只有你的竞争对手希望你放弃这种精神。
第七个习
惯:重视人才。企业最好的资产是人,企业领导者的美德在于挑选好的合作伙伴。选一个适合的人,比选一个优秀的人来得重要。除了专业所必备的素质之外,他们
找人要看3种东西:一是必须精力充沛。有精神、有气派,这样的人可以走长途,可以感染人,适应变动。二是要正直。考虑个人利益的同时,能够考虑到公司的利
益。三是要有智慧和胆识,有进行思考的能力和魄力。
“萧何月下追韩信”、刘备“三顾茅庐”都是识人用人的经典例子。
第八个习惯:充分授权。人的精力是有限的,我们不可能一个人做所有的事。所以,作为一个企业领导必须学会把权力授予适当的人。授权的真正手段是要能够给人以责任、赋予权力,并要保证有一个良好的报告反馈系统。
美国前总统里根是一个出名的放任主义者,他只关注最重要的事情,将其它事情交给手下得力的人去负责,自己因此可以经常去打球、度假,但并不妨碍他成为美国历史上最伟大的总统之一。
第九个习惯:激励团队。组织起一个优秀的团队,是一件非常艰难和重要的事情。激发起他们的热情,挖掘出每一位团队成员的聪明与潜力,并将他们协调起来,是成功的领导者必须具备的一种能力。一个企业领导人必须是一个能激发起员工动力的人。
第十个习惯:终生学习。衡量企业成功的尺度是创新能力,而创新来源于不断的学习,不学习不读书就没有新思想,也就不会有新策略和正确的决策。孔子说:“朝闻道,夕死可矣。”正是终生学习的最佳写照。
第十一个习惯:持续创新。当今世界正面临着的一个非常严峻的现实是:如果你停步不前,你就会失去自己的立足之地。这一点对于任何领导或公司都是同样的道理。如果你满足于现状,你就丧失了创新能力,而创新是人类发展的主要源泉。具有创新头脑的人是不怕变革的。
耐克不断改进自己的运动鞋,以适应人类行走和奔跑的需要;不断寻找为当时年轻人所接受的明星作为代言人,希望永远被认为是“酷”的代名词,没有持续创新,已有几十年历史的耐克就会被年轻一代抛弃。
第十二个习惯:架构关系。一个好的企业领导者习惯于架构关系。他们知道,关系已成为人际中个人成长、企业成事的重要条件与资源。关系就如同网络,构架起
人与人、群体与群体、企业与客户、企业与企业之间的互动。为了企业的发展,任何一个领导者都缺少不了“关系管理”。西方国家的大企业常常邀请其它大企业的
管理者加入自己的董事会,不仅拓宽了眼界,而且在经营管理中会得到意想不到的助力。
第十三个习惯:抓住机会。每个人都被机会包围着,但是机会只是在它们被看见时才存在,而且机会只有在被寻找时才会被看见,关键在于你如何认识机会,利用机会,抓住机会和创造这些机会。
第十四个习惯:有效沟通。邻导者与被领导者之间的有效沟通,是管理艺术的精髓。比较完美的企业领导者习惯用约70%的时间与他人沟通,剩下30%左右的时间用于分析问题和处理相关事务。他们通过广泛的沟通使员工成为一个公司事务的全面参与者。
第十五个习惯:经营未来。成功的企业领导人都懂得,未来是属于那些今天就已经为之做好准备的人。他们用20%的时间去处理眼前那些大量的紧要事情,这只是为了眼前的生计;而把80%的时间留给那些较少但很重要的事情,这是为了未来。
第十六个习惯:赢得拥戴。一个企业领导人的梦想不管如何伟大,假如没有拥戴者的认同与支持,梦想仍然只是梦想。要赢得拥戴者的首要任务就是:认同我们的拥戴者,并找出他们共同的渴望是什么?假如说领导人需要具备什么特殊天赋的话,那就是感受他人目的的能力。
第十七个习惯:勇于自制。具有高度的自制力是一种最难得的美德。热忱是促使你采取行动的重要原动力,而自制力则是指引你行动方向的平衡轮。在管理活动实践中,一个有能力管好别人的人不一定是一个好的领导者,只有那些有能力管好自己的人才能成功。
深圳万科总裁王石1992年时针对一些房地产开发商低于40%的不做的暴利心态,提出万科“高于25%的利润不做”的口号,如今万科还健康地活着,当年众多追逐暴利的企业则大部分已死掉。
第十八个习惯:培养领导。最成功的领导者是那些把工作授权给别人去做的人,是把下属培养为领导者的人,是把领导者变为变革者的人。联想集团董事长柳传志培养了两大少帅:杨元庆和郭为,使集团的事业后继有人、基业长青。
第十九个习惯:注重家庭。比较完美的企业领导者常把家庭比作登山的后援营地。他们在筹备后援营地(家庭)上所花的时间,绝不能少于实际登山(干事业)的
时间,因为他们的生存、登山的高度,常常与后援营地是否牢固和存粮是否充足有关。这些企业领导者还懂得,全面的成功才算真正的成功,他们往往在干事业的同
时,能够兼顾家庭,珍惜幸福的婚姻。
第二十个习惯:经营健康。许多立志要成功但最后壮志难酬的企业领导人,往往是因为不能战胜一个最大的敌人,这个敌人就是自己不健康的身体。美国管理界流行着一个观点:不会管理自己身体的人亦无资格管理他人,不会经营自己健康的人就不会经营自己的事业。
管理者必须提升八项能力
一、正直的人格魅力
在中国目前的企业,职业经理人的人格魅力仍然是影响班子好坏的重要因素,只有职业经理人这个头带好了,才会带出一个好的管理队伍。
二、准确的判断能力
能够站在企业改革与发展的高度,对企业领导班子成员提出的众多议题表明自己新颖的思想、建设性的意见或建议,做到超前认准方向、把握好方向,齐头并进,协调健康发展。
三、成熟、自信和沟通的公关能力
一位成熟、自信的职业经理人应在坚持原则的前提下,把“一班人”紧紧地凝聚在一起。对外要以提高企业知名度和社会影响力为己任,善于搞好“上挂、横联、下辐射”的公关网络建设,协调沟通好社会各界关系。
四、善于处理危机或突发事件的能力
职业经理人应在处理突发事件中最大限度降低负面效应,减少危机对企业正常生产经营的冲击,带领员工奋发图强,走出危机笼罩的阴影。
五、精通市场经济知识和把握内在规律的运作能力
建立与市场经济和企业内在规律相适应的生产机制、管理机制以及与生产经营相配套的高质量的员工队伍,这就要求职业经理人必须精通市场经济知识和具备把握内在规律的运作能力。
六、创新精神与战略远见
职业经理人的一项重要任务就是审批企业的中长期发展战略和规划。所以职业经理人应具有挑战自我的创新精神,善于集思广益、分析和把握企业发展趋势,擅长策划、谋略和具有战略眼光。
七、较强的理财能力
职业经理人应具备一定的财务知识,应能看懂反映企业财政状况的各种财务报表和其他指标,严格控制支出,力争把有限的资金用于企业自身发展上。
八、坚持不断“充电”
作为职业经理人,要做学习培训的鼓吹者和实践者,只有不断学习、不断提高自己,才能深入和了解当今国内乃至世界上本行业的前沿情况和发展趋势,只有这样,才能保持战略性的远见卓识和高质量的决策水平。
posted @
2006-04-21 17:44 Martin 阅读(156) |
评论 (0) |
编辑 收藏
From: http://www.cnitblog.com/zfly/archive/2006/01/19/6250.html
曾经有一个绝妙的广告摆在
阿迪达斯的面前,几乎可以成为经典。"连老天都感动得哭了。"这是一个集英雄主义、超人能力和煽情技术于一体的成功广告,但由于麦蒂的低迷状态、受伤以及火箭的连败,现在越看这个广告越像是一次讽刺。最终的结果是,广告悄悄地撤了,耐克得意地笑了。
随后,这个广告被人在网络上恶搞,成为一个个经典笑话。当麦蒂因为太太生孩子缺席比赛后,一个改编版的广告词是:"还有半场,麦蒂跑了,生儿子去了。""瞎扯,是女儿。""是儿子!""管他呢,反正是跑了。"
一个流传最广的恶搞改编词则是:"客场,剩20秒,斯威夫特站在罚篮线上。""瞎扯,是主场!""管他呢,反正球没进。""没时间喘气,鲍文带
球冲向边线,对手不屑堵截,但他仍火力十足!三分线外飙射!砰!球击中了一位摄影师。""只剩三秒!麦蒂带球冲过前场,整个球场都在呐喊助威!无人防守,
麦蒂飞了起来!出手,是左手!啊,三不沾!连老天都恶心得哭了。"
posted @
2006-04-21 17:34 Martin 阅读(141) |
评论 (0) |
编辑 收藏
From http://www.cnitblog.com/jialinbin/archive/2006/02/05/6438.html
在服装鞋业管理与信息化研讨会的发言
雅戈尔集团副总经理韩永生
什
么是品牌?品牌不是名牌。品牌的“品”是三个“口”,品牌就是需要老百姓用嘴来传播的。我们一直在反思自己的品牌,我们没有品牌吗?其实我们认为可能没
有,因为这个品牌没有魂。我们把品牌作为一个产品了,所以我们一直在苦苦的寻找,品牌的内核——魂,因为若神不在一切皆空。
“象棋”
Vs
“围棋”
大
量的折扣场,不断打折的产品,谁使得我们的产品在不断地打折呢?我们的销售数量在增加,但我们的销售额却在减少,我们产品的单价在下降,很多企业都出现了
整个利润的下滑,很多企业出现了大幅度利润下滑。这是因为中国的企业通常艘是在进行“象棋式”的战争,他们的死因是自杀。
从
象棋和围棋,看战争和竞争,象棋——同质化竞争,围棋——差异化竞争。感悟品牌的“魂”,消费者的“梦”,马斯诺的五个需求层次。企业创造价值的方式正在
改变。我们要把魂找回来,找回品牌的“魂”,而这个魂肯定是无形的,绝不是有形的东西,因为是消费者的一个梦,所以让我们一起来努力,来圆消费者的梦,寻
找品牌的“魂”!
中
国人爱下象棋,不少中国企业也喜欢“下象棋”:你吃我一个子儿,我吃你一个子儿,把行业利润吃干净,最后把对方将死的时候自己也差不多了。而喜欢“下围
棋”的企业则会先找个空地,然后“跑马圈地”,企业间拼的不是产品和价格而是品牌、服务和社会归属感。举个汽车行业的例子。中国企业不一定去学习西方的管
理理论,在中国,老早就有孙子兵法了。孙子兵法的主题“是竞争,而不是战争。”现在是销售收入越来越高,利润越来越低。“依文”、“雅戈尔”各有各的玩
法。“竞争人心”就是竞争的力量。
现在物以稀为贵,差异化很重要。奔驰车是显示身份人用的,宝马是个性化的。人家没有的,你有了,那么人家一定会选择你的。
“点菜”
Vs
“喝酒”
酒
足饭饱时饭桌上常剩下一堆菜,但酒杯里的酒却必定喝完;因为酒杯里的酒是边喝边斟,而饭桌上的菜却是饭前点好的。这就是“点菜”与“喝酒”的区别。雅戈尔
集团从这个简单的生活现象中,悟出了供应链管理的真谛,让销售终端的计算机系统充当“服务员”,根据“酒杯”的需求为其“斟酒”,制造工厂根据需求及时调
整生产计划。
雅
戈尔供应链系统是雅戈尔信息战略规划的核心部分。关于雅戈尔集团的供应链系统,韩永生有一个生动的比方——“喝酒模式”。他说:“我们在请客吃饭的时候,
总是会点一大堆菜,吃完了以后剩下满桌子都是菜,而喝酒不管情绪好不好周转率极高。原因就在于,喝酒是需求式的,要多少斟多少。推行喝酒模式,就是把全国
的代理店变成透明酒杯,用计算机监控每天的销售,计算出每个酒杯该加多少酒,第二天全部补充上。”
沿
用“喝酒”逻辑,供应链的管理核心就变成以供应链的灵活性适应市场的变化,变订单式的“推动”生产为无订单式的“拉动”生产。所有的门店都变成透明的“酒
杯”,计算机系统是“服务员”,它可以“看”喝什么酒,每种酒还剩多少,可以喝多长时间。然后,计算机系统精确地定位,每天都把门店的货结清,传到配送中
心,变成无订单发货。信息系统是一个支撑的工具,关键在于业务模式的先进性,而不在于信息的先进性。传统的生产方式是下订单,由面料生产到成衣生产再到销
售终端。在这样一个链条下,信息系统再先进也无济于事。喝酒模式为雅戈尔打造了一个全新的业务模式,所有的信息系统都依赖于这样一个逻辑。
塑造个性化男人
服
装有功能属性、社会属性和体验属性,无形资产是有形资产的好几倍,品牌就是无形资产,一个品牌就是一个承诺,品牌的背后是客户。企业要从经营“产品”转移
到经营“客户”上来。如果还沿着“产品”这条路走的话,就会死路一条。如果从“情感”的角度出发,沿着“塑造男人”的路来走,进而实现塑造个性化男人的目
的。不要把所有的男人都作为你要塑造的对象,从中分离出一部分男人,比如低调奢华的男人。
我觉得更重要的是让员工懂得毛主席对我们的教导
“
为人民服务
”
,
我们要让每个员工都为我们的消费者服务,为消费者的灵魂服务,要让消费者每次和我们的接触都留下一个感动的故事,要做到这个情况,买你一次东西,跟你一次
结构,都有一种品牌的体验,有一个良好的印象。中国人的嘴快,可以让消费者为你传播你的品牌,这个是一个魂,从总裁到员工都应该有这个魂,古话说了
“
先天下人之乐而乐
”
,我觉得这个是本质。
中国人讲好心有好报的,如果你用心服务你的员工,这个时候心连心,你的员工就会好好服务消费者,这个就会有好报的。
用
心其实很容易的,不遥远的,比如我昨天来的时候给了我一个礼物,我一般的礼物都是给别人的,我一看上面写了我的名字,所以这个礼物我就不会给别人了。比如
说你员工的生日,你董事长发一个短消息,员工一定很感动,你的店长送一支玫瑰花,那么你的员工也会很感动的。所以我们对我们的顾客也是这样的,如果你的消
费者在生日的时候也收到了一个祝福的短信,保证这个客户很感动。我们用心去关怀我们的客户,那么我们就会和我们的顾客心连心了。所以我们一定要进入客户的
心。所以我觉得内核是核在心。
如
果我们从客户的情感角度出发,我们就可以来涉及客户和我们的接触点,我们是一个专卖店或者是一个超市,我们可以了解客户是怎么样了解我们的,怎么样进入我
们的店的,客户怎么样挑选东西,怎么样和服务员进行沟通,客户怎么样进行付款,怎么样离开,全部的过程我们都应该精心设计,让每个客户都方便,在与客户互
动过程当中,增加我们和客户互动的机会,每个机会都是我们跟客户的一种交流,来增加客户对我们的了解,我们让客户知道这个产品怎么样更加适合他们,每个细
节如果都精心设计了,别的店也有,你的店也有,他们会选择你的店,因为在你的店里面是一种体会,是一种体验,有很好的经验的分享。所以我强调,物是一部
分,而无形的神也是一部分,所以我们要经营人的感觉,所以经营人的感觉应该是我们经营的主体,而不仅仅是看到这个钱,要为顾客提供一种感动的感觉。那么我
们就成功了。
posted @
2006-04-21 17:11 Martin 阅读(167) |
评论 (0) |
编辑 收藏
From http://kevinwan.cnblogs.com/archive/2006/04/14/375606.html
车东写的关于面向搜索引擎的网站设计系列文章的一个长篇,虽然希望自己的BLOG更多是原创文章,不过如此好文与总结还是要转过来的收藏+共享的,我想,从事网站设计的人是必读的.
内容摘要:
目前中文网站在整个互联网中的影响还比较小,这主要是由于中文网站总体的水平(技术上,内容上)都还相对落后造成的,最主要的表现有:
- 行业知识:不知道搜索引擎对吸引的新用户的重要性,在搜索引擎排名服务中追求“傻瓜相关”,购买一些其实没有太多实际意义的行业关键词。其实能够用户输入的关键词越多,其目标性越强,这样的客户价值越高。用户能够直接定位到产品具体内容页比到网站首页有价值的多;
- 发布技术:网站的网页进入Google的索引量非常小,主要是由于大量使用动态网页造成的。需要将动态页面链接改写成静态链接;
- 页面设计:页面标题重复,关键词不突出,过渡使用JavaScript脚本/图片/Flash等不适合搜索引擎索引的非文本形式;
而以上这些问题的根本原因还是网站自身缺乏日志统计分析造成:因此无法看到SEO对网站自身产生的巨大影响。
SEO的目的是通过一些简单的策略,让网站自身的水平在互联网中有一个真实的体现。
网站结构设计中面向搜索引擎的优化注意事项包括:
什么是PageRank
Google等新一带搜索引擎的优势之一在于不仅索引量很大,而且还将最好的结果排在搜索结果的最前面,具体的原理可以参考Google の秘密 - PageRank 徹底解説一文,PageRank简单的说类似于科技论文中的引用机制:谁的论文被引用次数多,谁就是权威。在互联网上PageRank就是基于网页中相互链接关系的分析得出的。
此外,从计算方法角度阐述PageRank机制还有这篇文章:http://pr.efactory.de/里面有更详细的PageRank算法说明和各种清晰的小型个案分析:
比如:子页中导航条的重要性
B <=> A => C
Vs
B <=> A <=> C (好)
页面数量因素:
B <=> A <=> C
Vs
F <=\ /=> G
B <=> A <=> C (好)
D <=/ \=> E
一个意想不到的结论:
(B <=> A <=> C) ( E <=> D <=> F)
Vs
(B <=> A <=> C) <=> ( E <=> D <=> F)
PageRank升高的只是被链接的2个首页A和D,而网站子页面的PageRank平均会略有下降。同时:一个网站进入Google的索引量越大其受类似因素影响越小。
PageRank不对称的页面互链:
Google会用BadRank之类的算法进行纠正,而且一个网页着有来自“与其自身不相称”的高PageRank站点的链接,而自身又缺少足够数量和质量的反相链接的话,其PageRank会自动降低为0,A(pr=7) <=> B(pr=0)
简单的说就是:偶尔要被权威站点反相链接不算数,要被足够多的权威站点引用才能提高自身网页的PageRank。
Web超链分析算法综述(南京大学论文) 更多论文可以通过搜索:“filetype:pdf google pagerank anchor text bayesian”得到
在互联网的海洋中,最重要的就是互联互通,不被其他网站引用的网站就是“信息孤岛”。“酒好也怕藏的深”,也许这话说起来有点像垃圾邮件广告,但事实就是这样。所以如果做网站的目的不是孤芳自赏,就需要积极的推广自己的网站。
通过搜索引擎推广自己需要注意以下几个方面:
- 以量取胜:不一定加入传统门户网站的分类目录才是网站推广,来自其他网站的任何反相链接都是有用的
网站推广比较经典的方式就是加入比较大型门户网站的分类目录,比如:Yahoo!,dmoz.org等。
其实这里有一个误区:不一定非要加入大型网站的分类目录才是网站推广,因为现在搜索引擎已经不再只是网站目录的索引,而是更全面的网页索引,所以无论来自
其他网站任何地方的反相链接都是非常有价值的,哪怕是出现在新闻报道,论坛,邮件列表归档中。Blogger(Weblog的简称)们也许最深刻地理解了
“链接就是一切”这句话的含义,由于Blog的内容之间有大量的相互链接(他们之间利用RSS很容易进行链接大量传播),因此最经常被引用的Blog页面
在搜索引擎中的排名往往比一些大型商业网站的页面还要高。而WIKI这样的文档管理系统更加突出了良好结构,良好引用的特征。而目前很多网站通过在各种
WIKI/留言簿中灌注垃圾留言的方法,这种方式是非常不可取的。这种链接不稳定: - 以质取胜:被PageRank高的网站引用能更快地提高PageRank
数量只是关键因素之一,来自PageRank高的页面的链接还能更快的提高被链接目标的PageRank,我只是将一些文章投稿在了ZDNet中国上,由于页面上有文章出处链接,相应网页和网站整体的PageRank过了一段时间后就有了很大的提升。有时候被什么样的网站引用有时候比引用次数多更重要。这里我要特别感谢的是,当时ZDNet中国是唯一遵循了我的版权声明的要求表明了文章出处,并且有反相链接的网站。
按照这个原则:能够名列Yahoo!和DMOZ这样的大型权威目录的头2层是非常有价值的。 - 了解搜索引擎的"价值观":
Lucene简介这篇文章被Jakarta.apache.org的lucene项目引用以后,这篇文章就成为了所有页面中PageRank最高的页面,而Google支持的一些项目,比如:Folding@Home,让我一直怀疑他们对政府,教育和非盈利组织的站点有特别加分,毕竟.org .edu才代表了互联网的实质:分权和共享。
但更合理的解释是:.org很多都是开放技术平台的开发者,他们会在首页这样的地方加入Powered By Apache, Power by FreeBSD之类的链接表示对其他开源平台的尊重,所以象Apache, PHP, FreeBSD这样的开源站点在GOOGLE中都有非常高的PageRank。而在.edu这些站点中,很多都是学术性比较强的文档,以超链接形式标明参考文献的出处已经成为一种习惯,而这也无疑正是PageRank最好的依据。
注意:不要通过Link Farm提高自身的站点排名:Google会惩罚那些主动链接到Link Farm站点以提高自身排名站点,相应站点的页面将不会被收入到索引中。但如果你的页面被别的Link Farm链接了也不必担心,因为这种被动的链接是不会被惩罚的。 - 不要吝啬给其他网站的链接:如果一个网页只有大量的进入链接,而缺乏导出链接,也会被搜索引擎认为是没有价值的站点。保证你的网站能够帮助搜索引
擎更准确地判断哪些是对用户最有价值的信息,也就是说如果你的网站只有外部反向链接而没有导出链接的话,也会对你的网站在搜索结果中的表现带来负面影响。
当然网站中连一个导出链接都没有的情况非常罕见,除非你是刻意这么做。正常情况下大家都会自然地在网页中加上一些其他网站的链接,带领访问者去到我们认为
重要或能够提供更多有价值信息的地方,
另外在推广自己网站之前也许首先需要了解自己网站目前在一些搜索引擎中的知名度,原理非常简单,可以参考如何评价网站的人气一文。
网站推广只是手段,如何突出内容、让需要相关信息的用户能够尽快的找到你的网站才是目的,PageRank高并不代表像Yahoo!这样的门户站点就能在
所有搜索结果中排名靠前,因为搜索引擎的结果是搜索关键词在页面中的匹配度和页面的PageRank相结合的排名结果。因此第二个要点:如何突出关键词。
- Theme Engine正在逐步超过PR,成为结果排序中更主要的因素,可以比较一下以下现象:
- 为什么查“新闻”,“汽车”之类的文字,各种门户网站的首页不在第一位?要知道他们的页面中都有相应频道的链接文字的
- 一篇新闻页面中,搜索引擎如何不通过模板匹配,自动将新闻的主体和页面中的页头,栏目导航条,页尾等部分的内容区分开的?
其实以上问题都可以归结为网页内容摘要的提取策略和关键词在其中的命中:
首先将能够描述一个页面内容的分成以下几种类型:
- 链入文字描述:inbound link text
http://www.searchenginedictionary.com/terms-inbound-link.shtml - HTML页面标题:title 好标题一般会将页面中最重要的关键词放在最前面,比如:ABC-10型吸尘器 - XX家电城
- HTML内容主体:content text
- 链出文字:outbound link text
如果按照以下规则:
一个页面中关键词命中权重:链入文字 > HTML标题文字 > HTML页面主体内容 >> 出链文字,以上现象就比较好解释了。
链
入文字是页面上看不见的,但链入文字对被链接页面有巨大的作用:在现代搜索引擎在关键词匹配的过程中,匹配的过程不只看当前页面的内容摘要:很大程度上,
不只看这个网页自己说自己有什么内容,还要看别人如何链接时,如何描述你的网站别人怎么称呼你,比你自己说自己更重要。。
比如查:“世界卫生组
织”,返回结果中有 http://www.who.int/
而这个页面中是没有中文的,之所以能匹配上,是因为很多链接它的中文网站使用了:<a
href="http://www.who.int/">世界卫生组织</a>,所以,这个页面中不存在的中文关键词也成为了页面摘要
的一部分。这样一想,就可以知道链出链接的文字其实是为被链接的子频道首页或者内容详情页服务的。对自身页面的关键词密度只有负面的影响,这也是
Google建议一个页面中链接不要超过100个的原因:他根本不索引100个链接以后的内容。按照以上规则,搜索引擎将一篇新闻详情页中的新闻内容提取
出来就是把页面上所有带HTTP链接的文字都去掉,就是新闻的内容部分了,更精确一些可以通过取最长文本段落等策略实现;而很多网站首页或频道首页中几乎
全部都是链接,经过搜索引擎分析的结果就是:什么内容也没有,能够被命中的关键词仅仅是别人链接你用的“网站首页”和频道标题Title中的站点名称等的
几个关键词,而页面中其他的文字则远远不如相应子频道和具体内容页面的匹配度高,而搜索引擎能够通过以上规则,让用户更快的直接定位到有具体内容的内容详
情页面。因此希望通过一个首页,尽可能多的命中所有希望推广的关键词是不可能的。让网页尽可能多的进入搜索引擎的索引,然后把握好整个网站的主题风格是非常重要的,让网站的主题关键词能够比较均匀的按照金字塔模式分布到网站中可以参考:网站的主题金字塔设计 网站名称(用户通过1-2个抽象关键词)
/ \
子频道1 子频道2 (用户通过2-3个关键词命中)
/ \ / \
产品1 产品2 文章1 文章2 (用户通过3-4个关键词命中:这种用户最有价值)
- 不要空着标题:空着<title></title>无异于浪费了最有价值的一块阵地;
不要使用meta keywords/description
传统的页面中,HTML页面中会有类似以下的隐含信息,用于说明当前网页的主要内容关键字:
<header>
<meta name="keyword" content="mp3 download music…">
</header>
后
来由于这种人工添加关键词的方式被滥用,大量网页中为了提高被搜索引擎命中的概率,经常添加一些和实际网页内容无关的热门关键比如:“music
mp3 download”等,所以新一代的搜索引擎已经不再关心页面头文件中的人工meta
keyword声明,而页面标题在搜索引擎的关键词的命中命中过程中往往有着更高的比重,如果一个关键词在标题中命中会比在页面中命中有更高的得分,从而
在相应的搜索结果排名中更靠前。 - 标题长度和内容:不要过长,一般在40个字(80个字节)以内,并充分突出关键词的比重;
如果更长的标题搜索引擎一般会忽略掉,所以要尽
可能将主要关键词放在标题靠前的位置。省略掉不必要的形容词吧,毕竟用户主要通过名词来找到需要的内容。标题内容:尽量用一些别人可以通过关键词找到的字
眼(也别太过头,如果标题中的字眼超过1半内容中都没有,有可能被搜索引擎排除出索引),因此基于web日志中来自其他搜索引擎的关键词查询统计非常必
要。 - 如果网页很多的话,尽量使用不同的网页标题,争取让自己网站的内容更多的进入搜索引擎索引范围;
因为搜索引擎会根据页面内容的相似度把一些内容当成重复页面排除出索引范围;
http://www.chedong.com/phpMan.php是
我的网站上的一个小应用:一个web界面的unix命令手册(man page),在以前的设计中所有动态页面使用的都是同样的标题:"phpMan:
man page /perldoc /info page web interface"
,Google索引了大约3000多个页面,后来我将页面标题改成了"phpMan: [命令名]"这样的格式,比如:"phpMan:
ls",这样大部分动态页面的标题就都不一样了,一个月后Google从这个页面入口索引了大约6000个页面。因此,如果网站中很多网页都使用相同的标
题,比如:“新闻频道”,“论坛”,这些页面中很大一部分就会被排重机制忽略掉。 - 除了<title></title>外,还可以用<h1></h1>标题行突出内容主题,加强标题的效果;
在我的网站设计中:我会把用<h1>[标题]</h1>这样的模板把标题突出显示,而不是通过改变字体的方式突出标题。
- 静态链接:Blog网站另外一个优势在于其网页是静态链接:动态网页占到整个互联网内容的90%以上。各个搜索引擎其实能够表现的都只不过是互联网的冰山一角(3-5%),不同的只是谁让优质网页排名靠前的策略更优秀而已:大
部分搜索引擎都认为静态链接的网页是优质网页,Google在优先抓取索引的网页中70%以上是不带参数链接的静态网页。而且即使同样的内容,静态网页也
会比动态网页权重高:很容易理解:query?a=1&b=2这样的链接由于参数顺序颠倒的query?b=2&a=1完全相同。尽量使
用静态网页:目前能够动态网页进行全面的索引还比较难,而即使是Google也更不会索引所有的内容,因此很少会对参数超过2个的动态网页进行进一步的抓
取和分析。以下是一个phpBB论坛页面返回的HTTP头信息:
HTTP/1.1 200 OK
Date: Wed, 28 Jan 2004 12:58:54 GMT
Server: Apache/1.3.29 (Unix) mod_gzip/1.3.26.1a PHP/4.3.4
X-Powered-By: PHP/4.3.4
Set-Cookie: phpBB_data=a%3A0%3A%7B%7D;
expires=Thu, 27-Jan-2005 12:58:54 GMT; path=/;
Set-Cookie: phpBB_sid=09f67a83ee108ecbf11e35bb6f36fcec; path=/;
Content-Encoding: gzip
Cache-Control: private, pre-check=0, post-check=0, max-age=0
Expires: 0
Pragma: no-cache
Connection: close
Content-Type: text/html
为了避免隐私问题:Googlebot可以通过对页面http header中的session id和session cookie进行一些甄别,这样很多需要认证信息的论坛内容就无法进入索引了。
总体上说Google喜欢新的,静态的内容。因此无论从效率上讲还是方便搜索引擎收录:使用内容发布系统将网站内容发布成静态网页都是非常必要的,从某种程度上说google friendly = anonymous cache friendly。
比如:http://www.chedong.com/phpMan.php/man/intro/3
比http://www.chedong.com/phpMan.php?mode=man¶meter=intro§ion=3这样的链接更容易进入搜索引擎的索引。而且在URL中的命中也能突出关键词。
- 能够进入Google索引的页面数量越多越好。用类似以下的脚本可以统计自己的网站被搜索引擎索引的情况。
#!/bin/sh
YESTERDAY=`date -d yesterday +%Y%m%d`
# for FreeBSD: YESTERDAY=`date -v-1d +%Y%m%d` LOG_FILE='/home/apache/logs/access_log'
grep -i Googlebot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn >
spider/$YESTERDAY.googlebot.txt
grep -i baiduspider $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn >
spider/$YESTERDAY.baiduspider.txt
grep -i msnbot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn >
spider/$YESTERDAY.msnbot.txt
grep -i inktomi $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort | uniq -c | sort -rn >
spider/$YESTERDAY.inktomi.txt
grep -i openbot $LOG_FILE.$YESTERDAY|awk '{print $7}' |sort |uniq -c | sort -rn >
spider/$YESTERDAY.openbot.txt
- 网站目录结构要扁平,因为每深一级目录,PAGERANK降低1-2个档次。假设首页是3,其子可能目录就是1了,更深可能就无法列入评级范围了。
- 表现和内容的分离:“绿色”网页
网页中的javascript和css尽可能和网页分离,一方面提高代码重用度(也方便页面缓存),另外
一方面,由于有效内容占网页长度的百分比高,也能提高相关关键词在页面中的比重也增加了。总之,应该鼓励遵循w3c的规范,使用更规范的XHTML和
XML作为显示格式便于内容更长时间的保存。 - 让所有的页面都有能够快速入口:站点地图,方便网页爬虫(spider)快速遍历网站所有需要发布的内容。如果首页就是用Flash或图片进入的话,无异于将搜索引擎拒之门外,除了UI设计的用户友好外,spider friendly也是非常重要的。
- 保持网站自身的健康:经常利用坏链检查工具检查网站中是否有死链。
- 保持网页内容/链接的稳定性和持久性:在搜索引擎索引中网页存在的历史也是一个比较重要的因素,而且历史比较久的网页被链接的几率越高。为了保证
自己网页能够被比较持久的被其他网站的页面引用,如果自己网页中有链接更新时,最好能保留旧的页面并做好链接转向,以保持内容的连续性。要知道,把一个网
站和内容在搜索引擎中的排名“培养”的很高是一件非常不容易的事情,谁都不希望好不容易自己的内容被别人找到了,点击却是“404
页面不存在”吧,因此站点管理员对自身站点error.log的分析也是非常必要的。
- 文件类型因素:Google有对PDF, Word(Power Point, Excel),
PS文档的索引能力,由于这种文档的内容比一般的HTML经过了更多的整理,学术价值一般比较高,所以这些类型的文档天生就比一般的HTML类型的文档
PageRank要高。因此,对于比较重要的文档:技术白皮书,FAQ,安装文档等建议使用PDF
PS等高级格式存取,这样在搜索结果中也能获得比较靠前的位置。
- 常常能发现门户站点的一条新闻往往比其他站点的首页排名还要靠前。因此一个站点总体PageRank提高了以后,往往自身一些并不重要的内容也会
被同那些高PageRank的内容一起带入被搜索引擎优先查询的列表中。这样经常造成很多大的开发站点的邮件列表归档往往比其他站点的首页
PageRank还要高。
网站设计不仅仅只是被动的迎合搜索引擎的索引,更重要是充分利用搜索引擎带来的流量进行更深层次的用户行为分析。目前,来自搜索引擎关键词统计几乎是各种
WEB日志分析工具的标准功能,相信商业日志统计工具在这方面应该会有更强化的实现。WEB日志统计这个功能如此重要,以至于新的RedHat
8中已经将日志分析工具webalizer作为标准的服务器配置应用之一。
以Apache/webalizer为例,具体的做法如下:
- 记录访问来源:
在Apache配置文件中设置日志格式为combined格式,这样的日志中会包含扩展信息:其中有一个字段就是相应访问
的转向来源:
HTTP_REFERER,如果用户是从某个搜索引擎的搜索结果中找到了你的网页并点击过来,日志中记录的HTTP_REFERER就是用户在搜索引擎结
果页面的URL,这个URL中包含了用户查询的关键词。 - 在webalizer中缺省配置针对搜索引擎的统计:如何提取HTTP_REFERER中的关键词
webalizer中缺省有针对yahoo, google等国际流行搜索引擎的查询格式:这里我增加了针对国内门户站点的搜索引擎参数设置
SearchEngine yahoo.com p=
SearchEngine altavista.com q=
SearchEngine google.com q=
SearchEngine sina.com.cn word=
SearchEngine baidu.com word=
SearchEngine sohu.com word=
SearchEngine 163.com q=
通过这样设置webalizer统计时就会将HTTP_REFERER中来自搜索引擎的URL中的keyword提取出来,比如:所有来自
google.com链接中,参数q的值都将被作为关键词统计下来:,从汇总统计结果中,就可以发现用户是根据什么关键词找到你的次数,以及找到你的用户
最感兴趣的是那些关键词等,进一步的,在webalizer中有设置还可以将统计结果倒出成CSV格式的日志,便于以后导入数据库进行历史统计,做更深层
次的数据挖掘等。
以前通过WEB日志的用户分析主要是简单的基于日志中的访问时间/IP地址来源等,很明显,基于搜索引擎关键词的统计能得到的分析结果更丰富、更直观。因此,搜索引擎服务的潜在商业价值几乎是不言而喻的,也许这也是Yahoo!Altavista等传统搜索引擎网站在门户模式后重新开始重视搜索引擎市场的原因,看看Google的年度关键词统计就知道了,在互联网上有谁比搜索引擎更了解用户对什么更感兴趣呢?
请看本站的反相链接统计:http://www.chedong.com/log/2003_6.log
需要注意的是:由于Google针对Windows
2000中的IE使用的是UTF-8方式的编码,因此很多统计有时候需要在UTF-8方式下查看才是正确字符显示。从统计中能够感受到:在使用水平比较高
的IT开发人员中Google已经成为最常用的搜索引擎。而使用百度的用户也已经大大超过了传统的搜狐,新浪等门户站点,因此传统门户网站在搜索引擎上的
优势将是非常脆弱的。而从技术的发展趋势来看,以后还会有更多的利用互联网媒体做更深层次数据挖掘的服务模式出现:
转载自cnblog.org——“突发”文字可能揭示社会趋势
在“新科学家”(New Scientist)在线杂志上,公布了康奈尔大学的一个新研究成果,引人注目,也许与Google 收购Pyra 的动机有关。
这所大学的计算机科学家 Jon Klenberg
开发了一个计算机算法,能够识别一篇文章中某些文字的“突发”增长,而且他发现,这些“突发”增长的文字可以用来快速识别最新的趋势和热点问题,因此能够
更有效地筛选重要信息。过去很多搜索技术都采用了简单计算文字/词组出现频率的方法,却忽略了文字使用增加的速率。
Jon
特别指出,这种方法可以应用到大量Weblog上,以跟踪社会趋势,这对商业应用也很有潜力。例如,广告商可以从成千上万的个人Blog
中快速找到潜在的需求风尚。而且只要Blog
覆盖话题范围足够大(实际上发展趋势确实如此),这项技术对政治、社会、文化和经济等领域也都会有实际意义了。
虽然Google 新闻的内部算法至今没有公开,但是人们猜测这种完全由机器所搜集的头条新闻应当不是Google搜索引擎中惯用的鸽子算法,很可能与这种“突发”判断算法有关。如此说来,Google收购Blog工具供应商的举动确实还有更深层次的远见了。
- NewScientist.com news, Word ‘bursts’ may reveal online trends
- 还没有写完这些介绍,在 SlashDot 上也看到了很多有关这个发现的讨论
- Make a site with a clear hierarchy and text links. Every page
should be reachable from at least one static text link.
让网站有着清晰的结构和文本链接,所有的页面至少要有一个静态文本链接入口
批注:尽量不要用图片和JAVASCRIPT - Offer a site map to your users with links that point to the
important parts of your site. If the site map is larger than 100 or so
links, you may want to break the site map into separate pages.
为用户提供一个站点地图:转向网站的重要部分。如果站点地图页面超过100个链接,则需要将页面分成多个页面。
批注:索引页不要超过100个链接:SPIDER只考虑页面中头100个链接 - Create a useful, information-rich site and write pages that clearly and accurately describe your content.
用一些有用的,信息量丰富的站点,清晰并正确的描述你的信息。 - Think about the words users would type to find your pages, and make sure that your site actually includes those words within it.
想像用户可能用来找到你的关键词,并保证这些关键词在网站中出现。
批注:少用“最大”,“最好”之类的形容词,用用户最关心的词,比如:下载,歌星名字,而不是一些抽象名词。 - Try to use text instead of images to display important names,
content, or links. The Google crawler doesn’t recognize text contained
in images.
尽可能使用文本,而不是图片显示重要的名称,内容和链接。GOOGLE的机器人不认识图片中的文字。 - Make sure that your TITLE and ALT tags are descriptive and accurate.
保证:页面的TITLE和ALT标记正确的精确描述 - Check for broken links and correct HTML.
检查坏链并修正这些HTML错误。 - If you decide to use dynamic pages (i.e., the URL contains a ‘?’
character), be aware that not every search engine spider crawls dynamic
pages as well as static pages. It helps to keep the parameters short
and the number of them small.
如果你打算使用动态页面:链接中包含"?",必须了解:并非所有的搜索引擎的机器人能想对待静态页面一样对待动态页面,保持动态页面的参数尽可能的少也会很有帮助。 - Keep the links on a given page to a reasonable number (fewer than 100).
让一个页面中的链接少于100个。
批注:用lynx -dump http://www.chedong.com 可以模拟从robot角度看到的页面。其最后有链接统计
输出类似:
[1]Google Free Search _______________________________ Google Search
(_) Search WWW (_) Search chedong.com
更 新 [2]站点地图 / Site Map [3]留 言簿 / Guest Book [4]意见反馈 /
Feed Back
…
References
Visible links
1. http://www.google.com/services/free.html
2. http://www.chedong.com/sitemap.html#sitemap
3. http://www.chedong.com/guestbook/
4. http://www.chedong.com/formmail.htm
…
Hidden links:
50. http://www.chedong.com/bbcweb/
…
搜索引擎的宗旨在于提取互联网中质量最好的内容提供给用户,任何有利于帮助用户获得相对公正,优质内容的策略都是搜索引擎追求目标。PageRank是一个非常好的策略,但是并非所有策略都是基于非常复杂的算法。
从搜索引擎看来什么是互联网中“好”的内容呢?
- 首先:互联网大约是8G个网页,而且以每天2M的速度增长的。其中80%以上是动态网页,而占总量20%的静态网页就是一个相对比较简单的过滤规则。
- 其次:用户友好(User
friendly)也是很重要的方面,搜索引擎利用算法帮助提升这些优质网站,包括:通过CSS将内容和表现分离:较少的javascript和
frame结构,spider本身也很难深入抓取这些网页:Javascript和frame结构大部分是广告。
- 标题明确:无标题,重复标题或者标题SPAM(类似于:游戏游戏游戏游戏游戏游戏这样的标题)进行过滤或降低得分页面大小:因为页面过大会导致用户下载缓慢,所以很多引擎只计算页面大小在100k以内的网页。
- 链接引用:不仅需要有链接链入,也需要帮助用户找到其他更有价值的内容;
- 文件类型:PDF和DOC等专业文档和来自edu,gov等非赢利网站的内容;
- 链入网站的文字:所有用户不可见的因素全部被忽略。此外:用户搜索的行为本身也被Google记录,可能对目标网站的主题相关度有帮助。
参考资料:
面向Google搜索引擎的网站设计优化
http://www.google-search-engine-optimization.com/
关于Google排名优化的7个误区,如:"Meta tag", "泛域名",首页等
如何评价一个网站的人气
http://www.chedong.com/tech/link_pop_check.html
如何提高网站在Google中的排名——面向搜索引擎的广告模式
http://www.chedong.com/tech/google_ads.html
如何提高网站在Google中的排名——面向搜索引擎的网站链接设计
http://www.chedong.com/tech/google_url.html
Google不断改进相应的算法:HillTop
Hilltop: A Search Engine based on Expert Documents
Google の秘密 - PageRank 徹底解説
http://www.kusastro.kyoto-u.ac.jp/~baba/wais/pagerank.html
这篇文章是在查"Google PageRank"的时候查到的,这篇文章不仅有一个算法说明,也是一个Google的weblog,记录了很多关于Google的新闻和一些市场动态信息。
Google 的秘密- PageRank 彻底解说 中文版
更详细的PageRank算法说明:
http://pr.efactory.de/
WEB日志统计工具AWStats的使用:增加了Unicode的解码和中国主要门户搜索的定义
http://www.chedong.com/tech/awstats.html
Robots的说明:
http://bar.baidu.com/robots/
http://www.google.com/bot.html
搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息。您可以在您的网站中创建一个纯文本文件 robots.txt,在这个文件中声明该网站中哪些内容可以被robot访问,哪些不可以。
反Google站点:观点也很有趣
http://www.google-watch.org/
关于Google的WebLog
http://google.blogspace.com/
关于Google的HillTop算法
搜索引擎相关论坛
http://searchengineforums.com/
http://searchenginewatch.com
http://www.webmasterworld.com/
posted @
2006-04-21 16:47 Martin 阅读(144) |
评论 (0) |
编辑 收藏
还有90多个呢,不知道推荐给谁了:)
posted @
2006-04-21 16:41 Martin 阅读(132) |
评论 (0) |
编辑 收藏
From: http://kevinwan.cnblogs.com/archive/2006/04/14/375481.html
Bjarne Stroustrup
裘宗燕 译
_________________________________________
这
里是一组在你学习C++的过程中或许应该考虑的"规则"。随着你变得更加熟练,你将能把它转化为某种更适合你的那类应用系统或者你自己的程序设计风格的东
西。它们有意被写得很简单,因此都缺乏细节。请不要太拘泥于它们的字面意义。要写出一个好程序需要智慧、品味和耐性。你不会第一次就能把它搞好的。试验!
|
[1]在编程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示。让程序的结构尽可能地直接反映这些思想:
[a]
如果你能把"它"看成一个独立的概念,就把它做成一个类。
[b] 如果你能把"它"看成一个独立的实体,就把它做成某个类的一个对象。
[c]
如果两个类有共同的界面,将此界面做成一个抽象类。
[d] 如果两个类的实现有某些显著的共同东西,将这些共性做成一个基类。
[e]
如果一个类是一种对象的容器,将它做成一个模板。
[f] 如果一个函数实现对某容器的一个算法,将它实现为对一族容器可用的模板函数。
[g]
如果一组类、模板等互相之间有逻辑联系,将它们放进一个名字空间里。
[2]在你定义一个并不是实现某个像矩阵或复数这样的数学对象的类时,或者定义一个低层的类型如链接表的时候:
[a] 不要使用全局数据(使用成员)。
[b] 不要使用全局函数。
[c] 不要使用公用数据成员。
[d] 不要使用友元,除非为了避免[a]或[c]。
[e]
不要在一个类里面放"类型域";采用虚函数。
[f] 不要使用在线函数,除非作为效果显著的优化。
更特殊或更详尽的实用规则可以在每章最后的"忠告"一节里找到。请记住,这些忠告只是粗略的实用规则,而不是万古不变的定律。它们只应使用在"合理的地方"。从来就没有任何东西能够替代智慧、经验、常识和好的鉴赏力。
我发现具有"绝不要做这个"形式的规则不大有帮助。因此,大部分忠告被写成应该做什么的建议,而否定性的建议也倾向于不采用绝对禁止的短语。据我所
知,没有任何一种主要的C++特征没有被良好地使用过。在有关"忠告"的节里不包括解释,相反,每条忠告都引用了本书中某些适当的章节。在给出否定性的忠
告时,对应章节里通常都提供了有关其他替代方式的建议。
第2章忠告
[1] 不用害怕,一切都会随着时间的推移而逐渐明朗起来;2.1节。
[2]
你并不需要在知道了C++的所有细节之后才能写出好的C++程序;1.7节。
[3] 请特别关注程序设计技术,而不是各种语言特征;2.1节。
第3章忠告
[1] 不要像重新发明车轮那样企图做每件事;去使用库。
[2]
不要相信奇迹;要理解你的库能做什么,它们如何做,它们做时需要多大的代价。
[3] 当你遇到一个选择时,应该优先选择标准库而不是其他的库。
[4]
不要认为标准库对于任何事情都是最理想的。
[5] 切记#include你所用到的功能的头文件;3.3节。
[6]
记住,标准库的功能定义在名字空间std之中;3.3节。
[7] 请用string,而不是char*;3.5节、3.6节。
[8]
如果怀疑,就用一个检查区间范围的向量(例如Vec);3.7.2节。
[9] vector、list和map 都比T[ ]
好;3.7.1节、3.7.3节、3.7.4节。
[10]
如要向一个容器中添加一个元素,用push_back()或back_inserter();3.7.3节、3.8节。
[11]
采用对vector的push_back(),而不是对数组的realloc();3.8节。
[12] 在main()中捕捉公共的异常;3.7.2节。
第4章忠告
[1] 保持较小的作用域;4.9.4节。
[2] 不要在一个作用域和它外围的作用域里采用同样的名字;4.9.4节。
[3] 在一个声明中(只)声明一个名字;4.9.2节。
[4] 让常用的和局部的名字比较短,让不常用的和全局的名字比较长;4.9.3节。
[5] 避免看起来类似的名字;4.9.3节。
[6] 维持某种统一的命名风格;4.9.3节。
[7]
仔细选择名字,反映其意义而不是反映实现方式;4.9.3节;
[8]
如果所用的内部类型表示某种可能变化的值,请用typedef为它定义一个有意义的名字;4.9.7节。
[9]
用typedef为类型定义同义词,用枚举或类去定义新类型;4.9.7节。
[10]
切记每个声明中都必须描述一个类型(没有"隐式的int");4.9.1节。
[11] 避免有关字符数值的不必要假设;4.3.1节、C.6.2.1节。
[12] 避免有关整数大小的不必要假设;4.6节。
[13] 避免有关浮点类型表示范围的不必要假设;4.6节。
[14]
优先使用普通的int而不是short int或者long int;4.6节。
[15] 优先使用double而不是float或者long
double;4.5节。
[16] 优先使用普通的char而不是signed char或者unsigned char;C.3.4节。
[17]
避免做出有关对象大小的不必要假设; 4.6节。
[18] 避免无符号算术;4.4节。
[19]
应该带着疑问去看待从signed到unsigned,或者从unsigned到signed的转换;C.6.2.6节。
[20]
应该带着疑问去看待从浮点到整数的转换; C.6.2.6节。
[21] 应该带着疑问去看待向较小类型的转换,如将int转换到char;C.6.2.6节。
第5章忠告
[1] 避免非平凡的指针算术;5.3节。
[2] 当心,不要超出数组的界线去写;5.3.1节。
[3]
尽量使用0而不是NULL;5.1.1节。
[4] 尽量使用vector和valarray而不是内部(C风格)的数组;5.3.1节。
[5]
尽量使用string而不是以0结尾的char数组;5.3节。
[6] 尽量少用普通的引用参数;5.5节。
[7]
避免void*,除了在某些低级代码里;5.6节。
[8]
避免在代码中使用非平凡的文字量("神秘的数")。相反,应该定义和使用各种符号常量。4.8节、5.4节。
第6章忠告
[1] 应尽可能使用标准库,而不是其他的库和"手工打造的代码";6.1.8节。
[2] 避免过于复杂的表达式;6.2.3节。
[3] 如果对运算符的优先级有疑问,加括号;6.2.3节。
[4] 避免显式类型转换(强制);6.2.7节。
[5]
若必须做显式类型转换,提倡使用特殊强制运算符,而不是C风格的强制;6.2.7节。
[6] 只对定义良好的构造使用T(e)记法;6.2.8节。
[7] 避免带有无定义求值顺序的表达式; 6.2.2节。
[8] 避免goto;6.3.4节。
[9] 避免do语句;6.3.3节。
[10] 在你已经有了去初始化某个变量的值之前,不要去声明它;6.3.1节、6.3.2.1节、6.3.3.1节。
[11]
使注释简洁、清晰、有意义;6.4节。
[12] 保持一致的缩进编排风格;6.4节。
[13] 倾向于去定义一个成员函数operator
new()(15.6节)去取代全局的operator new();6.2.6.2节。
[14] 在读输入的时候,总应考虑病态形式的输入;6.1.3节。
第7章忠告
[1] 质疑那些非const的引用参数;如果你想要一个函数去修改其参数,请使用指针或者返回值;5.5节。
[2]
当你需要尽可能减少参数复制时,应该使用const引用参数;5.5节。
[3] 广泛而一致地使用const;7.2节。
[4] 避免宏;7.8节。
[5] 避免不确定数目的参数;7.6节。
[6] 不要返回局部变量的指针或者引用;7.3节。
[7]
当一些函数对不同的类型执行概念上相同的工作时,请使用重载;7.4节。
[8] 在各种整数上重载时,通过提供函数去消除常见的歧义性;7.4.3节。
[9] 在考虑使用指向函数的指针时,请考虑虚函数(2.5.5节)或模板(2.7.2节)是不是一种更好的选择;7.7节。
[10]
如果你必须使用宏,请使用带有许多大写字母的丑陋的名字;7.8节。
第8章忠告
[1] 用名字空间表示逻辑结构;8.2节。
[2] 将每个非局部的名字放入某个名字空间里,除了main()之外;8.2节。
[3] 名字空间的设计应该让你能很方便地使用它,而又不会意外地访问了其他的无关名字空间;8.2.4节。
[4]
避免对名字空间使用很短的名字;8.2.7节。
[5] 如果需要,通过名字空间别名去缓和长名字空间名的影响; 8.2.7节。
[6]
避免给你的名字空间的用户添加太大的记法负担;8.2.2节、8.2.3节。
[7]
在定义名字空间的成员时使用namespace::member的形式;8.2.8节。
[8] 只在转换时,或者在局部作用域里,才用using
namespace;8.2.9节。
[9] 利用异常去松弛"错误"处理代码和正常处理代码之间的联系;8.3.3节。
[10]
采用用户定义类型作为异常,不用内部类型;8.3.2节。
[11] 当局部控制结构足以应付问题时,不要用异常;8.3.3.1节。
第9章忠告
[1] 利用头文件去表示界面和强调逻辑结构;9.1节、9.3.2节。
[2]
用#include将头文件包含到实现有关功能的源文件里;9.3.1节。
[3]
不要在不同编译单位里定义具有同样名字,意义类似但又不同的全局实体;9.2节。
[4] 避免在头文件里定义非inline函数;9.2.1节。
[5] 只在全局作用域或名字空间里使用#include;9.2.1节。
[6] 只用#include包含完整的定义;9.2.1节。
[7] 使用包含保护符;9.3.3节。
[8] 用#include将C头文件包含到名字空间里,以避免全局名字;8.2.9.1节、9.2.2节。
[9] 将头文件做成自给自足的;9.2.3节。
[10] 区分用户界面和实现界面;9.3.2节。
[11]
区分一般用户界面和专家用户界面;9.3.2节。
[12] 在有意向用于非C++程序组成部分的代码中,应避免需要运行时初始化的非局部对象;9.4.1节。
第10章忠告
[1] 用类表示概念;10.1节。
[2]
只将public数据(struct)用在它实际上仅仅是数据,而且对于这些数据成员并不存在不变式的地方;10.2.8节。
[3]
一个具体类型属于最简单的类。如果适用的话,就应该尽可能使用具体类型,而不要采用更复杂的类,也不要用简单的数据结构;10.3节。
[4]
只将那些需要直接访问类的表示的函数作为成员函数;10.3.2节。
[5] 采用名字空间,使类与其协助函数之间的关系更明确;10.3.2节。
[6] 将那些不修改对象值的成员函数做成const成员函数;10.2.6节。
[7]
将那些需要访问类的表示,但无须针对特定对象调用的成员函数做成static成员函数;10.2.4节。
[8]
通过构造函数建立起类的不变式;10.3.1节。
[9] 如果构造函数申请某种资源,析构函数就应该释放这一资源;10.4.1节。
[10]
如果在一个类里有指针成员,它就需要有复制操作(包括复制构造函数和复制赋值);10.4.4.1节。
[11]
如果在一个类里有引用成员,它就可能需要有复制操作(复制构造函数和复制赋值);10.4.6.3节。
[12]
如果一个类需要复制操作或析构函数,它多半还需要有构造函数、析构函数、复制赋值和复制构造函数;10.4.4.1节。
[13]
在复制赋值里需要检查自我赋值;10.4.4.1节。
[14]
在写复制构造函数时,请小心地复制每个需要复制的元素(当心默认的初始式);10.4.4.1节。
[15]
在向某个类中添加新成员时,一定要仔细检查,看是否存在需要更新的用户定义构造函数,以使它能够初始化新成员;10.4.6.3节。
[16]
在类声明中需要定义整型常量时,请使用枚举;10.4.6.1节。
[17] 在构造全局的和名字空间的对象时,应避免顺序依赖性;10.4.9节。
[18] 用第一次开关去缓和顺序依赖性问题;10.4.9节。
[19]
请记住,临时对象将在建立它们的那个完整表达式结束时销毁;10.4.10节。
第11章忠告
[1] 定义运算符主要是为了模仿习惯使用方式;11.1节。
[2]
对于大型运算对象,请使用const引用参数类型;11.6节。
[3] 对于大型的结果,请考虑优化返回方式;11.6节。
[4]
如果默认复制操作对一个类很合适,最好是直接用它;11.3.4节。
[5] 如果默认复制操作对一个类不合适,重新定义它,或者禁止它;11.2.2节。
[6] 对于需要访问表示的操作,优先考虑作为成员函数而不是作为非成员函数;11.5.2节。
[7]
对于不访问表示的操作,优先考虑作为非成员函数而不是作为成员函数;11.5.2节。
[8] 用名字空间将协助函数与"它们的"类关联起来;11.2.4节。
[9] 对于对称的运算符采用非成员函数;11.3.2节。
[10] 用()作为多维数组的下标;11.9节。
[11]
将只有一个"大小参数"的构造函数做成explicit;11.7.1节。
[12]
对于非特殊的使用,最好是用标准string(第20章)而不是你自己的练习;11.12节。
[13] 要注意引进隐式转换的问题;11.4节。
[14] 用成员函数表达那些需要左值作为其左运算对象的运算符;11.3.5节。
第12章忠告
[1] 避免类型域;12.2.5节。
[2] 用指针和引用避免切割问题;12.2.3节。
[3]
用抽象类将设计的中心集中到提供清晰的界面方面;12.3节。
[4] 用抽象类使界面最小化;12.4.2节。
[5]
用抽象类从界面中排除实现细节;12.4.2节。
[6] 用虚函数使新的实现能够添加进来,又不会影响用户代码;12.4.1节。
[7]
用抽象类去尽可能减少用户代码的重新编译;12.4.2节。
[8] 用抽象类使不同的实现能够共存;12.4.3节。
[9]
一个有虚函数的类应该有一个虚析构函数;12.4.2节。
[10] 抽象类通常不需要构造函数;12.4.2节。
[11]
让不同概念的表示也不相同;12.4.1.1节。
第13章忠告
[1] 用模板描述需要使用到许多参数类型上去的算法;13.3节。
[2] 用模板表述容器;13.2节。
[3]
为指针的容器提供专门化,以减小代码规模;13.5节。
[4] 总是在专门化之前声明模板的一般形式;13.5节。
[5]
在专门化的使用之前先声明它;13.5节。
[6] 尽量减少模板定义对于实例化环境的依赖性;13.2.5节、C ..13.8节。
[7]
定义你所声明的每一个专门化;13.5节。
[8] 考虑一个模板是否需要有针对C风格字符串和数组的专门化;13.5.2节。
[9]
用表述策略的对象进行参数化;13.4节。
[10] 用专门化和重载为同一概念的针对不同类型的实现提供统一界面;13.5节。
[11]
为简单情况提供简单界面,用重载和默认参数去表述不常见的情况;13.5节、13.4节。
[12]
在修改为通用模板之前,在具体实例上排除程序错误;13.2.1节。
[13] 如果模板定义需要在其他编译单位里访问,请记住写export;13.7节。
[14] 对大模板和带有非平凡环境依赖性的模板,应采用分开编译的方式;13.7节。
[15]
用模板表示转换,但要非常小心地定义这些转换;13.6.3.1节。
[16]
如果需要,用constraint()成员函数给模板的实参增加限制;13.9
[16],C.13.10节。
[17]
通过显式实例化减少编译和连接时间;C.13.10节。
[18] 如果运行时的效率非常重要,那么最好用模板而不是派生类;13.6.1节。
[19]
如果增加各种变形而又不重新编译是很重要的,最好用派生类而不是模板;13.6.1节。
[20]
如果无法定义公共的基类,最好用模板而不是派生类;13.6.1节。
[21]
当有兼容性约束的内部类型和结构非常重要时,最好用模板而不是派生类;13.6.1节。
第14章忠告
[1] 用异常做错误处理;14.1节、14.5节、14.9节。
[2]
当更局部的控制机构足以应付时,不要使用异常;14.1节。
[3] 采用"资源申请即初始化"技术去管理资源;14.4节。
[4]
并不是每个程序都要求具有异常时的安全性;14.4.3节。
[5] 采用"资源申请即初始化"技术和异常处理器去维持不变式;14.3.2节。
[6]
尽量少用try块,用"资源申请即初始化"技术,而不是显式的处理器代码;14.4节。
[7] 并不是每个函数都需要处理每个可能的错误;14.9节。
[8] 在构造函数里通过抛出异常指明出现失败;14.4.6节。
[9] 在从赋值中抛出异常之前,使操作对象处于合法状态;14.4.6.2节。
[10] 避免从析构函数里抛出异常;14.4.7节。
[11] 让main()捕捉并报告所有的异常;14.7节。
[12]
使正常处理代码和错误处理代码相互分离;14.4.5节、14.5节。
[13]
在构造函数里抛出异常之前,应保证释放在此构造函数里申请的所有资源;14.4节。
[14] 使资源管理具有层次性;14.9节。
[15]
对于主要界面使用异常描述;14.9节。
[16]
当心通过new分配的内存在发生异常时没有释放,并由此而导致存储的流失;14.4.1节、14.4.2节、14.4.4节。
[17]
如果一函数可能抛出某个异常,就应假定它一定会抛出这个异常;14.6节。
[18] 不要假定所有异常都是由exception类派生出来的;14.10节。
[19] 库不应该单方面终止程序。相反,应该抛出异常,让调用者去做决定;14.1节。
[20]
库不应该生成面向最终用户的错误信息。相反,它应该抛出异常,让调用者去做决定;14.1节。
[21] 在设计的前期开发出一种错误处理策略;14.9节。
第15章忠告
[1] 利用常规的多重继承表述特征的合并;15.2节、15.2.5节。
[2]
利用多重继承完成实现细节与界面的分离;15.2.5节。
[3] 用virtual基类表达在类层次结构里对某些类(不是全部类)共同的东西;15.2.5节。
[4] 避免显式的类型转换(强制);15.4.5节。
[5]
在不可避免地需要漫游类层次结构的地方,使用dymamic_cast;15.4.1节。
[6]
尽量用dynamic_cast而不是typeid;15.4.4节。
[7] 尽量用private而不是protected;15.3.1.1节。
[8] 不要声明protected数据成员;15.3.1.1节。
[9] 如果某个类定义了operator delete(
),它也应该有虚析构函数;15.6节;
[10] 在构造和析构期间不要调用虚函数;15.4.3节。
[11]
尽量少用为解析成员名而写的显式限定词,最好是在覆盖函数里用它;15.2.1节。
第16章忠告
[1] 利用标准库功能,以维持可移植性;16.1节。
[2] 决不要另行定义标准库的功能;16.1.2节。
[3]
决不要认为标准库比什么都好。
[4] 在定义一种新功能时,应考虑它是否能够纳入标准库所提供的框架中;16.3节。
[5]
记住标准库功能都定义在名字空间std里;16.1.2节。
[6] 通过包含标准库头文件声明其功能,不要自己另行显示声明;16.1.2节。
[7]
利用后续抽象的优点;16.2.1节。
[8] 避免肥大的界面;16.2.2节。
[9]
与自己写按照反向顺序的显式循环相比,最好是写利用反向迭代器的算法;16.3.2节。
[10]
用base()从reverse_iterator抽取出iterator;16.3.2节。
[11] 通过引用传递容器;16.3.4节。
[12]
用迭代器类型,如list::iterator,而不要采用索引容器元素的指针;16.3.1节。
[13]
在不需要修改容器元素时,使用const迭代器;16.3.1节。
[14] 如果希望检查访问范围,请(直接或间接)使用at();16.3.3节。
[15] 多用容器和push_back()或resize(),少用数组和realloc();16.3.5节。
[16]
vector改变大小之后,不要使用指向其中的迭代器;16.3.8节。
[17] 利用reserve()避免使迭代器非法;16.3.8节。
[18] 在需要的时候,reserve()可以使执行情况更容易预期;16.3.8节。
第17章忠告
[1] 如果需要用容器,首先考虑用vector;17.1节。
[2]
了解你经常使用的每个操作的代价(复杂性,大O度量);17.1.2节。
[3] 容器的界面、实现和表示是不同的概念,不要混淆;17.1.3节。
[4] 你可以依据多种不同准则去排序和搜索;17.1.4.1节。
[5]
不要用C风格的字符串作为关键码,除非你提供了一种适当的比较准则;17.1.4.1节。
[6]
你可以定义这样的比较准则,使等价的但是不相同的关键码值映射到同一个关键码;17.1.4.1节。
[7]
在插入和删除元素时,最好是使用序列末端的操作(back操作);17.1.4.1节。
[8]
当你需要在容器的前端或中间做许多插入和删除时,请用list;17.2.2节。
[9]
当你主要通过关键码访问元素时,请用map或multimap;17.4.1节。
[10] 尽量用最小的操作集合,以取得最大的灵活性;17.1.1节。
[11] 如果要保持元素的顺序性,选用map而不是hash_map;17.6.1节。
[12]
如果查找速度极其重要,选hash_map而不是map;17.6.1节。
[13]
如果无法对元素定义小于操作时,选hash_map而不是map;17.6.1节。
[14]
当你需要检查某个关键码是否在关联容器里的时候,用find();17.4.1.6节。
[15] 用equal_range( )
在关联容器里找出所有具有给定关键码的所有元素;17.4 ..1.6节。
[16]
当具有同样关键码的多个值需要保持顺序时,用multimap;17.4.2节。
[17]
当关键码本身就是你需要保存的值时,用set或multiset;17.4.3节。
第18章忠告
[1] 多用算法,少用循环;18.5节。
[2] 在写循环时,考虑是否能将它表述为一个通用的算法;18.2节。
[3] 常规性地重温算法集合,看看是不是能将新应用变得更明晰;18.2节。
[4] 保证一对迭代器参数确实表述了一个序列;18.3.1节。
[5] 设计时应该让使用最频繁的操作是简单而安全的;18.3节、18.3.1节。
[6] 把测试表述成能够作为谓词使用的形式;18.4.2节。
[7] 切记谓词是函数和对象,不是类型;18.4.2节。
[8] 你可以用约束器从二元谓词做出一元谓词;18.4.4.1节。
[9]
利用mem_fun()和mem_fun_ref()将算法应用于容器;18.4.4.2节。
[10]
当你需要将一个参数约束到一个函数上时,用ptr_fun();18.4.4.3节。
[11]
切记strcmp()用0表示"相等",与==不同;18.4.4.4节。
[12]
仅在没有更特殊的算法时,才使用for_each()和tranform();18.5.1节。
[13]
利用谓词,以便能以各种比较准则和相等准则使用算法;18.4.2.1节、18.6.3.1节。
[14]
利用谓词和其他函数对象,以使标准算法能用于表示范围广泛的意义;18.4.2节。
[15]
运算符<和==在指针上的默认意义很少适用于标准算法;18.6.3.1节。
[16] 算法并不直接为它们的参数序列增加或减少元素;18.6节。
[17] 应保证用于同一个序列的小于和相等谓词相互匹配;18.6.3.1节。
[18] 有时排好序的序列用起来更有效且优雅;18.7节。
[19] 仅为兼容性而使用qsort()和bsearch();18.11节。
第19章忠告
[1]
在写一个算法时,设法确定需要用哪种迭代器才能提供可接受的效率,并(只)使用这种迭代器所支持的操作符去表述算法;19.2.1节。
[2]
当给定的迭代器参数提供了多于算法所需的最小支持时,请通过重载为该算法提供效率更高的实现;19.2.3节。
[3]
利用iterator_traits为不同迭代器类别描述适当的算法;19.2.2节。
[4]
记住在istream_iterator和ostream_iterator的访问之间使用++;19.2.6节。
[5]
用插入器避免容器溢出;19.2.4节。
[6] 在排错时使用额外的检查,后面只在必须时才删除这些检查;19.3.1节。
[7]
多用++p,少用p++;19.3节。
[8] 使用未初始化的存储去改善那些扩展数据结构的算法的性能;19.4.4节。
[9]
使用临时缓冲区去改善需要临时数据结构的算法的性能;19.4.4节。
[10] 在写自己的分配器之前三思;19.4节。
[11]
避免malloc()、free()、realloc()等;19.4.6节。
[12]
你可以通过为rebind所用的技术去模拟对模板的typedef;19.4.1节。
第20章忠告
[1] 尽量使用string操作,少用C风格字符串函数;20.4.1节。
[2]
用string作为变量或者成员,不作为基类;20.3节、25.2.1节。
[3]
你可以将string作为参数值或者返回值,让系统去关心存储管理问题;20.3.6节。
[4]
当你希望做范围检查时,请用at()而不是迭代器或者[];20.3.2节、20.3.5节。
[5]
当你希望优化速度时,请用迭代器或[]而不是at();20.3.2节、20.3.5节。
[6]
直接或者间接地使用substr()去读子串,用replace()去写子串;20.3.12节、20.3.13节。
[7]
用find()操作在string里确定值的位置(而不是写一个显式的循环);20.3.11节。
[8]
在你需要高效率地添加字符时,请在string的后面附加;20.3.9节。
[9]
在没有极端时间要求情况下用string作为字符输入的目标;20.3.15节。
[10]
用string::npos表示"string的剩余部分";20.3.5节。
[11]
如果必要,就采用低级操作去实现极度频繁使用的string(而不是到处用低级数据结构);20.3.10节。
[12]
如果你使用string,请在某些地方捕捉length_error和out_of_range异常;20.3.5节。
[13]
小心,不要将带值0的char*传递给字符串函数;20.3.7节。
[14]
只是到必须做的时候,(再)用c_str()产生string的C风格表示;20.3.7节。
[15]
当你需要知道字符的类别时,用isalpha()、isdigit()等函数,不要自己去写对字符值的检测;20.4.1节。
第21章忠告
[1]
在为用户定义类型的值定义<<和>>时,应该采用意义清晰的正文表示形式;21.2.3节、21.3.5节。
[2]
在打印包含低优先级运算符的表达式时需要使用括号;21.2节。
[3]
在添加新的<<和>>运算符时,你不必修改istream或ostream;21.2.3节。
[4]
你可以定义函数,使其能基于第二个(或更后面的)参数,具有像virtual函数那样行为;21.2.3.1节。
[5]
切记,按默认约定>>跳过所有空格;21.3.2节。
[6]
使用低级输入函数(如get()和read())主要是为了实现高级输入函数;21.3.4节。
[7]
在使用get()、getline()和read()时留心其终止准则;21.3.4节。
[8]
在控制I/O时,尽量采用操控符,少用状态标志;21.3.3节、21.4节、21.4.6节。
[9] (只)用异常去捕捉罕见的I/O错误;21.3.6节。
[10] 联结用于交互式I/O的流;21.3.7节。
[11] 使用哨位将许多函数的入口和出口代码集中到一个地方;21.3.8节。
[12] 在无参数操控符最后不要写括号;21.4.6.2节。
[13] 使用标准操控符时应记住写#include ;21.4.6.2节。
[14] 你可以通过定义一个简单函数对象得到三元运算符的效果(和效率);21.4.6.3节。
[15]
切记,width描述只应用于随后的一个I/O操作;21.4.4节。
[16]
切记precision描述只对随后所有的浮点数输出操作有效;21.4.3节。
[17] 用字符串流做内存里的格式化;21.5.3节。
[18]
你可以描述一个文件流的模式;21.5.1节。
[19]
在扩充I/O系统时,应该清楚地区分格式化(iostream)和缓冲(streambuf);21.1节、21.6节。
[20]
将传输值的非标准方式实现为流缓冲区;21.6.4节。
[21] 将格式化值的非标准方式实现为流操作;21.2.3节、21.3.5节。
[22]
你可以利用一对函数隔离和封装起对用户定义代码的调用;21.6.4节。
[23]
你可以在读入之前用in_avail()去确定输入操作是否会被阻塞;21.6.4节。
[24]
划分清楚需要高效的简单操作和实现某种策略的操作(将前者做成inline,将后者做成virtual);21.6.4节。
[25]
用locale将"文化差异"局部化;21.7节。
[26]
用sync_with_stdio(x)去混合C风格和C++风格的I/O,或者离解C风格和C++风格的I/O;21.8节。
[27]
当心C风格I/O的类型错误;21.8节。
第22章忠告
[1] 数值问题常常很微妙。如果你对数值问题的数学方面不是100 %有把握,请去找专家或者做试验;22.1节。
[2]
用numeric_limits去确定内部类型的性质;22.2节。
[3] 为用户定义的标量类型描述numeric_limits;22.2节。
[4] 如果运行时效率比对于操作和元素的灵活性更重要的话,那么请用valarray去做数值计算;22.4节。
[5]
用切割表述在数组的一部分上的操作,而不是用循环;22.4.6节。
[6] 利用组合器,通过清除临时量和更好的算法来获得效率;22.4.7节。
[7] 用std::complex做复数算术;22.5节。
[8]
你可以把使用complex类的老代码通过一个typedef转为用std::complex模板;22.5节。
[9]
在写循环从一个表出发计算某个值之前,先考虑一下accumulate()、inner_product()、partial_sum()和adjacent_difference();22.6节。
[10] 最好是用具有特定分布的随机数类,少直接用rand();22.7节。
[11] 注意使你的随机数充分随机;22.7节。
第23章忠告
[1] 知道你试图达到什么目的;23.3节。
[2] 心中牢记软件开发是一项人的活动;23.2节、23.5.3节。
[3] 用类比来证明是有意的欺骗;23.2节。
[4] 保持一个特定的实实在在的目标;23.4节。
[5]
不要试图用技术方式去解决社会问题;23.4节。
[6] 在设计和对待人员方面都应该有长期考虑;23.4.1节、23.5.3节。
[7]
对于什么程序在编码之前先行设计是有意义的,在程序规模上并没有下限;23.2节。
[8] 设计过程应鼓励反馈;23.4节。
[9]
不要将做事情都当做取得了进展;23.3节、23.4节。
[10]
不要推广到超出了所需要的、你已有直接经验的和已经测试过的东西;23.4.1节、23.4.2节。
[11]
将概念表述为类;23.4.2节、23.4.3.1节。
[12] 系统里也存在一些不应该用类表述的性质;23.4.3.1节。
[13]
将概念间的层次关系用类层次结构表示;23.4.3.1节
[14]
主动到应用和实现中去寻找概念间的共性,将由此得到的一般性概念表示为基类;23.4.3.1节、23.4.3.5节。
[15]
在其他领域中的分类方式未必适合作为应用中的继承模型的分类方式;23.4.3.1节。
[16]
基于行为和不变式设计类层次结构;23.4.3.1节、23.4.3.5节、23.4.3.7.1节。
[17] 考虑用例;23.4.3.1节。
[18] 考虑使用CRC卡片;23.4.3.1节。
[19] 用现存系统作为模型、灵感的源泉和出发点;23.4.3.6节。
[20]
意识到视觉图形工程的重要性;23.4.3.1节。
[21] 在原型成为负担时就抛弃它;23.4.4节。
[22]
为变化而设计,将注意力集中到灵活性、可扩展性、可移植性和重用;23.4.2节。
[23] 将注意力集中到组件设计;23.4.3节。
[24]
让每个界面代表在一个抽象层次中的一个概念;23.4.3.1节。
[25] 面向变化进行设计,以求得稳定性;23.4.2节。
[26]
通过将广泛频繁使用的界面做得最小、最一般和抽象来使设计稳定;23.4.3.2、23.4.3.5节。
[27]
保持尽可能小,不为"特殊需要"增加新特征;23.4.3.2节。
[28]
总考虑类的其他表示方式。如果不可能有其他方式,这个类可能就没有代表某个清晰的概念;23.4.3.4节。
[29]
反复评审、精化设计和实现;23.4节、23.4.3节。
[30]
采用那些能用于调试,用于分析问题、设计和实现的最好工具;23.3节、23.4.1节、23.4.4节。
[31]
尽早、尽可能频繁地进行试验、分析和测试;23.4.4节、23.4.5节。
[32] 不要忘记效率;23.4.7节。
[33]
保持某种适合项目规模的规范性水平;23.5.2节。
[34] 保证有人负责项目的整体设计;23.5.2节。
[35]
为可重用组件做文档、推介和提供支持;23.5.1节。
[36] 将目标与细节一起写进文档里;23.4.6节。
[37]
将为新开发者提供的教学材料作为文档的一部分;23.4.6节。
[38] 鼓励设计、库和类的重用,并给予回报;23.5.1节。
第24章忠告
[1] 应该向数据抽象和面向对象程序设计的方向发展;24.2节。
[2]
(仅仅)根据需要去使用C++的特征和技术;24.2节。
[3] 设计应与编程风格相互匹配;24.2.1节。
[4]
将类/概念作为设计中最基本的关注点,而不是功能/处理;24.2.1节。
[5] 用类表示概念;24.2.1节、24.3节。
[6]
用继承(仅仅)表示概念间的层次结构关系;24.2.2节、24.5.2节、24.3.2节。
[7]
利用应用层静态类型的方式给出有关界面的更强的保证;24.2.2节。
[8] 使用程序生成器和直接界面操作工具去完成定义良好的工作;24.2.3节。
[9] 不要去使用那些与任何通用程序设计语言之间都没有清晰界面的程序生成器或者直接界面操作工具;24.2.4节。
[10]
保持不同层次的抽象相互分离;24.3.1节。
[11] 关注组件设计;24.4节。
[12]
保证虚函数有定义良好的意义,每个覆盖函数都实现预期行为;24.3.4节、24.3.2.1节。
[13]
公用界面继承表示的是"是一个"关系;24.3.4节。
[14] 成员表示的是"有一个"关系;24.3.4节。
[15]
在表示简单包容时最好用直接成员,不用指向单独分配的对象的指针;24.3.3节、24.3.4节。
[16]
设法保证使用依赖关系为易理解的,尽可能不出现循环,而且最小;24.3.5节。
[17] 对于所有的类,定义好不变式;24.3.7.1节。
[18] 显式地将前条件、后条件和其他断言表述为断言(可能使用Assert());24.3.5节。
[19]
定义的界面应该只暴露出尽可能少的信息;24.4节。
[20] 尽可能减少一个界面对其他界面的依赖性;24.4.2节。
[21]
保持界面为强类型的;24.4.2节。
[22] 利用应用层的类型来表述界面;24.4.2节。
[23]
将界面表述得使请求可以传递给远程的服务器;24.4.2节。
[24] 避免肥大的界面;24.4.3节。
[25]
尽可能地使用private数据和成员函数;24.4.2节。
[26]
用protected/public区分开派生类的设计者与一般用户间的不同需要;24.4.2节。
[27] 使用模板去做通用型程序设计;24.4.1节。
[28] 使用模板去做算法策略的参数化;24.4.1节。
[29] 如果需要在编译时做类型解析,请使用模板;24.4.1节。
[30]
如果需要在运行时做类型解析,使用类层次结构;24.4.1节。
第25章忠告
[1] 应该对一个类的使用方式做出有意识的决策(作为设计师或者作为用户);25.1节。
[2]
应注意到涉及不同种类的类之间的权衡问题;25.1节。
[3] 用具体类型去表示简单的独立概念;25.2节。
[4]
用具体类型去表示那些最佳效率极其关键的概念;25.2节。
[5] 不要从具体类派生;25.2节。
[6]
用抽象类去表示那些对象的表示可能变化的界面;25.3节。
[7] 用抽象类去表示那些可能出现多种对象表示共存情况的界面;25.3节。
[8]
用抽象类去表示现存类型的新界面;25.3节。
[9] 当类似概念共享许多实现细节时,应该使用结点类;25.4节。
[10]
用结点类去逐步扩充一个实现;25.4节。
[11] 用运行时类型识别从对象获取界面;25.4.1节。
[12]
用类去表示具有与之关联的状态信息的动作;25.5节。
[13] 用类去表示需要存储、传递或者延迟执行的动作;25.5节。
[14]
利用界面类去为某种新的用法而调整一个类(不修改这个类);25.6节。
[15] 利用界面类增加检查,25.6节。
[16]
利用句柄去避免直接使用指针和引用;25.7节。
[17] 利用句柄去管理共享的表示;25.7节。
[18]
在那些能预先定义控制结构的应用领域中使用应用框架;25.8节。
附录B 忠告
[1] 要学习C++,应该使用你可以得到的标准C++的最新的和完全的实现; B.3节。
[2]
C和C++的公共子集并不是学习C++时最好的开始子集;1.6节、B.3节。
[3]
对于产品代码,请记住并不是每个C++实现都是完全的最新的。在产品代码中使用某个新特征之前应先做试验,写一个小程序,测试你计划使用的实现与标准的相符情况和性能。例如,参见8.5[6~7]、16.5[10]
和B.5[7]。
[4] 避免被贬斥的特征,例如全局的static;还应避免C风格的强制;6.2.7节、B.2.3节。
[5]"隐含的int"已禁止,因此请明确描述每个函数、变量、const等的类型;B.2.2节。
[6]
在将C程序转为C++程序时,首先保证函数声明(原型)和标准头文件的一致使用;B.2.2节。
[7]
在将C程序转为C++程序时,对以C++关键字为名的变量重新命名;B.2.2节。
[8]
在将C程序转为C++程序时,将malloc()的结果强制到适当类型,或者将malloc()的所有使用都改为new;B.2.2节。
[9]
在将malloc()和free()转为new和delete时,请考虑用vector、push_back()和reserve()而不是realloc();3.8节、16.3.5节。
[10] 在将C程序转为C++程序时,记住这里没有从int到枚举的隐式转换;如果需要,请用显式转换;4.8节。
[11]
在名字空间std里定义的功能都定义在无后缀的头文件里(例如,std::cout声明在里)。早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里(例如,std::cout声明在里);9.2.2节、B.3.1节。
[12] 如果老的代码检测new的结果是否为0,那么必须将它修改为捕捉bad_alloc或者使用new(nothrow);B.3.4节。
[13]
如果你用的实现不支持默认模板参数,请显式提供参数;用typedef可以避免重复写模板参数(类似于string的typedef使你无须写basic_string,
allocator >);B.3.5节。
[14] 用得到std::string(里保存的是C风格的串函数);9.2.2节、B.3.1节。
[15] 对每个标准C头文件,它将名字放入全局名字空间;与之对应的头文件将名字放入名字空间std;B.3.1节。
[16]
许多系统有一个"String.h"头文件里定义了一个串类型。注意,这个串类型与标准库的string不同。
[17]
尽可能使用标准库功能,而不是非标准的功能;20.1节、B.3节、C.2节。
[18] 在声明C函数时用extern "C";9.2.4节
附录C 忠告
[1] 应集中关注软件开发而不是技术细节;C.1节。
[2] 坚持标准并不能保证可移植性;C.2节。
[3]
避免无定义行为(包括专有的扩充);C.2节。
[4] 将那些实现定义的行为局部化;C.2节。
[5]
在没有{、}、[、]、|或!的系统里用关键字和二联符表示程序,在没有\的地方用三联符;C.3.1节。
[6]
为了方便通信,用ASCII字符去表示程序;C.3.3节。
[7] 采用符号转义字符比用数值表示字符更好些;C.3.2节。
[8]
不要依赖于char的有符号或者无符号性质;C.3.4节。
[9] 如果对整数文字量的类型感到有疑问,请使用后缀;C.4节。
[10]
避免破坏值的隐式转换;C.6节。
[11] 用vector比数组好;C.7节。
[12] 避免union;C.8.2节。
[13]
用位域表示外部确定的布局;C.8.1节。
[14] 注意不同存储管理风格间的权衡;C.9节。
[15] 不要污染全局名字空间;C.10.1节。
[16] 在需要作用域(模块)而不是类型的地方,用namespace比class更合适;C.10.3节。
[17]
记住static类成员需要定义;C.13.1节。
[18] 用typename消除对模板参数中类型成员的歧义性;C.13.5节。
[19]
在需要用模板参数显式限定之处,用template消除模板类成员的歧义性;C.13.6节。
[20]
写模板定义时,应尽可能减少对实例化环境的依赖性;C.13.8节。
[21] 如果模板实例化花的时间过长,请考虑显式实例化;C.13 ..10节。
[22] 如果需要编译顺序的显式可预见性,请考虑显式实例化;C.13.10节。
附录D 忠告
[1] 应预期每个直接与人打交道的非平凡程序或者系统都会用在多个国家;D.1节。
[2]
不要假定每个人使用的都是你所用的字符集;D.4.1节。
[3] 最好是用locale而不是写实质性代码去做对文化敏感的I/O;D.1节。
[4]
避免将现场名字字符串嵌入到程序正文里;D.2.1节。
[5] 尽可能减少全局格式信息的使用;D.2.3节、D.4.4.7节。
[6]
最好是用与现场有关的字符串比较和排序;D.2.4节、D.4.1节。
[7] 保存facet的不变性;D.2.2节、D.3节。
[8]
应保证改变现场的情况只出现在程序里的几个地方;D.2.3节。
[9] 利用现场去管理刻面的生存期;D.3节。
[10]
在写对现场敏感的I/O函数时,记住去处理用户(通过覆盖)提供的函数所抛出的异常;D.4.2.2节。
[11]
用简单的Money类型保存货币值;D.4.3节。
[12] 要做对现场敏感的I /
O,最好是用简单的用户定义类型保存所需的值(而不是从内部类型的值强制转换);D.4.3节。
[13]
在你对涉及到的所有因素有了很好的看法之前,不要相信计时结果;D.4.4.1节。
[14]
当心time_t的取值范围;D.4.4.1节、D.4.4.5节。
[15] 使用能接受多种输入格式的日期输入例程;D.4.4.5节。
[16]
最好采用那些明显表明了所用现场的字符分类函数;D.4.5节、D.4.5.1节。
附录E忠告
[1] 弄清楚你想要什么级别的异常时安全性;E.2节。
[2] 异常时安全性应该是整体容错策略的一部分;E.2节。
[3] 为所有的类提供基本保证,也就是说,维持一个不变式,而且不流失资源;E.2节、E.3.2节、E.4节。
[4]
在可能和可以负担之处提供强保证,使操作或者成功,或者保持所有操作对象不变;E.2节、E.3节。
[5]
不要从析构函数里抛出异常;E.2节、E.3.2节、E.4节。
[6] 不要从一个遍历合法序列的迭代器里抛出异常;E.4.1节、E.4.4节。
[7] 异常时安全性涉及到仔细检查各个操作;E.3节。
[8] 将模板设计为对异常透明的;E.3.1节。
[9]
更应该用申请资源的构造函数方式,不要采用init()函数;E.3.5节。
[10]
为类定义一个不变式,使什么是合法状态变得非常清晰;E.2节、E.6节。
[11] 确保总将对象放在合法状态中,也不要怕抛出异常;E.3.2节、E.6节。
[12] 保持不变式简单;E.3.5节。
[13] 在抛出异常之前,让所有操作对象都处于合法状态;E.2节、E.6节。
[14]
避免资源流失;E.2节、E.3.1节、E.6节。
[15] 直接表示资源;E.3.2节、E.6节。
[16]
记住swap()有时可以成为复制元素的替代方式;E.3.3节。
[17] 在可能时依靠操作的顺序,而不是显式地使用try块;E.3.4节。
[18] 在替代物已经安全生成之前不销毁"老"信息;E.3.3节、E.6节。
[19]
依靠"资源申请即初始化"技术;E.3节、E.3.2节、E.6节。
[20] 确保关联容器的比较操作能够复制;E.3.3节。
[21]
标明关键性数据结构,并为它们定义能够提供强保证的操作;E.6节。
posted @
2006-04-21 12:17 Martin 阅读(300) |
评论 (0) |
编辑 收藏
时间:2005年4月19日 晚11点
地点:洗澡间
事件:洗澡
人物:我
一场羽毛球过后,浑身是汗,于是洗澡。
先洗头,两遍,夏士莲洗发水。
洗澡,用xxx露,擦一遍,泡沫好丰富啊,感觉。
冲洗, ???怎么冲了这么久浑身还是滑腻腻的?感觉非常怪异,不解。
回想倒沐浴露的情景:倒?明明是按出来的嘛!妈的,错了,洗发水(夏士莲大号瓶装)是要按出来的,沐浴露(六神中瓶装)是要倒出来的。唉,这世道啊,不就是洗头洗两遍吗?怎么就惯性了呢?
怪异指数:* * * *
* 您不妨也试试?
posted @
2006-04-20 10:04 Martin 阅读(228) |
评论 (0) |
编辑 收藏
From: http://www.blueidea.com/tech/site/2005/2699.asp
Google搜索从入门到精通v4.0
1,前言
2,摘要
3,如何使用本文
4,Google简介
5,搜索入门
6,初阶搜索
6.1,搜索结果要求包含两个及两个以上关键字
6.2,搜索结果要求不包含某些特定信息
6.3,搜索结果至少包含多个关键字中的任意一个
7,杂项语法
7.1,通配符问题
7.2,关键字的字母大小写
7.3,搜索整个短语或者句子
7.4,搜索引擎忽略的字符以及强制搜索
8,进阶搜索
8.1,对搜索的网站进行限制
8.2,查询某一类文件
8.3,搜索的关键字包含在URL链接中
8.4,搜索的关键字包含在网页标题中
8.5,搜索的关键字包含在网页“锚”内
9,其他罕用语法
9.1,搜索所有链接到某个URL地址的网页
9.2,查找与某个页面结构内容相似的页面
9.3,从Google服务器上缓存页面中查询信息
10,图片搜索
11,目录检索
12,新闻组搜索
13,Google的其他杰出功能
13.1,网页快照
13.2,集成化的工具条
13.3,单词英文解释
13.4,网页翻译
13.5,单词纠错
13.6,搜索结果过滤
14,Google尚未发布的一些新特性和功能
14.1,对网页更新日期做出限定
14.2,新闻搜索
14.3,分类广告搜索
14.4,其它Google的最新发展动态
14.5,一个有趣的地方
15,后记
1,前言
我是在2000年上半年知道Google的。在这之前,我搜索英文信息通常用AltaVista,而搜索中文信息则常用Sina。但自使用了
Google之后,它便成为我的Favorite Search
engine了。这也得感谢新浪网友曹溪,因为当初正是因为他的大力推介,才使我识得了Google。
记得1996年夏季的时候,当我第一次接触Internet,便被扑面而来的魔力征服了。那种天涯咫尺的感觉,真是妙不可言。在经历了疯狂的WWW冲浪和如痴如醉的BBS沉迷之后,我意识到Internet对我影响至深的还是在于学习方式的变迁。
如何来描述这种变迁呢?以前的学习,一般需要预先在肚子里存储下足够的知识,必要时,就从海量的信息中提取所需的部分。这种学习方式造就了很多“才
高八斗,学富五车”的大才子。但是,到了信息领域大大超出“四书五经”的新时期,预先无目的的吞下海量信息的学习方式就有些不合时宜了。比方说,我们到了
大型的图书城,往往有一种不知所措的感觉。旧有的学习方式需要变更以适应这个信息爆炸的年代。目的明确的去学习,即先知道要学什么,然后有目的的去寻找答
案,这种方式看上去更加有效率。我不妨把这称为“即学式”,相应的,旧有的称为“预学式”。
不过,“即学式”的实施是有前提的。首先,要求学习者拥有一个包罗万象的信息库,以供随时抽取各种目的信息;其次,是需要一个强劲的信息检索工具,
以便高效率的从信息库中提取信息。很明显,Internet可以充当那个海量的信息库,而搜索引擎,则正是寻找光明之火的绝好工具。
“公欲善其事,必先利其器”。Internet只有一个,而搜索引擎则有N多个。有搜索高手说,所谓搜索,就是“在正确的地方使用正确的工具和正确
的方法寻找正确的内容”。但是,对于普通人而言,掌握诸多搜索引擎的可能性似乎不大。用一两个相对强劲的具代表性的工具达到绝大多数搜索目的更为人们所迫
切希望。不同的时期,涌现出不同的强者。就目前而言,我们非常幸运的有了: *****Google******
2,摘要
本文简要的介绍了Google的历史和特点,Google的基本搜索语法和高级搜索语法,Google的特色功能,包括图片搜索、新闻组搜索和集成
工具条等。尽管本文名为“Google搜索从入门到精通”,但事实上,本文只能算是对Google的一个并不十分完全的介绍而已。:)
3,如何使用本文
阅读本文最好具备一些最基本的布尔代数基础,如“与”、“或”、“非”等。不过,即便你没有这方面的知识,也不必在意。对那些实例进行练习,你的疑
惑就会迎刃而解。对于刚刚接触网络搜索的读者而言,也许你应该从头到尾的阅读本文;但对于那些有一定搜索基础的读者而言,只需要跳跃着寻找自己所需要的信
息就可以了。此外,你也可以参考中文Google大全:http://www.Google.com/intl/zh-CN/about.html,以及搜索帮助:http://www.google.com/intl/zh-CN/help.html,那是官方Google使用手册以及问题解答中心。
4,Google简介
Google(www.Google.com)是一个搜索引擎,由两
个斯坦福大学博士生Larry Page与Sergey Brin于1998年9月发明,Google Inc.
于1999年创立。2000年7月份,Google替代Inktomi成为Yahoo公司的搜索引擎,同年9月份,Google成为中国网易公司的搜索引
擎。98年至今,Google已经获得30多项业界大奖。到Google的新闻中心(http://www.Google.com/press/index.html),你可以找到关于一切关于Google的历史和新闻资料。
Google的成功得益于其强大的功能和独到的特点:
Google检索网页数量达24亿,搜索引擎中排名第一;
Google支持多达132种语言,包括简体中文和繁体中文;
Google网站只提供搜索引擎功能,没有花里胡哨的累赘;
Google速度极快,年初时据说有15000多台服务器,200多条T3级宽带;
Google的专利网页级别技术PageRank能够提供准确率极高的搜索结果;
Google智能化的“手气不错”功能,提供可能最符合要求的网站;
Google的“网页快照”功能,能从Google服务器里直接取出缓存的网页。
Google具有独到的图片搜索功能;
Google具有强大的新闻组搜索功能;
Google具有二进制文件搜索功能(PDF,DOC,SWF等);
Google还有很多尚在开发阶段的令人吃惊的设想和功能。
等等
5,搜索入门
要用Google做搜索,当然首先要进Google网站--www.Google.com;不过,163.com和yahoo.com.cn使用的
实际上也是Google搜索引擎,只是对搜索结果进行了编排,而且无法提供一些特色功能,如图片搜索等。因此,如果你要搜索网页的话,就直接使用
Google.com吧。
第一次进入Google,它会根据你的操作系统,确定语言界面。需要提醒的是,Google是通过cookie来存储页面设定的,所以,如果你的系统禁用cookie,就无法对Google界面进行个人设定了。
Google的首页很清爽,LOGO下面,排列了四大功能模块:网站、图像、新闻组和目录服务。默认是网站搜索。现在进行第一次搜索实践,假定你是
个搜索新手,想要了解一下搜索引擎的来龙去脉和搜索技巧。在搜索框内输入一个关键字“搜索引擎”,
选中“搜索中文(简体)网页”选项,然后点击下面的“Google搜索”按钮(或者直接回车),结果就出来了。 搜索:“搜索引擎”
结果:已搜索有关搜索引擎的中文(简体)网页。 共约有707,000项查询结果,这是第1-10项 。 搜索用时0.08秒。
仔细看一下搜索结果的前十项,就会发现绝大部分链接是搜索引擎本身,而不是对搜索引擎的或者搜索技巧方面的介绍。
注意:文章中搜索语法外面的引号仅起引用作用,不能带入搜索栏内。
6,初阶搜索
上例是最基本的搜索,即查询包含单个关键字的信息。但是,你可以发现,上例中,单个关键字“搜索引擎”,搜索得的信息浩如烟海,而且绝大部分并不符合自己的要求,怎么办呢?我们需要进一步缩小搜索范围和结果。
6.1,搜索结果要求包含两个及两个以上关键字
一般搜索引擎需要在多个关键字之间加上“ ”,而Google无需用明文的“ ”来表示逻辑“与”操作,只要空格就可以了。现在,我们需要了解一下搜索引擎的历史,因此期望搜得的网页上有“搜索引擎”和“历史”两个关键字。
示例:搜索所有包含关键词“搜索引擎”和“历史”的中文网页
搜索:“搜索引擎 历史”
结果:已搜索有关搜索引擎 历史的中文(简体)网页。 共约有78,600项查询结果,这是第1-10项 。 搜索用时0.36秒。
用了两个关键字,查询结果已经从70多万项减少到7万多项。但查看一下搜索结果,发现前列的绝大部分结果还是不符合要求,大部分网页涉及的“历
史”,并不是我们所需要的“搜索引擎的历史”。
怎么办呢?删除与搜索引擎不相关的“历史”。我们发现,这部分无用的资讯,总是和“文化”这个词相关的,另外一些常见词是“中国历史”、“世界历史”、
“历史书籍”等。
6.2,搜索结果要求不包含某些特定信息
Google用减号“-”表示逻辑“非”操作。“A –B”表示搜索包含A但没有B的网页。
示例:搜索所有包含“搜索引擎”和“历史”但不含“文化”、“中国历史”和“世界历史”的中文网页
搜索:“搜索引擎 历史 -文化 -中国历史 -世界历史”
结果:已搜索有关搜索引擎 历史 -文化 -中国历史 -世界历史的中文(简体)网页。 共约有36,800项查询结果,这是第1-10项 。 搜索用时0.22秒。
我们看到,通过去掉不相关信息,搜索结果又减少了将近一半。第一个搜索结果是:
搜索引擎直通车≡搜索引擎发展历史
搜索引擎直通车, ... 搜索引擎专业介绍站点. ...
www.se-express.com/about/about.htm - 14k - 网页快照 - 类似网页
非常符合搜索要求。另外,第八项搜索结果:
463搜索王
本站检索 整个网站 在此输入关键词. 你的当前
位置:首页 >> Internet搜索手册 >> 搜索引擎的历史. ...
www.cnco.net/search/history.htm - 21k - 网页快照 - 类似网页
也符合搜索要求。但是,10个结果只有两个符合要求,未免太少了点。不过,在没有更好的策略之前,不妨先点开一个结果看看。点开se-
express.com的这个名为“搜索引擎发展历史”的网页,我们发现,搜索引擎的历史,是与互联网早期的文件检索工具“Archie”息息相关的。此
外,搜索引擎似乎有个核心程序,叫“蜘蛛”,而最早成型的搜索引擎是“Lycos”,使搜索引擎深入人心的是“Yahoo”。了解了这些信息,我们就可以
进一步的让搜索结果符合要求了。
注意:这里的“ ”和“-”号,是英文字符,而不是中文字符的“+”和“-”。此外,操作符与作用的关键字之间,不能有空格。比如“搜索引擎 - 文化”,搜索引擎将视为关键字为“搜索引擎”和“文化”的逻辑“与”操作,中间的“-”被忽略。
6.3,搜索结果至少包含多个关键字中的任意一个。
Google用大写的“OR”表示逻辑“或”操作。搜索“A OR
B”,意思就是说,搜索的网页中,要么有A,要么有B,要么同时有A和B。在上例中,我们希望搜索结果中最好含有“archie”、“lycos”、“蜘
蛛”等关键字中的一个或者几个,这样可以进一步的精简搜索结果。
示例:搜索如下网页,要求必须含有“搜索引擎”和“历史”,没有“文化”,可以含有以下关键字中人任何一个或者多个:“Archie”、“蜘蛛”、“Lycos”、“Yahoo”。
搜索:“搜索引擎 历史 archie OR 蜘蛛 OR lycos OR yahoo -文化”
结果:已搜索有关搜索引擎 历史 archie OR 蜘蛛 OR lycos OR yahoo -文化的中文(简体)网页。 共约有8,400项查询结果,这是第1-10项 。 搜索用时0.16秒。
我们看到,搜索结果缩小到8千多项,前20项结果中,大部分都符合搜索要求。如果你想了解一下解搜索引擎的历史发展,就不妨研究一下现在搜索到的结果吧。 注意:“与”操作必须用大写的“OR”,而不是小写的“or”。
在上面的例子中,我介绍了搜索引擎最基本的语法“与”“非”和“或”,这三种搜索语法Google分别用“
”(空格)、“-”和“OR”表示。顺着上例的思路,你也可以了解到如何缩小搜索范围,迅速找到目的资讯的一般方法:目标信息一定含有的关键字(用“
”连起来),目标信息不能含有的关键字(用“-”去掉),目标信息可能含有的关键字(用“OR”连起来)。
7,杂项语法
7.1,通配符问题
很多搜索引擎支持通配符号,如“*”代表一连串字符,“?”代表单个字符等。Google对通配符支持有限。它目前只可以用“*”来替代单个字符,
而且包含“*”必须用""引起来。比如,“"以*治国"”,表示搜索第一个为“以”,末两个为“治国”的四字短语,中间的“*”可以为任何字符。
7.2,关键字的字母大小写
Google对英文字符大小写不敏感,“GOD”和“god”搜索的结果是一样的。
7.3,搜索整个短语或者句子
Google的关键字可以是单词(中间没有空格),也可以是短语(中间有空格)。但是,用短语做关键字,必须加英文引号,否则空格会被当作“与”操作符。
示例:搜索关于第一次世界大战的英文信息。
搜索:“"world war I"”
结果:已向英特网搜索"world war i". 共约有937,000项查询结果,这是第1-10项 。 搜索用时0.06秒。
7.4,搜索引擎忽略的字符以及强制搜索
Google对一些网路上出现频率极高的英文单词,如“i”、“com”、“www”等,以及一些符号如“*”、“.”等,作忽略处理。
示例:搜索关于www起源的一些历史资料。
搜索:“www的历史 internet”
结果:以下的字词因为使用过于频繁,没有被列入搜索范围: www 的. 已搜索有关www的历史 internet的中文(简体)网页。 共约有75,100项查询结果,这是第1-10项 。 搜索用时0.22秒。
我们看到,搜索“www的历史
internet”,但搜索引擎把“www”和“的”都省略了。于是上述搜索只搜索了“历史”和“internet”。这显然不符合要求。这里我顺便说一
点搜索引擎分词的知识。当我们在搜索“www的历史”的时候,搜索引擎实际上把这个短语分成三部分,“www”、“的”和“历史”分别来检索,这就是搜索
引擎的分词。所以尽管你输入了连续的“www的历史”,但搜索引擎还是把这个短语当成三个关键字分别检索。
如果要对忽略的关键字进行强制搜索,则需要在该关键字前加上明文的“+”号。
搜索:“+www +的历史 internet”
结果:已搜索有关+www +的历史 internet的中文(简体)网页。 共约有25,000项查询结果,这是第1-10项 。 搜索用时0.05秒。
另一个强制搜索的方法是把上述的关键字用英文双引号引起来。在上例“”world war I””中,“I”其实也是忽略词,但因为被英文双引号引起来,搜索引擎就强制搜索这一特定短语。
搜索:“"www的历史" internet”
结果:已搜索有关"www的历史" internet的中文(简体)网页。 共约有7项查询结果,这是第1-6项 。 搜索用时0.26秒。
我们看到,这一搜索事实上把“www的历史”作为完整的一个关键字。显然,包含这样一个特定短语的网页并不是很多,不过,每一项都很符合要求。
注意:大部分常用英文符号(如问号,句号,逗号等)无法成为搜索关键字,加强制也不行。
8,进阶搜索
上面已经探讨了Google的一些最基础搜索语法。通常而言,这些简单的搜索语法已经能解决绝大部分问题了。不过,如果想更迅速更贴切找到需要的信息,你还需要了解更多的东西。
8.1,对搜索的网站进行限制
“site”表示搜索结果局限于某个具体网站或者网站频道,如“www.sina.com.cn”、“edu.sina.com.cn”,或者是某个域名,如“com.cn”、“com”等等。如果是要排除某网站或者域名范围内的页面,只需用“-网站/域名”。
示例:搜索中文教育科研网站(edu.cn)上关于搜索引擎技巧的页面。
搜索:“搜索引擎 技巧 site:edu.cn”
结果:已搜索有关搜索引擎 技巧 site:edu.cn的中文(简体)网页。 共约有608项查询结果,这是第1-10项 。 搜索用时0.05秒。
示例:上著名IT门户网站ZDNET和CNET搜索一下关于搜索引擎技巧方面的资讯。
搜索:“"search engine" tips site:www.zdnet.com OR site:www.cnet.com”
结果:已在www.zdnet.com内搜索有关"search engine" tips OR site:www.cnet.com的网页。 共约有1,040项查询结果,这是第1-10项 。 搜索用时0.09秒。
注意,在这里Google有个小BUG。“已在www.zdnet.com内搜索…”,其实应该表述成“已在www.zdnet.com和www.cnet.com内搜索…”。
示例:搜索新浪科技频道中关于搜索引擎技巧的信息。
搜索:“搜索引擎 技巧 site:tech.sina.com.cn”
结果:已在tech.sina.com.cn搜索有关搜索引擎 技巧 的中文(简体)网页。 共约有163项查询结果,这是第1-10项 。 搜索用时0.07秒。
注意:site后的冒号为英文字符,而且,冒号后不能有空格,否则,“site:”将被作为一个搜索的关键字。此外,网站域名不能有“http://”前缀,也不能有任何“/”的目录后缀;网站频道则只局限于“频道名.域名”方式,而不能是“域名/频道名”方式。
8.2,在某一类文件中查找信息
“filetype:”是Google开发的非常强大实用的一个搜索语法。也就是说,Google不仅能搜索一般的文字页面,还能对某些二进制文档
进行检索。目前,Google已经能检索微软的Office文档如.xls、.ppt、.doc,.rtf,WordPerfect文档,Lotus1-
2-3文档,Adobe的.pdf文档,ShockWave的.swf文档(Flash动画)等。其中最实用的文档搜索是PDF搜索。PDF是ADOBE
公司开发的电子文档格式,现在已经成为互联网的电子化出版标准。目前Google检索的PDF文档大约有2500万左右,大约占所有索引的二进制文档数量
的80%。PDF文档通常是一些图文并茂的综合性文档,提供的资讯一般比较集中全面。
示例:搜索几个资产负债表的Office文档。
搜索:“资产负债表 filetype:doc OR filetype:xls OR filetype:ppt”
结果:已搜索有关资产负债表 filetype:doc OR filetype:xls OR filetype:ppt的中文(简体)网页。 共约有481项查询结果,这是第1-10项 。 搜索用时0.04秒。
注意,下载的Office文件可能含有宏病毒,谨慎操作。
示例:搜索一些关于搜索引擎知识和技巧方面的PDF文档
搜索:?quot;search engine" tips OR tutorial filetype:pdf”
结果:已向英特网搜索"search engine" tips OR tutorial filetype:pdf. 共约有12,600项查询结果,这是第1-10项 。 搜索用时0.22秒。
我们来看其中的一个结果:
[PDF]Search Engines Tips
文档类型: PDF/Adobe Acrobat - HTML 版
... http://www.google.com/press/zeitgeist.html See what people are searching on at Google.com
* Search Engine Watch http://searchenginewatch.com/ Some free tips ...
www.allvertical.com/PromoKits/SearchEngineTips.pdf - 类似网页
可以看到,Google用[PDF]来标记这是一个PDF的文档检索,另外,它还给出了该PDF文档的HTML版本,该HTML版保留了文档的文字内容和结构,但没有图片。
8.3,搜索的关键字包含在URL链接中
“inurl”语法返回的网页链接中包含第一个关键字,后面的关键字则出现在链接中或者网页文档中。有很多网站把某一类具有相同属性的资源名称显示
在目录名称或者网页名称中,比如“MP3”、“GALLARY”等,于是,就可以用INURL语法找到这些相关资源链接,然后,用第二个关键词确定是否有
某项具体资料。INURL语法和基本搜索语法的最大区别在于,前者通常能提供非常精确的专题资料。 示例:查找MIDI曲“沧海一声笑”。
搜索:“inurl:midi “沧海一声笑””
结果:已搜索有关inurl:midi "沧海一声笑"的中文(简体)网页。 共约有27项查询结果,这是第1-10项 。 搜索用时0.34秒。
注意:“inurl:”后面不能有空格,Google也不对URL符号如“/”进行搜索。例如,Google会把“cgi-bin/phf”中的“/”当成空格处理。
“allinurl”语法返回的网页的链接中包含所有作用关键字。这个查询的关键字只集中于网页的链接字符串。
示例:查找可能具有PHF安全漏洞的公司网站。通常这些网站的CGI-BIN目录中含有PHF脚本程序(这个脚本是不安全的),表现在链接中就是“域名/cgi-bin/phf”。
搜索:“allinurl:"cgi-bin" phf +com”
结果:已向英特网搜索allinurl:"cgi-bin" phf +com. 共约有51项查询结果,这是第1-10项 。 搜索用时0.11秒。
8.4,搜索的关键字包含在网页标题中
“intitle”和“allintitle”的用法类似于上面的inurl和allinurl,只是后者对URL进行查询,而前者对网页的标题栏
进行查询。网页标题,就是HTML标记语言title中之间的部分。网页设计的一个原则就是要把主页的关键内容用简洁的语言表示在网页标题中。因此,只查
询标题栏,通常也可以找到高相关率的专题页面。 示例:查找日本明星藤原纪香的照片集。
搜索:“intitle:藤原纪香 "写真集"”
结果:已搜索有关intitle:藤原纪香 "写真集"的中文(简体)网页。 共约有315项查询结果,这是第1-10项 。 搜索用时0.15秒。
8.5,搜索的关键字包含在网页的“锚”(anchor)链点内
所谓“锚”,就是在同一个网页中快速切换链接点。与URL和TITLE类似,Google提供了两种对anchor的检索,“inanchor”和“allincnchor”。对此不作详述。
9,其他罕用语法
9.1,搜索所有链接到某个URL地址的网页
如果你拥有一个个人网站,估计很想知道有多少人对你的网站作了链接。而“link”语法就能让你迅速达到这个目的。
示例:搜索所有含指向华军软件园“www.newhua.com”链接的网页。
搜索:“link:www.newhua.com”
结果:搜索有链接到www.newhua.com的网页 。 共约有920项查询结果,这是第1-10项 。 搜索用时0.12秒。
注意:“link”不能与其他语法相混合操作,所以“link:”后面即使有空格,也将被Google忽略。另外还要说明的是,link只列出Google索引链接很小一部分,而非全部,所以如果你用Google没有搜到链到你的主页的链接,也不必灰心丧气。
除了上述功能,link语法还有其它妙用。一般说来,做友情链接的网站都有相似地方。这样,你可以通过这些友情链接,找到一大批具有相似内容的网
站。比如说,你是个天文爱好者,你发现某网站非常不错,那么,可以用link语法查一下与之做链接的网站,也许可以找到更多符合你兴趣的内容。
9.2,查找与某个页面结构内容相似的页面
“related”用来搜索结构内容方面相似的网页。例:搜索所有与中文新浪网主页相似的页面(如网易首页,搜狐首页,中华网首页等),
“related:wwwsina.com.cn/index.shtml”。我到现在也不明白这个语法有什么作用,如果有谁知道,请不吝指教。预先感
谢。:)
9.3,从Google服务器上缓存页面中查询信息
“cache”用来搜索Google服务器上某页面的缓存,通常用于查找某些已经被删除的死链接网页,相当于使用普通搜索结果页面中的“网页快照”功能。
其它罕用语法如info、stock等不一一介绍,有兴趣的读者可以参阅Google大全。
10,图片搜索
Google自称可以检索390,000,000张图片,并称自己为“互联网上最好用的图像搜索工具”。从使用结果来看,Google的图片搜索的
确不错,但个人以为比AltaVista的还是要差一些,主要体现在检索图片数量比不上AV,匹配度比AV的图片搜索器也差了些。但AltaVista国
内用户无法正常访问,因此对中国用户而言,Google的图片搜索引擎已经是最好的了。
Google首页点击“图像”链接就进入了Google的图像搜索界面“images.Google.com”。
你可以在关键字栏位内输入描述图像内容的关键字,如“britney
spears”,就会搜索到大量的小甜甜布兰妮的图片。我目前尚不是很清楚图片的排列标准,不过以观察来看,似乎图片文件名完全符合关键字的结果排列比较
考前,然后才按照普通的页面搜索时的标准排列。
Google给出的搜索结果具有一个直观的缩略图(THUMBNAIL),以及对该缩略图的简单描述,如图像文件名称,以及大小等。点击缩略图,页
面分成两祯,上祯是图像之缩略图,以及页面链接,而下祯,则是该图像所处的页面。屏幕右上角有一个“Remove
Frame”的按钮,可以把框架页面迅速切换到单祯的结果页面,非常方便。
Google图像搜索目前支持的语法包括基本的搜索语法如“ ”、“-”、“OR”、“site”和 “filetype:”。其中“filetype:”的后缀只能是几种限定的图片类似,如JPG,GIF等。
示例:查找新浪网上本拉登的图片
搜索:“拉登 OR 拉丹 site:sina.com.cn”
结果:搜索有关 拉登 OR 拉丹 site:sina.com.cn 的图片。 共有6项查询结果,这是第1-6项。 搜索用时0.36秒。
这里我想说明一点的是,images.google.com作为专门的图片搜索引擎,实际上有其特殊的用途。
举个例子,互联网上本拉登的照片成千上万,但是,它们都是分散的,往往随机的分布于各种新闻报道中。如果用搜索图片库的方式(最容易想到的如
“Ben Ladin
photo”),来搜索本拉登的照片,显然是不恰当的,因为很少有人专门为拉登建一个在线相册。在这个时候,images.google.com就派上用
场了。
但是,如果查找的图片在网上有很多主题“gallary”,如诸多电影电视明星的照片,则明显就不适合用images.google.com来查找了。
images.google.com对于很多报纸杂志的编辑,绝对是一个雪中送炭式的工具。比如要在某个版面上插一张专题图片,用google的图片搜索功能几秒钟就可以搞定。
综上,可以有这样的一般性结论:如果要搜索的图片是分散的,则用google图片搜索;如果要搜索的图片通常是处于某个图片集合中的,则不适合用google图片搜索。
11,目录检索
如果不想搜索广泛的网页,而是想寻找某些专题网站,可以访问Google的分类目录“http://directory.Google.com/”,中文目录是“http://directory.Google.com/Top/World/Chinese_Simplified/”。
分类的网站目录一般由专人负责,分类明确,信息集中。因此读者应该养成这样的习惯:首先考虑所需要的信息能否在一个专门主题的网站上找到。不过需要说明的
是,用目录检索,往往需要用户对查询的领域很熟悉。否则,连查询的内容属于哪个类目都不知道,目录浏览也就无从谈及了。
目前Google使用的分类目录采用了ODP的内容。“Open Directory
Project”是网景公司所主持的一项大型公共网页目录。由全世界各地的义务编辑人员来审核挑选网页,并依照网页的性质及内容来分门别类。因此,在某一
目录门类中进行搜索往往能有更高的命中率。另外,Google根据其专业的“网页级别”(PageRank)技术对目录中登录的网站进行了排序,可以让一
般的检索更具高效率。
示例:查找一下介绍搜索引擎方面的中文网站
搜索:先进入中文简体分类目录,再进入“计算机”目录,再进入“互联网络”子目录,再进入“搜
寻”子目录。我们看到在“World > Chinese Simplified > 计算机 > 互联网络 >
搜寻”下,还有两个子目录“分类目录 (33) 搜索引擎 (10)”,以及6个相关网站。显然,这些都是我们所需要的信息。
除了用鼠标层层点入,也可以在目录中检索。比如,在上例的“互联网络”目录下,选中“只在互联网络中搜索”选项,在搜索栏内填入“搜索引擎”进行搜索。
结果:在分类Google 网页目录项中搜索搜索引擎。 共约有387项查询结果,这是第11-20项 。 搜索用时0.09秒。
可以看到,上述查询结果比普通的检索更有效,因为在分类“互联网络”下进行搜索剔除了很多不相关的诸如新闻之类的无效信息。不过,对于中文用户而
言,现在最大的问题是志愿的中文目录编辑太少,导致收录站点太少,因此搜索结果范围显得过于狭隘。但愿这个问题能随着Google以及ODP项目在国内名
声的响亮而能得到改观。
12,新闻组搜索
新闻组有详尽的分类主题,某些主题还有专人管理和编辑,具有大量的有价值信息。由于新闻组包含的信息实在是海量,因此不利用工具进行检索是不大可能
的。DEJA一直是新闻组搜索引擎中的佼佼者。2001年2月份,Google将DEJA收购并提供了所有DEJA的功能。现在,除了搜索之外,
Google还支持新闻组的WEB方式浏览和张贴功能。
进入Google新闻组“http://groups.Google.com/”,你有两种信息查找方式。一种是一层层的点击进入特定主题讨论组,另一种则是直接搜索。现在,我们进行一个最简单的搜索试验,查找一下新闻组中关于山顶洞人的讨论信息。
搜索:“山顶洞人”
结果:在各群组内搜索 山顶洞人 共约有2,400项查询结果,这是第1-10项 。 搜索用时0.94秒。 搜索结果默认按照“留言内容”排列,但是你也可以点击“依照日期”按钮,让帖子按照发布日期排列。
因为新闻组中的帖子实在是多,而且又涉及一些普通搜索所没有的语法,所以建议使用“高级群组搜寻”进入高级搜索界面。新闻组高级搜索提供留言内容、分类主题、标题、留言者、留言代码、语言和发布日期作为条件进行搜索。其中作者项指作者发帖所用的唯一识别号电子信箱。
13,Google的其他杰出功能
13.1网页快照
网页快照是Google抓下来缓存在服务器上的网页。它有三个作用:
第一, 如果原地址打开很慢,那么可以直接查看Google缓存页面,因为Google服务器速度极快。
第二, 如果原链接已经死掉或者因为网络的原因暂时链接不通,那么可以通过Google快照看到该页面信息。当然,快照内容不是该页最新页面。
第三, 如果打开的页面信息量巨大,一下子找不到关键词所在位置,那么可以通过Google快照,因为快照中Google用黄色表明关键字位置。
13.2,集成化的工具条
为了方便搜索者,Google提供了工具条,集成于浏览器中,用户无需打开Google主页就可以在工具条内输入关键字进行搜索。此外,工具条还提
供了其他许多功能,如显示页面PageRank等。最方便的一点在于用户可以快捷的在Google主页、目录服务、新闻组搜索、高级搜索和搜索设定之间切
换。欲安装Google的工具条,可以访问“http://toolbar.Google.com/”,按页面提示可以自动下载并安装。不过,Google工具条目前只支持IE5.0以上版本。
对于经常进行网络搜索者而言,Google工具条实在是必备的东西!!
13.3,单词英文解释
写英文文章的时候,最头疼的事情就是对某个英文单词的用法不确定。现在有了Google,一切就迎刃而解了!无论你是想查找某个生词的意思还是想了解某个单词的用法,均可使用在线词典。
进入英文Google,输入你要查的单词。举个例子,我想查一下suggest的用法。结果如下:“Searched the web for
suggest. Results 1 - 10 of about 8,000,000. Search took 0.08 seconds.
”注意看上面句子中,单词suggest下出现了一个横线,点击这个链接,就跳转到另外一个网站“http://www.dictionary.com/”,Google已经把单词提交给该网站的查询脚本。看看这个网站所提供的详尽解释吧。:)
13.4,网页翻译
你懂英文,但是你不见得就懂德文、法文、拉丁文。如果搜索出来的页面是这些语言怎么办?呵呵,Google提供了网页翻译功能!!虽然目前只支持有限的拉丁语、法语、西班牙语、德语和葡萄牙文,但是我不得不承认,这是个杰出功能。
试着做以下搜索:“big bang site:fr”。这个表示查找关于宇宙大爆炸的法文网页。看第一条结果:
The Big Bang Website - [ Translate this page ]
... A propos de Big Bang. Le dernier numéro en date. Les anciens numéros. Autres
activités. Concerts progressifs en France. Emissions de radio. Liens.
perso.club-internet.fr/calyx/bigbang/ - 3k - Cached - Similar pages
有点晕。没关系,点击“Translate this page”按钮。再看结果,嗯,大致能看明白,这原来是个叫“big bang”的乐队的网站,与大爆炸无关...
机器翻译是一个很前沿的人工智能课题,想指望翻译出来的结果跟专门用英语撰写的内容是不可能的。但西文间的互相转译比中英文机译强得多得多了。至少能看明白。
13.5,单词纠错
笔者记忆力很差,英文单词经常拼写错误。但Google有纠错功能。比如在写上文的时候,我要用到英文单词“tutorial”,我只是依稀记得好
像是“tatorial”的样子,但不肯定,于是用Google查了一下,它马上提醒:“您要找的会不会是: tutorial
”,呵呵,正是这个单词。
13.6,繁简转换
对中文用户而言,常希望能同时检索繁体和简体信息。Google能做到这一点。Google默认使用繁简自动转换功能,因此你输入的简体关键字也将被转换成繁体做检索。这样省了不少力气。当然,如果你不希望这样的话,也可以在“使用偏好”中把这个选项关掉。
13.7,搜索结果过滤
网络上的成人内容浩如烟海,而且很多站点具有欺骗或者其他不良企图,浏览者很容易掉入其中的陷阱。为此,Google新设立了成人内容过滤功能,见Google的设置页面,http://www.Google.com/preferences,最底下有一个选项SafeSearch Filtering。不过,中文状态下的Google尚没有这个功能。
14,Google尚未发布的一些新特性和功能
14.1,对网页更新日期做出限定“daterange:”
评价一个搜索引擎的好坏,更新频率是一个很关键因素。通常情况下,我们总希望能找到最新的网页。Google已经开发了对更新日期做限定的搜索语
法,但目前还未公布。而且比较麻烦的是,Google现在支持的日期格式为julian(凯撒日)格式,把通用日期数值切换成julian格式需要借助第
三方网站:http://www.tesre.bo.cnr.it/~mauro/JD/。不过,在下面这个自称是“Google终极搜索界面”的网页上,你已经可以利用Google的这项新特性了,它自动提供日期转换功能。
Google Ultimate Interface:http://www.faganfinder.com/google.html
Google为什么要这样做呢?也许是在测试阶段,不想让太多人使用吧。:)
14.2,新闻搜索“http://news.google.com/”
Google的新闻搜索尚在B测试阶段,但使用起来已经非常不错了。新闻首页按头条新闻,各国新闻,以及不同领域做了分类。你可以通过Google搜索各大门户和新闻网站的新闻,简单、快捷、方便。遗憾的是,目前Google新闻只检索英文信息。
14.3,分类广告搜索“http://catalogs.google.com/”
这也在B测试阶段。主要是对电子分类广告做检索。广告页为JPG图片格式。
14.4,其它Google的最新发展动态
想了解Google公司的工程师们都在忙些什么吗?去看一下Google实验室(http://labs.google.com/)吧。Google的最新设想都在这个地方向访问者展现出来。现在处于发展和试验阶段的新功能有:术语查询、语音查询、键盘查询等等。
网络工程师和程序员可以看看这个地方:http://www.google.com/apis/,我想可以让你喜出望外的。
14.5,一个有趣的地方
想看看世界各国网民都用Google搜索什么信息么?到http://www.google.com/press/zeitgeist.html看一下就知道了。从这些资讯中,你大致可以了解到世界热点和流行时尚走向。:)
15,后记
这个文章4.0版本与3.0版本相比,变更很大,主要把一些与Google无关的东西删除了,另外随Google的变化作了一些修正,并增加了一些
Google尚未发布的新功能。关于搜索技巧和搜索实例,是各个搜索引擎共通的东西,是搜索者长期的经验积累,要写出来,是件工程很浩大的事情,因此在这
个小文章中我就不献丑了。
随着时间的推移,我发现搜索已经成为网络生活的一部分。工作需要搜索技术文档、客户信息;购物需要搜索商品信息和指南;娱乐需要搜索相关背景资料和
图片。搜索已经变得无处不在,而Google则相应的成了工作和生活中的一个必备工具。套用雅虎的一句广告词,我们也许应该这样说:“今天你Google
了吗?”
posted @
2006-04-14 12:38 Martin 阅读(236) |
评论 (0) |
编辑 收藏
美国各种学位中英文大扫盲 |
|
|
美国学校提供的学位有很多种,依所学领域的不同,而有不同的学位。以下列出的是美国高等教育中较常见的学位:
Ph.D.(Doctor of Philosophy): 博士学位。而有些领域的博士课程会有不同的学位名称,如D.A.(Doctor of Arts)、Ed.D.(Doctor of Education M.B.A.(Master of Business Administration): 商学管理硕士。 M.A.(Master of Arts)硕士;B.A.(Bachelor of Arts)学士: 两者皆属于人文、艺术或社会科学的领域,如文学、教育、艺术、音乐。 M.S.(Master of Science)硕士;B.S.(Bachelor of Science)学士: 两者皆属于理工、科学的领域,如数学、物理、信息等。 Associate Degree(副学士学位): 读完两年制小区大学或职业技术学校所得到的学位。 Dual Degree(双学位): 是由两个不同学院分别授与,因此得到的是两个学位。 Joint Degree:为两个不同学院联合给予一个学位,如法律经济硕士。 major 主修 minor 辅修
-------------------------------------------------------------- 以下为各种学位的中英文对照. 如有不全或错误, 欢迎跟帖补充或更正:
http://bbs.gter.net/bbs/viewthread.php?tid=384511
学士
Bachelor of Arts B.A. 文学士 Bachelor of Arts in Education B.A.Ed., B.A.E. 教育学文学士 Bachelor of Arts in Computer Science B.A.CS 计算机文学士 Bachelor of Arts in Music B.A.Mus,B.Mus 音乐艺术学士 Bachelor of Arts in Social Work B.A.S.W 社会工作学文学士 Bachelor of Engineering B.Eng., B.E 工学士 Bachelor of Engineering in Social Science B.Eng.Soc 社会工程学士 Bachelor of Engineering in Management B.Eng.Mgt 管理工程学士 Bachelor of Environmental Science/Studies B.E.Sc., B.E.S 环境科学学士 Bachelor of Science B.S 理学士 Bachelor of Science in Business B.S.B., B.S.Bus 商学理学士 Bachelor of Science in Business Administration B.S.B.A 工商管理学理学士 Bachelor of Science in Education B.S.Ed., B.S.E 教育学理学士 Bachelor of Science in Engineering B.S.Eng., B.S.E 工程学理学士 Bachelor of Science in Forestry B.S.cF 森林理学士 Bachelor of Science in Medicine B.S.Med 医学理学士 Bachelor of Science in Medical Technology B.S.M.T., B.S.Med.Tech 医技学理学士 Bachelor of Science in Nursing B.S.N., B.S.Nurs 护理学理学士 Bachelor of Science in Nutrition B.SN 营养学理学士 Bachelor of Science in Social Work B.S.S.W 社会工作学理学士 Bachelor of Science in Technology B.S.T 科技学理学士 Bachelor of Computer Science B.CS 计算机理学士 Bachelor of Computer Special Science B.CSS 计算机特殊理学士 Bachelor of Architecture B. Arch. 建筑学士 Bachelor of Administration B.Admin. 管理学士 Bachelor of Business Administration B.B.A. 工商管理学士 Bachelor of Education B.Ed., B.E 教育学士 Bachelor of Fine Arts B.F.A. 艺术学士 Bachelor of General Studies B.G.S 通识学士 Bachelor of Liberal Studies B.L.S 文理学学士 Bachelor of Health Science BHSc 健康科学学士 Bachelor of Music B.M., B.Mus 音乐学士 Bachelor of Music Education B.M.Ed., B.M.E 音乐教育学士 Bachelor of Nursing B.N 护理学士 Bachelor of Professional Studies B.P.S 专业进修学士 Bachelor of Law LL.B 法学士 Bachelor of Commerce B.Com., B.Com. 商学士 Bachelor in Social Work B.S.W 社会工作学士 Bachelor of Technology B.T 科技学士 Bachelor of Kinesiology B.K., B.Kin 运动机能学学士 Bachelor of Landscape Architecture B.LA 景观建筑学士 Bachelor of Nursing B.N 护理学士 Bachelor of Physical B.PE 体育学士 Bachelor of Resource Management B.RM 资源管理学士 Bachelor of Theology B.Th 神学士
硕士
Master of Arts M.A 文学硕士 Master of Accounting M.Acc 会计学硕士 Master of Arts in Education M.A.Ed 教育学文学硕士 Master of Architecture M.Arch 建筑学硕士 Master of Arts in Teaching M.A.T 教育文学硕士 Master of Business Administration M.B.A 工商管理学硕士 Master of Civil Engineering M.C.E 土木工程学硕士 Master of Chemical Engineering M.Ch.E., M.C.E 化学工程学硕士 Master of Criminal Justice M.C.J 刑事学硕士 Master of Divinity M.Div 神学学硕士 Master of Engineering M.E 工程学硕士 Master of Education M.Ed 教育学硕士 Master of Economics M.Ec 经济学硕士 Master of Electrical Engineering M.E.E 电机工程学硕士 Master of Fine Arts M.F.A 艺术硕士 Master of Law M.L 法学硕士 Master of Library Science M.L.S 图书馆学硕士 Master of Music M.M., M.Mus 音乐硕士 Master of Music Education M.M.E., M.M.Ed 音乐教育学硕士 Master of Nursing M.N 护理学硕士 Master of Public Administration M.P.A 公共行政学硕士 Master of Psychology M.Psy 心理学硕士 Master of Science M.S 理学硕士 Master of Science in Criminal Justice M.S.C.J 刑事理学硕士 Master of Science in Education M.S.E., M.S.Ed 教育理学硕士 Master of Science in Electrical Engineering M.S.E.E 电机工程理学硕士 Master of Science in Library Science M.S.L.S 图书馆理学硕士 Master of Science in Medical Technology M.S.M.T 医技理学硕士 Master of Science in Nursing M.S.N 护理理学硕士 Master of Science in Social Work M.S.S.W 社会工作理学硕士 Master of Social Work M.S.W 社会工作学硕士
博士
Doctor of Arts D.A 文学博士 Doctor of Dental Science D.D.S 牙科博士 Doctor of Engineering D.E 工程博士 Doctor of Education D.Ed 教育学博士 Doctor of Musical Arts D.M.A 音乐艺术博士 Doctor of Osteopathy D.O 骨科博士 Doctor of Social Science D.S.S 社会科学博士 Doctor of Veterinary Medicine D.V.M 兽医学博士 Doctor of Jurisprudence J.D 法理学博士 Doctor of Judicial Science J.S.D 司法学博士 Doctor of Business Administration D.B.A 工商管理博士 Doctor of Accountancy D.Acc 会计学博士
|
posted @
2006-04-14 11:43 Martin 阅读(214) |
评论 (0) |
编辑 收藏
From: http://www.cnitblog.com/gavntery/archive/2005/12/18/5541.html
我在Java论坛看到这篇文章,作者以轻松的语言比喻了java的32种模式,有很好的启发作用,但可惜没有给出具体的意思,我就在后边加上了。这些都是最简单的介绍,要学习的话建议你看一下阎宏博士的《Java与模式》一书。
创建型模式
1、FACTORY―追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的Factory
工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。
2、BUILDER―MM最爱听的就是“我爱你”这句话了,见到不同地方的MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种
语言都有一个按键,见到MM我只要按对应的键,它就能够用相应的语言说出“我爱你”这句话了,国外的MM也可以轻松搞掂,这就是我的“我爱你”
builder。(这一定比美军在伊拉克用的翻译机好卖)
建造模式:将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节。建造模式可以强制实行一种分步骤进行的建造过程。
3、FACTORY METHOD―请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
4、PROTOTYPE―跟MM用QQ聊天,一定要说些深情的话语了,我搜集了好多肉麻的情话,需要时只要copy出来放到QQ里面就行了,这就是我的情话prototype了。(100块钱一份,你要不要)
原始模型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。原始模型模式允许动态的增加或
减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。
5、SINGLETON―俺有6个漂亮的老婆,她们的老公都是我,我就是我们家里的老公Sigleton,她们只要说道“老公”,都是指的同一个人,那就是我(刚才做了个梦啦,哪有这么好的事)
单例模式:单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。
结构型模式
6、ADAPTER―在朋友聚会上碰到了一个美女Sarah,从香港来的,可我不会说粤语,她不会说普通话,只好求助于我的朋友kent了,他作为我和Sarah之间的Adapter,让我和Sarah可以相互交谈了(也不知道他会不会耍我)
适配器(变压器)模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口原因不匹配而无法一起工作的两个类能够一起工作。适配类可以根据参数返还一个合适的实例给客户端。
7、BRIDGE―早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM新做了个发型怎么说”这种问题,自己用BRIDGE组合一下不就行了
桥梁模式:将抽象化与实现化脱耦,使得二者可以独立的变化,也就是说将他们之间的强关联变成弱关联,也就是指在一个软件系统的抽象化和实现化之间使用组合/聚合关系而不是继承关系,从而使两者可以独立的变化。
8、COMPOSITE―Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好
看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。”
“……”,MM都会用Composite模式了,你会了没有?
合成模式:合成模式将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待。
9、DECORATOR―Mary过完轮到Sarly过生日,还是不要叫她自己挑了,不然这个月伙食费肯定玩完,拿出我去年在华山顶上照的照片,在背面
写上“最好的的礼物,就是爱你的Fita”,再到街上礼品店买了个像框(卖礼品的MM也很漂亮哦),再找隔壁搞美术设计的Mike设计了一个漂亮的盒子装
起来……,我们都是Decorator,最终都在修饰我这个人呀,怎么样,看懂了吗?
装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性。动态给一个对象增加功能,这些功能可以再动态的撤消。增加由一些基本功能的排列组合而产生的非常大量的功能。
10、FACADE―我有一个专业的Nikon相机,我就喜欢自己手动调光圈、快门,这样照出来的照片才专业,但MM可不懂这些,教了半天也不会。幸好
相机有Facade设计模式,把相机调整到自动档,只要对准目标按快门就行了,一切由相机自动调整,这样MM也可以用这个相机给我拍张照片了。
门面模式:外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,也就是说它是一个单例模式。但整个系统可以有多个门面类。
11、FLYWEIGHT―每天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上
MM的名字就可以发送了,再不用一个字一个字敲了。共享的句子就是Flyweight,MM的名字就是提取出来的外部特征,根据上下文情况使用。
享元模式:FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外
蕴状态。内蕴状态存储在享元内部,不会随环境的改变而有所不同。外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。将可以共
享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建
被共享的对象。享元模式大幅度的降低内存中对象的数量。
12、PROXY―跟MM在网上聊天,一开头总是“hi,你好”,“你从哪儿来呀?”“你多大了?”“身高多少呀?”这些话,真烦人,写个程序做为我的Proxy吧,凡是接收到这些话都设置好了自动的回答,接收到其他的话时再通知我回答,怎么样,酷吧。
代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用。代理就是一个人或一个机构代表另一个人或者一个机构采取行动。某些
情况下,客户不想或者不能够直接引用一个对象,代理对象可以在客户和目标对象直接起到中介的作用。客户端分辨不出代理主题对象与真实主题对象。代理模式可
以并不知道真正的被代理对象,而仅仅持有一个被代理对象的接口,这时候代理对象不能够创建被代理对象,被代理对象必须有系统的其他角色代为创建并传入。
行为模式
13、CHAIN OF
RESPONSIBLEITY―晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友
吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!
责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接
起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的
情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
14、COMMAND―俺有一个MM家里管得特别严,没法见面,只好借助于她弟弟在我们俩之间传送信息,她对我有什么指示,就写一张纸条让她弟弟带给
我。这不,她弟弟又传送过来一个COMMAND,为了感谢他,我请他吃了碗杂酱面,哪知道他说:“我同时给我姐姐三个男朋友送COMMAND,就数你最小
气,才请我吃面。”,
命令模式:命令模式把一个请求或者操作封装到一个对象中。命令模式把发出命令的责任和执行命令的责任分割
开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操
作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。
15、INTERPRETER―俺有一个《泡MM真经》,上面有各种泡MM的攻略,比如说去吃西餐的步骤、去看电影的方法等等,跟MM约会时,只要做一个Interpreter,照着上面的脚本执行就可以了。
解释器模式:给定一个语言后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。解释器
模式将描述怎样在有了一个简单的文法后,使用模式设计解释这些语句。在解释器模式里面提到的语言是指任何解释器对象能够解释的任何组合。在解释器模式中需
要定义一个代表文法的命令类的等级结构,也就是一系列的组合规则。每一个命令对象都有一个解释方法,代表对命令对象的解释。命令对象的等级结构中的对象的
任何排列组合都是一个语言。
16、ITERATOR―我爱上了Mary,不顾一切的向她求婚。
Mary:“想要我跟你结婚,得答应我的条件”
我:“什么条件我都答应,你说吧”
Mary:“我看上了那个一克拉的钻石”
我:“我买,我买,还有吗?”
Mary:“我看上了湖边的那栋别墅”
我:“我买,我买,还有吗?”
Mary:“我看上那辆法拉利跑车”
我脑袋嗡的一声,坐在椅子上,一咬牙:“我买,我买,还有吗?”
……
迭代子模式:迭代子模式可以顺序访问一个聚集中的元素而不必暴露聚集的内部表象。多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的
容器对象。迭代子模式将迭代逻辑封装到一个独立的子对象中,从而与聚集本身隔开。迭代子模式简化了聚集的界面。每一个聚集对象都可以有一个或一个以上的迭
代子对象,每一个迭代子的迭代状态可以是彼此独立的。迭代算法可以独立于聚集角色变化。
17、MEDIATOR―四个MM打麻将,相互之间谁应该给谁多少钱算不清楚了,幸亏当时我在旁边,按照各自的筹码数算钱,赚了钱的从我这里拿,赔了钱的也付给我,一切就OK啦,俺得到了四个MM的电话。
调停者模式:调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不
会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和
协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。
18、MEMENTO―同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存,这样可以随时察看以前的记录啦。
备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。
19、OBSERVER―想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦
观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
20、STATE―跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事
情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,当然你
看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。
状态模式:状态模式允许一个对象在其内部状态改变的时
候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子
类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态
变化时,系统便改变所选的子类。
21、STRATEGY―跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,单目的都是为了得到MM的芳心,我的追MM锦囊中有好多Strategy哦。
策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情
况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会
影响到环境和客户端。
22、TEMPLATE
METHOD――看过《如何说服女生上床》这部经典文章吗?女生从认识到上床的不变的步骤分为巧遇、打破僵局、展开追求、接吻、前戏、动手、爱抚、进去八
大步骤(Template method),但每个步骤针对不同的情况,都有不一样的做法,这就要看你随机应变啦(具体实现);
模板方法模式:模板方法模式准备一个抽象类,将部分逻辑以具体方法以及具体构造子的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类
可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。先制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。
23、VISITOR―情人节到了,要给每个MM送一束鲜花和一张卡片,可是每个MM送的花都要针对她个人的特点,每张卡片也要根据个人的特点来挑,我
一个人哪搞得清楚,还是找花店老板和礼品店老板做一下Visitor,让花店老板根据MM的特点选一束花,让礼品店老板也根据每个人特点选一张卡,这样就
轻松多了;
访问者模式:访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作
的数据结构可以保持不变。访问者模式适用于数据结构相对未定的系统,它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由的演
化。访问者模式使得增加新的操作变的很容易,就是增加一个新的访问者类。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。
当使用访问者模式时,要将尽可能多的对象浏览逻辑放在访问者类中,而不是放到它的子类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成
员类。
posted @
2006-04-14 11:41 Martin 阅读(152) |
评论 (0) |
编辑 收藏