关于桩身应局部变量在使用前必须初始化,以下哪些说法是正确的

问题:桩基础一般采用明挖的方法施工

导游人员在交谈过程中应注意()。A.结束交谈的最佳句号是微笑B.如对方看表赶紧结束谈话C.不要在对

患者排便或用力后,肛缘突起┅圆形或椭圆形肿块剧烈疼痛,检查见肛缘肿块颜色紫暗稍硬,触痛明显

在附着式外拉线抱杆分解组塔吊装构件过程中,吊件控制繩应随吊件的提升随时保持收紧状态()

分部分项工程开始工作条件,有施工分包的施工承包单位应与分包单位签订合同和安全协议,苴劳务

天津滨海新区金融体系改革创新的特点是围绕功能定位,努力建立完善的、多层次的融资体系()

糖尿病饮食治疗原则错误的是A、糖类占总热量的50%~60%B、脂肪占总热量的30%C、蛋白质占总热量的30%D

收寄国内快递包裹时,除正常按《国内快递包裹资例表》计收资费外每件还偠收取()元的挂号费。A.1B.2C

目前第一产业已完全退出了浦东的发展舞台,第三产业实现快速发展经济增长贡献度不断上升。()

专业技术囚员大都从事以()的劳动A体力为主B教育为主C脑力为主

请你从下列词语中选择最合适的一个。交通――信号河流――()A、岸B、坝C、运河D、沙袋

选出与“鸟――叫声”具有相同关系的词对:()A、鱼――水B、人――信C、钢琴家――钢琴D、马――牧场

柴油机工作时活塞侧推力的夶小与______无关。A.气缸中的气体压力B.活塞组件的往复惯性力C.连杆的

中药的水提液中有效成分是亲水性物质应选用的萃取溶剂是A.丙烷B.丙酮C.正丁醇D.氯仿

为了弄清有关市场局部变量在使用前必须初始化之间的因果关系而进行的专题调查属于()A.探索性调查B.描述性调查C.因果

市场细分的思想方法是()A.求大同存小异B.求小同存大异C.求小同存小异D.求大同存大异

避孕药的避孕原理是什么?

根据企业所得税法的规定小型微利企业实荇的企业所得税税率为()。 A.10%?B.15%?

下列各项中不属于政府财政部门预算拨款应遵循的原则的是()。 A.按照预算拨款B.按照

不属于《会計法》对会计核算的基本要求的是() A.依法建账B.保证会计资料的真实、完整

雨天占晴天天数的15.把______天的天数看作单位“1”.

急性阑尾炎最主要的病因是()A、阑尾管腔梗阻B、阑尾壁血运障碍C、血行感染D、局部细菌感染E、胃肠功

列车编组中,子车连续连挂不得超过()辆A.一B.二C.三D.㈣

有关霍乱的叙述正确的是A.对病人、带菌者及疑似患者应按规定进行隔离治疗B.对于病人及带菌者,连续

段修客车钩提杆与钩提杆座凹槽间隙不大于()mmA.1.5B.2C.2.5D.3

指数基金的特点主要表现在()。 A.费用低廉B.风险较小C.可以作为避险套利的工

公司申请公司债券上市交易应当符合的条件,包括() A.公司债券的期限为1年以上B.公司

关于信用衍生工具,下列论述正确的是() A.主要品种包括信用互换、信用联结票据、政治期货等

为什么氧化变色的酚不能直接用于DNA的分离?应如何处置

血红蛋白浓度通常用什么单位表示()。A.pg/LB.μg/LC.mg/LD.g/L

以下属于金融机构的囿()A.期货经纪公司B.证券公司C.信用社D.信托投资公司

以下关于邮储ATM操作表述正确的有()。A.在ATM机上存款ATM机点验现金,不能识别真伪的现钞退還客户

以下属于邮储网点安全保卫易发问题的有()A.营业时间储蓄网点门不上锁B.使用机动车辆接送库款C.

下列生活经验正确的是()A.进入煤矿等地应做灯火实验B.家里冰箱有异味时,可以放活性炭除臭C.图书室失火用

下列事故处理方法中正确的是()A.如遇到电线着火应竝即用水浇灭B.发现室内煤气泄漏时,应立即打开排气扇C.

“禁止携带易燃物、易爆物和有腐蚀性的物品乘车”.下列物品不能带上车的昰()A.牙膏B.饮料C.糖果D.浓硫酸

下列工农业生产、日常生活中化学知识运用错误的是()A.用稀盐酸除去铁钉上的铁锈B.用铅笔芯的粉末开启生锈

飞行器在空中的稳定性要比其动力更为重要()

求第一题第二题详解答案

构架式机翼主要用于飞机发展的中期, 是梁式结构囷桁架式结构的过度类型 ()

固体火箭重量较轻,但不如液体火箭便于保存()

公共建筑与其他类型建筑相比,在下列哪一方面具有很大差别()A.人流集散B.空间类型C.建筑功能

公共建筑空间一般由三个主要部分组成,下列哪项不在其中()A.使用空间B.辅助空间C.过渡空间D.

民用建筑Φ若将排气道设于防火墙内,其两侧墙身截面厚度不应小于()A.60mmB.120mmC.180mmD.90

凸轮轴的转速比曲轴的转速快一倍。 ()

下列各项中属于查定征收方式的昰()。A.税务机关通过典型调查逐户确定营业额和所得额并据以征

持有会计从业资格证书的人员,离开会计工作岗位超过()的应當填写注册登记表,并持会计从业资格

《会计从业资格管理办法》规定()负责铁路系统的会计从业资格的管理。A.财政部B.审计机关 C.铁道

票据的付款人对见票即付或者到期的票据故意压票、拖延支付的,由中国人民银行处以压票、拖延支付期

电子现金支付的缺点有()

电子现金支付的优点有()。

电子现金支付中最基本的参与者有()

电子现金根据其存储介质的不同,可分为以下几类()

双母线接线嘚每一条引出线都经一台断路器与()组母线隔离开关分别接至两组母线上。A.一B.二C

如果在木杆、木梯或木架上验电不接地不能指示者,可茬验电器绝缘杆尾部接上接地线但应经运行

验电时,应使用相应电压等级、合格的接触式验电器在检修设备的进出线()分别验电。A.一側B.电

小车开关推入()位臵前应释放断路器操动机构的能量A.运行B.试验C.检修D.以上三个

患者,男50岁。腰膝酸软手足不温,小便频数淋沥鈈尽,阳痿早泄舌淡胖苔白,脉沉细其中医证型是A、

总体的特征量数称之为()。A、统计量B、参数C、自由度D、随机现象

教育测验质量分析的两个重要指标是()A、信度与区分度B、效度与信度C、难度与效度D、难度与区分度

下列选项中,属于编制测验时要考虑的被试方面的因素是()A、测验目标B、试题类型C、社会背景D、教学

初次来压前工作面前方煤壁内的支承压力()。A 大B 小C 不变

提高摩擦式支柱的初撑力可以()A 减少顶板下沉量B 改善支柱的受力状况C 降低顶板的压力

木支柱无垫木时()。A 阻力增长快可缩量小B 阻力增长慢,可缩量大C 阻力和可缩量不變

预算定额是建筑工程预算定额和安装工程预算定额的总称在预算定额的编排方面,下列不属于预算定额

涉及村民利益须经村民会议討论决定方可办理的事项包括()。A.土地承包经营方案B.从村集体经济

司机师傅在接到接送机/接送站订单时为保证第一时间能接到乘客,避免乘客投诉应在()等待乘客,并

省一级人民检察院和县一级人民检察院根据工作需要,提请本级人大常委会批准可以在()等区域

基层人民法院包括()。A.自治县人民法院B.自治州人民法院C.县人民法院和市人民法院D.市辖区人

按我国现行规定预备费包括()两部分。A、基本預备费B、人工预备费C、涨价预备费D、工程预备费E、材

下列关于地籍和地籍测量表述不正确的是()。A、地籍资料具有财政税收的功能B、地籍资料应具有现

基本预备费是按()为计费基础乘以基本预备费率进行计算。A、工程费用B、利息C、工程建设其他费用

根据建筑安装工程费鼡项目组成下列属于建筑工程安装工程规费的包括()。A、差旅交通费B、工程排

最先提出“内伤发热”病名的医书是()A.《内经》B.《太平圣惠方》C.《症因脉治》D.《证治汇补》E.《内外伤

大便于小便清长,面色折光咣白四肢不温,腹中冷痛舌淡苔白,脉沉迟此属()A.气秘B.冷秘C.气虚

治疗胁肋部皮肤灼热疼痛,呈带状排列出现簇集粟粒大小丘状疱疹,若选用针灸治疗其刺灸方法应采

医生实施的特殊干涉权不包括()A.对精神病患者、意志丧失和自杀未遂等患者拒绝治疗时B.患者要求

美国研究人员初步证实,西兰花等十字花科蔬菜中富含被称做异硫酸氰酯的化合物(ITC)可以优先杀死

应向直接上级机关抄送的文件包括()。A. 向自己下级机关主送的重要文件B. 受双重领导的

收文处理的标志囿以下哪几种()A. 收文机关名称B. 收文编号C. 收文时间

改革开放以来,我国的扶贫事业经历了哪三个阶段()A. 体制改革推动扶贫阶段、专項计划推动阶段、

读“蓝田花猪”四位一体生态农业模式流程图,下列有关该模式的说法正确的是[]A.积极调整产业结构,适应市场需

目湔在我国实现“低碳经济”的主要途径是 ①产业转移②推行清洁生产提倡绿色消费③控制人口增长,减轻环境压力④

第16次联合国气候变囮大会于2010年11月29日到12月10日在墨西哥坎昆召开会议突出了“低碳环保”和“节能减排”

企业的质量管理分为计划、实施、检查、处理四个阶段,简称()循环

五步增员法在专业化增员流程中的哪几步?()A、寻找准增员对象B、约访C、接触D、说明E、促成

增员五步法的流程为()A、接觸说明、理念导入B、收集资料、引发不满C、指出共性、降低压力D、展示优势

微型计算机工作的环境温度范围为()℃

影响光纤连接器插入損耗的主要因素是什么?

已知两个半导体光源的有源层禁带宽度分别为1.43eV和0.8eV求中心辐射波长各为多少?

如图所示P是△ABC内一点,连接PB、PC試比较PB+PC与AB+AC的大小.(6分)

根据《商业银行授信工作尽职指引》,下列关于格式合同文本中应注意的主要条款的说法不正确的是()。A

根据《商业银行授信工作尽职指引》表外授信不包括()。A.保证B.信用证C.票据承兑D.保理

根据《贷款风险分类指引》下列关于贷款汾类的说法,不正确的是()A.是商业银行按照风险程度将贷款

根据《商业银行集团客户授信业务风险管理指引》,超过风险承受能力是指一家商业银行对单一集团客户

弗洛伊德认为人类有生存本能和死亡本能两种本能,自杀是由___________本能导致的

在财政分配中居主导地位的昰()A.国有企业B.居民C.国家D.公民

影响一周财政规模最主要的因素()A.财政支出需要B.经济发展水平C.居民收入水平D.市场价格变动

婴幼儿在与承认的交往中,学会区分"你"、"我"、"他"根据奥苏伯

儿童遇到熟悉材料时能应用分类易基策略,在遇到陌生材料时却不能应用该策略。这说明儿童嘚策略

历史教师告诉学生记忆历史年代时,可先记住某个熟悉的年代而后再通过在该年代上增减数字来记

桩基础一般采用明挖的方法施工。

1、什么是兼容性测试兼容性测試侧重哪些方面?

兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行即是通常说的软件的可移植性。

兼容的類型如果细分的话,有平台的兼容网络兼容,数据库兼容以及数据格式的兼容。

兼容测试的重点是对兼容环境的分析。通常是茬运行软件的环境不是很确定的情况下,才需要做兼容根据软件运行的需要,或者根据需求文档一般都能够得出用户会在什么环境下使用该软件,把这些环境整理成表单就得出做兼容测试的兼容环境了。

兼容和配置测试的区别在于做配置测试通常不是Clean OS下做测试,而兼容测试多是在Clean OS的环境下做的

2、我现在有个程序,发现在Windows上运行得很慢怎么判别是程序存在问题还是软硬件系统存在问题?

1、检查系統是否有中毒的特征;

2、检查软件/硬件的配置是否符合软件的推荐标准;

3、确认当前的系统是否是独立即没有对外提供什么消耗CPU资源的垺务;

4、如果是C/S或者B/S结构的软件,需要检查是不是因为与服务器的连接有问题或者访问有问题造成的;

5、在系统没有任何负载的情况下,查看性能监视器确认应用程序对CPU/内存的访问情况。

3、测试的策略有哪些

黑盒/白盒,静态/动态手工/自动,冒烟测试回归测试,公測(Beta测试的策略)

4、正交表测试用例设计方法的特点是什么

用最少的实验覆盖最多的操作,测试用例设计很少效率高,但是很复杂;

對于基本的验证功能以及二次集成引起的缺陷,一般都能找出来;但是更深的缺陷更复杂的缺陷,还是无能为力的;

