关于作者

用户名:MageWang
笔名:MageWang
地区:

日历  

快速登录

+ 用户名:
+ 密 码:

我的博采 我的论坛 我的RSS
图片博客 博客论坛 梦之城

文章索引

在线留言


最新评论

网络链接

公司信息

访问统计:
文章个数:14
评论个数:0
留言条数:1



Powered by BlogDriver 2.1

劢杰的博客

 

欢迎访问劢杰的博客

文章

面试常遇到的84个问题及如何回答
一个很好的贴子,但是找不到合适的版面,就发在这里了。

企业为什么要面试?这是企业了解应征者对工作态度以及身在社会中一些必备常识的最好方法,如果一问三不知,是没资格当社会中坚份子的,假若想要有立即回答的本事,那么平常就应多注意媒体报导,特别是关于希望进入业界的消息!在笔试、面试和实地考察等招聘方式中,面试是反映应聘者能力的一种重要手段。下面是一些经典的常见面试问题,虽然每家公司的问法都是千变万化的,但万变不离其宗,所谓"运用之妙,存乎一心",掌握了常规的方法技巧,面试当然会马到成功的。

1、 我们为什么要雇请你呢?

  有的面试只有这么一个问题。话虽简单,可是难度颇高。主要是测试你的沉静与自信。给一个简短、有礼貌的回答:"我能做好我要做得事情,我相信自己,我想得到这份工作"。根据自己的实际情况,好好想想把,看怎么说才具有最高说服力。 

  2、 你认为自己最大的弱点是什么?

  绝对不要自作聪明的回答"我最大的缺点是过于追求完美",有的人以为这样回答会显得自己比较出色,但事实上,他已经岌岌可危了。 

  3、你最喜欢的大学课程是什么?为什么?

  说和你要应聘的职位相关的课程吧,表现一下自己的热诚没有什么坏处。  

  4、你最不喜欢的大学课程是什么?为什么?

  我不得不说是我们大学的主修课程,虽然我知道他们只是例行一下公事,但课堂上死气沉沉,老师和学生都只不过想熬完这个学期"。  

  5、你在大学期间最喜欢的老师是谁?

  有人曾答得很好:"教我们广告营销的教授,他能使课堂充满生气。通过实例让学生把知识和现实紧密结合,而不是死读课本,我想我从他身上得到的最多"。  

  6、你能为我们公司带来什么呢?

  假如你可以的话,试着告诉他们你可以减低他们的费用:"我已经接受过Microsoft Access和Word的培训,立刻就可以上岗工作"。(Access培训要花$540,Word要花$445,可为公司省下$1000的培训费用。)  

  7、最能概括你自己的三个词是什么?

  可以根据情况这样说:适应能力强、有责任心、做事有始有终,结合具体例子向主考官解释,使他们觉得你具有发展潜力。 

  8、你为什么来应聘这份工作?(或为什么你想到这里来工作?)

  "我来应聘是因为我相信自己能为公司做出贡献,我在这个领域的经验很少人比得上,而且我的适应能力使我确信我能把职责带上一个新的台阶"应证者为了表明应征原因及工作意愿,回答时答案最好是能与应征公司的产品及企业相关的,最好不要回答:因为将来有发展性、因为安定等答案,要表现出有充分研究过企业的样子。  

  9、你对加班有什么看法?

  这是针对"工作热忱"而问的,当然无理的加班不一定就是好的,最好回答"在自己责任范围内,不能算是加班"较有利。总之,尽量诚实回答,如果你说了"是"而实际上却不想,那么你会被人一直盯住。  

  10、你对我公司有什么认识?因为还没进公司上班,所以主考官也不会太过于刁难,只要说出在其他公司所没有的感受就可以了,或者说出面试当天的印象也可以。如果你事先做过一些调查,那么你可以说几件你知道的事,比如说"销售额是多少多少"之类。

11、你是怎么知道我们招聘这个职位的呢?

  如果你是从公司内部某人处打听来的消息,记得提及他的名字,公司不说偏袒内部关系不代表它不存在。  

  12、除了工资,还有什么福利最吸引你?

  尽可能诚实,如果你做足了功课,你就知道他们会提供什么,回答尽可能和他们提供的相配。如果你觉得自己该得到更多,也可以多要一点。 

  13、你参加过什么业余活动?

  既然最好是让人觉得你处事不乏手腕,那么最好强调一下那些需要群体合作和领导才能的活动。 

  14 、你参加过义务活动吗?现在就着手作一些义务活动,不仅仅是那些对社会有贡献的,还要是你的雇主会在意的,如果他们还没有一个这样的员工,那么你会成为很好的公关资源。  

  15、你心目中的英雄是谁?

  最好的答案是你的朋友或家人,尽量避免说及名人或明星。  

  16、你有什么问题吗?

  一定要提问。你必须回答"当然"。你要通过你的发问,了解更多关于这家公司、这次面试、这份工作的信息。假如你笑笑说"没有"(心里想着终于结束了,长长吐了口气)那才是犯了一个大错误。这往往被理解为你对该公司、对这份工作没有太深厚的兴趣;其次,从最实际的考虑出发,你难道不想听话听音敲打一下考官,推断一下自己入围有几成希望?  

  17、你过去的上级是个什么样的人?

  别贬低过去的上司,提一下他的长处和不足。  

  18、你为什么还没找到合适的职位呢?

  别怕告诉他们你可能会有的聘请,千万不要说"我上一次面试弄得一塌糊涂……"。指出这是你第一次面试。 

  19、你最近看过的电影,或者小说是什么?

  找一些老少咸宜,真情感人的电影。  

  20、你的业余爱好是什么?

  找一些富于团体合作精神的。 

21、你怎么看待要向比你年轻的人或女性的汇报呢?

  "我从不根据年龄性别划分别人,只要他们是凭借自己能力到达该职务的,那绝对没有问题。  

  22、你现在能把过去做过的工作做得更好吗?

  "事后诸葛亮地说……"记得回答前先说这句话。    

  23、我可以跟你的前任上司联系求证一下吗?

  随便你怎么回答,但如果可以的话,最好答应。特别是你有前上司的证明信,没有比"当然,我有他的推荐信,你可以打电话给……"更好的回答了。  

  24、有过创业吗?

  这个问题可以显示你的冲劲。但如果你的回答是"有"的话,千万小心,下一个问题可能就是"那么为什么你不这样做呢?" 

  25、把这张桌子或我手中的钢笔推销给我?

  如果应聘销售或者市场之类的职务会碰到这类问题。  

  26、作为被面试者给我打一下分?

  试着列出四个优点和一个非常非常小的缺点。 

  27、告诉我三件关于本公司的事情。

  这是公司想测试应征者对公司的兴趣及进公司的意愿有多少的问题,如果回答"完全不了解",那就没有必要再说下去了,最好要稍稍记住公司简介内容及征聘人事的广告内容,最好的回答就是"因为对该公司的××点相当有兴趣所以再来应征"。

  你应该知道十件和公司有关的事情,他问你三件你回答四件,他问你四件你回答五件。 

  28、为何想辞去先前的工作?

  这是公司为了确认应征者不会再以相同原因辞职,所以最好说出对方能信服的理由,就算答案是"工作无聊"、"人际关系不好"等原因,也要准备"会尽量改变并克服自己缺点"的答案作为缓冲。此时如果一味批评以前的工作,便很难被录用。而应说是为了"实现自我"之类的话语。此外,无工作经验者则可对应征公司的性质表现出兴趣作答。不论你欲应聘什么样的职位,都要事先准备好对此问题的回答。在面试中回答次题时,应从面试考官的角度出发,比如说"我离开原单位是为了寻找更好的机会"听起来还是以自我为中心,而"我正在寻找一个更能让我充分发挥技术和经验的空间"则要好得多。要力求使答案简单精炼,如面试官还有什么疑问,将发挥自身的知识与技能作为回答的基础。  

  29、在以前的公司都从事什么样的工作?

  回答得要领有三点:担任的工作内容、职务、成绩三项,这个问题可以让公司知道面试者是否符合所要招募的职位、以前在公司的职务是否重要,来判断应征者的发展性。请具体说明对工作的理解程度及熟悉度。  

  30、请告知工作上成功与失败的地方?

  成功的地方可举出目前为止的实绩,来强调对经历的自信,也可以叙述工作所带来的乐趣;至于失败经验与其说"没有",不如将如何克服失败的经验说出来,并说出由失败中所得到的教训。
