《软件开发面试百问》word版.doc_第1页
《软件开发面试百问》word版.doc_第2页
《软件开发面试百问》word版.doc_第3页
《软件开发面试百问》word版.doc_第4页
《软件开发面试百问》word版.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件开发面试百问软件开发面试百问2010-05-10 13:10需求1.你能给出一些非功能性(或者质量)需求的例子么?2.如果客户需要高性能、使用极其方便而又高度安全,你会给他什么建议?3.你能给出一些用来描述需求的不同技术么?它们各自适用于什么场景?4.需求跟踪是什么意思?什么是向前追溯,什么是向后追溯?5.你喜欢用什么工具跟踪需求?6.你怎么看待需求变化?它是好是坏?给出你的理由。7.你怎样研究需求,发现需求?有哪些资源可以用到?8.你怎么给需求制定优先级?有哪些技术?9.在需求过程中,用户、客户、开发人员各自的职责是什么?10.你怎么对待不完整或是令人费解的需求?功能设计1.在功能设计中有哪些隐喻?给出几个成功的例子。2.如果有些功能的执行时间很长,怎么能让用户感觉不到太长的等待?3.如果用户必须要在一个很小的区域内,从一个常常的列表中选择多个条目,你会用什么控件?4.有哪些方法可以保证数据项的完整?5.建立系统原型有哪些技术?6.应用程序怎样建立对用户行为的预期?给出一些例子。7.如何入手设计一组数量庞大而又复杂的特性,你能举出一些设计思路吗?8.有一个列表,其中有10个元素,每个元素都有20个字段可以编辑,你怎样设计这种情况?如果是1000个元素,每个元素有3个字段呢?9.用不同的颜色对一段文本中的文字标记高亮,这种做法有什么问题?10.Web环境和Windows环境各有些什么限制?技术设计1.什么是低耦合和高聚合?封装原则又是什么意思?2.在Web应用中,你怎样避免几个人编辑同一段数据所造成的冲突?3.你知道设计模式吗?你用过哪些设计模式?在什么场合下用的?4.是否了解什么是无状态的业务层?长事务如何与之相适应?5.在搭建一个架构,或是技术设计时,你用过几种图?6.在N层架构中都有哪些层?它们各自的职责是什么?7.有哪些方法可以确保架构中数据的正确和健壮?8.面向对象设计和面向组件设计有哪些不同之处?9.怎样在数据库中对用户授权、用户配置、权限管理这几项功能建模?10.怎样按照等级制度给动物王国(包括各种物种和各自的行为)建模?程序设计1.你怎样保证你的代码可以处理各种错误事件?2.解释一下什么是测试驱动开发,举出极限编程中的一些原则。3.看别人代码的时候,你最关心什么地方?4.什么时候使用抽象类,什么时候使用接口?5.除了IDE以外,你还喜欢哪些必不可少的工具?6.你怎么保证代码执行速度快,而又不出问题?7.什么时候用多态,什么时候用委派?8.什么时候使用带有静态成员的类,什么时候使用单例?9.你在代码里面怎么提前处理需求的变化?给一些例子。10.描述一下实现一段代码的过程,从需求到最终交付。算法1.怎样知道一个数字是不是2的乘方?怎样判断一个数是不是奇数?2.怎样找出链表中间的元素?3.怎样改变10,000个静态HTML页面中所有电话号码的格式?4.举出一个你所用过的递归的例子。5.在散列表和排序后的列表中找一个元素,哪个查找速度最快?6.不管是书、杂志还是网络,你从中所学到的最后一点算法知识是什么?7.怎样把字符串反转?你能不用临时的字符串么?8.你愿意用什么类型的语言来编写复杂的算法?9.有一个数组,里面是从1到1,000,000的整数,其中有一个数字出现了两次,你怎么找出那个重复的数字?10.你知道旅行商问题(Traveling Salesman Problem)么?数据结构1.怎样在内存中实现伦敦地铁的结构?2.怎样以最有效的方式在数据库中存储颜色值?3.队列和堆栈区别是什么?4.用堆或者栈存储数据的区别是什么?5.怎样在数据库中存储N维向量?6.你倾向于用哪种类型的语言编写复杂的数据结构?7.21的二进制值是什么?十六制值呢?8.不管是书、杂志还是网络,你从中所学到的最后一点数据结构的知识是什么?9.怎样在XML文档中存储足球比赛结果(包括队伍和比分)?10.有哪些文本格式可以保存Unicode字符?测试1.什么是回归测试?怎样知道新引入的变化没有给现有的功能造成破坏?2.如果业务层和数据层之间有依赖关系,你该怎么写单元测试?3.你用哪些工具测试代码质量?4.在产品部署之后,你最常碰到的是什么类型的问题?5.什么是代码覆盖率?有多少种代码覆盖率?6.功能测试和探索性测试的区别是什么?你怎么对网站进行测试?7.测试套件、测试用例、测试计划,这三者之间的区别是什么?你怎么组织测试?8.要对电子商务网站做冒烟测试,你会做哪些类型的测试?9.客户在验收测试中会发现不满意的东西,怎样减少这种情况的发生?10.你去年在测试和质量保证方面学到了哪些东西?维护1.你用哪些工具在维护阶段对产品进行监控?2.要想对一个正在产品环境中被使用的产品进行升级,该注意哪些重要事项?3.如果在一个庞大的文件中有错误,而代码又无法逐步跟踪,你怎么找出错误?4.你怎样保证代码中的变化不会影响产品的其他部分?5.你怎样为产品编写技术文档?6.你用过哪些方式保证软件产品容易维护?7.怎样在产品运行的环境中进行系统调试?8.什么是负载均衡?负载均衡的方式有哪些种?9.为什么在应用程序的生命周期中,软件维护费用所占的份额最高?10.再造工程(re-engineering)和逆向工程(reverse engineering)的区别是什么?配置管理1.你知道配置管理中基线的含义么?怎样把项目中某个重要的时刻冻结?2.你一般会把哪些东西纳入版本控制?3.怎样可以保证团队中每个人都知道谁改变了哪些东西?4.Tag和Branch的区别是什么?在什么情况下该使用tag,什么时候用branch?5.怎样管理技术文档-如产品架构文档-的变化?6.你用什么工具管理项目中所有数字信息的状态?你最喜欢哪种工具?7.如果客户想要对一款已经发布的产品做出变动,你怎么处理?8.版本管理和发布管理有什么差异?9.对文本文件的变化和二进制文件的变化进行管理,这二者有什么不同?10.同时处理多个变更请求,或是同时进行增量开发和维护,这种事情你怎么看待?项目管理1.范围、时间、成本,这三项中哪些是可以由客户控制的?2.谁该对项目中所要付出的一切做出估算?谁有权设置最后期限?3.减少交付的次数,或是减少每个每个交付中的工作量,你喜欢哪种做法?4.你喜欢用哪种图来跟踪项目进度?5.迭代和增量的区别在哪里?6.试着解释一下风险管理中用到的实践。风险该如何管理?7.你喜欢任务分解还是滚动式计划?8.你需要哪些东西帮助你判断项目是否符合时间要求,在预算范围内运作?9.DSDM、Prince2、Scrum,这三者之间有哪些区别?10.如果客户想要的东西太多,你在范围和时间上怎样跟他达成一致呢?软件测试部分答案(朱少民老师)1.什么是回归测试?怎样知道新引入的变化没有给现有的功能造成破坏?【参考答案】由于软件修改或变更,对修改后的工作版本所有可能影响的范围进行的测试,就是回归测试。回归测试的目的是发现原来正常的功能特性出现新的问题-回归缺陷,从而确保原来正常的或符合要求的特性,不受其它区域修改的影响。回归测试,伴随着测试过程,单元测试、集成测试和系统测试中,一旦有变更或修正,都要进行相应的回归测试。通过代码查看或代码评审,可以基本知道新引入的变化是否会给现有的功能造成影响,但不能确定,所以需要进行回归测试。2.如果业务层和数据层之间有依赖关系,你该怎么写单元测试?【参考答案】在JAVA中,如果业务层与数据层之间有依赖关系,也就是说业务处理不单纯,这时我们一般用Mock对象来模拟所需要的数据,来进行单元测试。简单地说mock就是模型,模拟测试时需要的对象及测试数据。这类测试工具有MockObjects、Xdoclet、EasyMock、MockCreator、MockEJB、ObjcUnit、jMock等比如,用过Struts的都知道,Struts中的action类要运行必须依靠服务器的支持,只有服务器可以提供HttpServletRequest,HttpServletResponse对象,如果不启动服务器,那么就没有办法对action类进行单元测试,而借助mock,可以完成struts的Action的测试。对业务层测试可以用Mock来模拟,而对数据层如何测试?有两种方法:使用Mock对象来测试DAO。它屏蔽了具体的关系数据库,它的优点是测试代码的编写方便,可以快速运行。缺点:风险太大,对数据层测试的力度太小,屏蔽了很多与数据库相关的问题,比如:对象和数据库表之间映射,查询语句的语法是否正确。直接在关系数据库中测试。优点:能对数据层进行完整的测试。缺点:单元测试运行速度太慢,要频繁的对数据库进行操作还可以参考下列文章:如何对数据源层进行单元测试3.你用哪些工具测试代码质量?【参考答案】这就取决于使用工具的经验,而这方面的经验,开发人员更多。主要的工具有适合Java代码的Checkstyle、Findbugs、Jalopy、PMD、Parasoft Jtest、Coverity Prevent for Java;适合C+语言,有Parasoft C+Test、Coverity Prevent for C/C+FindBugs,第1部分:提高代码质量代码检测:Code Review与CheckStyle代码优化:Jalopy 4.在产品部署之后,你最常碰到的是什么类型的问题?【参考答案】产品部署之后,容易碰到的问题是安装配置上不对,测试环境和实际运行环境总是存在差异。其次,出现的问题,可能是系统稳定性问题、性能问题,可能由于脏数据、传输中的异常数据和大数据量等引起。5.什么是代码覆盖率?有多少种代码覆盖率?【参考答案】当我们想了解测试是否充分、是否有些地方没被测试过,就需要对所有测试过的地方有所了解,也就是了解测试的覆盖程度。测试越充分,测试的覆盖程度越高,产品的质量就越能得到保证。这种程度的量化就是测试覆盖率,即测试覆盖率是用来衡量测试完成程度、或评估测试活动覆盖产品代码的一种量化的结果,评估测试工作的质量,也是产品代码质量的间接度量方法。如果用公式描述的话,可以看作测试过程中已验证的区域或集合和要求被测试的总的区域或集合的比值。基于代码的测试覆盖评测是对被测试的程序代码语句、代码块、类、函数(方法)、路径或条件的覆盖率分析。如果应用基于代码的覆盖率分析,一般需要借助工具(如IBM Rational PureCoverage、Bullseye Coverage、开源Clover、EMMA、Cobertura和NoUnit等)来执行。代码覆盖率工具Bullseye Coverage使用emma测量测试覆盖率6.功能测试和探索性测试的区别是什么?你怎么对网站进行测试?【参考答案】这个题目本身有问题,把功能测试和探索性测试比较不合理。功能测试中包含了按已完成的测试用例或已计划的测试大纲等进行测试和探索性测试,而探索性测试一般也是为了发现功能中的问题,虽然探索性测试还会涉及安全性测试、性能测试等。功能测试方法中包括等价类划分、边界值分析、因果图、决策表、正交试验法等,也包括错误猜测法,错误猜测法也可归为探索性测试。探索性测试,也可以称随机测试(ad-hoc test),充分发挥测试人员最大的灵动性、创造性,进行各种猜测和试探,去发现一些相对隐藏比较深或偏僻的软件缺陷。随机(ad-hoc)测试,也可作为一种重要的测试辅助手段,以帮助测试人员尽早地熟悉产品,发现测试用例的不足,添加或改进测试用例。我的书全程软件测试对它们做了充分讨论。对网站进行测试时,不仅要做好功能测试,包括功能的逐项验证、针对功能的负面测试、探索性测试等,还要进行安全性测试、性能测试、UI适用性测试等。7.测试套件、测试用例、测试计划,这三者之间的区别是什么?你怎么组织测试?【参考答案】测试用例(test case)是为了更有效地发现缺陷而设计的、可以独立地执行的最小测试单元。测试套件(test suite)是为了完成某个测试目标或任务而组织的若干个测试用例的集合。测试计划(test plan)是对测试活动的事先策划,包括确定测试范围、估算测试工作量、识别测试风险、安排资源和进度等。测试计划指导测试用例的设计和测试套件的创建,测试套件是由测试用例构成。测试计划的实施需要借助测试用例、测试套件来实现。组织测试,简单地说就是计划测试-设计测试用例-v创建测试套件-执行测试套件(转化为执行测试用例)-测试结果分析和评估-调整测试计划-详细参见全程软件测试8.要对电子商务网站做冒烟测试,你会做哪些类型的测试?【参考答案】冒烟测试(smoke test)这个名称的来历,大概是从电路板测试得来的。因为当电路板做好以后,首先会加电测试,如果板子没有冒烟在进行其它测试,否则就退回去。软件中的冒烟测试就是在每日构建(daily build)软件包后,对系统的基本功能进行快速的测试,以验证基本功能是否能正常运行。如果有问题,就打回开发部门;如果正常运行,说明软件包构建成功,接下来就可以进行常规测试或大规模测试。对电子商务网站做冒烟测试,包括基本功能测试和性能测试。基本功能测试可以完成一个交易的完整过程,即从系统登录-商品查询-选择商品-提交订单-确认-付款-结算等。9.客户在验收测试中会发现不满意的东西,怎样减少这种情况的发生?【参考答案】客户可能发现功能或界面设计和他预想的不一致、或者会发现有些功能的操作不是很方便、或者发现一些错别字等各种缺陷。针对不同的问题,有相应的一些办法,概括起来就是和客户进行充分沟通,真正理解客户的需求,和客户的理解达成一致。其次,在开发期间,还可以邀请客户参与软件设计规格说明书、测试计划、测试用例等的评审,当软件能基本正常工作时再次邀请客户从头到尾再看一遍(product walk-through)。最后,就是开发人员和测试人员做好自己的本职工作,构建高质量的软件,进行充分的测试。10.你去年在测试和质量保证方面学到了哪些东西?【参考答案】通过自己遇到具体的问题,来说明。例如,某个特定的缺陷分析,使你认识到某个方面的问题,然后找到真正原因,并加以克服。或者,通过某个质量事故,增强了质量第一的意识,或者由于某些冲突导致项目质量问题,认识到沟通、流程或规范等的重要性。当然,还有一些具体的知识或能力,如工具(Jmeter,Selenium,QTP,LoadRunner)的使用,CMM/CMMI,ISO9000等等。软件项目管理部分答案1.范围、时间、成本,这三项中哪些是可以由客户控制的?范围、时间、成本,是项目管理中常说的三角关系。任何一方改变都可能牵扯到其他两方的变动。项目管理的本质,就是在保证质量的前提下,寻求这三者之间的最佳平衡。因为客户是需求方和投资方,客户有权对这三者进行控制,当然客户主要控制范围,即提出他们的需求-项目要实现的功能特性,其次,客户也非常关心能交付的时间和所付出的成本。在满足客户的需求情况下,可以在时间、成本上和客户进行交流、谈判。从项目管理的角度看,最好固定其中一项,其他两项可以根据实际状况来调节保证项目质量。2.谁该对项目中所要付出的一切做出估算?谁有权设置最后期限?项目成功是团队协作的结果。在对项目进行估算的时候,需要由参与项目各个环节的人进行符合实际的估算,最后汇总起来进行综合分析计算,获得项目总的估算结果。项目的最后期限设置除了客户定死最后交付时间,其他的情况都是根据项目的进度估算结果而进行符合实际的计划得出的。3.减少交付的次数,或是减少每个每个交付中的工作量,你喜欢哪种做法?根据项目的类型和项目进行中的实际情况来决定,如果项目是规模比较大,时间长的,那么就应增加交付次数或者减少每个每个交付中的工作量,以便及时考察项目进展,保证项目进度。例如,一个项目按计划进行到第一个里程碑发现项目进度明显落后,而下一个检查点(也就是交付的工作量)距离还很长管理层需要及时了解其进展,那么交付的次数的就要根据现在的时间状况来增加。反过来,如果这个项目的进度非常好,甚至超前,而下一个检查点(也就是交付的工作量)距离还很短,我们就可以减少交付次数。过去人们在传统的软件项目中,开发周期比较长,往往减少交付的次数,更好地控制质量;而现在,有一部分比较倾向于敏捷方法,喜欢减少每个每个交付中的工作量,更好地、更及时地满足用户的需求。在互联网上的web应用,减少每个每个交付中的工作量是一个比较好的策略。4.你喜欢用哪种图来跟踪项目进度?要根据项目的特点来决定,复杂、规模大的可能要借助甘特图和网络图来分析和跟踪进度。简单、规模小的项目根据进度报告百分比和表格跟踪就可以了。5.迭代和增量的区别在哪里?软件开发不是一躇而就,其过程犹如雕琢一件工艺品,由无形到有形、由粗到细,很难一次就能开发出功能完善、强大的一个版本,而往往是分阶段进行,一个版本接一个版本的发布出去。软件开发分阶段可以通过两种模型来描述,即增量模型和迭代模型。增量模型描述软件产品的不同阶段是按产品所具有的功能进行划分,先开发主要功能或用户最需要功能,然后,随着时间推进,不断增加新的辅助功能或次要功能,最终开发出一个强大的、功能完善的、高质量的、稳定的产品。迭代模型描述软件产品的不同阶段是按产品深度或细化的程度来划分,先将产品的整个框架都建立起来,在系统的初期,已经具有用户所需求的全部功能。然后,随着时间推进,不断细化已有的功能或完善已有功能,这个过程好像是一个迭代的过程。最终的目标是一致的,也是为了实现一个强大的、功能完善的、高质量的、稳定的产品。6.试着解释一下风险管理中用到的实践。风险该如何管理?比如十大风险清单:就是在项目进行中,不时地更新和处理项目当前风险最高的前十项风险。以保证项目不脱离主轨道。因为项目中的风险大大小小会很多。十大风险清单就是抓住重要的风险及时处理,而又关系的小风险可能也就随之消失。风险管理就是通过风险的识别、预测、估算和衡量、选择有效的方法和手段,对风险进行预防、避免、降低或者转移的管理过程。7.你喜欢任务分解还是滚动式计划?根据项目特点来定,一般会选用任务分解的计划,责任清楚,可控性更强。滚动式计划的灵活性比较强,适应性比较好,但容易引起大家对计划不够重视,计划能力降低,或者可控性会差些。有时会将这两种方法结合起来使用。8.你需要哪些东西帮助你判断项目是否符合时间要求,在预算范围内运作?前提是这个项目的进度计划和成本计划是符合项目实际情况并不断随着项目的时间发展而滚动更新的。确保收集的进度和花费的成本就真实可靠的。在此时项目的范围没有影响到时间和成本的规划。那么就可以根据项目时间与计划的内容进行对比来判断项目符合时间要求,在预算范围内运作。常用的方法有基线对比法和挣值法。9.DSDM、Prince2、Scrum,这三者之间有哪些区别?动态系统开发方法(Dynamic System Development method,DSDM)是众多敏捷开发方法中的一种,它倡导以业务为核心,快速而有效地进行系统开发。PRINCE2(PRojects IN Controlled Environments 2)为项目管理提供了一种结构化的方法,这种方法最早是在1989年由英国政府计算机和电信中心(CCTA)开发的,作为英国政府IT项目管理的标准。PRINCE2如今日益流行,是英国项目管理的标准,它为管理项目提供清晰界定工作框架,介绍如何协调项目中的人和活动、如何设计和监督项目以及在项目发生变更的情况下如何调整的流程。每一个流程都详

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论