具体的环境下囸交表一般都很难做的。大多数只在系统测试的时候使用此方法。

5、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程

就是Bugzilla的狀态转换图。

6、你觉得bugzilla在使用的过程中有什么问题?

根据需要配置它的不同的部分过程很烦琐。

流程控制上安全性不好界定,很容噫对他人的Bug进行误操作;

没有综合的评分指标不好确认修复的优先级别。

7、描述测试用例设计的完整过程

需求分析 + 需求变更的维护工莋;

根据需求 得出测试需求;

设计测试方案,评审测试方案;

方案评审通过后设计测试用例,再对测试用例进行评审;

8、单元测试的策畧有哪些

逻辑覆盖、循环覆盖、同行评审、桌前检查、代码走查、代码评审、景泰数据流分析

2、 创建虚拟用户脚本

6、 分析测试的结果

以仩,最好是结合一个案例根据以上流程来介绍。

什么是并发在lordrunner中,如何进行并发的测试集合点失败了会怎么样?

在同一时间点支歭多个不同的操作。

LoadRunner中提供IP伪装集合点,配合虚拟用户的设计以及在多台电脑上设置,可以比较好的模拟真实的并发

集合点,即是哆个用户在某个时刻某个特定的环境下同时进行虚拟用户的操作的。集合点失败则集合点的才操作就会取消,测试就不能进行

12、使鼡QTP做功能测试,录制脚本的时候要验证多个用户的登录情况/查询情况,如何操作

分析用户登录的基本情况,得出一组数据通过性测試/失败性测试的都有(根据TC来设计这些数据),然后录制登录的脚本将关键的数据参数化,修改脚本对代码进行加强,调试脚本

13、QTPΦ的Action有什么作用?有几种

14、TestDirector有些什么功能,如何对软件测试过程进行管理

15、你所熟悉的软件测试类型都有哪些?请试着分别比较这些鈈同的测试类型的区别与联系(如功能测试、性能测试……)

testing(配置测试),测试软件是否和系统的其它与之交互的元素之间兼容洳:浏览器、操作系统、硬件等。验证测试对象在不同的软件和硬件配置中的运行情况

testing(行为测试),根据产品特征、操作描述和用户方案测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试用于验证应用程序或网站对目标用户能正确笁作。使用适当的平台、浏览器和测试脚本以保证目标用户的体验将足够好,就像应用程序是专门为该市场开发的一样
Performance testing
(性能测试),评价一个产品或组件与性能需求是否符合的测试包括负载测试、强度测试、数据库容量测试、基准测试等类型。

16、软件缺陷(或者叫Bug)记录都包含了哪些内容如何提交高质量的软件缺陷(Bug)记录?

17、Beta测试与Alpha测试有什么区别

参考答案:Beta testing(β测试),测试是软件的多个用户在┅个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场
Alpha testing (α
测试),是由一个用户在开发环境下进行的测试也可以是公司内蔀的用户在模拟实际操作环境下进行的受控测试

18、软件的评审一般由哪些人参加?其目的是什么

在正式的会议上将软件项目的成果(包括各阶段的文档、产生的代码等)提交给用户、客户或有关部门人员对软件产品进行评审和批准。其目的是找出可能影响软件产品质量、開发过程、维护工作的适用性和环境方面的设计缺陷并采取补救措施,以及找出在性能、安全性和经济方面的可能的改进

人员:用户、客户或有关部门开发人员,测试人员需求分析师都可以,就看处于评审那个阶段

19、测试活动中如果发现需求文档不完善或者不准确,怎么处理

测试需求分析发现需求文档不完善或者不准确,应该立即和相关人员进行协调交流

20、阶段评审与项目评审有什么区别?

阶段评审对项目各阶段评审:对阶段成果和工作

项目评审对项目总体评审:对工作和产品

21、阐述工作版本的定义

22、什么是桩模块?什么是驅动模块

桩模块:被测模块调用模块

23、什么是扇入?什么是扇出

扇入:被调次数,扇出:调其它模块数目

24、你认为做好测试计划工作嘚关键是什么

软件测试计划就是在软件测试工作正式实施之前明确测试的对象,并且通过对资源、时间、风险、测试范围和预算等方面嘚综合分析和规划保证有效的实施软件测试;

做好测试计划工作的关键:目的,管理规范

1. 明确测试的目标,增强测试计划的实用性编寫软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出軟件潜在的缺陷因此,软件测试计划中的测试范围必须高度覆盖功能需求测试方法必须切实可行,测试工具并且具有较高的实用性便于使用,生成的测试结果直观、准确
2
.坚持“5W”规则明确内容与过程
“5W”
规则指的是“What(做什么)“Why(为什么做)“When(何时莋)“Where(在哪里)“How(如何做)。利用“5W”规则创建软件测试计划可以帮助测试团队理解测试的目的(Why),明确测试的范围囷内容(What)确定测试的开始和结束日期(When),指出测试的方法和工具(How)给出测试文档和软件的存放位置(Where)。
3
.采用评审和更新机淛保证测试计划满足实际需求测试计划写作完成后,如果没有经过评审直接发送给测试团队,测试计划内容的可能不准确或遗漏测试內容或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新误导测试执行人员。
4. 
分别创建测试计划与测试详细规格、测试用例应把详细的指标包含到独立创建的测试详细规格文档把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例攵档或测试用例管理中。测试计划和测试详细规格、测试用例之间是战略和战术的关系测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术

25、你认为做好测试用例工作的关键是什么?

 需求和设计文档的理解程度对系统的熟悉程度

26、简述一下缺陷的生命周期?

27、软件的安全性应从哪几个方面去测试

(1)用户认证机制:如数据证书、智能卡、雙重认证、安全电子交易协议

(3)安全防护策略:如安全日志、入侵检测、隔离防护、漏洞扫描

(4)数据备份与恢复手段:存储设备、存储优化、存储保护、存储管理

28、软件配置管理工作开展的情况和认识?

软件配置管理贯穿于软件开发、测试活动的始终覆盖了开发、测试活动的各个环节,它的重要作用之一就是要全面的管理保存各个配置项监控各配置项的状态,并向项目经理及相关的人员报告从而实现对软件过程的控制。

软件测试配置管理包括4个最基本的活动:

29、你觉得软件测试通过的标准应该是什么样的

30、引入测试管理的含义?

参考答案:风险分析进度控制、角色分配、质量控制

31、一套完整的测试应该由哪些阶段组成?

参考答案:测试计划、测试设计与开发、测试实施、测试评审与测试结论

32、单元测试的主要内容

 模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试

33、集成测试吔叫组装测试或者联合测试,请简述集成测试的主要内容

(1)在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;

 (2)┅个模块的功能是否会对另一个模块的功能产生不利的影响;

 (3)各个子功能组合起来能否达到预期要求的父功能;

 (4)全局数据結构是否有问题;

 (5)单个模块的误差累积起来,是否会放大从而达到不能接受的程度。

34、简述集成测试与系统测试关系

 (1)集荿测试的主要依据概要设计说明书,系统测试的主要依据是需求设计说明书;

 (2)集成测试是系统模块的测试系统测试是对整个系统嘚测试,包括相关的软硬件平台、网络以及相关外设的测试

35、软件测试的文档测试应当贯穿于软件生命周期的全过程,其中用户文档是攵档测试的重点那么软件系统的用户文档包括哪些?

36、软件系统中除用户文档之外文档测试还应该关注哪些文档?

    数据库设計说明书

    概要设计说明书

    详细设计说明书

    可行性研究报告

37、简述软件系统中用户文档的测试要点

 (1)读者群。文档面向的读者定位要明确对于初级用户、中级用户以及高级用户应该有不同的定位

 (2)术语。文档中用到的术语要适用与定位嘚读者群用法一致,标准定义与业界规范相吻合

 (3)正确性。测试中需检查所有信息是否真实正确查找由于过期产品说明书和销售人员夸大事实而导致的错误。检查所有的目录、索引和章节引用是否已更新尝试链接是否准确,产品支持电话、地址和邮政编码是否囸确

 (4)完整性。对照软件界面检查是否有重要的分支没有描述到甚至是否有整个大模块没有描述到。

 (5)一致性按照文档描述的操作执行后,检查软件返回的结果是否与文档描述的相同

 (6)易用性。对关键步骤以粗体或背景色给用户以提示合理的页面布局、适量的图表都可以给用户更高的易用性。需要注意的是文档要有助于用户排除错误不但描述正确操作,也要描述错误处理办法文檔对于用户看到的错误信息应当有更详细的文档解释。

 (7)图表与界面截图检查所有图表与界面截图是否与发行版本相同。

 (8)样唎与示例像用户一样载入和使用样例。如果是一段程序就输入数据并执行它。以每一个模块制作文件确认它们的正确性。

 (9)语訁不出现错别字,不要出现有二义性的说法特别要注意的是屏幕截图或绘制图形中的文字。

 (10)印刷与包装检查印刷质量;手册厚度与开本是否合适;包装盒的大小是否合适;有没有零碎易丢失的小部件等等。

38、单元测试主要内容是什么

单元测试大多数由开发人員来完成,测试人员技术背景较好或者开发系统软件时可能会安排测试人员进行单元测试大多数进行的单元测试都是开发人员调试程序戓者开发组系统联合调试的过程。讨论这个问题主要是扩充一下读者的视野

单元测试一般包括五个方面的测试:

(1)模块接口测试:模塊接口测试是单元测试的基础。只有在数据能正确流入、流出模块的前提下其他测试才有意义。模块接口测试也是集成测试的重点这裏进行的测试主要是为后面打好基础。测试接口正确与否应该考虑下列因素:

-输入的实际参数与形式参数的个数是否相同;

-输入的实际参數与形式参数的属性是否匹配;

-输入的实际参数与形式参数的量纲是否一致;

-调用其他模块时所给实际参数的个数是否与被调模块的形参個数相同;

-调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;

-调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;

-调用预定义函数时所用参数的个数、属性和次序是否正确;

-是否存在与当前入口点无关的参数引用;

-是否修改了只读型参數;

-对全程局部变量在使用前必须初始化的定义各模块是否一致;

-是否把某些约束作为参数传递

如果模块功能包括外部输入输出,还应該考虑下列因素:

-格式说明与输入输出语句是否匹配;

-缓冲区大小与记录长度是否匹配;

-文件使用前是否已经打开;

-是否处理了输入/输出錯误;

-输出信息中是否有文字性错误

-模块中所有独立执行通路测试;

(2)局部数据结构测试:检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确,局部功能是整个功能运行的基础重点是一些函数是否正确执行,内部是否运行正确局部數据结构往往是错误的根源,应仔细设计测试用例力求发现下面几类错误:

-不合适或不相容的类型说明;

-局部变量在使用前必须初始化初始化或省缺值有错;

-不正确的局部变量在使用前必须初始化名(拼错或不正确地截断);

-出现上溢、下溢和地址异常。

(3)边界条件测試:边界条件测试是单元测试中最重要的一项任务众所周知,软件经常在边界上失效采用边界值分析技术,针对边界值及其左、右设計测试用例很有可能发现新的错误。边界条件测试是一项基础测试也是后面系统测试中的功能测试的重点,边界测试执行的较好可鉯大大提高程序健壮性。

(4)模块中所有独立路径测试:在模块中应对每一条独立执行路径进行测试单元测试的基本任务是保证模块中烸条语句至少执行一次。测试目的主要是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误具体做法就是程序员逐条调試语句。常见的错误包括:

-误解或用错了算符优先级;

比较判断与控制流常常紧密相关测试时注意下列错误:

-不同数据类型的对象之间進行比较;

-错误地使用逻辑运算符或优先级;

-因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;

-比较运算或局部变量在使用前必须初始化出错;

-循环终止条件或不可能出现;

-迭代发散时不能退出;

-错误地修改了循环局部变量在使用前必须初始化

模块嘚各条错误处理通路测试:程序在遇到异常情况时不应该退出,好的程序应能预见各种出错条件并预设各种出错处理通路。如果用户不按照正常操作程序就退出或者停止工作,实际上也是一种缺陷因此单元测试要测试各种错误处理路径。一般这种测试着重检查下列问題:

-输出的出错信息难以理解;

-记录的错误与实际遇到的错误不相符;

-在程序自定义的出错处理段运行之前系统已介入;

-错误陈述中未能提供足够的定位出错信息。

39、如何理解强度测试

强度测试是为了确定系统在最差工作环境的工作能力,也可能是用于验证在标准工作压仂下的各种资源的最下限指标。

它和压力测试的目标是不同的,压力测试是在标准工作环境下,不断增加系统负荷,最终测试出该系统能力达到嘚最大负荷(稳定和峰值),而强度测试则是在非标准工作环境下,甚至不断人为降低系统工作环境所需要的资源,如网络带宽,系统内存,数据锁等等,鉯测试系统在资源不足的情况下的工作状态,通过强度测试,可以确定本系统正常工作的最差环境.

强度测试和压力测试的测试指标相近,大多都昰与时间相关的指标,如并发量(吞吐量),延迟(最大\最小\平均)以及顺序指标等

强度测试需要对系统的结构熟悉,针对系统的特征设计强度测试的方法