31、选择这份工作的动机?或者这个职位最吸引你的是什么?

  这是一个表现你对这个公司、这份工作看法的机会。回答应使考官确认你具备他要求的素质。同时招聘者可知道面试者对这份工作的热忱及理解度,并筛选因一时兴起而来应征的人,如果是无经验者,可以强调"就算职种不同,也希望有机会发挥之前的经验"。求职者可从对工作的研究与个人兴趣的角度,加以发挥。  

  32、你认为这份工作最重要的是什么?

  叙述工作特性的同时,也要加上自己的看法,如果是有经验的人,最好说明自己的心态。  

  33、你认为这个业界的现状怎样?

  主要是了解求职者对产业现状的理解及展望,针对无经验者则试探其投入意愿与关心程度,没必要陈述独创的见解,只需表达正确的意见。如果是同业的转职者,不但须掌握业界的方向,尚需加入个人见解。如果是异业转行,就不光只是阐述市场的动向更要加上自己的见解才好。  

  34、如果进入公司的话,想做什么样的工作?

  这是招募很多职种的公司最可能问到的问题,面试者如果不论外勤或内勤都回答"可以"的话,反而会让人怀疑工作态度;如果这家公司只招募一个职种还是被问到这个问题时,是为了确认应征者有无犹豫,应征者只要清楚的叙述自己想做的事就可以了,如"现在想在某某工作方面冲刺,将来则希望能在某某方面努力"等,朝自己想要的目标陈述即可。 

  35、为何转换职业的次数这么多?

  面试者会问此一问题,大都是因为担心你"进入公司没有多久又会辞职",所以每次转换工作时,最好先准备充足的理由。  

  36、从A公司到B公司中间的待职时间,都作了些什么?

  说"去学校上学"、"为了取得资格而努力",类似这种正面意义的活动为佳,如果没任何活动,也可讲述这段时间对自己而言,具有怎样的意义,只要有向上心,对方也能够感受得到。 

  37、有取得什么资格吗?

  虽然没有强调工作需要某种资格,也有可能被问到这样的问题,往后考虑分发地或能否在新事业发展,这句话都能派上用场,其他或许是想知道应征者对何事感到兴趣。

  38、将来想从事何种职务?  

  这是针对是否有工作目标及生涯计划,或者在社会上经过一段历练而提出的问题,想试探是否具有经营志向还是职业意图。  

  39、请告知你的工作观?

  常被问到"你的什么观是什么?"时,可别把他想的太复杂,可回答"为何而工作"、"从工作方面得到了什么""多少年后想变成怎样"等的话。  

  40、你的优点是什么?

  这是为了解求职者如何客观分析自己,并测试其表达与组织能力而提问的。"你对自己最满意的地方是哪里?"与"请做一段自我介绍"意义是相同的,不光是说话内容,连礼貌也都会列入评分项目内,最好加入"朋友曾这样说"等周围的人对自己的看法。因为除个人说法外,加上亲友的观点不但可增加说服力,而且可避免抽象的陈述,且具体的体验及自我反省为主,可使内容更具吸引力。 

  41、现在最热衷的是什么?

  可以简述你的兴趣,及这个兴趣带给你个性或能力的反面效果。  

  42、放假的时候,做什么消遣?

  对工作之外,拥有其他兴趣的应征者较受欢迎,这是表现工作之外的如运动及兴趣的最佳时刻。 

  43、健康保养方面做何种努力呢?

  这是为了了解自我管理能力,与其回答"什么都没做",倒不如说在日常生活方面是在注意保养,应该会有饮食、运动、睡眠压力消解法及生活步调等话题出现。  

  44、之前的薪水有多少?

  之前的薪水可据实以报,切勿写不实数据,小心有些公司会去查证,万一得知所言不实,就可能会丧失工作机会。 

  45、希望待遇多少?你最低的薪金要求是多少?

  这是必不可少的问题,因为你和你的考官出于不同的考虑都十分关心它。

  最好能诚实回答。对某些企业而言,这也是评论应征者的能力及经验的参考要件。

  针对待遇问题以清楚明确答复最佳,"依公司规定"可能被误认为缺乏自信而非谦虚。客观归纳个人年龄、经验、能力、再依产业类别、公司规模等客观资料,提出合理的数字,而附带说明提高待遇的理由是必要的。一般要求比前一工作薪水高出百分之十是合理范围。你聪明的做法是:不作正面回答。强调你最感兴趣的是这个机遇和挑战并存的工作,避免讨论经济上的报酬,直到你被雇用为止。  

  46、希望工作地点在哪里?

  这是有数个公司及管理场所的企业会问到的问题,有依当事人要求而安排分发他的企业,如果有希望的工作地点,可据实说出来,如:现在虽然希望在某某营业场所工作,但也可有"将来还是希望能到总公司服务"之类的要求。 

  47、对自己工作的评价如何?  

  48、何时可以到职?

  大多数企业会关心就职时间,最好是回答"如果被录用的话,到职日可按公司规定上班",但如果还未辞去上一个工作、上班时间又太近,似乎有些强人所难,因为交接至少要一个月的时间,应进一步说明原因,录取公司应该会通融的。若是应届毕业生的话,一录取即可上班是最理想的回答,但一边工作一边做转业打算的情形相当普遍,衡量说服上司批准离职、工作交接等问题,做出较充裕的时间为宜。若时间拿捏不准至延后报到,可能对新公司造成困扰,说明现况,将报到时间订在一个月之内应不为过。 

  49、如何看待企业的规章制度、劳动纪律?  

  50、为什么选择来公司应征?

  这是所有应征者必须遇到的问题,以积极、正面的答案回答,除说明公司的待遇、福利等条件吸引人之外,可进一步说明此工作可活用自己的专长。
  51、除了本公司外,还应征了那些公司?

  很奇怪,这是相当多公司会问的问题,其用意是要概略知道应征者的求职志向,所以这并非绝对是负面答案,就算不便说出公司名称,也应回答"销售同种产品的公司",如果应征的其它公司是不同业界,容易让人产生无法信任的感觉。 

  52、担任过什么领导职务?怎样管理下级?怎样与同事协作?影响你工作的主要因素是什么?  

  53、过去的工作经历如何?

  可尽量说出所有打工或兼职的经验,甚至曾义务帮助过学校、其它团体或亲朋好友的工作经验皆可补充,最好能具体说明工作的内容及担任此职位的年资,并进一步说明在此职位上所扮演的角色,若有实际的成果可一起说明。 

  54、从现在开始算,未来的五年,你想自己成为什么样子?或者:告诉我,你事业的目标?(对工作的期望与目标是什么?)

  回答一定要得体,根据你的能力和经历。对工作拥有具体期望与目标的人,通常成长较快。应征者针对这类问题可以回答:"我的目标是……,为了达到这个目标,必须努力充实自己……,而我拥有这样的自信。"或"这是我从小到大的理想……"。  

  55、喜欢这份工作的哪一点?

  无工作经验的人可以针对自己被这份工作吸引,以及关心的地方回答,如:"交通方便"或"工作性质适合自己"之类。有工作经验者倘若能提出这份工作与众不同之处,主管多会极感兴趣的。  

  56、家庭中的情况如何?有没有相关的转业背景?在你过去的经历中得过何种奖励?取得过那些成果和荣誉?我的父母都是知识分子,他们从小就教导我学习要努力、做事要勤奋、待人要诚恳。我爱我的父母,也很感谢他们给予我的栽培。 

  57、你工作中曾受到那些挫折?谈谈在工作上接受挫败的经验。

  每一位干练的工作者,都不免要接受挫败的挑战。挫折容忍力是面谈中必须考验的一项,这时回答可以是积极的,例如从中学到教训,努力找出原因,终于把事情做好等;那么就会得到较好的分数。 

  58、你参加过高校哪些实践活动?你的自学能力怎样?哪位老师对你影响最大?你喜欢读哪一类课外读物?为什么?  

  59、谈谈人际关系生活经验?

  面谈者能从你的形象和兴趣中解析,你的应对能力及对事情决断能力的技巧,通常问题不外乎:"遇到与朋友冲突的时候,你怎么处理?"、"与主管意见相左的时候,而你认为你才是对的,你会用什么方式让主管接受?"。每一个公司需要的不是力争到底的坚持,而是需要更进一步的搜集资料,透过人际关系来积聚力量,找寻正确的工作决策和方法。 

  60、工作上受过哪些专业培训?效果如何?你与哪种类型的上司、同事、下级合得来?你是怎样与你的上司一起工作的?

  61、你现在的上司或同事会怎样评论你?

  当人们以第三者的姿态谈论自己是,他们不仅会更多地显露自己的缺点,也会更多地表现出自己的长处。而且,这个问题在衡量应聘经理的人士时非常实用。如果他们对于上司如何评论你没有一个好的预期,这可不是个好兆头。 

  62、描述一下你的学习态度?你的学术、成就?

  这类提问主要针对专业兴趣和专业能力、学习的基本素质,学习内容的结构特点等,是招聘单位判断你专业基础和发展潜力以及与岗位的要求相适应程度的重要依据。 

  63、对所欲应聘的岗位,你自我感觉如何?在工作中你也许处理过一系列事情,哪几件事你处理的令人满意?你是如何处理的?我们每个人都犯错误,你能否说明学到了哪些教训?对你以后的工作有何帮助? 

  64、你最喜欢的事物或菜肴是什么?

  据发现喜欢吃辛辣食物和敢作敢当地创造之间有某种相关性,他们对拌着肉汁的土豆泥不满足。而喜欢清淡食物的人比较胜任稳定的、重复性工作。  

  65、怎样处理工作与生活的关系?怎样处理在工作中遇到的困难?请举例说明。对原单位的哪些方面你最不满意?在原单位你承担的工作重要性如何?我对原单位最不满意的地方是认为他们的管理不够完善,有点松懈。 

  66、你最愉快的经历和最不愉快的经历是什么?

  这时希望人们认真地对待工作。如果应聘者回忆一段工作上的经历,招聘者会知道他对工作的态度。而如果应聘者回忆第一个孩子的出生或是获得博士学位,招聘者会感到他的真诚和坦率。曾有一个被极力推荐的应聘者自豪地回忆当他被以前的老板开除时,打破了老板的鼻子。不用说,面试结束后他还得继续找工作。 

  67、你对接受新的知识有何认识?你是否有信心做好今后的工作,为什么?  

  68、什么是最大的失礼或失言?

  是你的所作所为显示了不尊敬,轻视,对别人缺乏考虑和尊重,职业礼节不是一味地墨守成规,而是充分尊重别人的意见。  

  69、你认为本公司与其它公司有何不同?你对以后的职位有何期望?对你来说,今后你要避免什么?你要进行何种选择?五年后,你想在何处处于何种地位?你的生活目标是什么?  

  70、你是否喜欢你老板的职位?

  回答当然是"YES",如果你不满意,可补充:"当我有这个评测能力时",或"有这样一个空缺时吧"。
  71、你是否愿意到公司派你去的那个地方?

  如果你回答"NO",你可能会因此而失掉这份工作,记住:你被雇用后你可以和公司就这个问题再进行谈判。 

  72、你怎样接受上级的指示?你认为自己最适合什么样的工作?你认为你最擅长什么?你认为自己处理人际关系的能力如何?  

  73谁曾经给你最大的影响?

  选一个名字即可,最好是你过去的老师等,再简短准备几句说明为什么?  

  74、对涉及到你的能力、长处、短处等方面,我们可能现在还没有充分了解,你希望怎样使我们能确切地评价你的发展潜力及最适合做哪项工作?  

  75、你将在这家公司待多久?

  回答这样的问题,你该持有一种明确地态度,即:能待多久待多久,尽可能长,"我在这里继续学习和完善自己"。  

  76、什么是你最大的成就(成功)?你最大的遗憾是什么?

  一是我的婚姻,如果人生能重来一回,我还将作这样的选择;二是我的工作,无论在哪儿干,我都是最出色的。(准备一两个成功的小故事。所有的例子都很独特,容易给人留下深刻的印象,从而让你与众不同。要记住,必须是你做得很成功又感到自豪的事例。)过去的遗憾已经化为我人生当中的经验了,正是它们促使我走向了成熟。  

  77、请你对自己作一个坦率的、真实的评价,什么是你的强项?你喜欢你的那种特性?你认为什么是好的?你的弱点是什么?哪些你是可以改正的? 

  78、你有和这份工作相关的训练或品质吗?

  说明要短,举两三个最重要的品质,要有事实依据。 

  79导致你成功的因素是什么?

  回答要短,让考官自己去探究,比如只一句话:"我喜欢挑战性工作"。  

  80、如果工作中出现风险你怎么办?你对应聘的职业有什么看法?你还希望在应聘单位得到什么培训?遇到有风险的工作,我会在行事前作充分地准备、调查、研究,并拟定详细的计划,争取把风险降到最低,让成功率更大。  

  81、你如何听取和处理各种不同意见?  

  82、在什么样的条件下你工作最有效?

  此问题考察的是应聘者对工作条件的要求。主考官可以从中获取应聘者的工作方式、影响工作效率的因素等信息,还可以知道应聘者的不足在哪里。错误回答:"只要明白要我做什么,只要用心,我干什么事情都会不错的。"这个回答的错误在于,应聘者自己假设该公司需要服从命令的人。事实正相反,大多数公司在短短的面试时间里,发现有创造力的人才。如果把自己表现的像个惟命是从的人,你的面试结果只能以失败告终。制胜回答:"我解决问题的方法很系统,包括四个步骤:收集有关信息、仔细分析问题、确定解决方案、着手解决问题。我发现很多人把前两个步骤忽略掉了,直接从解决方案入手,这时不妥当的。只要获取了足够的信息,对问题有一个充分的认识,我可以解决任何事情。"这种回答表明了应聘者曾成功地解决过难题,有思路,已经培养出一套解决问题的方法。它还表明了应聘者有信心在以后继续使用他的成功经验。 

  83、你认为你给别人的第一印象与一个真实的你有何差别?非常了解你的朋友是怎样描述你的?你的知识能力和应变能力如何?你的归纳总结能力如何? 

  84、你如何看待我公司界定成功的尺度?

  这个问题时用来考察应聘者对公司的了解程度,以此排除那些对公司兴趣不大,或者企图瞒天过海的人。有的人这样回答:"贵公司成绩喜人,想必你们面临的竞争也很激烈。我敢打赌,贵公司的最基本业绩就是你们界定成功的尺度。"

  此回答可能句句属实,但却太笼统,反映不出应聘者对公司的了解程度。主考官会认为应聘者对公司的情况和目标一无所知。巧妙回答:"我注意到过去两年来,贵公司推出了一系列新产品,采取策略占领市场,谋求发展。所以我觉得你们界定成功的尺度,应该是新产品是否能居同类产品榜首。"这个回答显示了应聘者对公司有一定的了解,说明了应聘者高度关注该

