已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序员需要具备的基本素质阅读代码这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的行为,了解程序,这样才能和开发团队一起工作,继承维护或是改进现有的程序。 编写程序 编写程序并不包括程序设计。不要以为编程是一件很简单的事情,很多程序员都认为编程只需要懂得程序语言的语法,并把设计实现就可以了。但是这离编写程序还 远远不够,使用什么样的编码风格成为编写程序员最需要具备的基本技能。能否使用非常良好的编程风格直接决写了程序员的级别。 软件设计 这一能力直接决定了需要吏用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性。并不是所有的程序在这一方面都非常优秀,但每个程序员都需要或多或少的明白和掌握这一基本技能。 熟悉软件工程 每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析,设计,编码,测试,Release和维护这几个阶段。当然,几乎所有的人都知道这些东 西,但并不是每个人都很清楚这些东西。现在很多高级程序员都会混淆“需求规格说明书FS”和“概要设计HLD”。另外,程序员还需要知道一些软件开发的方 法论,比如:敏捷开发或瀑布模型。 使用程序库或框架 一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,都需要学会做。比如:C+中,需要学会使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用这些东西,可以让你的工作事半功倍。 程序调试 程序调试是分析BUG和解决问题最直接的能力。没有人能够保证程序写出来不用调试就可以运行正常,也没有人可以保证程序永远不会出BUG。所以,熟练使用调试器是一个程序员需要具备的基本技能。 使用IDE 学会使用IDE工具也会让你的工作事半功倍。比如,VC+,Emacs,Eclipse等等,并要知道这些IDE的长处和短处。 使用版本控制 一定要学会使用版本控制工具,什么叫mainline/trunk,什么叫tag,什么叫branch,怎么做patch,怎么merge代码,怎么reverse,怎么利用版本控制工具维护不同版本的软件。这是程序员需要明白的软件配置管理中最重要的一块。 单元测试 单元测试是每个程序都需要做的。很多单元测试也是需要编码的。一定要学会在xUnit框架下进行单元测试。比如JUnit, NUnit, CppUnit等等。 重构代码 每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫软件的重构,每个程序员都应该读一下。 自动化编译 程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样,整个开发团队可以不停地集成代码,自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。 需求你能给出一些非功能性(或者质量)需求的例子么?所谓非功能性需求,是指软件产品为满足用户业务需求而必须具有且除功能需求以外的特性。软件产品的非功能性需求包括系统的性能、可靠性、可维护性、可扩充性和对技术和对业务的适应性等。下面对其中的某些指标加以说明。在这里可以看到非功能性需求涉及的范围很广,软件产品本身不是孤立存在的,还涉及到诸多外在环境的影响。非功能性需求必须考虑软件既要可用,又要易用。对于非功能性需求描述的困难在于很难像功能性需求那样,可以通过结构化和量化的词语来描述清楚,在描述这类需求时候我们经常采用软件性能要好,查询要在多少时间内出结果,软件健壮性要好等较模糊的描述词语。这类描述词语都是脱离了软件的执行环境,人和相关的场景的描述,因此信息很难体现到软件架构设计和具体的实现中。我们在架构设计中关注的安全,系统开发框架,并发和性能,异常日志等不是凭空产生出来的,而是来源于我们对非功能性需求的分析。一个软件系统必须完整,因此不仅仅包括了可执行的程序,还包括了在线帮助,数据和用户管理,日志异常查询,自动升级等相关功能特征。这些需求不仅仅是为了满足用户的需要,也是为了我们后续维护和监控系统的需要。系统的可靠性,可维护性和适应性是密不可分的。当系统出现故障和用户出现错误的操作后是否支持恢复,当用户在使用过程中遇到错误的时候是否可以立即定位问题,但业务场景和逻辑发生变化的时候系统是否支持,当网络不稳定或使用中异常中断的情况下系统是否都有相应的容错措施,这些都是需要在非功能性需求中考虑到的问题。易用性也是我们在开发非功能性需求中必须要考虑到的问题,易用性同时还涉及到美工和UI界面,人机工程,交互式设计,心理学,用户行为模式等多方面的知识。易用性的三原则就是易见,易学和易用或者叫为发现,易懂,效率。易见就是各种功能操作不要藏得太深,用户很容易找到他们期望进行的各种操作;易学需要软件系统通过在线帮助,导航,向导等各种方式保证软件是可自学习的;易用的重点则在软件在熟练使用后应该可以更快的进行各项操作。这三者相互间也存在冲突,需要平衡,而平衡的一个重点就是真正的做到以用户为中心进行设计,需要去细分场景和用户。对于非功能性需求的描述,在描述过程中必须要强调到人,业务场景,环境等各方面的内容。强调的目的就是要说明非功能性需求不是无限度的,任何一项非功能性需求的实现往往会付出更大的研发人力成本和硬件网络成本。比如我们在描述一个表单的模糊查询功能的时候,如果简单的描述为所有查询都要在多少秒内完成,那么这种需求将很难得到满足,以下是一些可选的描述方式。1.估计用户数为1万人,每天登录用户数为3000左右,网络的带宽为100M带宽。2.在非高峰时间根据编号和名称特定条件进行搜索,可以在3秒内得到搜索结果。3.当通过互联网接入系统的时候,期望在编号和名称搜索时最长查询时间15秒。有了这些场景和数据后,我们在进行架构设计的时候就可以有针对性的选择我们的开发框架和模式,数据库,软硬件环境配置已经复杂功能的具体实现方式等。同时这些需求还可以更好的指导我们对通过性能测试等工具对这些非功能性需求进行验证。在某个时间范围内,产品运行稳定的程度;在某些压力极端情况(断电、饱和度),产品运行稳定的程度;不正常宕机后,产品的恢复度量。如果客户需要高性能、使用极其方便而又高度安全,你会给他什么建议?1 高性能,一般需要集群实现2 使用方便,这个需要根据用户的水平。B/S是很容易掌握的。3 安全,最好用VPN进行访问,或者干脆专网专用。密码管理的问题不是系统能解决的。就算加上实时的密码锁。4 选择合适的人,并保持稳定总之,这些要求在一些大型应用里面都是必须的,比如电信级的计费系统。方便与高性能、高度安全是不完全统一的。方便带来的问题是安 全性的降低,或性能不能达到最合适的程度;高性能会导致复杂性;安全性会让性能不能达到最佳。最好的方式是选择一种优先级,比如以安全性为主要的考核标 准,适当安排性能和难易程度;或者以性能为主。尽量达到三者的平衡点,在某些极端的情况可比保证性能降低,但安全有保证你能给出一些用来描述需求的不同技术么?它们各自适用于什么场景?需求分类 :项目需求:商业需求,项目管理需求,交付需求等 产品需求:技术需求,安全需求,性能需求等如果非要说个技术那就是观察,也叫工作跟踪,通常由观察者从外部来观察使用者的工作 参与观察者,实际执行一个流程或程序,体验他们是如何实施的。需求分析需求分析在整个开发过程中占的工作量不大,但是产生的影响巨大(这又是一个二八原理的例子)。既然需求分析如此重要,照理说应该安排最强的人来搞。但实际 情况往往不是如此:很多公司负责需求分析的人并不胜任这项工作。我经历过几个不太成功的项目,其问题的根源都和需求分析有关。需求分析最要紧的是:搞清楚用户到底想要什么?如果这个问题搞错了、搞偏了,后面的步骤做得再好也是白搭(比如客户想要一个文本编辑器,结果你搞了个图形编辑器给他)。这方面其实有很多的道道,限于篇幅就不展开了,大伙儿如果有兴趣,以后可以单独说一下。在搞清楚“用户想要什么”之后,接着要整理出功能列表(也有叫Feature List),并筛选出大约20%的重点功能。这个步骤是我今天主要想介绍的,因为这个步骤和后续的各项开发密切相关。一般来说,功能筛选的依据有如下几个:1、用户经常用的功能(比如save、copy、cut、paste)2、宣传的卖点(要能够超出同类软件,吸引眼球)3、和用户利益密切相关的功能(这种功能不允许出错,比如存盘功能)这个筛选的过程要尽早完成,而且最好是产品人员、开发人员、测试人员三方的头头一起讨论,以保证立场客观、观点全面。筛选出重要功能点后,其他人员的工作安排要以重点功能为纲,有所侧重。项目管理如果你是个项目经理,在排项目计划时,就得尽量优先安排重点功能的开发/测试,而且要安排能力强的人员来完成。按照我以前的做法,重点功能排计划至少得留出1/3的时间余量,以防万一(事实证明,几乎每个稍大点的项目都会出现万一)。至于非重点功能,尽量排到后面,安排能力一般的人开发/测试。然后,在项目进行过程中,肯定要有定期的例会。作为项目经理,你应该主要关注重点功能的进度情况和风险情况。一旦项目有延期的风险,就从非重点功能开始裁减(俗称砍功能)。由于是裁减非重点功能,不至于产生致命的影响。设计界面设计界面时,你得保证所有的常用功能都放在显著的位置(比如工具条);还得保证它们用起来方便(比如提供快捷键和右键菜单支持)。对于卖点,它不一定是常用功能,它的目的是激起用户的购买欲望和使用欲望。因此你要把它们设计得比较酷,有噱头。对于利益相关的功能,大部分情况下都是侧重于业务逻辑实现。如果它既不是常用功能、也不是卖点,那么界面设计方面倒不一定要额外花大力气。其它的非重点功能,只要按照常规方法设计,不用花太大精力。编写代码我发现很多开发人员有几个通病:先做有趣或容易的功能,然后再做无聊或者繁琐的功能;对自己有兴趣的功能投入精力多,对自己没兴趣的简单应付。以上这些都是开发的大忌。作为一个职业的开发人员,不应该以自己的兴趣和喜好来决定开发的轻重缓急。正确做法应该如下:你首先得用主要精力完成上述所说的重点功能,而且要保证它们的代码质量尽可能好,尽可能方便维护(重点功能往往是经常有需求变更,经常被修改的)。对于重点功能中的“常用功能”,要保证时间性能够好(能快速响应)。对于用户利益相关的功能,要保证bug尽可能少(尤其是安全性、稳定性、健壮性的bug)。至于其它的非重点功能,只要不出明显bug,有点小缺陷无伤大雅。测试如果你是个测试人员,你同样要把主要精力用于测试那些重点功能。对于用户利益相关的功能,多进行一些健壮性测试、稳定性、安全性等测试(比如测试保存大文件是否会出错)。对于常用功能,主要进行易用性和性能测试(比如拷贝、粘贴是否易用)。至于其它功能,只要进行普通的测试,保证它不出现明显和严重bug即可。要知道Windows 2000发布的时候,尚遗留上千个未修复的bug(当然都是低优先级的),微软不也照样发布。产品演示有些软件开发完之后,会搞一些Demo进行宣传。如果你是负责进行Demo的人,你肯定要把主要的Demo时间用来秀软件的卖点,这样给客户的印象最深刻,效果最好;至于非卖点的功能,都未必要提及。几种和开发相关工作就介绍到这里,最后送给大伙一句话:Do not work hard, work smart!下面以我们的项目来介绍一个项目的开发过程:1.首先进行用户需求调研,先弄明白用户想要什么(如果有老系统,可以先参观老系统,看有什么可以改进的,有什么可以继承的)熟悉业务。需求调研完成后,完成开发文档用户调研报告,然后根据调研,列出功能列表,同时区分重点功能和非重点功能。2.调研完成后,画界面原型让用户来确认,如何使用等讲解清楚(这个过程中,可以会产生需求的变更),同时完成用户需求规格说明书,同时完成此文档的评审工作。此时,应该可以说到达了软件的一个里程碑。3.需求评审完成后,进行数据库设计和详细设计,此时形成的文档有数据库设计说明书,详细设计说明书,同时完成文档的评审工作。4.设计完成以后,就要进行开发工作了。依据详细设计说明书,此时要先进行重点功能的开发,然后进行非重点功能的开发。在此过程中开发人员进行模块的检测,确保系统的可运行。5.开发完成后,由专门的测试人员进行单元测试、流程测试、性能测试等。(此时还可能有第三方测试人员和用户代表的参与)。此时会形成专门的测试文档。6.用户测试。首先进行用户测试的培训,然后挑选部分用户进行系统的测试,此时一般会有开发人员进行现场的技术支持,使用用户尽快的熟悉系统的使用。7.系统上线试运行。需求跟踪是什么意思?什么是向前追溯,什么是向后追溯?需求跟踪的内容 跟踪能力(联系)链(TraceabilityLink)使你能跟踪一个需求使用期限的全过程,即从需求源到实现的前后生存期。跟踪能力是优秀需求规格说明书的一个特征。跟踪能力联系链记录了单个需求之间的父层、互连、依赖的关系。 1.需求跟踪目的 审核(Certification)跟踪能力信息可以帮助审核确保所有需求被应用。 变更影响分析跟踪能力信息在增、删、改需求时可以确保不忽略每个受到影响的系统元素。 维护可靠的跟踪能力信息使得维护时能正确、完整地实施变更,从而提高生产率。 项目跟踪在开发中认真记录跟踪能力数据,就可以获得计划功能当前实现状态的记录。 再设计(重新建造)。可以列出传统系统中将要替换的功能,记录它们在新系统的需求和软件组件中的位置。 重新利用跟踪信息可以帮助你在新系统中对相同的功能利用旧系统相关资源。 减小风险使部件互连关系文档化可减少由于一名关键成员离开项目带来的风险。 测试测试模块、需求、代码段之间的联系链可以在测试出错时指出最可能有问题的代码段。 2.需求跟踪能力矩阵 3.需求跟踪能力工具 4.需求跟踪能力过程 5.需求跟踪能力的可行性 变更需求代价:影响分析 “变更是免费的”这种误解是造成项目范围延伸的一个原因。在职业生涯中,绝大多数开发人员会遇到要求添加“没有代价且不影响进度的变更”的要求。对这样奇怪的要求的正确回答是“不行”,变更只能在项目时间、预算、资源的限制内进行协商。 1.影响分析过程 建议的变更涉及的问题核对表 基准(线)中是否已有需求与建议的变更相冲突? 是否有待解决的需求变更与已建议的变更相冲突? 不采纳变更会有什么业务或技术上的后果? 进行建议的变更会有什么样的负面效应或风险? 建议的变更是否会不利于需求实现或其他质量属性? 从技术条件和员工技能的角度看该变更是否可行? 若执行变更是否会在开发、测试和许多其他环境方面提出不合理要求? 实现或测试变更是否有额外的工具要求? 在项目计划中,建议的变更如何影响任务的执行顺序、依赖性、工作质量或进度? 评审变更是否要求原型法或别的用户提供意见? 采纳变更要求后,浪费了多少以前曾做的工作? 建议的变更是否导致产品单元成本增加?如增加了第三方产品使用许可证的费用。 变更是否影响任何市场营销、制造、培训或用户支持计划? 变更影响的软件元素核对表 确认任何用户接口要求的变更、添加或删除。 确认报告、数据库或文件中任何要求的变更,添加或删除。 确认必须创建、修改或删除的设计部件。 确认源代码文件中任何要求的变更。 确认文件或过程中任何要求的变更。 确认必须修改或删除的已有的单元、集成或系统测试用例。 评估要求的新单元、综合和系统测试实例个数。 确认任何必须创建或修改的帮助文件、培训素材或用户文档。 确认变更影响的应用、库或硬件部件。 确认须购买的第三方软件。 确认在软件项目管理计划、质量保证计划和配置管理计划等中变更将产生的影响。 确认在修改后必须再次检查的工作产品。 2.影响分析报告模板追溯分为两种,向前追溯和向后追溯.向前追溯就是,向保单起保日期之前追溯,主要体现在按照期内索赔式投保的产品责任险中.简单说:就是对起保之前生产的产品,在保险期间出险了,保险公司也要赔付!例如:A公司在2006年生产了一批产品,然后,在民安投保了产品责任险,保险期间为2007-01-01到2007-12-31号,追溯期为 1年,意思就是说:对于2006年生产的产品在2007年出险了,保险公司也要赔付.(追溯起始时间为:2006-01-01,追溯结束日期 为:2006-12-21号)在追溯期,但是不在保险期间发生的案件,需要理赔! 追溯期主要是向前追溯,就是起保之前,用于产品责任险比较多!在责任险中有追溯期的概念,下面查到的些资料可供大家理解。产品责任险附加条款汇编:产品责任险的承保方式有两种:一种是以事故发生为基础,这种方式下只要产品责任事故发生在保险期限内,不论何时提出索赔,保险人均要负责赔偿, 另一种是以索赔提出为基础,这种方式下不论产品责任事故是否发生在保险期限内,只要被保险人或受害人在本年度保单有效期内提出索赔,保险人就要承担赔偿责 任。上述概念是理论上的,现实承保中保险人为控制风险,对在事故发生制下提出索赔的时间和对在索赔提出制下事故发生的时间均有限制。我国目前产品责任险的基本条款采用的是事故发生制,在赔偿处理部分规定:被保险人的索赔期限,从损失发生之日起,不得超过两年。如果要采用以索赔提出为基础的方式,保险人则规定追溯期,即在追溯期开始后发生的产品责任事故并在保单有效期内提出索赔,保险人才承担责任,且 追溯期一般规定不超过5年。一般情况下,保险人出具第一张以索赔提出为基础的保单时,不给追溯期。现实承保中,采用此条款,被保险人通常可有一定宽限期, 即便保单到期或注销,只要被保险人在条款中规定的发现期中提出索赔,这个索赔仍旧有效。我国目前保险市场对产品责任险以索赔提出为基础承保的最好条件为:追溯期5年,发现期3年。采用以索赔提出为基础的方式,如果能把发现期争取到2年,则即使没有追溯期,也已经优于以事故发生为基础的承保方式了。你喜欢用什么工具跟踪需求?你怎么看待需求变化?它是好是坏?给出你的理由。你怎样研究需求,发现需求?有哪些资源可以用到?你怎么给需求制定优先级?有哪些技术?在需求过程中,用户、客户、开发人员各自的职责是什么?用户从某种意义上来讲是和客户等同的,开发人员是负责开发产品,用户和客户就是使用产品啊!你怎么对待不完整或是令人费解的需求?以客户为导向,和客户召开需求review meeting,向客户表述自己对当前需求的理解。如果有不完整或者理解有误的地方,客户会及时纠正。一定要在需求明确的前提下进一步设计,不正确的理解需求会导致项目失败。功能设计在功能设计中有哪些隐喻?给出几个成功的例子。如果有些功能的执行时间很长,怎么能让用户感觉不到太长的等待?如果用户必须要在一个很小的区域内,从一个常常的列表中选择多个条目,你会用什么控件?有哪些方法可以保证数据项的完整?建立系统原型有哪些技术?原型系统是指当前系统的原始形态,不一定就是信息系统,非信息化的系统也有原型。 广义来理解,当前系统的原始形态,这里不一定就是信息系统,非信息化的系统也有原型。狭义来理解,原型特指系统生命期开始阶段建立的,可运行的最小化系统模型。 软件开发过程就是分析系统原型,建立系统模型,再优化转换的过程。构造原型系统的八大原则 对自己的产品设计很有帮助作为一名工程师或科学家,您或许会构想些您认为有市场价值的产品构思;然而,您或许会担心您缺乏充分开发您的构思所需的培训或技能。不必担心!有成功之路可循!如果您可以演示,或者如果能给客户提供原型系统就更好了,并得到关于创新价值的真实反馈,那么您获得商业成功的可能性会大为提高。如果您希望创建企业实现自己的产品构思,请开发原型系统并牢记下列八大原则。1、认识到构思的廉价性鉴于我们生活在关联的、充满互联网智慧的世界,构思已经变得廉价,而且可能会随着时间的推移变得更为低廉。成本在于测试和验证什么是具有经济价值的。一个优秀的原型系统常常是开始与潜在客户对话并检验构思价值的最佳方式。2、从书面设计开始您或许急于开始非常快速地编写代码或设计电子产品。抑制冲动!未实际考虑一些设计因素就进行 代码编写,会导致痛苦和大量的修改。从一个简单的书面设计开始。对于一个用户界面或网页软件原型系统,一份书面设计可以有效且高效地快速处理其功能特性。 您可以从同事和(希望如此)客户获得关于图像、文本、按钮、图表、菜单或下拉式选项的位置的反馈。书面设计不仅成本不高,而且比口头表达更有价值。3、仅投入足够的工作量清楚您的目标并坚持您的目标。构造原型系统有两个很好的理由:一是检验软硬件架构的可行 性,二是创建一个演示版本并获得客户的反馈,便于您为自己的创新报价和赋予价值。牢记这些目标,并小心不要沉湎于这个过程。构造原型非常有趣,而且创新者 喜欢进行修正,但是,您希望仅投入足够的时间和工作以满足这些目标。4、期望多个选择记住模块化设计您的原型系统。优秀的原型系统通常是模块化的,这意味着您可以快速对其调整以满足客户不可预料的需求。最终决定如何使用您产品的是客户,而不是您自己。设计扩展、性能和封装的备选项,并降低成本。5、设计以方便在最终产品中的复用理想的状况是设计一个您可以大批量生产和分发的原型系统。没有许多原型系统构造工具可以满足这样的要求。典型情况下,您牺牲性能以获得设计的灵活性。寻找能够将您的原型系统从实验室推向市场的原型系统构造工具。6、避免过早对成本的关注对于硬件设计,一个潜在的耗时点和陷阱是在您的原型系统设计的早期阶段纠缠于无休止的 成本优化分析。成本总是重要的,但您的目的在于使得原型系统落在可盈利设计的有效范围内。在初始阶段,聚焦于证明创新的价值,并牢记模块化的设计原则。虽 然令人沮丧,但是您的设计或许通过很多途径都不能最终实现价值。关注于争取您的第一批客户,然后再进行成本优化的工作。7、反对“均值回归”在原型系统构造过程中,倾向于开发简单的产品,而不是开发那些令人惊叹的产品。坚持您的愿景,并确保原型系统实现了您创新的最初构想。8、确保您可以展示您的原型系统您的原型系统应当便于演示。对于客户、风险资本家(VC)和潜在的从业人员,您 希望强势出击并首先展示最瞩目的功能。切勿构建渐强音!绝大多数人群的注意力保持的时间不超过60秒。在原型系统介绍中,无论他们是面向新的从业人员还是 VC,尽可能快地进入到产品演示。如果原型系统的演示引人瞩目,所有其它的内容会逐渐被了解。应用程序怎样建立对用户行为的预期?给出一些例子。如何入手设计一组数量庞大而又复杂的特性,你能举出一些设计思路吗?有一个列表,其中有10个元素,每个元素都有20个字段可以编辑,你怎样设计这种情况?如果是 1000个元素,每个元素有3个字段呢?用不同的颜色对一段文本中的文字标记高亮,这种做法有什么问题?Web环境和Windows环境各有些什么限制?技术设计什么是低耦合和高聚合?封装原则又是什么意思?低耦合是针对类与类间的依赖关系而言,类具有单一职责,低耦合度的类不依赖其它类,从而保持其独立性;高聚合针对类中各个职责的关联程度而言。封装原则是对类的可变性而言,应遵守开放-封闭原则,对修改封闭,对添加开放。在Web应用中,你怎样避免几个人编辑同一段数据所造成的冲突?你知道设计模式吗?你用过哪些设计模式?在什么场合下用的?可复用面向对象的设计中,设计模式是被反复使用的,经过分类的代码设计经验总结。其目的是为了可重用代码,让代码容易理解。设计模式的四个要素是模式名称、问题、解决方案、效果。用过很多设计模式,Singlton,Factory,Template,Adapter,Composite等等是否了解什么是无状态的业务层?长事务如何与之相适应在搭建一个架构,或是技术设计时,你用过几种图?UML图,类图,接口图。在N层架构中都有哪些层?它们各自的职责是什么?有哪些方法可以确保架构中数据的正确和健壮?面向对象设计和面向组件设计有哪些不同之处?怎样在数据库中对用户授权、用户配置、权限管理这几项功能建模?怎样按照等级制度给动物王国(包括各种物种和各自的行为)建模?程序设计1. 你怎样保证你的代码可以处理各种错误事件?2. 解释一下什么是测试驱动开发,举出极限编程中的一 些原 则。TDD是极限编程的一种,特点是用测试来驱动开发,需求和详细设计后,根据测试用例,先编写测试代码,最后根据需求,逐步完成功能代码的添加。典型的模型有V模型和X模型。极限编程原则:持续整合,测试,快速反馈,接受变化,简单设计,小版本,计划制定.3. 看 别人代码的时候,你最关心什么地 方?目的,设计方法。4. 什么时候使用抽象类,什么时候使用接口?抽象类(is-a)中的方法可以实现,接口中的方法不能在定义时实现(like-a)。两者都不能实例化。抽象类对其子类部分可见。接口可以实现类似多重继承(针对java)。因为接口一旦创建就不能改变,所以当要创建多个版本的组件时,应使用抽象类,因为通过更新基类,子类也会更新;或者希望通过基类控制子类的行为时(设计模式中的),也应该使用抽象类,因为可以通过在抽象基类中添加实现,控制子类的状态。接口的原则是接口不变性(对象的定义与实现),当创建的功能被大量不相关对象使用时,适合使用接口。5. 除了IDE以外,你还喜欢哪些必不可少的工具?文本编辑和比较工具,sysinternals,debug工具。6. 你怎么保证代码执行速度快,而又不出问题?正确的算法设计;降低依赖耦合度;运用代码检测工具查找耗时模块。7. 什么时候用多态,什么时候用委派?8. 什么时候使用带有静态成员的类,什么时候使用单例?带 有静态成员的类能保证其不会被实例化。单例算是一个应用,其中构造函数设置成私有的,有一个静态方法获取该类的实例。单例是实现延迟实例化的方法,这种对 象创建型的模式保证了一个类只有一个实例,可以控制其客户何时访问它。这对注册表的管理设计或多线程等一些地方有很大的左右。9. 你在代码里面怎么提前处理需求的变化?给一些例子。增加读取配置文件的代码,若需求变化,修改相关的配置文件就可以了。10. 描述一下实现一段代码的过程,从需求到最终交付。定义需求,概要设计,详细设计(组件划分,结构图),编码,单元测试,集成测试,完全测试,发布。算法怎样知道一个数字是不是2的乘方?怎样判断一个数是不是奇数?除2取余。(0现在也被认为是偶数了吧)怎样找出链表中间的元素?已得到长度:单个循环;未知长度:可用两个指针(一头一尾)实现。怎样改变10,000个静态HTML页面中所有电话号码的格式?举出一个你所用过的递归的例子。删除非空文件夹所有内容(C+)在散列表和排序后的列表中找一个元素,哪个查找速度最快?散列表不管是书、杂志还是网络,你从中所学到的最后一点算法知识是什么?KMP算法怎样把字符串反转?你能不用临时的字符串么?递归、逐个交换、用栈结构实现等等。你愿意用什么类型的语言来编写复杂的算法?C/C+有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?你知道“旅行商问题(Traveling Salesman Problem)”么?数据结构怎样在内存中实现伦敦地铁的结构?中国国家馆“东方之冠”,取自中国古代木结构建筑中的元素斗拱。 地区馆屋顶“中国馆园”还将运用生态农业景观等技术措施有效实现隔热,使能耗比传统模式降低25%以上。 环保概念”在世博园随处可见。5万平方米的生态绿墙,世界最大;4.6兆瓦太阳能发电机组容量,全国第一;420公里的轨道交通网,超过1000辆的新能源汽车,园区内公共交通实现“零排放”上海为打造“低碳世博”可谓费尽心机。 除中国各展馆外,参展各国场馆也尽显“低碳生活”之美。在占地3000平方米的丹麦馆螺旋形坡道入口,显眼地摆放着特有展品自行车,还有一个即将注入哥本哈根海港碧水的池塘。5月1日世博会开幕后,观众即可体验北欧的“低碳生活”:骑上自行车,或者脱光鞋袜,将脚浸泡在清澈的海水中享受夏日的清凉。德国馆的绿色建筑技术,西班牙馆的环保藤条材料以及如同一个没水、没电、没热的“原始洞穴”的伦敦零碳社区低碳技术把世博园区装扮得美轮美奂。 伦敦零碳馆;最佳实践区北部区域的案例。零碳馆建筑面积为2500平米,暖通需求由太阳能风力驱动的吸收式制冷风帽系统和江水源公共系统供给,电力则通过建筑附加的太阳能发电板和生物能热电联产生并满足建筑全年的能量需求,为参观者提供最低能耗的舒适体验。 生活中,我们一方面要鼓励采取低碳的生活方式,减少碳排放;另一方面是通过一定碳抵消措施,来达到平衡。种树就是“碳中和”的一种方式,需种植的树木数(棵)等于二氧化碳排放量(千克)除以18.3。 这些金点子中,涉及到洗衣机节水、食物储藏、烹饪、厨房节水、厨房去污、居住节电节水、汽车出行、冰箱空调等家用电器节电。现在,这些金点子已经被整理好收入低碳生活指导手册中。 如,同样长的洗涤周期,“柔化”模式比“标准”模式叶轮换向次数多,电机启动电流是额定电流的57倍,“标准洗”更省电; 如果每个汽车司机都注意给轮胎及时适当充气,车辆能效就能提高6%,每辆车每年就可以减少90千克二氧化碳排放量; 告诉你怎样计算“碳”消耗量,生活中的减碳常识有哪些? 家庭“碳”排放量如何计算 每家每户在生活中都要排放“碳”,你知道每天的碳排放量是多少吗?下面的方法不妨一试。 家庭用电中,二氧化碳排放量(千克)等于耗电度数乘以0.785。也就是说,你用了100度电,等于你排放了大约78.5千克二氧化碳。 出行时,如果开小轿车,二氧化碳排放量(千克)等于油耗公升数乘以2.7。 家用天然气中,二氧化碳排放量(千克)等于天然气使用度数乘以“碳强度系数”0.19。 家用自来水中,二氧化碳排放量(千克)等于自来水使用度数乘以0.91。 去年,中国政府对全世界公开承诺量化减排指标,决定到2020年温室气体排放比2005年下降40%-45%。在应对全球气候变暖和能源危机的跋涉中,以低能耗、低污染、低排放为标志的低碳经济时代已如约而至,正在深刻地改变着我们的生活。 我们面临是日益恶化的环境,即将枯竭的化石能源,居高不下的生活成本.其实只要举手之牢就能让世界变的更美好。保护环境,节约能源是我们是基本国策,我们要实现可持续发展,既要促进人与自然的和谐,实现经济发展和人口,资源环境相协调,又要坚持走生产发展,生活富裕,生态良好的文明发展道路,保证一代一代永续发展。 减少二氧化碳的排放,选择“低碳生活”是每个公民应尽的责任。电脑,电灯,空调,任何电器一旦不用了应随手关掉;手机一旦充电完成,立即拔掉充电插头;使用节能电灯泡,一只11W节能灯的照明效果顶的上60W的普通灯泡,而且每分钟都比普通灯泡节电80%,如果全国使用12亿只节能灯,节约的电量相当于三峡水电站的年发电量;选择节能空调,温度不要开的过高或过低,这样不但耗能,而且让人不舒适,削弱了人体自动调节体温的能力;多步行,骑自行车,坐轻轨或地铁;电视机屏幕不要太亮,调成中等亮度,则既能节能又能保护视力,3亿台电视机,仅调暗亮度这个小动作,每年就可以省电50亿度 我的一些生活习惯必须改变,比如提前淘米并浸泡10分钟,然后再用电饭锅煮,可减少4.5度电,算下就能减少4.4千克二氧化碳排放呢。这些都是举手之劳,如果不做就成了浪费之源。” 低碳生活, 就是指生活作息时所耗用的能量要尽力减少,从而减低碳,特别是二氧化碳的排放量,从而减少对大气的污染,减缓生态恶化,主要是从节电节气和回收三个环节来改变生活细节。低碳生活 1。 使用传统的发条式闹钟替代电子钟,这样可以每天减少大约48克的二氧化碳排放量。 2。 使用传统牙刷替代电动牙刷,这样可以每天减少48克二氧化碳排放量。 3。 把在电动跑步机上45分钟的锻炼改为到附近公园慢跑,可以减少将近1000克的二氧化碳排放量。 4。 如果去8公里以外的地方,乘坐轨道交通可比乘汽车减少1700克的二氧化碳排放量。 5。 不用洗衣机甩干衣服,而是让衣服自然晾干,这可以减少2300克的二氧化碳排放量。 6。 在午餐休息时和下班后关闭电脑及显示器,这样做除省电外还可以将这些电器的二氧化碳排放量减少三分之一。 7。 改用节水型淋浴喷头,不仅可以节水,还可以把三分钟热水淋浴所导致的二氧化碳排放量减少一半。 8、 多运动,少看电视机,少上网,多与家人和朋友聚聚,多出去散散步。 9、尽量吃绿色食品,多喝水,少喝酒和碳酸类饮料,高脂肪高糖等垃圾食品尽量避免 10、用节能灯代替白炽灯,瓦数(功率)尽量低点,照明够了就行,而且房间亮度低点更浪漫更有情趣。 11、近距离外出,尽量使用非机动车(步行或自行车) 12、不乱丢垃圾,进行垃圾分类。 13、没人或没必要的时候,不开灯、不使用空调。 14、多开窗多通风,随手关灯。关紧水龙头,关紧煤气灶关电视,关空调,关电脑。 15、洗菜,洗水果的水在家中预备一个大桶盛起来,可以浇花,冲厕所,做到生活废水再利用。 16、烧饭可以先把米在水里泡段时间再烧,做绿豆汤不用高压锅,晚上把绿豆泡在热水瓶的开水里,早上就可以美美的喝了。 17、手机晚上最好关上,一个省电,一个有利于休息,当然有要紧事情除外。 18、有些包装纸,广告纸反面是空白的可以用来做便签或草稿纸 19、合理使用冰箱,定期除霜。电脑,电视机,音响,人临时离开时,进入待机状态,以节省能源,不用时直接关机。 20、选购商品不要一味追求高档,实用,性价比高就是好商品,避免浪费。 21、能不开空调就不开空调,尽量扇电风扇,或是扇扇子,能手洗衣服,尽量不用洗衣机洗。 22、抽水马桶贮水桶中放一个装满水的大号可乐瓶,减少贮水量。最好能设计两个开关,一个用来冲大便,另一个冲小便。 23、充分利用自然能如太阳能热水器,风力发电,能不用电梯就尽量走楼梯,可以省电又能锻炼身体。低碳生活,从“地球一小时”开始 3月27日是“地球一小时”活动日。“地球一小时”是WWF(世界自然基金会)应对全球气候变化所提出的一项倡议,旨在通过熄灯一小时来唤醒全球民众对于二氧化碳排放的重视,从而减轻过量二氧化碳排放导致的气候变化对人类的威胁。“地球一小时”2010年的目标:全球6000多个城市、超过10亿人参与活动,政府、企业、社区积极加入,让“地球一小时”成为世界上规模最大的环保行动。正如有识者指出,“熄灯一小时”不是目的,关键是让环保节能意识深入人心,希望我们每一个人不仅在这一天加入这个活动,更在以后的日子里为保护地球尽力怎样以最有效的方式在数据库中存储颜色值?队列和堆栈区别是什么?队列是先进先出结构,堆栈是先进后出结构用堆或者栈存储数据的区别是什么?怎样在数据库中存储N维向量?你倾向于用哪种类型的语言编写复杂的数据结构?C/C+21的二进制值是什么?十六制值呢?二进制:00010101;十六进制:0x15不管是书、杂志还是网络,你从中所学到的最后一点数据结构的知识是什么?Dijkstra最短路径。怎样在XML文档中存储足球比赛结果(包括队伍和比分)?有哪些文本格式可以保存Unicode字符?测试什么是回归测试?怎样知道新引入的变化没有给现有的功能造成破坏?产品修正了bug或增加了功能,生成新的版本,对这个版本进行测试,就叫做回归测试。保 证变化没有对产品原有功能造成破坏,最可靠的方式是对产品进行全面的测试。还有一个方法是只对修改部分的相关部分进行测试,这是一种折中的方法,因为进 度、成本的原因,这也是经常被采用的方法,这个方法有一定的风险,因为准确的确定产品修改部分的相关部分往往很有难度,范围不好确定。具体采用哪种回归方式,要由这个产品的质量要求、人力资源、时间进度等因素来决定。如果业务层和数据层之间有依赖关系,你该怎么写单元测试? 如果有了数据层的实现,就没什么问题了。提出这个问题,主要是在数据层没有实现的情况下,如何对业务层的代码进行单元测试?这个时候我们需要模拟数据层,给业务层提供数据,比如简单的返回各类数据,直接从文本文件、数据库中读取我们需要的测试数据等来完成单元测试。你用哪些工具测试代码质量? 针对代码的测试工具有很多,一般分2大类,是从执行测试的方式上分的,一是静态分析类,一是动态测试类。静 态分析类,特点就是不需要执行代码。象logiscope、C+ Test、LINT就属于这一类,主要是检测代码的编写规范,分析代码的复杂度、可能存在的隐患等等。这类工具在对可靠性要求较高的软件领域使用较多,比 如航空航天。我们平时做的代码评审,就是在人工做这类工作。动态测试类,主要是发现代码中诸如内存泄露、数据访问越界等这类错误,比如 Compuware DevPartner、Rational PurifyPlus、valgrind这类工具。这类测试工具,要求测试代码必须运行起来,只有执行到的代码,存在问题才会被发现。没有执行到的代码即 使存在问题也不能被发现。所以使用这类测试,一是靠工具,二是靠你制造的测试输入,如果测试输入不够丰富,很多bug是发现不了的。还有一个很特别的工具PolySpacee,它打乱了上面的这个分类,它是采用静态的方式,却能够发现动态错误,即不需要制定和执行测试用例,只是静态扫描代码,就能够发现内存泄露这类问题。我是从一个好朋友那里了解到的,但没具体使用过,细节不是很了解。象XUnit、覆盖率测试工具这类在代码测试中也会经常用到,但它们属于辅助性工具,本身不能对代码进行什么测试。Rational Purify、Rational Quantify、Code Reviewer、Intel vTunes、Source Monitor。在产品部署之后,你最常碰到的是什么类型的问题?产品发布后,特殊数据、特殊测试环境导致的问题比较多。易用性上,因为对用户的使用习惯不了解,可能会有有问题反馈。包括性能,因为对用户的实际使用规模估计不足,也可能导致问题。什么是代码覆盖率?有多少种代码覆盖率? 代码覆盖率是单元测试里的概念,指测试结束后,被执行的代码或路径数量占总代码或路径数量的百分比。语句覆盖、分支覆盖、路径覆盖是常见的几种覆盖率方式。统计代码的覆盖率,一般都需要使用测试工具,人工很难做这项工作。功能测试和探索性测试的区别是什么?你怎么对网站进行测试? 功能测试,需要依照事前制定好的测试用例来执行测试。探 索性测试,不会事前制定测试用例,是在测试中边设计边执行。其实在功能测试中也有探索性测试的使用,因为测试用例不可能细化到每个细节,测试人员在执行时 肯定会做一些探索性测试。探索性测试一般在测试初期对产品不了解时,或者到了后期在现有测试用例基础上发布不了bug时使用。还有在安全性测试中,探索性 测试肯定要经常被用到。怎么对网站进行测试?不知道为什么要放到这个问题里来。网站除了一般性的功能测试外,性能、安全性测试也是必须要进行的测试内容。类似安装卸载、升级这类产品测试中关注的内容,网站测试就不需要关注了。测试套件、测试用例、测试计划,这三者之间的区别是什么?你怎么组织测试? 先从大的说。测试计划是指导整个测试过程的一份概述文档,包括测试范围、测试策略、人力物力资源、时间进度、风险分析等内容。测试套件,是测试用例的一个大的分类,按照逻辑,或者说按照测试组的理解把测试用例划分成不同的部分,每个部分就是一个test suite。测试用例,最底层的测试产品,实际覆盖产品各个功能点、非功能点的测试。如果用过XUnit工具,应该对test suite、test case这样的划分不陌生。要对电子商务网站做冒烟测试,你会做哪些类型的测试? 冒烟测试,主要目的是通过执行较少或较简单的测试用例,验证产品基本功能是否正常。如果这个测试都没有通过,就没有必要投入人力进行后续的测试工作了。对电子商务网站理解的不多,如果是我对电子商务网站进行冒烟测试的话,我会执行:用户注册,登陆,检索,挑选商品、购买、付账这些测试,每类只做一项基本测试。另外保证每个链接都是有效的。客户在验收测试中会发现不满意的东西,怎样减少这种情况的发生? 可 能比较多的情况是:有些功能实现不是用户想要的;不满足特殊的行业要求;性能没达到用户的要求;使用习惯、易用性不符合用户要求等等这类。比较好的方式是 渐近的给用户提供产品,让用户能在产品的不同开发阶段介入,提出意见,每个阶段都进行相应的测试。如果用户能作为开发测试组的一员,那就更好了。维护1. 你用哪些工具在维护阶段对产品进行监控?Windbg,sysinternals,脚本。2. 要想对一个正在产品环境中被使用的产品进行升级,该注意哪些重要事项?升级不影响现有环境;升级的组件不影响其它组件的正常使用;不引入bug;若出现重大问题可顺利取消升级并具有rollback机制。3. 如果在一个庞大的文件中有错误,而代码又无法逐步跟踪,你怎么找出错误?代码中加入Log机制;或者利用某些静态代码分析工具(限于语法或简单逻辑错误)。4. 你怎样保证代码中的变化不会影响产品的其他部分?运用合适的开发和设计方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年北京市公务员申论热点问题冲刺押题试卷(含答案)
- 2026届甘肃省定西市岷县第二中学化学高二第一学期期中调研试题含解析
- 江西省鄱阳县一中2026届化学高三第一学期期末达标测试试题含解析
- 北京市延庆区2022-2023学年四年级上学期英语期末试卷(含答案)
- 福建省连城一中2026届化学高一上期中质量跟踪监视模拟试题含解析
- 山东省济南市章丘区第四中学等校联考2024-2025学年八年级上学期语文期末试卷(含答案)
- 基于大数据的护理随访需求预测与干预
- 6S管理检查评分表
- 接管仓库主管协议书
- 攀枝花用工合同范本
- 湖北武汉2022-2024年中考满分作文32篇
- 司法鉴定技术职业规划
- 仪器校验管理办法
- 学堂在线 海权与制海权 章节测试答案
- 咏春拳介绍教学课件
- 统编版(2024)八年级上册语文名著阅读:《红星照耀中国》《红岩》练习题+答案
- 2025事业单位考试题库及答案(公基)
- 锚杆支护培训课件
- 个人养老金课件
- 2016版山东省建设工程消耗量定额价目表 山东省建筑工程价目表
- ccp点确认管理制度
评论
0/150
提交评论