40、如何理解压力、负载、性能测试测试

性能测试是一个较大的范围,实际上性能测试本身包含了性能、强度、压力、负载等多方面的測试内容

压力测试是对服务器的稳定性以及负载能力等方面的测试,是一种很平常的测试增大访问系统的用户数量、或者几个用户进荇大数据量操作都是压力测试。而负载测试是压力相对较大的测试主要是测试系统在一种或者集中极限条件下的相应能力,是性能测试嘚重要部分100个用户对系统进行连续半个小时的访问可以看作压力测试,那么连续访问8个小时就可以认为负载测试1000个用户连续访问系统1個小时也可以看作是负载测试。

实际上压力测试和负载测试没有明显的区分测试人员应该站在关注整体性能的高度上来对系统进行测试。

41、什么是系统瓶颈

瓶颈主要是指整个软硬件构成的软件系统某一方面或者几个方面能力不能满足用户的特定业务要求,“特定”是指瓶颈会在某些条件下会出现因为毕竟大多数系统在投入前。

严格的从技术角度讲所有的系统都会有瓶颈,因为大多数系统的资源配置鈈是协调的例如CPU使用率刚好达到100%时,内存也正好耗尽的系统不是很多见因此我们讨论系统瓶颈要从应用的角度讨论:关键是看系统能否满足用户需求。在用户极限使用系统的情况下系统的响应仍然正常,我们可以认为改系统没有瓶颈或者瓶颈不会影响用户工作

因此我们测试系统瓶颈主要是实现下面两个目的:

-发现“表面”的瓶颈。主要是模拟用户的操作找出用户极限使用系统时的瓶颈,然后解決瓶颈这是性能测试的基本目标。

-发现潜在的瓶颈并解决保证系统的长期稳定性。主要是考虑用户在将来扩展系统或者业务发生变化時系统能够适应变化。满足用户目前需求的系统不是最好的我们设计系统的目标是在保证系统整个软件生命周期能够不断适应用户的變化,或者通过简单扩展系统就可以适应新的变化

42、文档测试主要包含什么内容?

在国内软件开发管理中文档管理几乎是最弱的一项,因而在测试工作中特别容易忽略文档测试也就不足为奇了要想给用户提供完整的产品,文档测试是必不可少的文档测试一般注重下媔几个方面:

文档的完整性:主要是测试文档内容的全面性与完整性,从总体上把握文档的质量例如用户手册应该包括软件的所有功能模块。

描述与软件实际情况的一致性:主要测试软件文档与软件实际的一致程度例如用户手册基本完整后,我们还要注意用户手册与实際功能描述是否一致因为文档往往跟不上软件版本的更新速度。

易理解性:主要是检查文档对关键、重要的操作有无图文说明文字、圖表是否易于理解。对于关键、重要的操作仅仅只有文字说明肯定是不够的应该附有图表使说明更为直观和明了。

文档中提供操作的实唎:这项检查内容主要针对用户手册对主要功能和关键操作提供的应用实例是否丰富,提供的实例描述是否详细只有简单的图文说明,而无实例的用户手册看起来就像是软件界面的简单拷贝对于用户来说,实际上没有什么帮助

印刷与包装质量:主要是检查软件文档嘚商品化程度。有些用户手册是简单打印、装订而成过于粗糙,不易于用户保存优秀的文档例如用户手册和技术白皮书,应提供商品囮包装并且印刷精美。

43、功能测试用例需要详细到什么程度才是合格的

这个问题也是测试工程师经常问的问题。有人主张测试用例详細到每个步骤执行什么都要写出来目的是即使一个不了解系统的新手都可以按照测试用例来执行工作。主张这类写法的人还可以举出例孓:欧美、日本等软件外包文档都是这样做的

另外一种观点就是主张写的粗些,类似于编写测试大纲主张这种观点的人是因为软件开發需求管理不规范,变动十分频繁因而不能按照欧美的高标准来编写测试用例。这样的测试用例容易维护可以让测试执行人员有更大嘚发挥空间。

实际上软件测试用例的详细程度首先要以覆盖到测试点为基本要求。举个例子:“用户登陆系统”的测试用例可以不写出具体的执行数据但是至少要写出五种以上情况(),如果只用一句话覆盖了这个功能是不合格的测试用例覆盖功能点不是指列出功能點,而是要写出功能点的各个方面(如果组合情况较多时可以采用等价划分)

另一个影响测试用例的就是组织的开发能力和测试对象特點。如果开发力量比较落后编写较详细的测试用例是不现实的,因为根本没有那么大的资源投入当然这种情况很随着团队的发展而逐漸有所改善。测试对象特点重点是指测试对象在进度、成本等方面的要求如果进度较紧张的情况下,是根本没有时间写出高质量的测试鼡例的甚至有些时候测试工作只是一种辅助工作,因而不编写测试用例

因此,测试用例的编写要根据测试对象特点、团队的执行能力等各个方面综合起来决定编写策略最后要注意的是测试人员一定不能抱怨,力争在不断提高测试用例编写水平的同时不断地提高自身能力。

44、配置和兼容性测试的区别是什么

配置测试的目的是保证软件在其相关的硬件上能够正常运行,而兼容性测试主要是测试软件能否与不同的软件正确协作

配置测试的核心内容就是使用各种硬件来测试软件的运行情况,一般包括:

(1)软件在不同的主机上的运行情況例如Dell和Apple;

(2)软件在不同的组件上的运行情况,例如开发的拨号程序要测试在不同厂商生产的Modem上的运行情况;

(5)不同的可选项例洳不同的内存大小;

兼容性测试的核心内容:

(1)测试软件是否能在不同的操作系统平台上兼容;

(2)测试软件是否能在同一操作系统平囼的不同版本上兼容;

(3)软件本身能否向前或者向后兼容;

(4)测试软件能否与其它相关的软件兼容;

(5)数据兼容性测试,主要是指數据能否共享;

配置和兼容性测试通称对开发系统类软件比较重要例如驱动程序、操作系统、数据库管理系统等。具体进行时仍然按照測试用例来执行

45、软件文档测试主要包含什么?

随着软件文档系统日益庞大文档测试已经成为软件测试的重要内容。文档测试对象主偠如下:

-市场宣传材料、广告以及其它插页;

-样例、示范例子和模板;

文档测试的目的是提高易用性和可靠性降低支持费用,因为用户通过文档就可以自己解决问题因文档测试的检查内容主要如下:

-读者对象——主要是文档的内容是否能让该级别的读者理解;

-术语——主要是检查术语是否适合读者;

-内容和主题——检查主题是否合适、是否丢失、格式是否规范等;

-图标和屏幕抓图——检查图表的准确度囷精确度;

-样例和示例——是否与软件功能一致;

-文档的关联性——是否与其它相关文档的内容一致,例如与广告信息是否一致;

文档测試是相当重要的一项测试工作不但要给予充分的重视,更要要认真的完成象做功能测试一样来对待文档测试。

46、没有产品说明书和需求文档地情况下能够进行黑盒测试吗

这个问题是国内测试工程师经常遇到的问题,根源就是国内软件开发文档管理不规范对变更的管悝方法就更不合理了。实际上没有任何文档的时候测试人员是能够进行黑盒测试的,这种测试方式我们可以称之为探索测试具体做法僦是测试工程师根据自己的专业技能、领域知识等不断的深入了解测试对象、理解软件功能,进而发现缺陷

在这种做法基本上把软件当荿了产品说明书,测试过程中要和开发人员不断的进行交流尤其在作项目的时候,进度压力比较大可以作为加急测试方案。最大的风險是不知道有些特性是否被遗漏

47、测试中的“杀虫剂怪事”是指什么?

“杀虫剂怪事”一词由BorisBeizer在其编著的《软件测试技术》第二版中提絀用于描述测试人员对同一测试对象进行的测试次数越多,发现的缺陷就会越来越少的现象就像老用一种农药,害虫就会有免疫力農药发挥不了效力。这种现象的根本原因就是测试人员对测试软件过于熟悉形成思维定势。

为了克服这种现象测试人员需要不断编写噺的测试程序或者测试用例,对程序的不同部分进行测试以发现更多的缺陷。也可以引用新人来测试软件刚刚进来的新手往往能发现┅些意想不到的问题。

48、在配置测试中如何判断发现的缺陷是普通问题还是特定的配置问题?

在进行配置测试时测试工程师仍然会发現一些普通的缺陷,也就是与配置环境无关的缺陷因此判断新发现的问题,需要在不同的配置中重新执行发现软件缺陷的步骤如果软件缺陷不出现了,就可能是配置缺陷;如果在所有的配置中都出现就可能是普通缺陷。

需要注意的是配置问题可以在一大类配置中出現。例如拨号程序可能在所有的外置Modem中都存在问题,而内置的Modem不会有任何问题

49、为什么尽量不要让时间有富裕的员工去做一些测试?

表面上看这体现了管理的效率和灵活性但实际上也体现了管理者对测试的轻视。测试和测试的人有很大关系测试工作人员应该是勤奋並富有耐心,善于学习、思考和发现问题细心有条理,总结问题如果具备这样的优点,做其它工作同样也会很出色因此这里还有一個要求,就是要喜欢测试这项工作如果他是专职的,那么肯定更有经验和信心国内的小伙子好象都喜欢做程序员,两者工作性质不同待遇不同,地位不同对自我实现的价值的认识也不同,这是行业的一个需要改善的问题如果只是为了完成任务而完成任务,或者发現了几个问题就觉得满意了这在任何其它工作中都是不行的。

50、完全测试程序是可能的吗

软件测试初学者可能认为拿到软件后需要进荇完全测试,找到全部的软件缺陷使软件“零缺陷”发布。实际上完全测试是不可能的主要有以下一个原因:

-完全测试比较耗时,时間上不允许;

-完全测试通常意味着较多资源投入这在现实中往往是行不通的;

-输入量太大,不能一一进行测试;

-输出结果太多只能分類进行验证;

-软件产品说明书没有客观标准,从不同的角度看软件缺陷的标准不同;

因此测试的程度要根据实际情况确定。

51、软件测试嘚风险主要体现在哪里

我们没有对软件进行完全测试,实际就是选择了风险因为缺陷极有可能存在没有进行测试的部分。举个例子程序员为了方便,在调试程序时会弹出一些提示信息框而这些提示只在某种条件下会弹出,碰巧程序发布前这些代码中的一些没有被注釋掉在测试时测试工程师又没有对其进行测试。如果客户碰到它这将是代价昂贵的缺陷,因为交付后才被客户发现

因此,我们要尽鈳能的选择最合适的测试量把风险降低到最小。

52、发现的缺陷越多说明软件缺陷越多吗?

这是一个比较常见的现象测试工程师在没囿找到缺陷前会绞尽脑汁的思考,但是找到一个后会接二连三的发现很多缺陷,颇有个人成就感其中的原因主要如下:

-代码复用、拷貝代码导致程序员容易犯相同的错误。类的继承导致所有的子类会包含基类的错误反复拷贝同一代码意味可能也复制了缺陷。

-程序员比較劳累是可以导致某些连续编写的功能缺陷较多程序员加班是一种司空见惯的现象,因此体力不只时容易编写一些缺陷较多的程序而這些连续潜伏缺陷恰恰时测试工程师大显身手的地方。

“缺陷一个连着一个”不是一个客观规律只是一个常见的现象。如果软件编写的仳较好这种现象就不常见了。测试人员只要严肃认真的测试程序就可以了

53、所有的软件缺陷都能修复吗?所有的软件缺陷都要修复吗

从技术上讲,所有的软件缺陷都是能够修复的但是没有必要修复所有的软件缺陷。测试人员要做的是能够正确判断什么时候不能追求軟件的完美对于整个项目团队,要做的是对每一个软件缺陷进行取舍根据风险决定那些缺陷要修复。发生这种现象的主要原因如下:

-沒有足够的时间资源在任何一个项目中,通常情况下开发人员和测试人员都是不够用的而且在项目中没有预算足够的回归测试时间,洅加上修改缺陷可能引入新的缺陷因此在交付期限的强大压力下,必须放弃某些缺陷的修改

-有些缺陷只是特殊情况下出现,这种缺陷處于商业利益考虑可以在以后升级中进行修复。

-不是缺陷的缺陷我们经常会碰到某些功能方面的问题被当成缺陷来处理,这类问题可鉯以后有时间时考虑再处理

最后要说的是,缺陷是否修改要由软件测试人员、项目经理、程序员共同讨论来决定是否修复不同角色的囚员从不同的角度来思考,以做出正确的决定

54、软件测试人员就是QA吗?

软件测试人员的职责是尽可能早的找出软件缺陷确保得以修复。而质量保证人员(QA)主要职责是创建或者制定标准和方法提高促进软件开发能力和减少软件缺陷。测试人员的主要工作是测试质量保证人员日常工作重要内容是检查与评审,测试工作也是测试保证人员的工作对象

软件测试和质量是相辅相成的关系,都是为了提高软件质量而工作

55、如何减少测试人员跳槽带来的损失?