- 作者: MageWang 2005年11月10日, 星期四 11:17  回复(0) |  引用(0) 加入博采

PPP协议

      一、介绍

  PPP(Point-to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。

  二、 PPP链路建立过程

  PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。PPP协议包含这样几个部分:链路控制协议LCP(Link Control Protocol);网络控制协议NCP(Network Control Protocol);认证协议,最常用的包括口令验证协议PAP(Password Authentication Protocol)和挑战握手验证协议CHAP(Challenge-Handshake Authentication Protocol)。

  LCP负责创建,维护或终止一次物理连接。NCP是一族协议,负责解决物理连接上运行什么网络协议,以及解决上层网络协议发生的问题。

  下面介绍PPP链路建立的过程:

 

  PPP链路状态机如图1所示。一个典型的链路建立过程分为三个阶段:创建阶段、认证阶段和网络协商阶段。

  阶段1:创建PPP链路

  LCP负责创建链路。在这个阶段,将对基本的通讯方式进行选择。链路两端设备通过LCP向对方发送配置信息报文(Configure Packets)。一旦一个配置成功信息包(Configure-Ack packet)被发送且被接收,就完成了交换,进入了LCP开启状态。

  应当注意,在链路创建阶段,只是对验证协议进行选择,用户验证将在第2阶段实现。


  阶段2:用户验证

  在这个阶段,客户端会将自己的身份发送给远端的接入服务器。该阶段使用一种安全验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。在认证完成之前,禁止从认证阶段前进到网络层协议阶段。如果认证失败,认证者应该跃迁到链路终止阶段。

  在这一阶段里,只有链路控制协议、认证协议,和链路质量监视协议的packets是被允许的。在该阶段里接收到的其他的packets必须被静静的丢弃。

  最常用的认证协议有口令验证协议(PAP)和挑战握手验证协议(CHAP)。 认证方式介绍在第三部分中介绍。

  阶段3:调用网络层协议


  认证阶段完成之后,PPP将调用在链路创建阶段(阶段1)选定的各种网络控制协议(NCP)。选定的NCP解决PPP链路之上的高层协议问题,例如,在该阶段IP控制协议(IPCP)可以向拨入用户分配动态地址。

  这样,经过三个阶段以后,一条完整的PPP链路就建立起来了。

  三、 认证方式

  1)口令验证协议(PAP)

  PAP是一种简单的明文验证方式。NAS(网络接入服务器,Network Access Server)要求用户提供用户名和口令,PAP以明文方式返回用户信息。很明显,这种验证方式的安全性较差,第三方可以很容易的获取被传送的用户名和口令,并利用这些信息与NAS建立连接获取NAS提供的所有资源。所以,一旦用户密码被第三方窃取,PAP无法提供避免受到第三方攻击的保障措施。

  2)挑战-握手验证协议(CHAP)

  CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令(challenge),其中包括会话ID和一个任意生成的挑战字串(arbitrary challengestring)。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,其中用户名以非哈希方式发送。

  CHAP对PAP进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以哈希算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的操作,并将结果与用户返回的口令进行对照。CHAP为每一次验证任意生成一个挑战字串来防止受到再现攻击(replay attack)。在整个连接过程中,CHAP将不定时的向客户端重复发送挑战口令,从而避免第3方冒充远程客户(remote client impersonation)进行攻击。

  四、PPP协议的应用

  PPP协议是目前广域网上应用最广泛的协议之一,它的优点在于简单、具备用户验证能力、可以解决IP分配等。

  家庭拨号上网就是通过PPP在用户端和运营商的接入服务器之间建立通信链路。 目前,宽带接入正在成为取代拨号上网的趋势,在宽带接入技术日新月异的今天,PPP也衍生出新的应用。典型的应用是在ADSL(非对称数据用户环线,Asymmetrical Digital Subscriber Loop)接入方式当中,PPP与其他的协议共同派生出了符合宽带接入要求的新的协议,如PPPoE(PPP over Ethernet),PPPoA(PPP over ATM)。

  利用以太网(Ethernet)资源,在以太网上运行PPP来进行用户认证接入的方式称为PPPoE。PPPoE即保护了用户方的以太网资源,又完成了ADSL的接入要求,是目前ADSL接入方式中应用最广泛的技术标准。

  同样,在ATM(异步传输模式,Asynchronous Transfer Mode)网络上运行PPP协议来管理用户认证的方式称为PPPoA。它与PPPoE的原理相同,作用相同;不同的是它是在ATM网络上,而PPPoE是在以太网网络上运行,所以要分别适应ATM标准和以太网标准。

  PPP协议的简单完整使它得到了广泛的应用,相信在未来的网络技术发展中,它还可以发挥更大的作用。

PPP协议文档

- 作者: MageWang 2005年10月31日, 星期一 22:10  回复(0) |  引用(0) 加入博采

奇偶校验码
摘要:奇偶校验码是一种通过增加冗余位使得码字中"1"的个数恒为奇数或偶数的编码方法,它是一种检错码。在实际使用时又可分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验等几种。 查看全文

- 作者: MageWang 2005年10月28日, 星期五 22:05  回复(0) |  引用(0) 加入博采

GCC使用集锦

Q: 用GCC编译时为什么没有提示sqrt函数?
    源代码如下:
    #include<math.h>
    #include<stdio.h>
    ....
    sqrt(9);
    ....
A: 编译的时候用 -lm

Q:
A:

- 作者: MageWang 2005年09月17日, 星期六 01:56  回复(0) |  引用(0) 加入博采

C++经典书籍

C++ 相关书籍之多,车载斗量;如天上繁星,如过江之鲫。广博如四库全书者有之(The C++ Programming Language、C++ Primer),深奥如重山复水者有之(The Annotated C++ Reference Manual, Inside the C++ Object Model),细说历史者有之(The Design and Evolution of C++, Ruminations on C++),独沽一味者有之(Polymorphism in C++, Genericity in C++),独树一帜者有之(Design Patterns,Large Scale C++ Software Design, C++ FAQs),程式库大全有之(The C++ Standard Library),另辟蹊径者有之(Generic Programming and the STL),工程经验之累积亦有之(Effective C++, More Effective C++, Exceptional C++)。

这几本让读者和我在期待的C/C++巨著就是这期我要推荐的——《Essential C++中文版》、《Effective C++中文版》、《The C++ Programming Language》和《C++ Primer》。

  Essential C++(Addison Wesley Pub Co.,1999年10月第一版)的作者Stanley B.Lippman更是C++领域一流的大师级人物,他从1984年开始就与C++结下了不解之缘:参与了第一个C++编译器C Front的开发,曾经和C++之父Bjarne Stroustrup(详见下)一起在贝尔实验室的项目组工作、负责研究C++程序开发环境中的对象模型,后来又担任著名的C++Report杂志编辑,此后他到迪斯尼旗下的梦工厂出任软件技术总监(Software Technology Director),主要著述有Essential C++、C++Primer、C++Gems、Inside the C++ Object Model、C#Primer等,关于作者的更详细信息可以到其个人网站(http://www.objectwrite.com,该网址笔者已验证无误)查询。Lippman当前在业界的影响力可以从最近发生的一件事情看出:不久前微软已经邀请了C++编程语言的先驱Stanley B.Lippman加盟它的Visual C++.Net开发小组,以打消广大的C++编程人员的疑虑。Essential C++是Lippman在C++ Primer之后的著作,可以说是厚积薄发的精髓之作。不要想当然地觉得这本书只有276页就是烹小鲜的入门向导——其实,我到觉得如果想通过一本书入门,1237页的C++ Primer或1109页的The C++ Programming Language更加适合。Essential C++分为7个章节,分别是C++基础、面向过程的编程风格、泛型编程风格、基于对象的编程风格、面向对象的编程风格、运用模板编程和异常处理。从结构的安排上我们可以看出作者的深意所在:并不是要手把手地教你键入和编译调试一个类似“Hello World”的程序,而是要一步一步地教会读者通过函数、指针、模板、类等构件形成一套完整的编程思想,在不同的需求情况下能够自如地使用面向过程或面向对象的方法进行程序设计,正如Bjarne Stroustrup在The C++ Programming Language一书中引用Kristen Nygaard(Simula语言的两位创造者之一)所说的“Programming is understanding”。如果你是一个新手,在阅读本书的时候不要忘了找一本更详细一些的参考教材——作者只用了30页的篇幅讲C++变成的基础知识,这里面还包括了数组、向量和指针等内容,《Essential C++中文版》(华中科技大学出版社,2001年8月第一版)已经出版,是侯捷的译著——恐怕业内很少有人不知道这位台湾大名鼎鼎电脑教育作家,建立在深刻理解基础上的翻译质量几乎可以说是无可挑剔了,但对于一些词汇的翻译方法和大陆翻译习惯的差异还有待磨合和改进(虽然译者坚持保留其繁体版译法)。