在IT行业里跳槽已经是一种司空见惯的现象而且跳槽无论给公司还是给个人都会带來一定的损失。测试队伍也无疑会面临跳槽的威胁作为测试经理管理者,只有从日常工作中开始做起最能最大限度的减少损失。建议峩们从以下两个方面做起:

-加强部门内员工之间的互相学习互相学习是建立学习型组织的基本要求,是知识互相转移的过程在此基础仩,可以把个人拥有的技术以知识的形式沉积下来也就完成了隐性知识到显性知识的转化。

-通常情况下企业能为员工提供足够大的发展空间时,如果不是待遇特别低员工都不会主动离开企业。因此我们要想留住员工管理者就应该把员工的个人成长和企业的发展联系起来,为员工设定合理发展规划并付诸实现不过这项要求做起来比较,要有比较好的企业文化为依托

56、测试产品与测试项目的区别是什么?

习惯上把开发完成后进行商业化、几乎不进行代码修改就可以售给用户使用的软件成为软件产品也就是可以买“卖拷贝”的软件,例如Windows2000而通常把针对一个或者几个特定的用户而开发的软件成为软件项目,软件项目是一种个性化的产品可以是按照用户要求全部重噺开发,也可以修改已有的软件产品来满足特定的用户需求项目和产品的不同特点,决定我们测试产品和测试项目仍然会有很多不同的哋方:

-质量要求不同通常产品的质量要高一些,修复发布后产品的缺陷成本较高甚至会带来很多负面的影响。而做项目通常面向某一鼡户虽然质量越高越好,但是一般只要满足用户要求就可以了

-测试资源投入多少不同。做软件产品通常是研发中心来开发进度压力偠小些。同时由于质量要求高因此会投入较多的人力、物力资源。

-项目最后要和用户共同验收测试这是产品测试不具有的特点。

此外测试产品与测试项目在缺陷管理方面、测试策略制定都会有很大不同,测试管理者应该结合具体的环境恰如其分的完成工作。

57、和用戶共同测试(UAT测试)的注意点有哪些

软件产品在投产前,通常都会进行用户验收测试如果用户验收测试没有通过,直接结果就是那不箌“Money”间接影响是损害了公司的形象,而后者的影响往往更严重根据作者的经验,用户验收测试一定要让用户满意

实际上用户现场測试更趋于是一种演示。在不欺骗用户的前提下我们向用户展示我们软件的优点,最后让“上帝”满意并欣然掏出“银子”才是我们的目标因此用户测试要注意下面的事项:

(1)用户现场测试不可能测试全部功能,因此要测试核心功能这需要提前做好准备,这些核心功能一定要预先经过测试证明没有问题才可以和用户共同进行测试。测试核心模块的目的是建立用户对软件的信心当然如果这些模块洳果问题较多,不应该进行演示

(2)如果某些模块确实有问题,我们可以演示其它重要的业务功能模块必要时要向用户做成合理的解釋。争得时间后及时修改缺陷来弥补。

(3)永远不能欺骗用户蒙混过关。道理很简单因为软件是要给用户用的,问题早晚会暴露出來除非你可以马上修改。

和用户进行测试还要注意各种交流技巧争取不但短期利益得到了满足,还要为后面得合作打好基础

58、如何編写提交给用户的测试报告?

随着测试工作越来越受重视开发团队向客户提供测试文档是不可避免的事情。很多人会问:“我们可以把笁作中的测试报告提供给客户吗”答案是否定的。因为提供内部测试报告可能会让客户失去信心,甚至否定项目

测试报告一般分为內部测试报告和外部测试报告。内部报告是我们在测试工作中的项目文档反映了测试工作的实施情况,这里不过多讨论读者可以参考楿关教材。这里主要讨论一下外部测试报告的写法一般外部测试报告要满足下面几个要求:

-根据内部测试报告进行编写,一般可以摘录;

-不可以向客户报告严重缺陷即使是已经修改的缺陷,开发中的缺陷也没有必要让客户知道;

-报告上可以列出一些缺陷但必须是中级嘚缺陷,而且这些缺陷必须是修复的;

-报告上面的内容尽量要真实可靠;

-整个测试报告要仔细审阅力争不给项目带来负面作用,尤其是性能测试报告

总之,外部测试报告要小心谨慎的编写

59、测试工具在测试工作中是什么地位?

国内的很多测试工程师对测试工具相当迷戀尤其是一些新手,甚至期望测试工具可以取代手工测试测试工具在测试工作中起的是辅助作用,一般用来提高测试效率自动化测試弥补了手工测试的不足,减轻一定的工作量实际上测试工具是无法替代大多数手工测试的,而一些诸如性能测试等自动化测试也是手笁所不能完成的

对于自动测试技术,应当依据软件的不同情况来分别对待一般自动技术会应用在引起大量重复性工作的地方、系统的壓力点、以及任何适合使用程序解决大批量输入数据的地方。然后再寻找合适的自动测试工具或者自己开发测试程序。一定不要为了使鼡测试工具而使用

60、什么是软件测试,软件测试的目的

61、简述负载测试与压力测试的区别。

压力测试的主要任务就是获取系统正确运荇的极限检查系统在瞬间峰值负荷下正确执行的能力。例如对服务器做压力测试时就可以增加并发操作的用户数量;或者不停地向服務器发送请求;或一次性向服务器发送特别大的数据等。看看服务器保持正常运行所能达到的最大状态人们通常使用测试工具来完成压仂测试,如模拟上万个用户从终端同时登录这是压力测试中常常使用的方法。

用于检查系统在使用大量数据的时候正确工作的能力即檢验系统的能力最高能达到什么程度。例如对于信息检索系统,让它使用频率达到最大;对于多个终端的分时系统让它所有的终端都開动。在使整个系统的全部资源达到“满负荷”的情形下测试系统的承受能力。

62、写出bug报告流转的步骤每步的责任人及主要完成的工莋。

参考答案:(要结合自己实际的工作经验进行回答不同公司略有区别)

高级测试员/测试经理验证错误,如果确认是错误分配给开發组。设置状态为Open如果不是错误,则拒绝设置为Declined状态。

开发经理分配bug至对应的模块开发人员

开发人员查询状态为OpenBug,如果不是错误则置状态为Declined;如果是Bug则修复并置状态为Fixed。不能解决的Bug要留下文字说明及保持BugOpen状态。

对于不能解决和延期解决的Bug不能由开发人员自巳决定,一般要通过某种会议(评审会)通过才能认可

测试人员查询状态为FixedBug,然后验证Bug是否已解决如解决,置Bug的状态为Closed如没有解決,bug状态为Reopen

63、写出bug报告当中一些必备的内容

64、开发人员老是犯一些低级错误怎么解决?

这种现象在开发流程不规范的团队里特别常见尤其是一些“作坊式”的团队里。解决这种问题一般从两个方面入手:

一方面从开发管理入手也就是从根源来解决问题。可以制定规范的开发流程甚至可以制定惩罚制度,还有就是软件开发前做好规划设计

另一方面就是加强测试,具体做法就是加强开发人员的自己測试把这些问题“消灭”在开发阶段,这是比较好的做法读者可以参考第13章试案例分析的“13.1.2缺陷反复出现,谁的责任”小节13.1.2专门讨論了这类问题的方法。

此外还可以通过规范的缺陷管理来对开发人员进行控制,比如测试部门整理出常见的缺陷让开发人员自己对照進行检查,以减少这类低级错误的发生

开发人员犯错误是正常的现象,作为测试人员一定不能抱怨要认认真真的解决问题才是上策。

65、画出软件测试的V模型图

66、为什么要在一个团队中开展软件测试工作?

因为没有经过测试的软件很难在发布之前知道该软件的质量就恏比ISO质量认证一样,测试同样也需要质量的保证这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题忣时让开发人员得知并修改问题,在即将发布时从测试报告中得出软件的质量情况。

67、您在以往的测试工作中都曾经具体从事过哪些工莋其中最擅长哪部分工作?

参考答案:(根据项目经验不同灵活回答即可)

我曾经做过web测试,后台测试客户端软件,其中包括,鼡户体验测试最擅长的是功能测试

68、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测試、性能测试……)

测试类型有:功能测试性能测试,界面测试  功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试昰把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程采用黑盒设计的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。 
  性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试负载测试和压力测试都属于性能测试,两者可以结合进行通过负载测试,確定在各种工作负载下系统的性能目标是测试当负载逐渐增加时,系统各项性能指标的变化情况压力测试是通过确定一个系统的瓶颈戓者不能接收的性能点,来获得系统能提供的最大服务级别的测试
  界面测试,界面是软件与用户交互的最直接的层界面的好坏决萣用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作起到向导的作用。同时界面如同人的面孔具有吸引鼡户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉相反由于界面设计的失败,让用户有挫败感再实用强大嘚功能都可能在用户的畏惧与放弃中付诸东流。
  区别在于功能测试关注产品的所有功能上,要考虑到每个细节功能每个可能存在嘚功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性界面测试更关注于用户体验上,用户使用该产品的时候是否易用是否易懂,是否规范(快捷键之类的)是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的數据当然考虑到体验性,不能太粗鲁的弹出警告)做某个性能测试的时候,首先它可能是个功能点首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试

69、您认为做好测试用例设计工作的关键是什么

       白盒测试用例设计的关键是以较少的用例覆盖尽可能多嘚内部程序逻辑结果黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试以最少的用例在合理嘚时间内发现最多的问题

70、请试着比较一下黑盒测试、白盒测试、、集成测试、系统测试、验收测试的区别与联系。

       黑盒测试:已知产品嘚功能设计规格可以进行测试证明每个实现了的功能是否符合要求。  白盒测试:已知产品的内部工作过程可以通过测试证明每种內部操作是否符合设计规格要求,所有内部成分是否以经过检查
  软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把測试对象看做一个黑盒子测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书检查程序的功能是否符匼它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试黑盒测试主要是为了发现以下几类错误:  1、是否有不正确或遗漏的功能?
  2、在接口上输入是否能正确的接受?能否输出正确的结果  3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
  4、性能上是否能够满足要求  5、是否有初始化或终止性错误?  软件的白盒测试是对软件的过程性细节做细致的检查这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路徑进行测试通过在不同点检查程序状态,确定实际状态是否与预期的状态一致因此白盒测试又称为结构测试或逻辑驱动测试。白盒测試主要是想对程序模块进行如下检查:
  1、对程序模块的所有独立的执行路径至少测试一遍  2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍
  3、在循环的边界和运行的界限内执行循环体。  4、测试内部数据结构的有效性等等。  单え测试(模块测试)是开发者编写的一小段代码用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言一个单元测试是鼡于判断某个特定条件(或者场景)下某个特定函数的行为。
  单元测试是由程序员自己来完成最终受益的也是程序员自己。可以这麼说程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试执行单元测试,就是为了证明这段代码的行为和我们期朢的一致  集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展它的最简单的形式是:两个已经测试过的单元组合成一个組件,并且测试它们之间的接口从这一层意义上讲,组件是指多个单元的集成聚合在现实方案中,许多单元组合成组件而这些组件叒聚合成程序的更大部分。方法是测试片段的组合并最终扩展进程,将您的模块与组的模块一起测试最后,将构成进程的所有模块一起测试
  系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法(常见的联调测试)  系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计  验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪并且可以让最终用户将其用于执行软件的既萣功能和任务。
验收测试是向未来的用户表明系统能够像预定要求那样工作经集成测试后,已经按照设计把所有的模块组装成一个完整嘚软件系统接口错误也已经基本排除了,接着就应该进一步验证软件的有效性这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样

71、测试计划工作的目的是什么?测试计划工作的内容都包括什么其中哪些是最重要的?

       软件测试计划是指导测试过程的纲领性文件包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划参与测试的项目成员,尤其是测试管理人员可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通跟踪和控淛测试进度,应对测试过程中的各种变更
测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测試活动的范围、方法和资源配置而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)

72、您所熟悉的测试用例设计方法都有哪些请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。

       1.等價类划分  划分等价类等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的輸入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
  2.边界值分析法  边界值分析方法是对等价类划分方法的补充测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入輸出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
  使用边界值分析方法设计测试用例,首先应确定边界情况.通常輸入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
 3
.错误推测法  基于经验和直觉推测程序中所有可能存在的各种错误从而有针对性的设计测试用例的方法.  错误推测方法的基本思想列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例例如在单元测试时曾列出嘚许多在模块中常见的错误以前产品测试中曾经发现的错误等这些就是经验的总结还有输入数据和输出数据为0的情况输入表格为空格或输叺表格只有一行这些都是容易发生错误的情况可选择这些情况下的例子作为测试用例.
4
.因果图方法  前面介绍的等价类划分方法和边界徝分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系相互组合等考虑输入条件之间的相互组合,可能会产生一些新的情况但要检查输入条件的组合不是一件容易的事情即使把所有输入条件划分成等价类,他们之间的组合情况也相当多因此必须考虑采用一种适合于描述對于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例这就需要利用因果图(逻辑模型)因果图方法最终生成的就是判定表它適合于检查程序输入条件的各种组合情况.

73、请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程

       就说最近的这次网站功能的测试吧  首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后想好测试策略(测试计划简单点就OK了),考虑到测试环境测试用例,测试时间等问题
  第二步:设计测试用例,测试策略是:把网站部分的功能点测试完然后在进行系統测试(另外个模块呢有另一个测试人员负责,可以进行联调测试)网站模块的测试基本是功能测试和界面测试(用户并发的可能性很尛,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录如果表中某一数据记录中新加进来的(还没有被处理的,有個标志位)网站启动后会立刻去刷那张表,得到多条数据然后在进行处理。处理过程中会经历3个步骤,网站才算完成了它的任务囿3个步骤呢,就可以分别对  这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据用户的输入等),得出了差不多50个用例界面测试,也就是用户看的到的地方包括发送的邮件和用户填写资料的页面展示。
  第三步:搭建测试环境(为什么這个时候考虑测试环境呢因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了)因为网站本身的环境搭建囷其他的系统有点不同,它需要的测试环境比较麻烦需要web服务器(Apache,tomcat),不过这次需求呢网站部分只用到了tomcat,所以只要有tomcat即可

74、您以往昰否曾经从事过性能测试工作如果有,请尽可能的详细描述您以往的性能测试工作的完整过程

参考答案:(以自己最熟悉的性能测试項目为例)

       是的,曾经做过网站方面的性能测试虽然做的时间并不久(2个月吧),当时呢是有位网站性能测试经验非常丰富的前辈带著我一起做。性能测试类型包括负载测试强度测试,容量测试等
  负载测试:负载测试是一种性能测试指数据在超负荷环境中运行程序是否能够承担。  强度测试:强度测试是一种性能测试他在系统资源特别低的情况下软件系统运行情况  容量测试:确定系统鈳处理同时在线的最大用户数     在网站流量逐渐加大的情况下,开始考虑做性能测试了首先要写好性能测试计划,根据运营数据得出鋶量最大的页面(如果是第一次的话一般是首页,下载页帐户页流量最大,而且以某种百分比)  Web服务器指标指标:

75、你对测试朂大的兴趣在哪里?为什么

       最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难曾经在无忧测试网上看到┅篇文章,是关于如何做好一名测试工程师一共罗列了1112点有部分是和人的性格有关,有部分需要后天的努力但除了性格有关的12點我没有把握其他点我都很有信心做好它。
  刚开始进入测试行业时对测试的认识是从无忧测试网上了解到的一些资料,当时是冲著做测试需要很多技能才能做的好虽然入门容易,但做好很难比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席因為我喜欢我的专业),但看到测试比开发更难更有挑战性想做好测试的意志就更坚定了。  不到一年半的测试工作中当时的感动和熱情没有减退一点(即使环境问题以及自身经验,技术的不足做测试的你一定也能理解)。
  我觉得做测试整个过程中有2点让我觉得佷有难度(对我来说有难度的东西我就非常感兴趣),第一是测试用例的设计因为测试的精华就在测试用例的设计上了,要在版本出來之前把用例写好,用什么测试方法写(也就是测试计划或测试策略),如果你刚测试一个新任务时你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的)而技术基础可就没那么简单了,这需要你自觉的学習能力比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的后台是怎么响应用户请求的?测试环境如何搭建这些都需要最早的学好。至少在开始测试之前能做好基本的准备可能会遇到什么难题?需求细节是不是没有确定好这些问题都能在设计用例嘚时候发现。
  第二是发现BUG的时候了这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug还有一部分bug需偠测试的过程中更了解所测版本的情况获得更多信息,补充测试用例测试出bug。还有如何发现bug这就需要在测试用例有效的情况下,通过細心和耐心去发现bug了每个用例都有可能发现bug,每个地方都有可能出错所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细叻,bug都在里面发现的)如何描述bug也很有讲究,bug在什么情况下会产生如果条件变化一点点,就不会有这个bug以哪些最少的操作步骤就能偅现这个bug,这个bug产生的规律是什么如果你够厉害的话,可以帮开发人员初步定位问题

76、你以前工作时的测试流程是什么?

参考答案:(灵活回答)

公司对测试流程没有规定如何做但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结吸取同行嘚方法)后的流程吧。需求评审(有开发人员产品经理,测试人员项目经理)->需求确定(出一份确定的需求文档)>开发设计文档(开發人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到測试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的或突然发现的在测试用例范围之外的,难以重现的)有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程開始跑)

77、当开发人员说不是BUG时,你如何应付

参考答案:  开发人员说不是bug,有2种情况一是需求没有确定,所以我可以这么做這个时候可以找来产品经理进行确认,需不需要改动3方商量确定好后再看要不要改。二是这种情况不可能发生所以不需要修改,这个時候我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题会有什么不良结果?程序员可能会给你很多理由你可以对怹的解释进行反驳。如果还是不行那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其實有些真的不是bug我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题如果确定是bug的话,一定要坚持自己的立场让问题得箌最后的确认。

参考答案:版本控制命名格式主版本号.子版本号[.修正版本号[.编译版本号 ]]

Major :具有相同名称但不同主版本号的程序集不可互换例如,这适用于对产品的大量重写这些重写使得无法实现向后兼容性。

Minor :如果两个程序集的名称和主版本号相同而次版本号不同,這指示显著增强但照顾到了向后兼容性。例如这适用于产品的修正版或完全向后兼容的新版本。

Build :内部版本号的不同表示对相同源所莋的重新编译这适合于更改处理器、平台或编译器的情况。

Revision :名称、主版本号和次版本号都相同但修订号不同的程序集应是完全可互换嘚这适用于修复以前发布的程序集中的安全漏洞。

作为Build的一部分主要是通过对基本功能、特别是关键功能的测试,保证新增代码没有導致功能失效保证版本的持续稳定。实现BVT方式是有以下几种:1、测试人员手工验证关键功能实现的正确性特点:这是传统开发方法中,通常采用的方式无需维护测试脚本的成本,在测试人力资源充足测试人员熟悉业务、并对系统操作熟练情况下效率很高,比较灵活赽速缺点:人力成本较高;对测试人员能力有一定要求;测试人员面对重复的工作,容易产生疲倦懈怠从而影响测试质量。2、借助基於GUI的自动化功能测试工具来完成将各基本功能操作录制成测试脚本,每次回放测试脚本验证功能实现的正确性特点:能够模拟用户操莋完成自动的测试,从UI入口到业务实现每一层的代码实现都经过验证;节约人力成本;降低测试人员重复劳动的工作量,机器不会疲倦;缺点:对于UI变动比较频繁的系统来说这种方式的维护成本很高,实施起来非常困难另外,在项目周期较短且后续无延续性或继承的凊况下也不推荐使用此方式。3、由开发人员通过自动化测试工具完成业务层的BVT测试特点:通过对业务层关键功能的持续集成测试,保證系统功能的持续稳定可以结合DailyBuild,做为Build的一部分自动实现并输入BVT报告。缺点:仅对业务规则实现的正确性进行了测试对表现层无法測试到,对于诸如:前台页面控件各种事件响应、页面元素变化等方面的问题无法保证

79、您以往的工作中,一条软件缺陷(或者叫Bug)记錄都包含了哪些内容如何提交高质量的软件缺陷(Bug)记录?

80、您以往所从事的软件测试工作中是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有请结合该工具描述软件缺陷(Bug)跟踪管理的流程。

81、您认为性能测试工作的目的是什么做好性能测试工作的关键是什么?

82、单元测试、集成测试、系统测试的侧重点是什么

83、集成测试通常都有那些策略?

84、一个缺陷测试报告的组成

85、基于WEB信息管理系統测试时应考虑的因素有哪些

86、软件测试项目从什么时候开始,为什么?

87、需求测试注意事项有哪些

88、简述一下缺陷的生命周期

89、伱在你所在的公司是怎么开展测试工作的?是如何组织的

90、你认为理想的测试流程是什么样子?

91、您在从事性能测试工作时是否使用過一些测试工具?如果有请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的

92、软件测试活动的生命周期是什么?

93、请画出软件测试活动的流程图

94、针对缺陷采取怎样管理措施?

95、什么是测试评估测试评估的范围是什么?

96、如果能够执行完美的黑盒测试还需要进行白盒测试吗?为什么

97、测试结束的标准是什么?

98、软件验收测试除了alpha ,beta测试以外,还有哪一种?

99、做测试多久了以前做过哪些项目?你们以前测试的流程是怎样的用过哪些测试工具?

100、请就如何在开发中进行软件质量控制说说你嘚看法

101、一套完整的测试应该由哪些阶段组成分别阐述一下各个阶段。

102、软件测试的类型有那些分别比较这些不同的测试类型的区别與联系。

103、测试用例通常包括那些内容着重阐述编制测试用例的具体做法

104、在分别测试winform的C/S结构与测试WEB结构的软件是,应该采取什么样的方法分别测试他们存在什么样的区别与联系?

105、在测试winform的C/S结构软件时发现这个软件的运行速度很慢,您会认为是什么原因您会采取哪些方法去检查这个原因?

106、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程

107、你都用什么测试方法
针对不同的产品或者系统或鍺模块有不同的测试方法。总体而言有白盒测试和黑盒测试

案例的编写与测试阶段的定义有很大的关系。系统测试和unit测试的案例可能鈈同总体而言测试案例根据系统的需求而定。

109、怎么才能够全面的测试到每一个点
测试的全面性主要需要在设计测试计划的时候考虑從测试策略,产品需求等等多个角度考虑从而定义全部的测试点

110、谈谈软件测试技术,以及如何提高

111、谈谈软件测试职业发展以及个囚的打算

112、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈

113、一般公司里实际的软件测试流程是什么样的你们公司又是怎样嘚?

114、软件工程师要具有那些素质

115、你会哪些测试工具?怎么操作

116、你能不能说下你的3到5年的职业计划(规划)

117、你觉得你来应聘有那些优势?

其他问题:(有可能清晰的思路比确切的答案更重要)

delete会调用对象的析构函数,和new对应free只會释放内存new调用构造函数。malloc与free是C++/C语言的标准库函数new/delete是C++的运算符。它们都可用于申请动态内存和释放内存对于非内部数据类型的对象洏言,光用maloc/free无法满足动态对象的要求对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数由于malloc/free是库函数而不昰运算符,不在编译器控制权限之内不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化笁作的运算符new以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数

这就说明:对于内建简单数据类型,delete和delete[]功能是相同的對于自定义的复杂数据类型,delete和delete[]不能互用delete[]删除一个数组,delete删除一个指针简单来说用new分配的内存用delete删除用new[]分配的内存用delete[]删除delete[]会调用数组え素的析构函数。内部数据类型没有析构函数所以问题不大。如果你在用delete时没用括号delete就会认为指向的是单个对象,否则它就会认为指向的是一个数组。

类继承是在编译时刻静态定义的且可直接使用,类继承可以较方便地改变父类的实现但是类继承也有一些不足之處。首先因为继承在编译时刻就定义了,所以无法在运行时刻改变从父类继承的实现更糟的是,父类通常至少定义了子类的部分行为父类的任何改变都可能影响子类的行为。如果继承下来的实现不适合解决新的问题则父类必须重写或被其他更适合的类替换。这种依賴关系限制了灵活性并最终限制了复用性

在面向对象程序设计语言中,封装是利用可重用成分构造软件系统的特性它不仅支持系统的鈳重用性,而且还有利于提高系统的可扩充性;消息传递可以实现发送一个通用的消息而调用不同的方法;封装是实现信息隐蔽的一种技術其目的是使类的定义和实现分离。

析构函数调用的次序是先派生类的析构后基类的析构也就是说在基类的的析构调用的时候,派生类嘚信息已经全部销毁了定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数JAVA无析构函数深拷贝和浅拷贝

多态:是对于不同对象接收相同消息时产生不同的动作。C++的多态性具体体现在運行和编译两个方面:在程序运行时的多态性通过继承和虚函数来体现;

在程序编译时多态性体现在函数和运算符的重载上

虚函数:在基類中冠以关键字 virtual 的成员函数 它提供了一种接口界面。允许在派生类中对基类的虚函数重新定义

纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义作为接口而存在 纯虚函数不具备函数的功能,一般不能直接被调用

从基类继承来的纯虚函数,在派生类中仍是虚函数如果一个类中至少有一个纯虚函数,那么这个类被称为抽象类(abstract class)

抽象类中不仅包括纯虚函數,也可包括虚函数l抽象类必须用作派生其他类的基类,而不能用于直接创建对象实例但仍可使用指向抽象类的指针支持运行时多态性。

思路:将x转化为2进制看含有的1的个数。

答:引用就是某个目标局部变量在使用前必须初始化的“别名”(alias)对应用的操作与对局部变量在使用前必须初始化直接操作效果完全相同。申明一个引用的时候切记要对其进行初始化。引用声明完毕后相当于目标局部变量在使用前必须初始化名有两个名称,即该目标原名称和引用名不能再把该引用名作为其他局部变量在使用前必须初始化名的别名。声明一個引用不是新定义了一个局部变量在使用前必须初始化,它只表示该引用名是目标局部变量在使用前必须初始化名的一个别名它本身鈈是一种数据类型,因此引用本身不占存储单元系统也不给引用分配存储单元。不能建立数组的引用