Effective C++(Addison Wesley Pub Co.,1997年9月第二版)没有教你C++语法或函数、对象、模板之类的东西,这是一本风格独到的经典技巧集,曾经获得过1992年度Jolt Award and Productivity Awards,作者教给你的是50个“改善程序技术与设计思维”的特别途径。Scott Meyers是C++业界公认的权威,主要从事软件开发咨询工作,活跃在全球各技术研讨会上,同时是C++ Report的重要专栏作家,知名著述出了Effective C++之外还有More Effective C++和Effective STL等,关于作者的更详细信息可以到其个人网站(http://www.aristeia.com)查询。《Effective C++中文版》(华中科技大学出版社,2001年9月第一版)也已经在国内翻译出版,译者还是侯捷。当你初步了解C++的全貌之后,Effective C++能够在短时间内大幅度地提高你C++编程的水平,此书的独特之处在于每一个你遇到的C++问题,Meyers都好像未卜先知地放在了书里,所有让你困惑的问题你几乎都可以在这本书中找到精辟的论述——如果能加Meyers的另一本巨著More Effective C++(Addison Wesley Pub Co.,1995年12月第一版)将更会锦上添花。本书在结构上分为改变旧有的C习惯、内存管理、构造析构函数与作业运算符、类与函数的设计和声明、类与函数的实现、继承关系与面向对象设计以及杂项讨论7个部分。很多人都认为你越熟悉C语言或其他面向过程的语言,在学习面向对象的语言的时候就会面临更大的困难,的确,如果你已经习惯了面向过程,在面向对象的时候你还是无法忘记过程,为此,Meyers在第一部分就提出了改变旧有的C习惯,通过几个小技巧让你能够尽量不受原有知识对新知识学习的干扰。在接下来的3个部分中,作者又针对让人头疼的内存管理问题(Java就宣称采用自动内存管理减少了编程复杂程度和出错几率是比C++的一大进步),随后,作者针对函数与类的构造析构、设计、实现等问题进行了详实的讨论,没有枯燥的长篇大论,都是结合实例的分析讲解——如果你刚学C++不久但已经可以独立编写一些简单的程序,你会发现所有被批判的问题程序中都可以找到自己的影子,这真是一件奇妙的事情!在“继承关系与面向对象设计”部分里作者没有喋喋不休地去讨论尚有争议的问题,而是把精力放在最基础的理念上,澄清了C++中类的继承体系设计与实现,并结合继承问题阐释了OOP。“杂项讨论”中作者主要讨论了编译、标准库等问题。打一个粗俗些的比方:Effec tiv e C++和M o re Effec tiv e C++就像是C++学习者的手挠,每一下都抓在你的痒处。

The C++ Programming Language(Addison Wesley Pub Co.,2000年2月第三版,高等教育出版社,2001年8月影印版)是无论哪一个C++学习者绝对、绝对不能错过的头号经典。Rogue Wave公司(Boland C++ Builder中STL方案的提供商)的Nathan Myers说:“15年之后,此书仍然是唯一一本无可替代的C++书籍。”只要有人推荐C++书籍,此书必在其中。正如侯捷先生1999年C++Primer繁体版前言中评价所说:“C++/OOP的领域极广……,不同的切入角度,都存在不同的经典好书。但如果考量的是语言全貌性(百科型)书籍,从来我只推荐两本,一是Bjarne Stroustrup的The C++ Programming Language,另一是Stanley B.Lippman的C++ Primer。这么说难免遗珠之憾,但是泰山北斗已现,又何必案牍劳形于墨瀚书海之中!这两本书都从C++盘古开天以来,一路改版,斩将搴旗,追奔逐北,成就一身荣光”。作者Bjarne Stroustrup是贝尔实验室大规模程序设计研究部门(Large-Scale Programming Research Department)负责人,AT&T、ACM成员,主要著述有The C++ Programm ing Language、The Design and Evolution of C++、The Annota ted C++ Reference Manual、C++ In-Depth Box Set(与别人合著)等。1979年Stroustrup开始开发一种语言,当时称为“C with Class”,后来演化为C++,并于1995年在贝尔实验室研制成功并投入使用的,Stro u strup也被称为“C++之父”,关于作者的更详细信息可以到其个人网站(http://www.research.att.com/~bs/homepage.html)查询。1998年,ANSI/ISOC++标准建立,同年,Strousturp推出了其经典著作The C++Programming Language的第三版。The C++Programming Language可是说非常全面、权威,充满了技术性极强的材料,很多地方值得反复回味与思索。Stroustrup说,他所接触和开发的软件无论是在大小、复杂性和难度来说,根本不是外界一般软件所能比拟的。本书虽然是一本计算机编程语言教程,但是处处体现出他对于软件开发和程序设计的看法。所以他在书中的很多观点虽然看上去不觉得有什么了不起的地方,但是当你面临到真正挑战的时候,就会深刻体会到其真知灼见非同一般。即便我们不考虑语言的障碍,这本书仍然比较难懂,作者很多地方点到即止,其中深意不是初学者能够真正领会的。这本书有个绰号——C++专家自学指南,也就是你必须先是专家,然后再来读此书自学提高。

  C++ Primer是Lippman的成名大作——不要看到这个名字就真认为这是“C++的初级读本”,实际上它是一本标准的“从入门到精通”教材,目前该书的简体中文版还没有上市,我到处寻找其英文版也没能如愿,一个偶然的机会在朋友那里看到了侯捷(见上关于此书的评价)繁体中文版的C++Primer,大体翻看了一下,感觉此书在实例方面非常详尽,内容可谓是全面、权威,通俗易懂。初学者只要能够认真学通这本书,足以能自由使用C++编写程序,成为C++的高手。C++ Primer对标准C++提供了广泛的介绍,提供了一个思考性的C++学习方案,C++中的重要该概念诸如异常处理、容器类型、面向对象的程序设计等等都体现在字里行间,对语言规则也进行了深入地探讨,是一本非常好的入门也是提高的教程和参考。全书共分为20章,从C++最基本的元素、数据类型到面向过程的程序设计到泛型算法到基于对象与面向对象的程序设计等等,洋洋洒洒,蔚为大观。此书将由中国电力出版社近期推出简体中文版,由潘爱民(《COM原理与应用》的作者,《Visual C++技术内幕(第四版)》、《深入理解COM+》、《COM本质论》、《深入解析ATL》的译者)主译。

  在国内,ISO/ANSIC/C++长期被忽视,很多软件公司的招聘广告上写的都是要求熟悉Visual C++或C++Builder——它们简直就成了C/C++的代名词!但ISO/ANSIC/C++有其不可替代的重要性,特别是在软件移植方面,记得我蓝格软件公司的董事长林燕峰先生(KCOM Space的作者)曾经和我说过要保证软件开发的可移植性和开发的可协作管理就必须遵从业界标准。值得庆幸的是今年出版界对标准C/C++书籍的渴求终于重视起来,纷纷出版经典C/C++书籍。关于C/C++的“不学C,无以言”到此已经结束,但并不是说已经囊括了C/C++的全部经典书籍,像Exceptional C++(Herb Sutter著,Addison Wesley Pub Co.,1999年12月第一版)、《实用C语言编程》(Steve Oualli著,O Reilly & Associates,1997年9月第三版,中国电力出版社,2000年5月中文第三版)、《C/C++嵌入式系统编程》(Michael Barr著,O Reilly & Associates,1999年2月第一版,中国电力出版社,2001年3月中文第一版)等等,或因不得见其书、或因技术领域太过专细,皆成明代

- 作者: MageWang 2005年07月26日, 星期二 13:50  回复(0) |  引用(0) 加入博采

计算机经典书籍

【程式语言:C】
1) C : How to Program 0132261197 PTH/1994-2ed
***教科书,初学C语言可考虑

2) the c progamming language 0131103628 PTH/1988-2ed
***K&R所着,乃C之bible中的bible,为c programmer 必读之书藉。惟不适合初学者,进阶用书

3) The C Answer Book 0131096532 PTH/1988-2ed
***K&R的解答本....好贵:<....所以不买了....:)

4) C: The Complete Reference 0078821010 McGraw/1995-3ed
***评价直逼K&R的一本好书....可能也不适合初学者(我没看过)

C++:
http://www.csdn.net/expert/jjhou/

1.C++ Primer 3/e(Lippman/AW) 原文书即将出版。旧版有无中译?

2.The C++ Programming Language 3/e(Stroustrup/AW) 有无中译?儒林?

3.Inside The C++ Object Model(Lippman/AW) 棋峰将有中译本


1) C++ primer 0201824701 A-W/1998-3ed
***一本十分适合初学者拿来学习的书....
以下为候捷老师的评语:
在「C++ 百科」类书中,与 The C++ Programming Language 齐名,亲和性较佳。老字号,有口碑。副作者 Josee Lajoie 是 ANSI/ISO C++ Standard 委员会的核心语言工作小组主席,因此本书在与C++ Standard 的密合度上,当可令人放心。

2) the C++ programming language 0201889544 A-W/1998-3ed
***以下为候捷候老师评语:
属「C++ 百科」级的书。此书可谓 C++ 原典,具权威性,由 C++ 之父所着。连 ANSI C++ 制定时都得叁考此书。不论是内容深度或文字风格,都不适合生手,但很适合做为进阶研究或叁考查阅壮胆之用。原文书之code 编排令我感到不舒服,行文之间学院派的味道颇重。本书为与C++ Standard 相映合,有份量极重之 errata,务请读者上网下载。

3) Thinking in C++ 0139177094 PTH/1995-1ed
***以下为候捷候老师评语:
也属「C++ 百科」类书。口碑甚佳,唯目录所列页次与实际页次 offset 4 1/e 年代过於陈旧,当此 C++ Standard 已定案之际,应属过时。
ps.第二版将不会有以上现象,但还未完书
//蒋按:大陆版有Thinking in Java

4) C++ Standard 抱歉我查不到资料....
***以下为候捷候老师评语:
醉心学术以及喜欢看 definition 的人,一定会喜欢。有此资料在手,与人争辩 C++ 时可使用最大的胆子和最大的分贝。电子版(PDF 格式)
可於 http://webstore.ansi.org/ 购得,US$ 18.0。列印出来装订得
美美的,摆在架上足以唬人。

5) Effective C++, 2nd Edition: 0201924889 A-W/1998-2ed
50 Specific Ways to Improve Your Programs and Designs
***以下为候捷候老师评语:
以条列方式列出 50 条宝贵的程式经验。每一条均有深入的原理说明。适合有 C++ programming 经验者。
//蒋按:有大陆版

6) More Effective C++: 020163371x A-W/1996-1ed
35 More Ways to Improve Your Programs and Designs
***以下为候捷候老师评语:
以条列方式列出 35 条宝贵的程式经验。每一条均有深入的原理说明。
适合有 C++ programming 经验者。

7) Inside the C++ Object Model 0201834545 A-W/1996-1ed
***以下为候捷候老师评语:
适合给已有 C++ 经验的人阅读。可为你扎下 C++ 内部机制的深厚基础。原文书笔误极多(100 个以上,大大小小),影响阅读甚巨,建议读中译本。对大部份人而言,chap3,4 可带来最大边际效益。

8) The Design and Evolution of C++ 0201543303 A-W/1994-1ed

9) The Annotated C++ Reference Manual 0201514591 A-W/1990-1ed

10)Advanced C++ Programming Styles and Idioms 0201548550 A-W/1991-1ed

11)C++ Programming Style

Assemble:
1. Microsoft Macro Assembler Bible 2/e(Barkakati/SAMS) 峰中译

2. PC Assembly Language and Programming 0137566107 PTH/1997-4ed

Windows:
http://www.csdn.net/expert/jjhou/
1.Windows 2000系统编程 原书名: Windows 2000 Systems Programming Black Book
原出版社 Coriolis 作者: Al Williams 译者: 钮文良 姜余祥 申功迈 尤克

2.windows NT/2000本机API参考手册 Gray Nebbett,机工

1。Windows 2000 内部揭密 原书名: Inside Microsoft Windows 2000,Third Edition
原出版社 Microsoft Press 作者: (美)David A.Solomon Mark E.Russinovich
译者: 詹剑锋 等译

2。inside win2000