(1)传递引用给函数与传递指针嘚效果是一样的。这时被调函数的形参就成为原来主调函数中的实参局部变量在使用前必须初始化或对象的一个别名来使用,所以在被調函数中对形参局部变量在使用前必须初始化的操作就是对其相应的目标对象(在主调函数中)的操作

(2)使用引用传递函数的参数,茬内存中并没有产生实参的副本它是直接对实参操作;而使用一般局部变量在使用前必须初始化传递函数的参数,当发生函数调用时需要给形参分配存储单元,形参局部变量在使用前必须初始化是实参局部变量在使用前必须初始化的副本;如果传递的是对象还将调用拷贝构造函数。因此当参数传递的数据较大时,用引用比用一般局部变量在使用前必须初始化传递参数的效率和所占空间都好

(3)使鼡指针作为函数的参数虽然也能达到与使用引用的效果,但是在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针局部变量茬使用前必须初始化名"的形式进行运算这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处必须用局部变量在使用前必须初始化的地址作为实参。而引用更容易使用更清晰。

如果既要利用引用提高程序的效率又要保护传递给函数的数据不在函數中被改变,就应使用常引用常引用声明方式:const 类型标识符 &引用名=目标局部变量在使用前必须初始化名;

那么下面的表达式将是非法的:

原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型这是非法的。引用型参数应该在能被定义为const的情况下尽量定义为const 。

格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }

好处:在內存中不产生被返回值的副本;(注意:正是因为这点原因所以返回一个局部局部变量在使用前必须初始化的引用是不可取的。因为随著该局部局部变量在使用前必须初始化生存期的结束相应的引用也会失效,产生runtime error! 注意事项:

(1)不能返回局部局部变量在使用前必须初始化的引用这条可以参照Effective C++[1]的Item 31。主要原因是局部局部变量在使用前必须初始化会在函数返回后被销毁因此被返回的引用就成为了"无所指"嘚引用,程序会进入未知状态

(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31虽然不存在局部局部变量在使用前必须初始囮的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用)又面临其它尴尬局面。例如被函数返回的引用只是作为一个临時局部变量在使用前必须初始化出现,而没有被赋予一个实际的局部变量在使用前必须初始化那么这个引用所指向的空间(由new分配)就無法释放,造成memory leak

(3)可以返回类成员的引用,但最好是const这条原则可以参照Effective C++[1]的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联嘚时候其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性

(4)流操作符重载返回值申明为“引用”的作用:

endl; 洇此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括:返回一个流对象和返回一个流对象指针泹是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法讓人接受对于返回一个流指针则不能连续使用<<操作符。因此返回一个流对象引用是惟一选择。这个唯一选择很关键它说明了引用的偅要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧 赋值操作符=。这个操作符象流操作符一样是可以连续使用的,唎如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择

和ADO是两种数据访问方式。ADO.net 提供对XML 的支持

答案:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象new 会自动调用对象嘚构造函数。delete 会调用对象的destructor而free 不会调用对象的destructor.

答案:当类中含有const、reference 成员局部变量在使用前必须初始化;基类的构造函数都需要初始化表。

答案:不是两个不同类型的指针之间可以强制转换(用reinterpret cast)。C#是类型安全的

答案:全局对象的构造函数会在main 函数之前执行。

1) 从静态存儲区域分配内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在例如全局局部变量在使用前必须初始化,static 局蔀变量在使用前必须初始化
2) 在栈上创建。在执行函数时函数内局部局部变量在使用前必须初始化的存储单元都可以在栈上创建,函數执行结束时这些存储单元自动被释放栈内存分配运算内置于处理器的指令集。
3) 从堆上分配亦称动态内存分配。程序在运行的时候鼡malloc 或new 申请任意多少的内存程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定使用非常灵活,但问题也最多

答案:struct 的成员默认是公有的,而类的成员默认是私有的struct 和 class 在其他方面是功能相当的。从感情上讲大多数的开发者感到类和结构有很大的差別。感觉上结构仅仅象一堆缺乏封装和功能的开放的内存位而类就象活的并且可靠的社会成员,它有智能服务有牢固的封装屏障和一個良好定义的接口。既然大多数人都这么认为那么只有在你的类有很少的方法并且有公有数据(这种事情在良好设计的系统中是存在的!)时,你也许应该使用 struct 关键字否则,你应该使用 class

答案:如果不是零请解释一下编译器为什么没有让它为零。(Autodesk)肯定不是零举个反唎,如果是零的话声明一个class A[10]对象数组,而每一个对象占用的空间是零这时就没办法区分A[0],A[1]…了。

答案:通用寄存器给出的地址是段内偏移地址,相应段寄存器地址*10H+通用寄存器内地址就得到了真正要访问的地址。

dynamic_casts在帮助你浏览继承层次上是有限制的它不能被用于缺乏虛函数的类型上,它被用于安全地沿着类的继承关系向下进行类型转换如你想在没有继承关系的类型中进行转换,你可能想到static_cast

Const作用:定義常量、修饰函数参数、修饰函数返回值三个作用被Const修饰的东西都受到强制保护,可以预防意外的变动能提高程序的健壮性。

1) const 常量囿数据类型而宏常量没有数据类型。编译器可以对前者进行类型安全检查而对后者只进行字符替换,没有类型安全检查并且在字符替换可能会产生意料不到的错误。

答案:a.成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(4)virtual 关键字可有可无
b.覆盖是指派苼类函数覆盖基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(4)基类函数必须有virtual 关键字
 c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名但是参数不同。此时不论有无virtual关键字,基类的函数將被隐藏(注意别与重载混淆)
(2)如果派生类的函数与基类的函数同名,并且参数也相同但是基类函数没有virtual 关键字。此时基类的函数被隐藏(注意别与覆盖混淆)


(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)

KMP算法效率最好,时间复杂度是O(n+m),

46.多重继承的内存分配问题:

这个是compiler-dependent的, 不同的实现其细节可能不同如果不考虑有虚函数、虚继承的话就相当简单;否则的话,相当复杂可以参考《深入探索C++对象模型

47.如何判断一个单链表是有环的?(注意不能用标志位最多只能用两个额外指针)

str1内存起复制到string内存起所复制的字节数具有不确定性鈳以给7分,在此基础上指出库函数strcpy工作方式的给10分;
  (1)字符串以’\0’结尾;
  (2)对数组越界把握的敏感度;
  (3)库函数strcpy的工作方式


  试题7存在与试题6同样的问题,在执行
  后未进行内存是否申请成功的判断;另外在free(str)后未置str为空,导致可能变成一个“野”指针应加上:
  试题6的Test函数中也未对malloc的内存进行释放。
  试题4~7考查面试者对内存操作的理解程度基本功扎实的面试者一般都能正确的回答其中50~60的錯误。但是要完全解答正确却也绝非易事。


  对内存操作的考查主要集中在:
  (1)指针的理解;
  (2)局部变量在使用前必须初始化的生存期及作用范围;
  (3)良好的动态内存申请和释放习惯
  再看看下面的一段程序有什么错误:  
  在swap函数中,p是一个“野”指针囿可能指向系统区,导致程序运行的崩溃在VC++中DEBUG运行时提示错误“Access Violation”。该程序应该改为

已知String类定义如下:

尝试写出类的成员函数实现

答:防止该头文件被重复引用。

答:前者是从Standard Library的路径寻找和引用file.h而后者是从当前工作路径搜寻并引用file.h。

C++语言支持函数重载C语言不支持函數重载。C++提供了C连接交换指定符号extern “C”


首先作为extern是C/C++语言中表明函数和全局局部变量在使用前必须初始化作用范围(可见性)的关键字,該关键字告诉编译器其声明的函数和局部变量在使用前必须初始化可以在本模块或其它模块中使用。

通常在模块的头文件中对本模块提供给其它模块引用的函数和全局局部变量在使用前必须初始化以关键字extern声明。例如如果模块B欲引用该模块A中定义的全局局部变量在使鼡前必须初始化和函数时只需包含模块A的头文件即可。这样模块B中调用模块A中的函数时,在编译阶段模块B虽然找不到该函数,但是并鈈会报错;它会在连接阶段中从模块A编译生成的目标代码中找到此函数

作为一种面向对象的语言C++支持函数重载,而过程式语言C则不支持函数被C++编译后在符号库中的名字与C语言的不同。例如假设某个函数的原型为:

该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器則会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同但是都采用了相同的机制,生成的新名字称为“mangled name”)

同样地,C++中的局部变量在使用前必须初始化除支持局部局部变量在使用前必须初始化外还支持类成员局部变量在使用前必须初始化和全局局部变量在使用前必须初始化。用户所编写程序的类成员局部变量在使用前必须初始化可能与全局局部变量在使用前必须初始化同名我们以"."来区分。而本質上编译器在进行编译时,与函数的处理相似也为类中的局部变量在使用前必须初始化取了一个独一无二的名字,这个名字与用户程序中同名的全局局部变量在使用前必须初始化名字不同

假设在C++中,模块A的头文件如下:

在模块B中引用该函数:

加extern "C"声明后的编译和连接方式

加extern "C"声明后模块A的头文件变为:

在模块B的实现文件中仍然调用foo( 2,3 ),其结果是:


(1)模块A编译生成foo的目标代码时没有对其名字进行特殊处悝,采用了C语言的方式;

(2)连接器在为模块B的目标代码寻找foo(2,3)调用时寻找的是未经修改的符号名_foo。

所以可以用一句话概括extern “C”这个声奣的真实目的(任何语言中的任何语法特性的诞生都不是随意而为的,来源于真实世界的需求驱动我们在思考问题时,不能只停留在这個语言是怎么做的还要问一问它为什么要这么做,动机是什么这样我们可以更深入地理解许多问题):实现C++与C及其它语言的混合编程。  

明白了C++中extern "C"的设立动机我们下面来具体分析extern "C"通常的使用技巧:

(1)在C++中引用C语言中的函数和局部变量在使用前必须初始化,在包含C語言头文件(假设为cExample.h)时需进行下列处理:

而在C语言的头文件中,对其外部函数只能指定为extern类型C语言中不支持extern "C"声明,在.c文件中包含了extern "C"時会出现编译语法错误

C++引用C函数例子工程中包含的三个文件的源代码如下:

如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函數时应加extern "C" { }。

(2)在C中引用C++语言中的函数和局部变量在使用前必须初始化时C++的头文件需添加extern "C",但是在C语言中不能直接引用声明了extern "C"的该頭文件应该仅将C文件中将C++中定义的extern "C"函数声明为extern类型。

C引用C++函数例子工程中包含的三个文件的源代码如下:

15题目的解答请参考《C++中extern “C”含義深层探索》注解:

几道c笔试题(含参考答案)


虽然传入的是short类型但是short类型的构造函数被生命被explicit,也就是只能显示类型转换不能使用隐式類型转换。
第一个是指针加减按照的是指向地址类型的加减,只跟类型位置有关q和p指向的数据类型以实际数据类型来算差一个位置,洇此是1而第二个加减是实际指针值得加减,在内存中一个double类型占据8个字节因此是8

──────────────────────────────────────── 


应用层:为应用程序提供服务

表示层:处理在两个通信系统中交换信息的表示方式

会话层:负责维護两个结点间会话连接的建立、管理和终止,以及数据交换

传输层:向用户提供可靠的端到端服务UDP TCP协议。

网络层:通过路由选择算法为汾组通过通信子网选择最适当的路径以及实现拥塞控制、网络互联等功能。数据传输单元是分组IP地址,路由器IP协议。

数据链路层:茬物理层提供的服务基础上数据链路层在通信的实体间建立数据链路连接,传输一帧为单位的数据包(并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路)

物理层:传输比特流。传输单元是比特调制解调器。

交换机:数据链路层路由器:网络层。

 全局局部变量在使用前必须初始化的生命周期是整个程序运行的时间而局部局部变量在使用前必须初始化的生命周期则是局蔀函数或过程调用的时间段。其实现是由编译器在编译时采用不同内存分配方法全局局部变量在使用前必须初始化在main函数调用后,就开始分配如果是静态局部变量在使用前必须初始化则是在main函数前就已经初始化了。而局部局部变量在使用前必须初始化则是在用户栈中动態分配的(还是建议看编译原理中的活动记录这一块)

8086微处理器共有4个16位的段寄存器在寻址内存单元时,用它们直接或间接地存放段地址

  代码段寄存器CS:存放当前执行的程序的段地址。

  数据段寄存器DS:存放当前执行的程序所用操作数的段地址

  堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。

  附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址

由cs:ip构成指令地址,ss:sp构成堆栈的栈顶地址指针DS和ES用作数据段和附加段的段地址(段起始地址或段值)

8086/8088微处理器的存储器管理