1 rogramming Windows 95(Petzold/MP) 松格中译
//注:大陆版-清华大学出版社

2. Windows 95 : A Developer's Guide(Richter/M&T Books) 棋峰中译
//注:大陆版-清华大学出版社

3 System Programming for Windows 95(Oney/MP)松岗将有中译

4 Writing Windows VxDs and Device Deviers 2/e(Hazzah/R&D Books)无中译本

5 Windows 95 System Programming Secrets(Matt/IDG Books)旗标中译
//注:大陆版-清华大学出版社

6 Advanced Windows 3/e(Richter/Microsoft Press)松岗中译

7 The Windows NT Device Driver Book(Baker/Prentice Hall)

COM
1. Essential COM(Don Box/Addison Wesley) 棋峰将有中译

Cmpiler:
Compilers Principles, Techniques, and tools 0201100886 A-W/1986-1ed

【Computer Architecture】
1) Computer Organization and Design : 1558604286 Morgan/1997-2ed
The Hardware/Software Interface
***大学教科书(计算机组织),这个topic的入门书

2) Computer Architecture : 1558603298 Morgan/1996-2ed
A Quantitative Approach
***大学教科书(计算机组织),这个topic的入门书

3) Computer Architecture : Concepts and Evolution 0201105578 A-W/1997-1ed


【Unix】
1。Linux内核情景分析,上,下册。浙江大学出版社

2。Linux内核源代码分析(美)[S.麦克斯韦尔]

3。Linux编程白皮书

4。Linux IP协议栈源代码分析

5。莱昂氏unix源代码分析

6.Running Linux (3rd Edition) by Matt Welsh, Matthias Kalle Dalheimer, Lar Kaufman, Matthew Welsh

7.Hacking Linux Exposed by Brian Hatch, James B. Lee, George Kurtz

8.Linux System Administration (Linux Library)
by Vicki Stanfield, Roderick Smith, Roderick W. Smith

9.Linux Complete by Sybex (Editor)


5) Unix system administration handbook 0131510517 PTH/1995-2ed
***网路上昵称其为"红皮书",系统,网路都说的十分详细,无可挑惕!!
进阶用书,不适合初学者

1) Unix internals -the new frontiers 0131019082 PTH/1996-1ed
***深入UNIX.....进阶用书(SVR4 BSD都有讨论)

2) 4.4 BSD Operating System 0201549794 A-W/1996-2ed
***同上,但以4.4BSD为主题

3) The Magic Garden Explained : The 0130981389 PTH/1994-1ed
Internals of Unix System V Release 4 : An Open Systems Design
***同上,但以SVR4为主题。台湾没有书,我是向国外订的
(听说台大图书馆有喔~~~)

4) The Design of the UNIX operating system 0132017997 PTH/1986-1ed
***同上,BACH着,很多教科书都指名它为reference....

5) Lions' Commentary on Unix : With Source Code 1573980137 P-t-P/1996-6th

6) Unix Internals : A Practical Approach 020187721X A-W/1996-1ed

7) Unix Systems for Modern Architecture 0201633388 A-W/1994-1ed
: Symmetric Multiprocesssing and Caching for Kernel Programmers

8) The Linux Kernel Book 0471981419 Wiley/1998-1ed
***我觉得翻译得怪怪的(因为它是由别国语言翻成英文)....
最好先对kernel有多些概念再读会较好....

9) Linux Kernel Internals 0201331438 A-W/1997-2ed
***讨论linux kernel的书,恐龙书上在linux部分的reference,个人推荐

10)Linux Device Drivers 1565922921 O'reilly/1998-1ed
***网友推荐,作者是来自义大利的骇客....

1) Advanced programming in the UNIX environment 0201563177 A-W/1992-1ed
***Richard Steven所着,十分适合对系统,C有基础的人,亦是一本好的manual

2) UNIX systems programming(for SVR4) 1565921631 O'relly/1997-1ed
***网路上评语为其讨论内容过杂,但我觉得满适合拿来当reference

1) managing projects with make 0937175900 O'reilly/1993-2ed
***对make有详细的说明

2) programming with GUN SOFTWARE 1565921127 O'reilly/1997-1ed
***个人强力推荐!!教你用emacs,gcc,gdb,gmake....

1) A Practical Guide to Linux 0201895498 A-W/1997-1ed
***(A Practical Guide to UNIX的再版)
Linus写序提到, 他当初就是用这本书学Unix, 没想到七年後很荣幸的为
作者写序.

2) Running Linux ?????????? O'Reilly/1999-3ed

3) Linux Network Administrator's Guide ?????????? O'Reilly/1999-2ed


【系统安全】
1) maximum Security:A hacker's guide to 0672313413 Sams/1998-2ed
protecting your internet site and network

2) Cracking Des : Secrets of Encryption 1565925203 O'reilly/1998-1ed
Research, Wiretap Politics & Chip Design

3) Practical Unix and Internet Security 1565921488 O'reilly/1996-2ed

4) Building Internet Firewalls 1565921240 O'reilly/1995-1ed

Netword:
3) internetworking with TCP/IP vol 1: 0132169878 PTH/1995-3ed
Principles, Protocols, and Architecture

4) internetworking with TCP/IP vol 2: 0130102210 PTH/1999-3ed
design,implementation and internals

5) internetworking with TCP/IP vol 3: 0132621487 PTH/1996-2ed
client-server programming and application
***以上三本乃comer所着,属bible级读物。为大学教科书.....
vol1讲TCPIP的原理,vol2讲TCPIP的implementation,vol3讲APP的写作
另外vol3分成三个版本,分别为BSDsockets,winsock,TLI

6) TCP/IP illustrated vol 1 0201633469 A-W/1994-1ed

7) TCP/IP illustrated vol 2 020163354x A-W/1995-1ed

8) TCP/IP illustrated vol 3 0201634953 A-W/1996-1ed
***以上三本乃Richard Steven所着,影响小弟甚深,bible级读物。
vol1讲TCPIP的原理,vol2讲TCPIP的implementation,vol3讲APP的写作

10)UNIX network programming 0136493289 PTH/1998-2ed
vol 1:networking API:Sockets and XTI
***以上两本亦为Richard Steven所着,第一本为第一版,小弟无缘
第二本为第二版,强力推荐!!

11)UNIX network Programming 0130810819 PTH/1998-2ed
vol 2: Interprocess Communications
***以IPC为主题,觉得"杂"了点....但不失为一代宗师之作

【Data structure and algorithm】
1。数据结构算法与应用-C++语言描述(英文版) 原书名: Data Structures,Algorithms, and Applications in C++ 原出版社 McGraw-hill 作者: Sartaj Sahni

2。数据结构与程序设计——C++语言描述(影印版)原出版社 Prentice Hall/Pearson
作者: Robert L.Kruse,Alexander J.Ryba

3。数据结构C++语言描述 原书名: Data Structures C++
原出版社  作者: William Ford,William Topp 译者: 刘卫东 沈官林

4。数据结构 C++语言描述(英文影印版)原书名: Data Structures with C++
原出版社 Prentice Hall/Pearson 作者: William Ford ,William Topp

5。数据结构与算法分析 原书名: A Practical Introduction to DATA STRUCTURES AND ALGORITHM ANALYSIS 原出版社  作者: CLIFFORD A.SHAFFER 译者: 张铭 刘晓丹

6。数据结构算法与应用-C++语言描述 原书名: Data Structures, Algorithms, and Applications in C++ 原出版社 Mcgraw-Hill 作者: Sartej Sahni 译者: 汪诗林等

1) Fundamemtals of DATA STRUCTURES IN C 0716782502 CS/1993-1ed(?)
***大学教科书(data structure),另有PASCAL,C++版本
//蒋按:有大陆版

2) Introduction to algorithms 0262031418 MIT/1990-1ed
***大学教科书(algorithm)

3) Computer Algorithms/C++ 0716783150 CS/1996-1ed
***大学教科书(algorithm),另有PASCAL版本。
不必我说,IA和CA两本都是超棒的!!都拿来读读,多读几次......
阅读顺序由个人选择。我选CA->IA
//蒋按:有大陆版

4) The Art of Computer Programming (Vol 1): 0201896834 A-W/1997-3ed
Fundamental Algorithms

5) The Art of Computer Programming (Vol 2): 0201896842 A-W/1997-3ed
Seminumerical Algorithms

6) The Art of Computer Programming (Vol 3): 0201896850 A-W/1998-2ed
Sorting and Searching
***以上三本....我不必介绍了吧??(好想找时间完整的研究一次....)

7) Distributed Algorithms 1558603484 M-K/1997-1ed
***还没玩完,但只想说: 真的好棒!!

【作业系统通论】
1) Operating System concepts 0201591138 A-W/1997-5ed
***大学教科书(operating system),俗称"恐龙书"。很棒的作业系统入门书

2) Modern operating system 9813076623 PTH/1996-2ed
***大学教科书,配合恐龙书服用,效果加倍

3) Operating systems design and implememtation 0136301959 PTH/1997-2ed
***大学教科书(advanced operating system)
教你写一个完整的OS(Minix),不含网路系统

4) Distributed Operating systems 0131439340 PTH/1995-2ed

系统分析,设计,软件工程:
1。《软件工程》实践者的研究方法
Software Engineering A Practitioner's Approach Fourth Edition
(美)Roger S.Pressman著
黄柏素  梅宏  译
机械工业出版社

3。软件工程实践者之路(第5版)(英文影印版)
    ROGER S.PRESSMAN/ 7-302-04139-3/清华大学出版社/ 2001-1-1出版

4。软件需求
    Karl E.Wiegers/ 7-111-08127-7/机械工业出版社/

2。软件工程——理论与实践(第二版 影印版)
    (美)Shari Lawrence Pfleeger/ 7-04-010099-1/高等教育出版社/

3。能力成熟度模型(CMM):软件过程改进指南
    (美)卡耐基梅隆大学软件工程研究所/ 7-5053-6729-3/电子工业出版社/

6。面向对象系统分析与设计
    Ronald J.Norman/ 7-302-02342-5/清华大学出版社/

7。面向对象系统分析与设计(英文影印版)
    Ronald J.Norman/ 7-302-02944-X/清华大学出版社/ 1999-10-1出版

8.系统分析与设计方法(第五版 影印版)原出版社 Prentice Hall/Pearson
作者: Jeffrey L.Whitten,Lonnie D.Bentley,Kev


Java"
1。thinking in java
2。Java2核心技术系列
3。J2EE服务器端高级编程 Professional Java Server Programming J2EE Edition
原出版社 Wrox Press 作者: (美)Subrahmanyam Allamaraju 等著
4。J2EE平台上的EJB组件开发 Applying Enterprise JavaBeans Component-Based Development for the J2EE Platform
原出版社 Addison Wesley/Pearson 作者: (美)Vlada Matena Beth Stearns
5。 《Mastering EJB II》Ed Roman http://www.theserverside.com
6。Enterprise JavaBean
7.《Java in a Nutshell 》 David Flanagan
8.JAVA与XML 原出版社 O'Reilly 作者: (美)Brett McLaughlin 译者: 孙照林 汪东 王鹏
9.Effective Java(TM) Programming Language Guide by Joshua Bloch
10.Core J2EE Patterns: Best Practices and Design Strategies
by Deepak Alur, John Crupi, Dan Malks
11.J2EE Applications and BEA WebLogic Server by Michael Girdley, Rob Woollen, Sandra L. Emerson
12.Professional EJB