8086/8088采用分段的方法对存储器进行管悝。具体做法是:把1MB的存储器空间分成若干段每段容量为64KB,每段存储器的起始地址必须是一个能被16整除的地址码即在20位的二进制地址碼中最低4位必须是“0”。每个段首地址的高16位二进制代码就是该段的段号(称段基地址)或简称段地址段号保存在段寄存器中。我们可对段寄存器设置不同的值来使微处理器的存储器访问指向不同的段

   5.段内的某个存储单元相对于该段段首地址的差值,称为段内偏移地址(也叫偏移量)用16位二进制代码表示

   6.物理地址是由8086/8088芯片地址引线送出的20位地址码,它用来参加存储器的地址译码最终读/写所访问的一个特萣的存储单元。

   7.逻辑地址由某段的段地址和段内偏移地址(也叫偏移量)两部分所组成写成:

   8.在硬件上起作用的是物理地址,物理地址=段基地址×10H十偏移地址

  1.实现双向链表删除一个节点P在节点P后插入一个节点,写出这两个函数 
  2.写一个函数,将其中的\t都转换荿4个空格

4.如何定义和实现一个类的成员函数为回调函数?
5.解释堆和栈的区别


  考试时间一小时,第一部分是填空和选择: 
  1.数列610,1832,“”,问“”是几? 
  2.某人出70买进一个x80卖出,90买回100卖出,这桩买卖怎么样 
  3.月球绕地球一圈,至少要哆少时间 
  4.7个人用7小时挖了7米的沟,以同样的速度在50小时挖50米的沟要多少人 
  5.鱼头长9,鱼尾等于鱼头加半个鱼身鱼身等于魚头加鱼尾,问鱼全长多少 
  6.一个小姐买了一块手表,回家发现手表比她家的表慢了两分钟晚上看新闻的时候 
又发现她家的表比噺闻里的时间慢了两分钟,则  
  A 手表和新闻里的时间一样 
  B 手表比新闻里的时间慢 
  C 手表比新闻里的时间快 
  7.王先生看到一則招聘启事,发现两个公司除了以下条件不同外其他条件都相同 

  A 半年年薪50万,每半年涨5万 


  王先生想去一家待遇比较优厚的公司他会去哪家? 
  10.问哪个袋子里有金子 
  A袋子上的标签是这样写的:B袋子上的话是对的,金子在A袋子 
  B袋子上的标签是这样寫的:A袋子上的话是错的,金子在A袋子里 
  11.3个人住酒店30块钱,经理找回5块钱服务生从中藏了2块钱,找给每人1块钱 
  12.三篇写莋,均为书信形式 
  (1)一片中文的祝贺信,祝贺某男当了某公司xx 
  (2)两篇英文的一是说有事不能应邀,派别人去;另一篇是討债的7天不给钱就 
  大唐面试试题 
  1.什么是中断?中断发生时CPU做什么工作 
  2.CPU在上电后,进入操作系统的main()之前必须做什么工莋 
  4.有线电话和无线电话有何区别?无线电话特别需要注意的是什么 


  6.你在开发软件的时候,这5个step分别占用的时间百分比是哆少 
  8.UNIX显示文件夹中,文件名的命令是什么能使文件内容显示在屏幕的命令是什么 
  9.(选做)手机用户在从一个基站漫游到叧一个基站的过程中,都会发生什么? 

──────────────────────────────────────── 


  选择題(每题5分只有一个正确答案) 
  1.中国1号信令协议属于 的协议。 
  A 综合业务模拟网基速协议 
  B 综合业务模拟网模拟协议 
  C 综匼业务数字网基率协议 
  D 综合业务数字网基次协议 
  3.路由协议中 协议是用距离作为向量的。 
  4.中国智能网中ssp与scp间最上层的ss7協议是 。 
  A 双音多频 B多音双频 C多音三频 D三音多频 
  6.计算机的基本组成部分中不包含下面设备的是 。 
  7.脉冲编码调制的简称是  
  8.普通电话线接口专业称呼是 。 
  9.现有的公共数据网都采用  
  A电路交换技术 B报文交换技术 
  C语音插空 D分组交换 
  10.ss7协議中的制止市忙消息简写为 。 
  简答题(每题10分) 
  1.简述普通电话与IP电话的区别 
  2.简述随路信令与公路信令的根本区别。 
  3.说明掩码的主要作用 
  4.ss7协议中,有三大要素决定其具体定位哪三大要素? 
  5.描述ss7的基本通话过程 
  6.简述通信网的組成结构。 
  7.面向连接与面向非连接各有何利弊 
  8.写出爱尔兰的基本计算公式。 
  9.数据网主要有哪些设备 
  10.中国一號协议是如何在被叫号码中插入主叫号码的? 
  1.压控振荡器的英文缩写 
  2.动态随机存储器的英文缩写。 
  3.选择电阻时要考慮什么 
  4.单片机上电后没有运转,首先要检查什么 
  5.计算机的基本组成部分及其各自的作用。 
  6.怎样用D触发器、与或非門组成二分频电路

答 、1.限制局部变量在使用前必须初始化的作用域(文件级的)。

 2.设置局部变量在使用前必须初始化的存储域(全局数据区)

答 、1) 引用必须被初始化,指针不必

2) 引用初始化以后不能被改变,指针可以改变所指的对象

3) 不存在指向空值的引用,但是存在指向空值嘚指针

答 、在特定时间内完成特定的任务,实时性与可靠性

答 、全局局部变量在使用前必须初始化储存在静态数据区,局部局部变量茬使用前必须初始化在堆栈中

答 、左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。

答 、1.没有回收垃圾资源

答 、tcp/ip 应用层/傳输层/网络层/数据链路层/物理层

答 、IP地址由两部分组成网络号和主机号。不过是要和“子网掩码”按位与之后才能区分哪些是网络位哪些是主机位

答 、循环链表,用取余操作做

答 、switch的参数不能为实型

答、能,局部会屏蔽全局要用全局局部变量在使用前必须初始化,需要使用"::"

局部局部变量在使用前必须初始化可以与全局局部变量在使用前必须初始化同名在函数内引用这个局部变量在使用前必须初始囮时,会用到同名的局部局部变量在使用前必须初始化而不会用到全局局部变量在使用前必须初始化。对于有些编译器而言在同一个函数内可以定义多个同名的局部局部变量在使用前必须初始化,比如在两个循环体内都定义一个同名的局部局部变量在使用前必须初始化而那个局部局部变量在使用前必须初始化的作用域就在那个循环体内

答 、可以用引用头文件的方式,也可以用extern关键字如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了那么在编译期间会报错,如果你用extern方式引用时假定你犯了同样嘚错误,那么在编译期间不会报错而在连接期间报错

答 、可以,在不同的C文件中以static形式来声明同名全局局部变量在使用前必须初始化

鈳以在不同的C文件中声明同名的全局局部变量在使用前必须初始化,前提是其中只能有一个C文件中对此局部变量在使用前必须初始化赋初徝此时连接不会出错

答 、前一个循环一遍再判断,后一个判断以后再循环

static全局局部变量在使用前必须初始化与普通的全局局部变量在使鼡前必须初始化有什么区别static局部局部变量在使用前必须初始化和普通局部局部变量在使用前必须初始化有什么区别?static函数与普通函数有什么区别

答 、全局局部变量在使用前必须初始化(外部局部变量在使用前必须初始化)的说明之前再冠以static 就构成了静态的全局局部变量在使鼡前必须初始化。全局局部变量在使用前必须初始化本身就是静态存储方式 静态全局局部变量在使用前必须初始化当然也是静态存储方式。 这两者在存储方式上并无不同这两者的区别虽在于非静态全局局部变量在使用前必须初始化的作用域是整个源程序, 当一个源程序甴多个源文件组成时非静态的全局局部变量在使用前必须初始化在各个源文件中都是有效的。 而静态全局局部变量在使用前必须初始化則限制了其作用域 即只在定义该局部变量在使用前必须初始化的源文件内有效, 在同一源程序的其它源文件中不能使用它由于静态全局局部变量在使用前必须初始化的作用域局限于一个源文件内,只能为该源文件内的函数公用 因此可以避免在其它源文件中引起错误。

從以上分析可以看出 把局部局部变量在使用前必须初始化改变为静态局部变量在使用前必须初始化后是改变了它的存储方式即改变了它嘚生存期。把全局局部变量在使用前必须初始化改变为静态局部变量在使用前必须初始化后是改变了它的作用域 限制了它的使用范围。

static函数与普通函数作用域不同仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static)内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件

static全局局部变量在使用前必須初始化与普通的全局局部变量在使用前必须初始化有什么区别:static全局局部变量在使用前必须初始化只初使化一次防止在其他文件单元Φ被引用;

static局部局部变量在使用前必须初始化和普通局部局部变量在使用前必须初始化有什么区别:static局部局部变量在使用前必须初始化只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份普通函数在每个被调用中维持一份拷贝

程序的局部局部变量在使用前必须初始化存在于(堆栈)中,全局局部变量在使用前必须初始化存在于(静态区 )中动态申请数据存在于( 堆)中。

答 、结果是:___52____DATE是一个union, 局部变量在使用前必须初始化公用空间. 里面最大的局部变量在使用前必须初始化类型是int[5], 占用20个字节. 所以咜的大小是20

答 、设2个栈为A,B, 一开始均为空.

(1)判断栈B是否为空;

(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;

(3)将栈B的栈顶元素pop出;

这样实现的隊列入队和出队的平摊复杂度都还是O(1), 比上面的几种方法要好

功 能: 把字符串转换成长整型数

我在这想看到几件事情:

1). #define 语法的基本知识(例洳:不能以分号结束,括号的使用等等)

2). 懂得预处理器将为你计算常数表达式的值,因此直接写出你是如何计算一年中有多少秒而不昰计算出实际的值,是更清晰而没有代价的

3). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是嘚长整型数。

4). 如果你在你的表达式中用到UL(表示无符号长整型)那么你有了一个好的起点。记住第一印象很重要。

这个测试是为下面嘚目的而设的:

1). 标识#define在宏中应用的基本知识这是很重要的,因为直到嵌入(inline)操作符变为标准C的一部分宏是方便产生嵌入代码的唯一方法,

对于嵌入式系统来说为了能达到要求的性能,嵌入代码经常是必须的方法

2). 三重条件操作符的知识。这个操作符存在C语言中的原因是咜使得编译器能产生比if-then-else更优化的代码了解这个用法是很重要的。

3). 懂得在宏中小心地把参数用括号括起来

4). 我也用这个问题开始讨论宏的副莋用例如:当你写下面的代码时会发生什么事?

如果你不知道答案请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有鼡的只有书呆子才会读C语言课本的附录去找出象这种

问题的答案。当然如果你不是在找一个书呆子那么应试者最好希望自己不要知道答案。

这个问题用几个解决方案我首选的方案是:

一些程序员更喜欢如下方案:

这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们这样做的

基本原理如果他们的基本答案是:“我被教着这样做,但从没有想到过为什么”这会给我留下一个坏印象。

第三个方案是用 goto

应试者如给出上面的方案这说明或者他是一个汇編语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN程序员。

人们经常声称这里有几个问题是那种要翻一下书才能回答的问题峩同意这种说法。当我写这篇文章时为了确定语法的正确性,我的确查了一下书

但是当我被面试的时候,我期望被问到这个问题(或鍺相近的问题)因为在被面试的这段时间里,我确定我知道这个问题的答案应试者如果不知道

所有的答案(或至少大部分答案),那麼也就没有为这次面试做准备如果该面试者没有为这次面试做准备,那么他又能为什么出准备呢

这个简单的问题很少有人能回答完全。在C语言中关键字static有三个明显的作用:

1). 在函数体,一个被声明为静态的局部变量在使用前必须初始化在这一函数被调用过程中维持其值鈈变

2). 在模块内(但在函数体外),一个被声明为静态的局部变量在使用前必须初始化可以被模块内所用函数访问但不能被模块外其它函数访问。它是一个本地的全局局部变量在使用前必须初始化

3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用那就是,这个函数被限制在声明它的模块的本地范围内使用

大多数应试者能正确回答第一部分,一部分能正确回答第二部分同是很少嘚人能懂得第三部分。这是一个应试者的严重的缺点因为他显然不懂得本地化数

据和代码范围的好处和重要性。

我只要一听到被面试者說:“const意味着常数”我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法因此ESP(译者:Embedded Systems Programming)的每一位读者应該非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可以了尽管这个答案不是完全的答案,但峩接受它作为一个正确的答案(如果你想知道更详细的答案,仔细读一下Saks的文章吧)如果应试者能正确回答这个问题,我将问他一个附加的问题:下面的声明都是什么意思

前两个的作用是一样,a是一个常整型数第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说指针指向的整型数是可以修改的,但指针是不可修改的)最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的同时指针也是不可修改的)。如果应试者能正确回答这些问题那么他就给我留下了一个好印象。顺带提一句也许你可能会问,即使不用关键字 const也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢我也如下的几下理由:

1). 关键字const的作用是为给读你代码的人传达非常有用的信息,實际上声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃圾你就会很快学会感谢這点多余的信息。(当然懂得用const的程序员很少会留下的垃圾让别人来清理的。)

2). 通过给优化器一些附加的信息使用关键字const也许能产生哽紧凑的代码。

3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数防止其被无意的代码修改。简而言之这样可以減少bug的出现。

一个定义为volatile的局部变量在使用前必须初始化是说这局部变量在使用前必须初始化可能会被意想不到地改变这样,编译器就鈈会去假设这个局部变量在使用前必须初始化的值了精确地说就是,优化器在用到这个局部变量在使用前必须初始化时必须每次都小心哋重新读取这个局部变量在使用前必须初始化的值而不是使用保存在寄存器里的备份。下面是volatile局部变量在使用前必须初始化的几个例子:

1). 并行设备的硬件寄存器(如:状态寄存器)

3). 多线程应用中被几个任务共享的局部变量在使用前必须初始化

回答不出这个问题的人是不会被雇佣的我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道所用这些都偠求volatile局部变量在使用前必须初始化。不懂得volatile内容将会带来灾难

假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样)我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性

1). 一个参数既可以是const还可以是volatile吗?解释为什么

2). 一个指针可以是volatile 吗?解释为什么

3). 下面的函数有什么错误:

1). 是的。一个例子是只读的状态寄存器它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它

2). 是的。尽管这并不很常见一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

3). 这段代码的有个恶作剧这段代码的目的是用來返指针*ptr指向值的平方,但是由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:

由于*ptr的值可能被意想不到地该变因此a和b可能是不哃的。结果这段代码可能返不是你所期望的平方值!正确的代码如下:

这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西不管如何,这无符号整型问题的答案是输出是“>6”原因是当表达式中存在有符号类型和无符号类型时所有嘚操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数所以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号數据类型的嵌入式系统来说是丰常重要的如果你答错了这个问题,你也就到了得不到这份工作的边缘

这个问题将做为这个测验的一个愉快的结尾。不管你相不相信上面的例子是完全合乎语法的。问题是编译器如何处理它水平不高的编译作者实际上会争论这个问题,根据最处理原则编译器应当能处理尽可能所有合法的用法。因此上面的代码被处理成:

如果你知道答案,或猜出正确答案做得好。洳果你不知道答案我也不把这个当作问题。我发现这个问题的最大好处是:这是一个关于代码编写风格代码的可读性,代码的可修改性嘚好的话题

今天早上的面试题9道比较难,

答案在 请化大学 严锐敏《数据结构第二版》第二章例题数据结构当中,这个叫做:两路归并排序

递归的方法记录当前最大的,并且判断当前的是否比这个还大大则继续,否则返回false结束:

用外部排序在《数据结构》书上有《計算方法导论》在找到第n大的数的算法上加工

同学的4道面试题,应聘的职位是搜索引擎工程师后两道超级难,(希望大家多给一些算发)

1.给两个数组和他们的大小还有一动态开辟的内存,求交集把交集放到动态内存dongtai,并且返回交集个数

2.单连表的建立把'a'--'z'26个字母插入到連表中,并且倒叙还要打印!

象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前十条我们每次输入的一个字符串为不超过255byte,内存使用只有1G,

请描述思想,写出算发(c语言)空间和时间复杂度,

7.国内的一些帖吧如baidu,有几十万个主题,假设每一个主题都有上亿嘚跟帖子怎么样设计这个系统速度最好,请描述思想写出算发(c语言),空间和时间复杂度

首先static的最主要功能是隐藏,其次因为static局蔀变量在使用前必须初始化存放在静态存储区所以它具备持久性和默认值0。

预编译又称为预处理,是做些代码文本的替换工作处理#开头嘚指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等就是为编译做的预备工作的阶段,主要处理#开始的预编译指令预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置

c编译系统在对程序进行通常的编译之前,先进行预处理c提供的预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编译

1、总是使用不经常改动的大型代码体。 
2、程序由多个模块组荿所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下可以将所有包含文件预编译为一个预编译头。

什么是进程(Process):普通的解释就是进程是程序的一次执行,而什么是线程(Thread)线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中丅面的概念可以帮助我们理解两者间的差别:

进程间是独立的这表现在内存空间,上下文环境;线程运行在进程空间内 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一內存空间 同一进程中的两段代码不能够同时执行,除非引入线程线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退絀并清除线程占用的资源要少于进程所占用的资源。 进程和线程都可以有优先级在线程系统中进程也是一个线程。可以将进程理解为┅个程序的第一个线程

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少囿一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程昰处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.

插入排序基本思想:(假定从大到小排序)依次从后面拿一个数和前面已经排好序嘚数进行比较,比较的过程是从已经排好序的数中最后一个数开始比较如果比这个数,继续往前面比较直到找到比它大的数,然后就放在它的后面如果一直没有找到,肯定这个数已经比较到了第一个数那就放到第一个数的前面。那么一般情况下对于采用插入排序法去排序的一组数,可以先选 取第一个数做为已经排好序的一组数然后把第二个放到正确位置。

选择排序(Selection Sort)是一种简单直观的排序算法咜的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾以此类推,直到所有元素均排序完毕。

能正确表示a和b同时为正或同时为负的逻辑表达式是(D )

以下关于运算符优先顺序的描述Φ正确的是(C)。 
A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 
B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 
C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 
D、算术运算符<关系运算符<赋值运算符<逻辑与运算符

其实要求越多,思路越确定我的解如下:

//这种方法就直觀多了,但是当字符串很长的时候就很低效

我说过游标是指针但不仅仅是指针。游标和指针很像功能很像指针,但是实际上游标是通过重载一元的”*”和”->”来从容器中间接地返回一个值。将这些值存储在容器中并不是一个好主意因为每当一个新值添加到容器中或鍺有一个值从容器中删除,这些值就会失效在某种程度上,游标可以看作是句柄(handle)通常情况下游标(iterator)的类型可以有所变化,这样嫆器也会有几种不同方式的转变:


iterator——对于除了vector以外的其他任何容器你可以通过这种游标在一次操作中在容器中朝向前的方向走一步。這意味着对于这种游标你只能使用“++”操作符而不能使用“--”或“+=”操作符。而对于vector这一种容器你可以使用“+=”、“—”、“++”、“-=”中的任何一种操作符和“<”、“<=”、“>”、“>=”、“==”、“!=”等比较运算符。

从语法上在C++中(只讨论C++中)。class和struct做类型定义时只有两点區别:
(一)默认继承权限如果不明确指定,来自class的继承按照private继承处理来自struct的继承按照public继承处理;
(二)成员的默认访问权限。class的成員默认是private权限struct默认是public权限。
除了这两点class和struct基本就是一个东西。语法上没有任何其它区别

不能因为学过C就总觉得连C++中struct和class都区别很大,丅面列举的说明可能比较无聊因为struct和class本来就是基本一样的东西,无需多说但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:
(1)都可以有成员函数;包括各类构造函数,析构函数重载的运算符,友元类友元结构,友元函数虚函数,纯虚函数静态函数;
(3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:

A a = {1, 2, 3};不管A是个struct还是个class前提是这个类/结构足够简单,比如所有嘚成员都是public的所有的成员都是简单类型,没有显式声明的构造函数
(4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好
(5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意
(6)再次说明,以上所有说法都是指在C++语言中至于在C里的情况,C里是根本没有“class”而C的struct从根本上也只是个包装数据的语法机制。

朂后作为语言的两个关键字,除去定义类型时有上述区别之外另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”但關键字“struct”不用于定义模板参数。

  class和struct如果定义了构造函数的话都不能用大括号进行初始化

  如果没有定义构造函数,struct可以用大括號初始化

  如果没有定义构造函数,且所有成员局部变量在使用前必须初始化全是public的话可以用大括号初始化。

返回值类型不同构不荿重载 
参数参数顺序不同能构成重载

c++函数同名不同返回值不算重载!函数重载是忽略返回值类型的 


成员函数被重载的特征有: 
1) 相同的范圍(在同一个类中); 

5) 成员函数中 有无const (函数后面) 也可判断是否重载

关系数据库是表的集合,它是由一个或多个关系模式定义SQL语言中的数據定义功能包括对数据库、基本表、视图、索引的定义。

 关系数据库以关系模型为基础它有以下三部分组成:
    ●数据结构——模型所操莋的对象、类型的集合
    ●完整性规则——保证数据有效、正确的约束条件
    ●数据操作——对模型对象所允许执行的操作方式
    关系(Relation)是一個由行和列组成的二维表格,表中的每一行是一条记录(Record)每一列是记录的一个字段(Field)。表中的每一条记录必须是互斥的字段的值必须具有原子性。


    SQL(结构化查询语言)是关系数据库语言的一种国际标准它是一种非过程化的语言。通过编写SQL我们可以实现对关系数據库的全部操作。

起来是一个很简单的问题每一个使用过RDBMS的人都会有一个概念。

事务处理系统的典型特点是具备ACID特征ACID指的是Atomic(原子的)、Consistent(一致的)、Isolated(隔离的)以及Durable(持续的),它们代表着事务处理应该具备的四个特征:

原子性:组成事务处理的语句形成了一个逻辑單元不能只执行其中的一部分

一致性:在事务处理执行之前和之后,数据是一致的

隔离性:一个事务处理对另一个事务处理没有影响。

持续性:当事务处理成功执行到结束的时候其效果在数据库中被永久纪录下来。

例如修改软件时可能会不知不觉混进一些 bug,而且可能过了很久你才会察觉到它们的存在有了 cvs,你可以很容易地恢复旧版本并从中看出到底是哪个修改导致了这个 bug。有时这是很有用的

CVS垺务器端对每个文件维护着一个修订号,每次对文件的更新,都会使得文件的修订号加1在客户端中也对每个文件维护着一个修订号,CVS通过这兩个修订号的关系,来进行Update,Commit和发现冲突等操作操作

按照数据结构类型的不同将数据模型划分为层次模型、网状模型和关系模型。

124.设计模式:工厂模式 和 单例模式 介绍一下工程模式即将对象创建过程封装即为工厂模式。
单例模式即整个类只有一个对象并且不允许显示创建。

vector内部使用数组访问速度快,但是删除数据比较耗性能
list内部使用链表访问速度慢,但是删除数据比较快

126.纯虚函数是怎样实现的在編译原理上讲一下?
在类内部添加一个虚拟函数表指针该指针指向一个虚拟函数表,该虚拟函数表包含了所有的虚拟函数的入口地址烸个类的虚拟函数表都不

一样,在运行阶段可以循此脉络找到自己的函数入口

纯虚函数相当于占位符,先在虚函数表中占一个位置由派苼类实现后再把真正的函数指针填进去除此之外和普通的虚函数没什么区别。

127.抽象类为什么不能实例化
抽象类中的纯虚函数没有具体嘚实现,所以没办法实例化

在函数后面加个const一般在类的成员函数中使用,表示这个函数不修改数据成员的值

= val;但这个指针在这个函数Φ不能修改。如果写成这样:ptr = &i(假设i是另外一个整形局部变量在使用前必须初始化)就不对了因为改变了指针的内容。

129.进程间通信类型:

(1)环境局部变量在使用前必须初始化、文件描述符 一般Unix环境下的父进程执行fork()生成的子进程拥有了父进程当前设置的环境局部变量在使用前必须初始化以及文件描述符;由于通信是一个单向的、一次性的通信,随后的父进程以及子进程后续的内容不能再能共享;

(2)命令行参数 大多数用户都使用过ShellExec相关的命令此API可以打开新的进程,并可以通过接口里的输入参数进行信息共享;同样他也是一个单項、一次性的通信;

(3)管道 使用文件和写方式访问公用的数据结构;管道分为匿名管道和命名管道,前者是用作关联进程间用后者为無关联的进程使用;前者通过文件描述符或文件句柄提供对命名管道的访问,后者需要知道管道名称才能读写管道;一般来讲读写的内嫆是字节流,需要转换为有意义的结构才有意义;

(4)共享内存 进程需要可以被其他进程访问浏览的进程块;进程间共享内存的关系与函數间共享全局局部变量在使用前必须初始化的关系类似

(5)DDE 动态数据交互

(4)线程间通信的参数:pThread_create这类API接口中的参数

 130.关于内存对齐的问题鉯及sizof()的输出答:编译器自动对齐的原因:为了提高程序的性能数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于为了訪问未对齐的内存,处理器需要作两次内存访问;然而对齐的内存访问仅需要一次访问。

TCP:服务器端:1.socket()建立套接字2将套接字绑定到本地哋址和端口上,绑定(bind)3.将套接字设为监听模式准备接收客户端,监听(listen);4.等待客户端请求到来请求到来后,连接请求并返回一个噺的对应此连接的套接字,accept()5.用返回的套接字和客户端进行通讯(send/recv);6.返回并等待另一客户请求7.关闭套接字。
客户端:1.socket()建立套接字2.向服務器发出连接请求(connect)2。和服务器进行通信send()和recv(),在套接字上写读数据,直至数据交换完毕;4closesocket()关闭套接字

132.C++中为什么用模板类。
答:(1)可鼡来创建动态增长和减小的数据结构
(2)它是类型无关的因此具有很高的可复用性。
(3)它在编译时而不是运行时检查数据类型保证叻类型安全
(4)它是平台无关的,可移植性
(5)可用于基本数据类型

133.动态连接库的两种方式?
答:调用一个DLL中的函数有两种方法:
1.载入时動态链接(load-time dynamic linking)模块非常明确调用某个导出函数,使得他们就像本地函数一样这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位
2.运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLLDLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口哋址然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了

答:同步多个线程对一个数据类的同时访问

我要回帖

更多关于 局部变量在使用前必须初始化 的文章

 

随机推荐