XML:
1.Java & XML, 2nd Edition: Solutions to Real-World Problems by Brett McLaughlin
2.XML in a Nutshell : A Desktop Quick Reference (Nutshell Handbook)
by Elliotte Rusty Harold, W. Scott Means
3.XML高级编程 原书名: Professional XML 原出版社 Wrox Press 作者: Didier Martin
译者: 李喆 严春莹 马琳
4.Java XML编程指南 原书名: Professional Java XML Programming
作者: (美)Tom Myers Alexander Nakhimovsky 译者: 王辉 张晓辉 等

- 作者: MageWang 2005年07月25日, 星期一 21:54  回复(0) |  引用(0) 加入博采

面向对象的软件开发

引自:http://www.gdit.edu.cn/html/dept/software/article/6.htm     

Linda M. Northrop
Software Engineering Institute

1 历史回顾

  针对日趋复杂的软件需求的挑战,软件业界发展出了面向对象(OO)的软件开发模式。目前作为针对"软件危机"的最佳对策,OO技术已经引起人们的普遍关注。最初被多数人看作只是一种不切实际的方法和满足一时好奇心的研究,现在得到了人们近乎狂热的欢迎。许多编程语言都推出了支持面向对象的新版本。大量的面向对象的开发方法被提出来。关于OO的会议、学术研讨班和课程极受欢迎。无数专业的学术期刊都为这一话题开辟了专门的版面。一些软件开发合同甚至也指明了必须使用OO的技术和语言。面向对象的软件开发对于90年代,就向是结构化的软件开发对于70年代那样让人着迷,而且OO的发展势头还在日益加速。

  诸如"对象"和"对象的属性"这样的概念,可以一直追溯到1950年代初。它们首先出现于关于人工智能的早期著作中。然而,OO的实际发展却是始于1966年 (当年文化大革命在中国爆发) 。 当时Kisten Nygaard和Ole-Johan Dahl开发了具有更高级抽象机制的Simula语言。Simula提供了比子程序更高一级的抽象和封装;为仿真一个实际问题,引入了数据抽象和类的概念。 大约在同一时期,Alan Kay正在尤他大学的一台个人计算机上努力工作,他希望能在其上实现图形化和模拟仿真。尽管由于软硬件的限制,Kay的尝试没有成功,但他的这些想法并没有丢失。70年代初期,他加入了Palo Alto研究中心(PARC),再次将这些想法付诸实施。

  在PARC,他所在的研究小组坚信计算机技术是改善人与人、人与机器之间通讯渠道的关键。在这信念的支持下,并吸取了Simula的类的概念,他们开发出Smalltalk语言;1972年PARC发布了Smalltalk的第一个版本。大约在此时,"面向对象"这一术语正式确定。Smalltalk被认为是第一个真正面向对象的语言。 Smalltalk 的目标是为了使软件设计能够以尽可能自动化的单元来进行。在Smalltalk中一切都是对象-----即某个类的实例。最初的Smalltalk的世界中,对象与名词紧紧相连。Smalltalk还支持一个高度交互式的开发环境和原型方法。这一原创性的工作开始并未发表,只是视为带浓厚试验性质的学术兴趣而已。

  Smalltalk-80是PARC的一系列Smalltalk版本的总结,发布于1981年。1981年8月的<<BYTE>>杂志公布了Smalltalk开发组的重要结果。在这期杂志的封面图上,一个热气球正从一个孤岛上冉冉升起来,标志着PARC的面向对象思想的启航。该是向软件开发界公开发表的时候了。起初,影响只是渐进式的,但很快就跃升到火爆的程度。热气球确实启航了,而且影响深远。早期Smalltalk关于开发环境的研究导致了后来的一系列进展:窗口(window),图标(icon),鼠标(mouse)和下拉式window环境。Smalltalk语言还影响了80年代早期和中期的面向对象的语言,如:Object-C(1986), C++(1986), Self(1987),Eiffl(1987),Flavors(1986). 面向对象的应用领域也被进一步拓宽。对象不再仅仅与名词相联系,还包括事件和过程。1980 Grady Booch首先提出面向对象设计(OOD)的概念。然后其他人紧随其后,面向对象分析的技术开始公开发表。1985年,第一个商用面向对象数据库问世。1990年代以来,面向对象的分析、测试、度量和管理等研究都得到长足发展。目前对象技术的前沿课题包括设计模式(design patterns)、分布式对象系统和基于网络的对象应用等。
2 动因

  为什么面向对象运动发展到了现在这样火暴的程度?部分是源于人们长久以来的一个希望:人们希望它,象以前其他的软件开发技术一样,能够满足软件开发对于生产效率、可靠性、易维护性、易管理等方面的更高、更快、更强的迫切需求。除此之外,还有许多原因都促使了它的流行。

  面向对象的开发强调从问题域的概念到软件程序和界面的直接映射;心理学的研究也表明,把客观世界看成是许多对象更接近人类的自然思维方式。对象比函数更为稳定;软件需求的变动往往是功能相关的变动,而其功能的执行者----对象----通常不会有大的变动。另外,面向对象的开发也支持、鼓励软件工程实践中的信息隐藏、数据抽象和封装。在一个对象内部的修改被局部隔离。面向对象开发的软件易于修改、扩充和维护。

  面向对象也被扩充应用于软件生命周期的各个阶段---从分析到编码。而且,面向对象的方法自然而然地支持快速原型法和RAD(Rapid Application Development)。面向对象开发的使用鼓励重用,不仅软件的重用,还包括分析、设计的模型的重用。更进一步,OO技术还方便了软件的互换性,即,网络中一个节点上应用能够利用另一个节点上的资源。面向对象的开发还支持并发、层次和复杂等一些在目前的软件系统中常见的现象。今天我们常常会需要建造一些软件系统----不止是一黑盒应用。这些复杂系统通常包含由多个子系统组成的层次结构。面向对象的开发支持开放系统的建设;利用不同的应用来进行软件集成有了更大的柔性。最后,面向对象开发的使用可以减小开发复杂系统所面临的危险,主要是因为系统集成遍布软件生命周期的各个阶段。

3 面向对象的建模

  面向对象的建模不仅仅是新的编程语言的汇总。它是一种新的思维方式,一种关于计算和信息结构化的新思维。面向对象的建模,把系统看做是相互协作的对象,这些对象是结构和行为的封装,都属于某个类,那些类具有某种层次化的结构。系统的所有功能通过对象之间相互发送消息来获得。面向对象的建模可以视为是一个包含以下元素的概念框架:抽象、封装、模块化、层次、分类、并行、稳定、可重用和可扩展性。

  面向对象的建模的出现并不能算是一场计算革命。更恰当地讲,它是面向过程和严格数据驱动的软件开发方法的渐进演变结果。软件开发的新方法受到来自两个方面的推动:编程语言的发展和日趋复杂的问题域的需求驱动。尽管在实际中分析和设计在编程阶段之前进行,但从发展历史看却是编程语言的革新带来设计和分析技术的改变。同样,语言的演变也是对计算机体系的增强和需求的日益复杂的自然响应。

  影响OO产生的诸多因素中,最重要的可能要算是编程方法的进步了。在过去的几十年中,编程语言中对抽象机制的支持已经发展到了一个较高的水平。这种抽象的进化从地址(机器语言)到名字(汇编语言),到表达式(第一代高级语言,如Fortran),到控制(第二代高级语言,如Cobol),到过程和函数(第二代和早期第三代高级语言,如Pascal),到模块和数据(晚期第三代高级语言,如modula),最后到对象(基于对象和面向对象的语言)。Smalltalk和其他面向对象语言的发展使得新的分析和设计的技术的实现成为可能。

  这些新的OO的技术实际上是结构化和数据库方法的融合。OO的方法中,小范围内对面向数据流的关注,如偶合和聚合,也是很重要的。同样,对象内部的行为最终也需要面向过程的设计方法。数据库技术中的实体-关系(ER图)的数据建模思想也在 OO的方法中得以体现。

  计算机硬件体系结构的进步,性能价格比的提高和硬件设计中对象概念的引入都对OO的发展产生了一定的影响。OO的程序通常要更加频繁地访问内存,需要更高的处理速度。他们需要并且也正在利用强大的计算机硬件功能。哲学和认知科学的层次和分类理论也促进了OO的产生和发展。最后,计算机系统不断增长的规模、复杂度和分布性都对OO技术起了或多或少的推动作用。

  因为影响OO发展的因素很多,OO技术本身还未成熟,所以在思想和术语上有很多不同的提法。所有的OO语言并非生而平等,他们在术语、概念的运用上也各不相同。尽管也存在统一的趋势,但就如何进行面向对象的分析、设计而言还没有完全达成共识,更没有统一的符号来描述这些活动。(说明:UML正在朝这方向努力) 但是,OO的开发已经在以下领域被证明是成功的:空中交通管理、动画设计、银行、商业数据处理、命令和控制系统、CAD、CIM、数据库、专家系统、图象识别、数学分析、音乐合成、操作系统、过程控制、空间站软件、机器人、远程通讯、界面设计和VLSI设计。毫无疑问,OO技术的应用已经成为软件工业发展的主流。

4 面向对象编程

  <1> 概念
  在面向对象编程中,程序被看作是相互协作的对象集合,每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层次结构。面向对象的语言常常具有以下特征:对象生成功能、消息传递机制、类和遗传机制。这些概念当然可以并且也已经在其他编程语言中单独出现,但只有在面向对象语言中,他们才共同出现,以一种独特的合作方式互相协作、互相补充。
过程化编程模式: 参数输入----- | 代 码 | ------结果输出
为实现某个功能,参数被传入某个处理过程,最后传回计算结果。

   | 对象------ 数据结构 面向对象编程模式:
界面 | 对象------ 和
   | 对象------ 操作

  OOP中,功能是通过与对象的通讯获得的。对象可以被定义为一个封装了状态和行为的实体;或者说是数据结构(或属性)和操作。状态实际上是为执行行为而必须存于对象之中的数据、信息。对象的界面,也可称之为协议,是一组对象能够响应的消息的集合。 消息是对象通讯的方式,因而也是获得功能的方式。对象受到发给他的消息后,或者执行一个内部操作(有时成为方法或过程),或者再去调用其他对象的操作。所有对象都是类的实例。类是具有相同特点的对象的集合,或者也可以说,类是可用于产生对象的一个模版。对象响应一个消息而调用的方法,由接受该消息的对象自己决定。 类可以以一种层次结构来安排。在这个层次结构中,子类可以从比他高的超类中继承得到状态和方法。当对象接收到一个消息后,寻找相应的方法的过程将在从该对象的类开始,并在该类所处的层次结构中展开,最后,直到找着该方法,或者什么也没找到(将会报错)。在某些语言中,一个给定的类可以从不止一个超类中继承,称之为多继承。如果采用动态联编,继承就导致了多态性。多态性描述的是如下现象:如果几个子类都重新定义了超类的某个函数(都用相同的函数名),当消息被发送到一个子类对象时,在执行时该消息会由于子类确定的不同而被解释为不同的操作。 方法也可以被包括在超类的界面中被子类继承,而实际上并不去真正定义他。这样的超类也叫抽象类。抽象类不能被实例化,因此也就只能被用于产生子类。

  <2> 语言
  面向对象的语言包含4个基本的分支:
  1 基于Smalltalk的; 包括smalltalk的5个版本,以Smalltalk-80为代表。
  2 基于C的; 包括 objective-C, C++, Java
  3 基于LISP的; 包括 Flavors, XLISP, LOOPS, CLOS
  4 基于PASCAL的。包括 Object Pascal, Turbo Pascal, Eiffel, Ada 95
  
      Simula实际上是所有这些语言的老祖宗。在这些OO语言中,术语的命名和支持OO的能力都有不同程度的差别。 尽管Smalltalk-80不支持多继承,它仍被认为是最面向对象的语言(the truest OO language)。

  在基于C的OO语言中,Object-C 是Brad Cox开发的,它带有一个丰富的类库,已经被成功用于大型系统的开发。C++是由贝尔实验室的Bjarne Stroustrup写的。它将C语言中的STRUCT扩展为具有数据隐藏功能的CLASS。多态性通过虚函数(virtual functions)来实现。C++ 2.0 支持多继承。在多数软件领域,尤其是Unix平台上,C++都是首选的面向对象编程语言。 同C和C++相类似的新一代基于Internet的面向对象语言Java是由Sun microsystems研制的。它于1995年伴随着Internet的崛起而风靡一时。用Java写的applets可以嵌入HTML中被解释执行,这使它具备了跨平台特性。Java和Ada一样支持多线程和并发机制,又象C一样简单、便携。

  基于LISP的语言,多被用于知识表达和推理的应用中。其中CLOS(Common LISP Object System)是面向对象LISP的标准版。

  在基于Pascal的语言中,Object Pascal是由Apple和Niklaus Wirth为Macintosh开发的,它的类库是MacApp。Turbo Pascal 是Borland公司以Object Pascal为范本开发的。

  Eiffel由交互软件工程公司的Bertrand Meyer于1987年发布的。它的语法类似Ada,运行于Unix环境。Ada在1983年刚出来时并不支持继承和多态性,因而不是面向对象的。到了1995年,一个面向对象的Ada终于问世,这就是Ada 95。

  除了上述的面向对象的语言之外,还有一些语言被认为是基于对象(Object-based)的。它们是:Alphard, CLU, Euclid, Gypsy, Mesa, Modula。

5 面向对象的软件工程

  生命周期
  尽管面向对象的语言正在取得令人激动的进展,但我们都知道,编码并非是软件开发中的问题的主要来源。相比之下,需求和分析的问题更加普遍,而且它们的纠错代价更加昂贵。因此, 对OO开发技术的关注就不能仅仅集中在编码上面,更应集中关心软件工程的其他方面。OO方法在处理复杂系统的分析和设计、分析和设计的重用方面的应用前景也是非常可观。如果我们承认OO的软件开发不仅仅局限于编码活动,那么就必须采用一种全新的开发模式,包括新的软件生命周期。 目前最常见的生命周期是"瀑布"模型(结构化)。它是在60年代末"软件危机"后出现的第一个生命周期模型。如下所示。

  分析 ----- 设计 ----- 编码 ----- 测试 ------ 维护

  如图所示,瀑布式生命周期的开发过程是顺序行进的;活动流向基本是单向的。它假设开发者在开发初期对系统的了解足够清楚。不幸的是,任何软件开发活动都不可避免地要涉及大量迭代过程,无论你事先是否安排。好的设计人员指的是那些能同时在抽象的层面和具体的细节上进行工作的实践家。总的来说,瀑布式生命周期的缺点表现在三个方面:<1> 后期的变化、迭代、改动困难 <2> 不支持重用 <3> 没有一个联系各个阶段的统一模型。

  面向对象的方法从问题模型开始,然后就是识别对象、不断细化的过程。它从本质上就是迭代的和渐增的。在这里,快速原型和反馈环路是必需的标准结构。开发过程就是一次次的迭代反复过程。随着迭代的进行,系统的功能不断完善。这里,传统的开发模式中在分析、设计和编码等各个阶段之间的明显界限变得模糊起来。其原因是因为对象的概念弥漫了整个开发过程。对象和它们之间的关系成为分析、设计和编码等各个阶段的共同表达媒介。开发的重心从编码向分析偏移,从功能为中心向数据为中心偏移。而且,面向对象开发的迭代和无缝性使得重用变得更加自然。

  近来,为改善面向对象开发的可管理性,玻姆(Boehm,1988)提出了一个结合了宏观和微观视角(macro & microview)的螺旋开发模型。宏观包括3个阶段:1分析---发现和识别对象;2 设计---发明和设计对象;3 实施---创建和实现对象。每个宏观阶段都包含一些微观迭代活动。

6 OOA和OOD

  由于面向对象的技术还比较新,目前存在许多种面向对象的分析和设计方法。面向对象的分析(OOA)建立于以前的信息建模技术的基础之上,可以定义为是一种以从问题域词汇中发现的类和对象的概念来考察需求的分析方法。OOA的结果是一系列从问题域导出的"黑箱"对象。OOA通常使用"剧情(scenarios)"来帮助确定基本的对象行为。一个剧情是发生在问题域的一个连续的活动序列。在对一个给定的问题域进行 OOA时,"框架"(Frameworks)的概念非常有用。框架是应用或应用子系统的骨架,包含一些具体或者抽象的类。或者说,框架是一个特定的层次结构,包含描述某一问题域的抽象父类。当下流行的所有的OOA方法的一个缺点就是他们都缺乏一种固定的模式(formality)。

  在面向对象的设计(OOD)阶段,注意的焦点从问题空间转移到了解空间。OOD是一种包含对所设计系统的逻辑的和物理的过程描述,以及系统的静态和动态模型的设计方法(Booch,1994)。

  在OOA和OOD中,都存在着对重用性的关注。目前,OO技术的研究人员们正在尝试定义"设计模式(design patterns)"这一概念。它是一种可重用的"财富",可以应用于不同的问题域。通常,设计模式指的是一种多次出现的设计结构或解决方案。如果对他们进行系统的归类,即可被重用,可以构成不同设计之间通信的基础。

  OOD技术实际上早于OOA技术而出现。目前在OOA和OOD已经很难画出一条清晰的界限。因此,下面的描述给出一些常用的OOA/OOD技术的(联合)概貌。

  Meyer 用语言作为表达设计的工具。(1988)

  Booch的OOD技术扩展了他以前在Ada方面的工作。他采用一种"反复综合(round-trip gestalt)"的方法,包括以下过程:识别对象,识别对象的语义,识别对象之间的关系,进行实施,同时包含一系列迭代。Booch是最先使用类图,类分类图,类模板和对象图来描述OOD的人(1991)。

  Wrifs-Brock's的OOD技术是由职责代理来驱动的。类职责卡(Class Responsibilities Cards)被用来记录负责特定功能的类。在确定了类及其职责之后,再进行更详细的关系分析和子系统的实施。(1990)

  Rumbaugh使用3种模型来描述一个系统:1 对象模型,描述系统中对象的静态结构;2 动态模型,描述系统状态随时间变化的情况;3 功能模型,描述系统中各个数据值的转变。对象图,状态转换图和数据流图分别被用于描述这3个模型。(1991)

  Coad和Yourdon采用以下的OOA步骤来确定一个多层OO模型(5个层次):找出类和对象,识别结构和关系,确定主题,定义属性,定义服务。5个步骤分别对应模型的5个层次,即类和对象层,主题层,结构层,属性层和服务层。他们的OOD方法既是多层次的又是多方面的(multicomponent)。层次机构和OOA一样。多方面包括:问题域,人与人的交互,任务管理和数据管理。

  Ivar Jacobson 提出了Objectory方法(或Jacbson法),一种他在瑞典Objective系统中开发的面向对象软件工程方法。Jacbson的方法特别强调了"Use Case"的使用。 Use Case成为分析模型的基础,用交互图(Interaction Diagram)进一步描述后就形成设计的模型。Use cases同时也驱动测试阶段的测试工作。到目前为止,Jacbson法是最为完整的工业方法。 (1992)

  以上所述的方法还有许多的变种,无法一一列出。近年来,随着各种方法的演变,它们之间也互相融合。1995年,Booch,Rumbaugh和Jacbson联手合作,提出了第一版的UML(Unified Modelling Language),一体化建模语言。(目前已经成为OO建模语言的事实标准)

7 管理问题

  当组织向面向对象的开发技术转向时,支持软件开发的管理活动也必然要有所改变。承诺使用OO技术即意味要改变开发过程,资源和组织结构。(Goldberg 1995) OO开发的迭代、原型以及无缝性消除了传统开发模式不同阶段之间的界限。新的界限必须被重新确定。同时,一些软件测度的方法也不在适用了。"代码行数"LOC(Lines of Code)绝对过时了。重用类的数目,继承层次的深度,类与类之间关系的数目,对象之间的耦合度,类的个数以及大小显得更有意义。在OO的软件测度方面的工作还是相当新的,但也已经有了一些参考文献。(Lorenz 1993)

  资源分配和人员配置都需要重新考虑。开发小组的规模逐步变小,擅长重用的专家开始吃香。重点应该放在重用而非LOC上。重用的真正实现需要一套全新的准则。在执行软件合同的同时,库和应用框架也必须建立起来。长期的投资策略,以及对维护这些可重用财富的承诺和过程,变的更加重要。

  至于软件质量保证,传统的测试活动仍是必须的,但它们的计时和定义必须有所改变。例如,将某个功能"走一遍"将牵涉到激活一个剧情(scenario),一系列对象互相作用,发送消息,实现某个特定功能。测试一个OO系统是另一个需要进一步研究的课题。发布一个稳定的原型需要不同与以往控制结构化开发的产品的配置管理。

  另一个管理方面要注意的问题是合适的工具支持。一个面向对象的开发环境是必须的。同时需要的还包括:一个类库浏览器,一个渐增型编译器,支持类和对象语义的调试器,对设计和分析活动的图形化支持和引用检查,配置管理和版本控制工具,以及一个象类库一样的数据库应用。

  除非面向对象开发的历史足以提供有关资源和消耗的数据,否则成本估算也是一个问题。计算公式中应该加入目前和未来的重用成本。最后,管理也必须明白在向面向对象方法转变的过程中要遇到的风险。如消息传递、消息传递的爆炸增长、动态内存分配和释放的代价。还有一些起步风险,如对合适的工具,开发战略的熟悉,以及适当的培训,类库的开发等。

  8 向面向对象转变

  这个转变的时期可能相当长。培训是必须的。一个实验性质的向导项目也是有必要的。建议不要使用结构化和面向对象像结合的办法。越来越多的证据表明,成功需要完全的OO解决方案.

  9 未来

  总的来说,面向对象的技术是以前的软件开发技术自然演进的成果,对许多应用领域的软件开发都极具前途。借用Maurice Wilkes在他图灵奖颁奖仪式上的演讲的话?quot;对象是软件界从70年代以来最激动人心的革新之一。" (1996) 然而,面向对象的开发并非是包医百病的灵丹妙药,其发展还远未成熟。可是尽管OO技术的未来还未确定,但在90年代初期的一些预言都已实现。(Winblad 1990) 类库和应用程序框架在市场上已经可用。应用和环境之间的透明信息存取业已实现。支持用户在应用之间通信的的环境以及面向对象的继承多媒体工具包正在涌现。随着经验的积累,OO的发展将日渐流行,OO技术也将日趋成熟。当然,OO技术也有可能为某种处理更高一级抽象的开发技术取代或融合。这些都只是猜想。虽然在不远的将来,谈论对象无疑会显得过时,但现在,还有许多的问题等着我们去付出真正的热情。

- 作者: MageWang 2005年07月25日, 星期一 20:12  回复(0) |  引用(0) 加入博采

软件工程的七条基本原理

引自:http://www.gdit.edu.cn/html/dept/software/article/2.htm

自从1968年提出"软件工程"这一术语以来,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则或信条。 美国著名的软件工程专家 Boehm 综合这些专家的意见,并总结了TRW公司多年的开发软件的经验,于1983年提出了软件工程的七条基本原理。

  Boehm 认为,着七条原理是确保软件产品质量和开发效率的原理的最小集合。它们是相互独立的,是缺一不可的最小集合;同时,它们又是相当完备的。

  人们当然不能用数学方法严格证明它们是一个完备的集合,但是可以证明,在此之前已经提出的100多条软件工程准则都可以有这七条原理的任意组合蕴含或派生。

  下面简要介绍软件工程的七条原理:

  1 用分阶段的生命周期计划严格管理

  这一条是吸取前人的教训而提出来的。统计表明,50%以上的失败项目是由于计划不周而造成的。在软件开发与维护的漫长生命周期中,需要完成许多性质各异的工作。这条原理意味着,应该把软件生命周期分成若干阶段,并相应制定出切实可行的计划,然后严格按照计划对软件的开发和维护进行管理。 Boehm 认为,在整个软件生命周期中应指定并严格执行6类计划:项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划。

  2 坚持进行阶段评审

  统计结果显示: 大部分错误是在编码之前造成的,大约占63%; <2> 错误发现的越晚,改正它要付出的代价就越大,要差2到3个数量级。 因此,软件的质量保证工作不能等到编码结束之后再进行,应坚持进行严格的阶段评审,以便尽早发现错误。

  3 实行严格的产品控制

  开发人员最痛恨的事情之一就是改动需求。但是实践告诉我们,需求的改动往往是不可避免的。这就要求我们要采用科学的产品控制技术来顺应这种要求。也就是要采用变动控制,又叫基准配置管理。当需求变动时,其它各个阶段的文档或代码随之相应变动,以保证软件的一致性。

  4 采纳现代程序设计技术

  从六、七时年代的结构化软件开发技术,到最近的面向对象技术,从第一、第二代语言,到第四代语言,人们已经充分认识到:方法大似气力。采用先进的技术即可以提高软件开发的效率,又可以减少软件维护的成本。

  5 结果应能清楚地审查

  软件是一种看不见、摸不着的逻辑产品。软件开发小组的工作进展情况可见性差,难于评价和管理。为更好地进行管理,应根据软件开发的总目标及完成期限,尽量明确地规定开发小组的责任和产品标准,从而使所得到的标准能清楚地审查。

  6 开发小组的人员应少而精

  开发人员的素质和数量是影响软件质量和开发效率的重要因素,应该少而精。这一条基于两点原因:高素质开发人员的效率比低素质开发人员的效率要高几倍到几十倍,开发工作中犯的错误也要少的多; 当开发小组为N人时,可能的通讯信道为N(N-1)/2, 可见随着人数N的增大,通讯开销将急剧增大。

  7 承认不断改进软件工程实践的必要性

  遵从上述六条基本原理,就能够较好地实现软件的工程化生产。但是,它们只是对现有的经验的总结和归纳,并不能保证赶上技术不断前进发展的步伐。因此,Boehm提出应把承认不断改进软件工程实践的必要性作为软件工程的第七条原理。根据这条原理,不仅要积极采纳新的软件开发技术,还要注意不断总结经验,收集进度和消耗等数据,进行出错类型和问题报告统计。这些数据既可以用来评估新的软件技术的效果,也可以用来指明必须着重注意的问题和应该优先进行研究的工具和技术。

- 作者: MageWang 2005年07月25日, 星期一 19:30  回复(0) |  引用(0) 加入博采

面向对象方法综述
摘要:八十年代末以来,随着面向对象技术成为研究的热点出现了几十种支持软件开发的面向对象方法。其中,Booch, Coad/Yourdon, OMT, 和Jacobson的方法在面向对象软件开发界得到了广泛的认可。特别值得一提的是统一的建模语言UML(Unified Modeling Language),该方法结合了Booch, OMT, 和Jacobson方法的优点,统一了符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验的概念和技术。UML方法自去年提出后到现在已发展到1.1版,并已提交给对象管理集团OMG,申请成为面向对象方法的标准。 查看全文

- 作者: MageWang 2005年07月25日, 星期一 19:25  回复(0) |  引用(0) 加入博采

通过#pragma pack(n)改变C编译器的字节对齐方式

引自:http://blog.csdn.net/wenddy112/articles/300583.aspx

在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。

     例如,下面的结构各成员空间分配情况:
struct test
{
     char x1;
     short x2;
     float x3;
     char x4;
};
     结构的第一个成员x1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界,因此,编译器在x2和x1之间填充了一个空字节。结构的第三个成员x3和第四个成员x4恰好落在其自然对界地址上,在它们前面不需要额外的填充字节。在test结构中,成员x3要求4字节对界,是该结构所有成员中要求的最大对界单元,因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了3个空字节。整个结构所占据空间为12字节。

更改C编译器的缺省字节对齐方式
     在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间。一般地,可以通过下面的方法来改变缺省的对界条件:
  · 使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。
     · 使用伪指令#pragma pack (),取消自定义字节对齐方式。

     另外,还有如下的一种方式:
     · __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。
     · __attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。

以上的n = 1, 2, 4, 8, 16... 第一种方式较为常见。

应用实例

  在网络协议编程中,经常会处理不同协议的数据报文。一种方法是通过指针偏移的方法来得到各种信息,但这样做不仅编程复杂,而且一旦协议有变化,程序修改起来也比较麻烦。在了解了编译器对结构空间的分配原则之后,我们完全可以利用这一特性定义自己的协议结构,通过访问结构的成员来获取各种信息。这样做,不仅简化了编程,而且即使协议发生变化,我们也只需修改协议结构的定义即可,其它程序无需修改,省时省力。下面以TCP协议首部为例,说明如何定义协议结构。其协议结构定义如下:

#pragma pack(1) // 按照1字节方式进行对齐
struct TCPHEADER
{
     short SrcPort; // 16位源端口号
     short DstPort; // 16位目的端口号
     int SerialNo; // 32位序列号
     int AckNo; // 32位确认号
     unsigned char HaderLen : 4; // 4位首部长度
     unsigned char Reserved1 : 4; // 保留6位中的4位
     unsigned char Reserved2 : 2; // 保留6位中的2位
     unsigned char URG : 1;
     unsigned char ACK : 1;
     unsigned char PSH : 1;
     unsigned char RST : 1;
     unsigned char SYN : 1;
     unsigned char FIN : 1;
     short WindowSize; // 16位窗口大小
     short TcpChkSum; // 16位TCP检验和
     short UrgentPointer; // 16位紧急指针
};
#pragma pack() // 取消1字节对齐方式


引自:http://community.csdn.net/Expert/topic/3804/3804035.xml?temp=.8115198

Intel和微软和本公司同时出现的面试题

#pragma pack(8)

struct s1{
short a;
long b;
};

struct s2{
char c;
s1 d;
long long e;
};

#pragma pack()


1.sizeof(s2) = ?
2.s2的s1中的c后面空了几个字节接着是d?

还是我给出正确答案吧:
如果代码:
#pragma pack(8)
struct S1{
    char a;
    long b;
};
struct S2 {
    char c;
    struct S1 d;
    long long e;
};
#pragma pack()
sizeof(S2)结果为24.
成员对齐有一个重要的条件,即每个成员分别对齐.即每个成员按自己的方式对齐.

也就是说上面虽然指定了按8字节对齐,但并不是所有的成员都是以8字节对齐.其对齐的规则是,每个成员按其类型的对齐参数(通常是这个类型的大小)和指定对齐参数(这里是8字节)中较小的一个对齐.并且结构的长度必须为所用过的所有对齐参数的整数倍,不够就补空字节.

S1中,成员a是1字节默认按1字节对齐,指定对齐参数为8,这两个值中取1,a按1字节对齐;成员b是4个字节,默认是按4字节对齐,这时就按4字节对齐,所以sizeof(S1)应该为8;

S2中,c和S1中的a一样,按1字节对齐,而d 是个结构,它是8个字节,它按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的对齐参数中最大的一个,S1的就是4.所以,成员d就是按4字节对齐.成员e是8个字节,它是默认按8字节对齐,和指定的一样,所以它对到8字节的边界上,这时,已经使用了12个字节了,所以又添加了4个字节的空,从第16个字节开始放置成员e.这时,长度为24,已经可以被8(成员e按8字节对齐)整除.这样,一共使用了24个字节.

              a    b
S1的内存布局:11**,1111,
              c    S1.a S1.b     d
S2的内存布局:1***,11**,1111,****11111111

这里有三点很重要:
1.每个成员分别按自己的方式对齐,并能最小化长度
2.复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度
3.对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐


补充一下,对于数组,比如:
char a[3];这种,它的对齐方式和分别写3个char是一样的.也就是说它还是按1个字节对齐.
如果写: typedef char Array3[3];
Array3这种类型的对齐方式还是按1个字节对齐,而不是按它的长度.
不论类型是什么,对齐的边界一定是1,2,4,8,16,32,64....中的一个.

结构对齐是基础知识,这种问题只有一个目的,就是看你对语言细节的了解程度.
在网络通讯,多个模块交互的应用中这种东西是很常见.
这一类的东西还有像__stdcall,__cdecl,volatile,mutable这些东西.平常学习中很难遇到,但实际工作中却会用.


同意楼上的兄弟看法。这些东西又有多少可以随口说出呢?
__stdcall, __cdecl参数传入的顺序从右到左,不同是前者修改的函数的参数stack从被调用者清除,而后者由调用者清除。所以后者编译出来的二进制代码比较前者大。
volatile 定义的变量防止被编译器优化掉。
mutable定义的变量一般都非静态或者非常量类成员。它允许常量类成员对其赋值。
这些东西最基本,但往住不是初学者在短时间能够理解的。

- 作者: MageWang 2005年07月19日, 星期二 17:34  回复(0) |  引用(0) 加入博采