一、面试问题1

1 测试环境具体如何搭建和维护
2 Python自动化测试框架是怎样的?
3 Python字符串的转化
4 函数空间的理解
5关联接口如何测试
6 结合项目谈谈接口测试如何做
7 专业非计算机专业,为何想做测试?
8 系统后台如何测试?
9 1到10,通过python 打印出偶数
12 说一下记账模块的测试思路
13一个查询接口如何测试,你的测试思路是什么?
14 后端缓存了解多少
15 后端问题如何排查
16 如何添加索引(朝纲)
17 什么是数据库的左链接,右链接
18 你未来的职业规划是什么?
19 你们测试是如何分配任务的?
20 ADB命令常用的都有哪些?
21 LINUX命令常用的有哪些?
22Linux命令中你一般查询文件都用哪些命令?
23 冒泡排序远离
24 二叉树算法
25怎么做app稳定性测试

二、中高级测试工程师面试题

自我介绍
我叫XXX,毕业于XXX,从事测试行业已经XX年,我擅长接口测试自动化,测试框架,巴拉巴拉,我共服务过X个公司分别有Y个成就,江湖人称666.总之,尽量用
简介的语言突出自己的优点,要保持humble,就像我介绍的这样,嗯:)
介绍下你负责的公司项目
我主导了XXX,协助了YYY,参与了ZZZ。这个回答你要记清楚,后续的面试肯定还有项目细节,甚至技术实现细节。同类的项目说一个足以,重点突出不同技术栈或者有管理,对外沟通的项目
你有什么优点和缺点?
实际情况作答,比如优点是长的好看,缺点是太好看之类的,总之,要谦虚,不要傲。
在同一个项目组内,你认为你怎么做会比另外一名测试更加优秀?
我个人认为这个题目很有迷惑性,如果你只追求比别人优秀,肯定很难跟别人合作,如果你没有别人优秀,那么我为什么要用你?
要我答的话,我重点会放在如何一点一滴积累技术实力,及用这些实力解决项目组存在的问题上,这实际上也是很多优秀测试人员的必备素质
你为什么离开上家公司?离职原因(这个会在最后问)
看老板不爽啊,PM太SB啦喜欢的同事跟开发跑啦等等, 一个都不要说!!!我要面试别人,关注的是离职背后的动机,这人是不是被开除的,这人是不是不好相处,这人是不是有明显性格缺陷,只要不沾这些必死项,其它实际作答吧。
个人觉得软性题,不必要过多关注,除自我介绍外,通常是通过面试后HR关的闲聊题,主要还是要关注下面的技术问题。
二、测试理论基础题
这类题目就是考测试工程师的基本能力了,比如测试计划,测试流程,如何bug,你做过哪些测试,一般我们认为这些能力做的再好都是应该的,不会有加分,但是只要做的不好,那就是个不合格的测试工程师了。这种题目也不会问的太多,大概
题目如下:
请描述下你上个公司的测试流程?
实际情况作答, Scrum模式举例如下:
1.我们公司采用Scrum模式开发,测试也跟这个走,在每个sprint开始前会前后召开grooming meeting, planning meeting, Grooming meeting上把这个sprint可能做的tasks从product backlog里捞出来, 然后按照优先级排序, planning meeting上估时,做commitments,并确认每个story的后端,前端,测试。
2.planning后sprint正式开始时,需求,design,UI应该都ready了,测试就可以设计用例, 通过review后发给所有组成员review。story ready for test时,开发把代码放到测试环境,测试开始测试,发现问题jira报bug,linked到story,测试全部完成后标记 UAT GL, 等公司release process开始。
3.Release process开始,不同小组把各自代码放到统一测试环境,继续测试一次,这轮关注别组不会影响自己。
4.然后还有一轮甚至两轮 pre release,主要验证代码,环境,变量等问题。
5.最后release, 观察下,有问题回退版本,没问题继续走下个sprint
请描述下bug的几个要素?
ID, Summary, reproduce steps, Priority, Assign to, Sprint info, fix version(due data)等等。这道题我好想回答一句,jira里都有,你自己不会看呀:)
白盒和黑盒的区别,你是怎么运用的?
简单来说一个关注内部实现逻辑,一个只从用户角度出发,不关注具体实现。具体定义及区别请参考我以往文章。
一般中高级测试都会偏灰盒一些,既关注内部实现逻辑又关注用户jounery,设计case的时候两边参考。
内部实现逻辑可以看代码,也可以请开发讲给你听,知道了怎么实现,能在设计用例时构造不同数据cover逻辑覆盖。同时也清楚了regression 的scope
你是如何做测试分析?
这题是考察测试思维,一个应用/功能如何测试的问题,我的原则是确定需求,先定性后定量。
具体来说,定性, 哪些是显性需求?那些是隐性需求?功能在scope吗?性能?可靠性?安全性?兼容mobile平台吗?
定量就是, 功能要测, 那么有哪些功能,每个功能点是什么, 入口是什么,出口是什么,precondition是什么,数据哪里构造等等。
重复上述操作直到分析完成

如何设计测试用例?什么样子的测试用例是好用例?
个人觉得上题回答好了,这题不会问了。设计用例原则上好的用例各有千秋(不外乎边界值,等价类,流程图,正交法,判定表等), 但坏的实践要避免,具体如下:
1.一个测试用例验证多个功能点(A,B,C三个功能一个用例,那么用例失败了,到底是A引起的?还是B引起的?增加后续开发定位问题的难度,浪费时间)
2.期望结果不明确(例如:make sure every thing works fine. what the f×××?!)
3.不可执行(比如一个配置项组合, 手工要执行的case写了2000个, 怎么执行完?)
4.precondition,steps描述不清楚,上手困难(你负责的story可能要由其它测试人员交叉执行)。
5.不必要的外部依赖(用例应直指功能核心,无关的入口/步骤/依赖 不必要一股脑放进来)
功能测试在 beta 版本对外的上线标准是什么?
貌似业界对beta的定义不太统一,有人说这个是A/B测试的一种, 但一般认为专业测试人员完成后,有部分用户参与的一轮测试即beta测试。一般测试环境为用户实际应用环境,目标在于要求用户使用发现不合理,不符合实际情况的问题,然后改进。
功能上线标准每个公司不一样,大致如下:
1.所有功能点(需求)都被用例覆盖到了
2.所有用例执行过至少一遍
3.所有发现的bug被修复并验证,做过regression了。
4.不能修复的记录了/关闭了/known issue了。
5.bug曲线区域平稳了
本人认为此类问题属于淘汰题,一个问题回答不上来或者深度不够,直接闲聊然后结束面试。
三、测试管理题
这类题目就是考验你作为测试leader或者测试负责人的管理能力了。
如果项目周期很短,测试人力匮乏,你是怎么协调的?
范围不变,赶工/增加人手,快速跟进/并行开始任务。范围能变,砍低优先级用例,缩小测试范围。
描述下你团队的测试分工
实话实说, 比如:
干活是不可能干活的,这辈子都不可能干活的, 做管理又不会做,就是颜值这种东西,才能维持得了团队这样子。
对于团队成员,你是如何打kpi的?
没钱没颜你速去,童颜巨 你快来这样子。
我一般看三点:
1.出活
2.持续出活
3.持续精彩的出活
四、移动测试相关
如今是移动互联网的天下,谁家没有个应用,所以这一块基本都会问到,同时也会看你的简历,如果你没有做过,基本也不会问的太深,如果你是专门做这一块的,那么要好好准备了。
概念题
描述下web测试和移动应用测试的相同点和区别?
0.任何类型测试先定性,再定量, 范围, 分类一定,大差不差。
1.web通常不要安装,移动应用通常要安装。
2.移动设备存在特殊性,不同设备的屏幕/分辨率,系统,定制UI都不相同。
3.移动应用不应该影响移动设备现有功能,如电话/短信等。
4.移动端要重点关注,发热(电量消耗), crash, 流量(4G/WIFI/2G)等
你是如何做应用的兼容性测试的?
一般兼容性主要关注:
1.硬件的适配:不同手机厂商、硬件性能,不同屏幕大小的适配
2.OS版本的兼容。iOS,Android, 手机,pad, 版本号啊,MUI定制啊等
3.不同分辨率屏幕的适配
解决办法(云测,此处欠我广告费),除公司自备主流设备外,需参考:
1.各大厂商发布的季度/年度手机出货量,尽量覆盖出货量大的,热门的机型
2.应用做tracking,记录自己用户常用机型
3.购买各种云测服务,解决机型适配问题
请讲出客户端下 3 个常用的性能指标的名称与具体含义?
基本的:
1.CPU利用率
2.内存使用率
3.平均用户响应时间
独有的:
1.电量
2.流量
3.首次打开速度
4.竞品相应项目质量比较
iOS应用和Android应用测试有什么侧重点?
主要是iOS系统和Android系统的本质造成的:
1.Android运行基于虚拟机,iOS则是沙盒机制
2.iOS是伪后台,任何第三方程序都不能在后台运行;而Android是真后台,安卓中任何程序都能在后台运行,直到内存不够才关闭
3.IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
测试实际应用上来,个人觉得没有本质区别,要注意以下问题:
1.安全性。因为Android2的本质,任何程序都就可以轻松访问其他程序文件,要关注下有没有偷偷访问不需要功能/偷流量/常时间运行占用内存消耗电量等问题。
2.Android开源,定制版本过多(比如小米系列MIUI), 要关注定制引起的问题。
请讲诉移动应用的灰度是怎么做的?
灰度发布作为A/B Test的一种,一般指发布新功能到部分用户,收集反馈/改进,进而发布到全步用户的一种策略。
个人经历过以下方面:
1.新服务发布到全部服务器,但通过配置项把不同特征用户的请求打到不同的后端服务上去。比如ip是中国的用户访点击某个按钮,调用的是后端。。。/vi这个API, 而国外ip调用。。/V2
2.新功能的后端服务只发布到部分服务器,只有访问到这个服务器的用户才能用新功能。
3.同一个用户访问的平台不同,请求的服务就不同,比如app的访问V1, web的访问V2,可以通过发布app版本来实现。
另外这个实现还有很多专业的AB测试平台可以实现, 例如(云测,此处欠我广告费)。
如果涉及到写DB操作, 一般都双写。即访问新服务时,写到新服务的DB数据也要写到老服务的DB。甚至全部切换至新服务后再并行运行一段时间,才彻底切换到新服务,停写老服务。
实践题
应用的闪退通常是什么原因造成的?如果应用闪退,Android 和 iOS 上是分别怎么抓取日志的?
一般闪退原因如下:
1.内存超载
2.后端服务或动态链接库未找到
3.应用初始化时无法正确读取到用户数据。
4.系统兼容问题。
日志抓取的话,iOS:
1.通过iTunes Connect(Manage Your Applications - View Details - Crash Reports)获取用户的crash日志
2.通过Xcode从你的设备上获得崩溃日志
3.自己在程序中添加崩溃捕捉代码,如果应用集成第三方SDK,如百度统计
Android:
1.通过集成第三方SDK,如百度统计、友盟统计等
2、发版时使用加固工具,他们也会收集错误日志,如360加固
3、在程序中添加程序异常崩溃的捕捉代码,保存到本地文件中
请简述移动应用在升级安装时候应该考虑的场景?
实际上跟CS架构的升级没什么两样:
1.APP有新版本时,打开APP是否有更新提示。
2.当版本为非强制升级版时,用户可以取消更新,老版本能正常使用。用户在下次启动app时,仍能出现更新提示。
3.当版本为强制升级版时,当给出强制更新后用户没有做更新时,退出APP。下次启动app时,仍出现强制升级提示。
4.不删除APP直接更新,检查是否能正常更新,更新后能否正常工作。
5.删除老的APP,重新下载APP,能不能正常工作。
6.不删除APP直接更新,检查更新后的APP和新安装的APP提供的功能一样。
7.检查在线跨版本升级能否成功,版本过老是否提示用户重装。
8.更新成功后,用户数据有没有丢失,各个配置项是否还原。
给你一个应用,请简述你会从哪些方面去测试?
一般答分类, 分类如下:安装/卸载测试, UI, 功能, 性能, 安全, 兼容, 易用, 可移植性。切忌东答一下,西答一下。
请描述下微信朋友圈发小视频的用例设计?
先假设一个需求,征得面试官同意,在这个既定需求下说你的用例,还是那个思想,定性,定量分类, 不展开了,测试用例设计算基本功吧,考察的无非是功能的全面性,边界/异常条件下的处理, 性能/安全。主要是有测试思维/结构化思维,设计的用例要系统,不能想起那个说那个。
如果让你来测试扫码支付,你会考虑哪些场景?
同上,不赘述
如何测试一个应用的登录场景?
同上,不赘述, 吐槽下,这题改成如何测试百度的登录会更好,BAT齐活了 :) 实际上这3道题有一道就好了。
对中高级测试而言,实践题也是淘汰题,一项卡壳没有后续, 但如果在细节上有疏忽,可以网开一面,进入下个环节
五、服务端测试相关
什么都离不开服务端,所以这是你逃不开的,一般来说服务端会问接口测试,性能测试,更深一点,埋点监控止血也会有。
请问你们公司是如何做接口测试的?
累死我了, 题要做吐了。接口测试实际跟一般测试不同就是测试用例的设计部分。
1.接口规范拿到。
2.设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套)。
3.各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选, 还有考虑参数有互斥或关联的情况)。
4.接口返回值各种验证(符合接口文档需求)
5.了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/。。。。。)
6.接口能并发执行吗?
6.采用工具或者自写代码来验证,HTTP接口一般SoapUI, Jmeter, Fiddler, Postman等都能验证,自己写更好。web service接口一般要写代码来调用。根据测试用例自动化。
7.发现问题跟功能测试一样,该报bug报bug,该跟踪状态跟踪状态
接口测试质量评估标准是什么?
接口测试说的接口可以是模块接口,也可以是集成接口,那么质量评估标准也就转换为单元测试里的接口测试标准,和集成测试里的集成测试标准。
实际上这题如果我来回答的话会关注:
1.接口功能是否正确,接口功能是否实现了业务需求。
2.接口参数正确性包括实参形参的个数/属性,是否匹配。
3.接口并发/串行执行时接口返回值的正确性。
4.有没有性能问题(并发执行),有无安全问题(用户能否直接访问该接口,需不需要验证)
面试答上面的应该够了, 其实这里面涉及到单元测试和集成测试评估点,我
请问你们公司是如何做性能测试的?请讲诉性能测试的相关指标?
老规矩,先确定需求,再定性,定量。
例如:
1.这次测试目的是什么,是压力测试/负载测试/疲劳强度测试/BenchMark测试?
2.测试的硬件环境是什么?软件是什么?
3.测试工具用什么?
4.有哪些测试指标?
5.测试分析调优/测试报告要吗?
具体来说:
1.拿到测试需求,确定测试软硬件环境/测试指标, 使用测试工具(Loadrunner, jmeter)录制或者编写测试代码,逐步加压,直到测试目的达成。
2.分析测试结果,编写测试报告,突出性能指标包括成功,失败情况,并加以分析。
3.调优(一般都是开发的事)
相关性能指标:
服务器系统资源方面 CPU占用率,内存占用率 磁盘的读写指标
网络的占用情况 基础吞吐率
事务处理速度 如平均登录时间,操作平均响应时间等。
压力测试和负载测试的区别
一个(压力测试)把最后一根稻草仍你身上,一个(负载测试)就剩最后一根稻草没仍,或者仍给你指定数目稻草。
服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?
CPU, 内存, 网络, I/O, 数据库。等等。一般用工具监控,另外Windows上有性能监视器。
发现问题,一般要关注阈值,比如CPU利用率超过85%,说明server压力太大了,数据量一大DB某条SQL写入速度变慢了等等等等
假设系统A调用系统B,我把B的接口都mock了,进行性能测试,这样有什么好处和坏处?
好处是去掉的依赖,可以在B没有好之前测试A,并且B的任何改动/错误/失效不会影响我测试A
坏处是真实性能要比测出来的性能差, 性能指标不准确。因为Mock的服务再真也不能代替真实服务
有一天早上打车高峰,滴滴服务端挂了大概30分钟,工程师抢修之后,马上上线,之后又挂了,请问有哪些原因会造成这个情况?
还是考测试思维, 一定记得先确认需求,再定性,定量。一般都要反问, 服务器是哪个服务器?后端应用服务器?数据服务器?缓存系统服务器?中间件服务器?文件系统服务器?
然后面试官说个,不说就自己假定一个, 然后第一次挂第二次挂分开说,先问有没有错误码,日志有吗,有就看日志,没有就猜 是应用服务器挂了啊,是不是高峰期顶不住这么大并发访问啊?是数据库服务器啊,是不是频繁读写受不了啊,读写有分开吗?同步还是异步啊, 把喇叭里。
第二次挂,可能更多了,是不是代码弄错了,改坏了,或者把喇叭里。
总之套路就是性能测试中可能预见的问题及原因,这个你们google下吧,自己分类总结下。
性能这部分题,个人认为除非你面试性能测试工程师,不然都是可选题,答对85%过关肯定没问题,70%也行。关键有个概念,知道性能测试怎么回事,有问题该往哪个方向想就行了。
六、自动化相关
自动化永远是避不开的,反正你入职的岗位要不要用自动化,你必须得会一点,加分项。这一块包括,自动化一些理念和自动化的工具使用。
理念和概念
如何看待自动化和手动测试?怎样的一个比例才是健康的?
见仁见智,一切能提高软件质量的方法都应该尝试。
兵无常形,符合自己项目实际情况是最好的。当然你要面试自动化测试,肯定是一切稳定了的功能最好全部自动化掉。:)
你们公司的自动化投入产出比怎样?效益怎样?
实话实说,UI自动化测试发现新bug的效益很低,主要用在回归测试上,减少测试工作量。接口测试可就不一样了,可以小步快跑,也可以集团作战。
自动化测试用例的覆盖率多少?
有个50%了不得了吧, 一般核心业务里的最高优先级用例100%覆盖,这些用例也是用来跑冒烟的。另外的看项目资源了。
完整运行一次自动化用例需要多久时间?
Google说它们分钟级或者秒级别, 为毛我们都是小时级别 :(
什么是分层自动化?
金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化
你的测试数据是怎么准备的?
当然是提前准备的了:)
写在脚本里/外部文件(excel, XML)/数据库, 逼格逐级提升
测试脚本的维护成本是怎么样的?
两个原则:
1.不坏就不要修
2.终身追责,谁污染谁治理
工具使用
WebDriver 相关
请问你的定位策略是什么?
啊啊啊,已经两个小时了,要抓狂了。
ID, Clas, CSS, XPath, jquery脚本, 总之能不麻烦开发就不麻烦开发。
请问如何实现用例失败或者异常时候需要截图?
框架自带, python+webdriver里是get_screenshot_as_file, 一般写一个装饰器,放在要执行的类上,try, catch下。
请问如何分布式执行webdriver用例?
两种策略:
1.利用Jenkins等,部署部分代码到多个机器上执行
2.RemoteWebDriver
如何在脚本中执行 JavaScript 代码?
driver.execute_scripts(‘脚本’)
移动应用相关
Appium 的定位策略有哪些?
使用Appium-Python-Client情况下, 除了以下常规八种定位方式外:
driver.find_element_by_id() –元素的 resrouce-id 属性
driver.find_element_by_AccessibilityId() – content-desc属性,替代以前的name。
driver.find_element_by_xpath() –比css定位慢
driver.find_element_by_class_name() –元素的 class 属性
driver.find_element_by_css_selector()
driver.find_element_by_link_text() –链接元素的全部显示文字
driver.find_element_by_tag_name() –元素的标签名
driver.find_element_by_partial_link_text() –链接元素的部分显示文字
iOS和Android上还有独特的定位方法:
iOS:
IosUIAutomation –iOS9.3或以下的定位方法
driver.find_element_by_ios_uiautomation(‘.elements()[0]’)
Android:
AndroidUIAutomator, 仅支持 Android 4.2或以上,可支持元素的单个属性和多个属性定位。
driver.find_element_by_android_uiautomator(‘new UiSelector().text(“Animation”)’)

请简述Appium的原理
真想跟面试官说,您能帮忙打开官网吗?Appium对iOS和Anroid的实现原理不尽相同,并且对同一个平台不同操作系统版本的实现原理也不相同。
image.png
image.png

实际上我个人理解,这个题就是想了解,当你使用一个工具时,你是否关心过它的内部实现,也可以过渡到当你测试一个应用时,你是否关注它的实现。
iOS 和 Android 的 UI 自动化的原理是什么?
上面已经答了,如下:
iOS 9.3 and above: Apple’s XCUITest
iOS 9.3 and lower: Apple’s UIAutomation
Android 4.2+: Google’s UiAutomator/UiAutomator2
Android 2.3+: Google’s Instrumentation. (Instrumentation support is provided by bundling a separate project, Selendroid)
当定位策略都失败的时候,你该怎么做?
80%是你元素定位的不对,那么多定位方法,一个不行换另外一个,直接不能定位,先定位父元素,再循环找子元素。一般来说XPATH都能定位到,无非是可阅读性不强。真的全部失效,请求开发帮你改个元素属性好了。
这题其实还是”测试sense”问题,扩大点变成了怎么解决工作中困难。反正别认怂, 最好甭废话,直接开干。
请问Monkey测试的优缺点?
没接触过,此题不会
如果使用monkey发现了一个毕现闪退,请问怎么使用monkey重现它?
同上
Jmeter
你用jmeter做什么测试?
接口,性能。
如果有一个登录接口需要服务端返回参数,再带着这个参数去请求才能完成登录,用jmeter 怎么做?
可以利用Regular Expression Extractor传参。
七、 硬 题
所谓硬题就是答案一般都是固定或者标准的,答案也不会模棱两可,包括:算法,编程,sql,linux
算法:
请写出冒泡排序
image.png
1~9999数列中数字3出现的次数。用递推方法解出。
本来以为很简单,写了一下,2位数能算出来结果,3位数会报递归次数太多, 觉得蹊跷, 仔细一查,尼玛这题大有来历,我跪的心服口服。经过查找资料,解答如下:
1位数:0~9
个位数为3:3, 共1次。
故0~9之间,3的个数为1
2位数:10~99
个位数是3: 13, 23, 33 …93, 共9个。
十位数是3:30, 31, ….39. 共10个。
故0~99之间,3的个数为1+9+10=20个
3位数:100~999
个位数是3:
103, 113, ….193 共10个。
203, 213, ….293 共10个。



903, 913, ….993 共10个。
一共9×10=90次。
十位数是3:
130, 132 ….139 共10个。
230, 232 ….239 共10个。



930, 931, ….939 共10个。
一共9×10=90次。
百位数是3:300, 301, ….399 共100个。
故0~999之间,3的个数为20+90+90+100=300次
也可以这样考虑:
0~999之间:十位个 位共有10个0~99(解释0~99,100~199,。。。900~999),故有1020=200次,而百位为1的有100次,共200+100=300次
300=10
20+100
4位数:0~9999
个位数是3:
1003,1013,1023, 。。。1093 共10个
1103,1113,1123, 。。。1193 共10个
1203….. 共10个
1903…. 共10个
共9个10,我们记为A
还有2003~2903, 3003~3903.。。9003~9903 还有9个一样的A。
所有一共有10个(A), 是10×9×10=900
十位数是3:
1030,1031,。。。。。。1039, 共10个。
1131~1139,
1231~1239.
。。。
1931~1939, 共有10×10个=100个。我们记为B
还有千位数是2开头的,到9开头的,加起来共有9个(B) 9×10*10=900个。
百位数是3:
1300, 1301,。。。。1399 共100个。
2300
.。
9300

共10×100=1000个。
千位数是3:3000,3001,3999 共 1000次。
故0~9999之间,3的个数为300+900900900+1000=4000

也可以这样考虑:
0~9999之间:百位十位 个位共有10个0~999(0~999, 1000~1999, 。。9000~9999),故有10300=3000次,而千位为1的有1000次,共3000+1000=4000次
4000=10
300+1000

规律:
0~9:1
0~99:20=101+10
0~999:300=10
20+100
0~9999:4000=10300+1000
0~99999:50000=10
4000+10000
0~999999:600000=1050000+100000

f(1)=1
f(2)=10
f(1)+10 1
f(3)=10*f(2)+10
2
f(4)=10f(3)+10 **3
..
f(n)=10
f(n-1) + 10(n-1)
image.png
我们再来假设下,如果给你的不是9999而是2345呢?即对于任意给定的数n,怎样能快速得到0~n之间3的个数呢?(这就是google的原题了(原题是算1),这题太硬了,我啃了几个小时了,不啃了..)


从一个数组中找出前4个最大的数,用最优解。
**这个就是排序问题了吧,我想法先排好序,在取前4个,那么多排序,冒泡啊,选择啊,快排啊。。这里面快排最快,用大O算法O (n
log n )。
思想:
少于2个元素的数组不需要排序
找一个元素作为基数
小于基数的放一个数组
大于基数的放一个数组
针对小于基数的数组做快速排序,暂且叫low
针对大于基数的数组做快速排序, 暂且叫high
最终排序后的 low + 【基数】+ high,就是排好序的数组
image.png
其实python里内置了很多优秀的方法来解决其他语言很繁琐的问题,比如本题目可以直接:
print(sorted([2,2,1,8,5,7,6])[:4])
(据说python里sorted实现也是快排,没有经过求证。)

写一段程序,删除字符串a中包含的字符串b,举例 输入a = “asdw”,b = “sd” 返回 字符串 “aw”,并且测试这个程序。
image.png
写一个方法,把字符串转为数字,比如 str=”1234”,变成 int 1234。并且测试这个程序。
image.png
啃完了google的题,我觉得我肯定没有领会这两道题目的意图, 紧张中。。。。 测试用例就不写了。

编程: **

什么是面向对象编程?

把一切看成对象,三大特性 继承,封装,多态

讲下Java多线程的使用
java多线程跟别的语言的多线程有区别吗?
多线程一般用来更好的利用CPU资源,解决诸如程序“在一部分上会阻塞”,“在另一部分上需要持续运行”的场合。多线程一般用来更好的利用CPU资源,解决诸如程序“在一部分上会阻塞”,“在另一部分上需要持续运行”的场合。
例如有个程序需要接受多个用户输入并向服务器发送数据,那么如果不用多线程,一旦程序在等待某个用户输入时,程序就会阻塞。这段时间其它用户也不能使用了
有三个线程T1,T2,T3,怎么确保它们按顺序执行?
在主线程中,每一个线程start()后立即join()
Thread 类中的start() 和 run() 方法有什么区别?
个人理解start()会启动线程,然后调用run(),run()方法一般要重写。
网上资料:
调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。先调用start后调用run,这么麻烦,为了不直接调用run?就是为了实现多线程的优点,没这个start不行。
1.start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体,它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止。然后CPU再调度其它线程
2.run()方法当作普通方法的方式调用。程序还是要顺序执行,要等待run方法体执行完毕后,才可继续执行下面的代码;程序中只有主线程——这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。
记住:多线程就是分时利用CPU,宏观上让所有线程一起执行 ,也叫并发
请写一个线程安全的单例模型
网上搜下吧,java不太熟






三、面试问题3

SQL:
说下左连接和右连接
比如有两张表A和B。A表B表都有ID列,
select from A left join B where A.ID=B.ID. 会把A表所有记录显示,B表里没有和A表ID对应的,会显示NULL。
左连接是把符合条件的所有的A表的内容列出来,B表里如果没有内容匹配就用NULL代替。右连接是符合条件的 B表的内容全显示出来,A表里没有匹配就用NULL代替。
介绍下什么是索引
image.png
使用sql生产10万条数据
平常没接触过这么大数据量,分批次吧,每次插入1w条,应该没什么压力

*Linux:

你常用的命令是什么?
ls, mkdir, cat, vi, ps touch
用什么查看log?
watch, tail、cat、tac、head、echo
如何查找一个文件大小超过5M的文件
image.png
l:符号链接文档、f:普通文档
如何查看进程?
ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息。
ps命令能提供一份当前进程的快照。如果想状态可以自动刷新,可以使用top命令。
ps aux | less #显示所有运行中的进程


写在最后

1. 从个人角度看,这些面试题很接地气,很多考题也跟实际工作密切相关,大大增加了筛掉水货的几率,我也曾用部分相似题来筛选别人。
2. 对于初级测试来说,测试理论,测试基础都应该掌握,移动端测试,服务器端测试,自动化测试,性能测试,也应该逐渐接触起来,不会答没关系,但要大致了解,面试官喜欢有追求的人。
3. 对于中高级测试来说,除了硬题及性能测试题,其它题目经过充分准备都不应该丢分,回答正确率要在85%以上,另外,回答的深度非常重要,决定了你是年龄资深还是技术资深。
4. 对于硬题,虽然大部分的测试,甚至测试开发,工作中用到算法的几率也不高,但你如果都答对了,还是能让人眼前一亮的。
对于这部分试题,稍有难度的例如google面试题那个,你有个大致思路也行,对于非常基础的,二分啊,排序啊,还是建议多练练,起码应该做到手写正确
现在有能力做好普通测试工作的人太多了,算法也跟学历,长相一样,用人单位不得不拿这些筛选掉很多合适的人,有时候你比别人更优秀的能力,也许就来自于你昨天刷了一道面试题。
怎么说呢,面试造火箭,进来拧螺丝,接受现实吧。
5. 我本人其实是反对面试突击的,本文目的也不希望大家背答案就面试(面试从来也没有标准答案,背了估计也面不上 :0),而是希望大家通过做这些面试题,发现自己的不足,从而有针对性的提升自己。

1、你们的项目一般多久迭代一次?
2、python是面向对象的吗?你知道python都有哪些数据类型?
3、给你两个集合,一个是1,2,3,一个是2,3,4 请你用python内置的函数把两个集合共同的元素拿出来。
4、你们的接口测试如何进行的?如何形成脚本部署到服务器实现数据驱动?
5、在postman中参数互联怎么实现?请说出具体的代码内容和操作步骤。
6、冒烟和回归测试的区别?
7、这个界面你会如何去进行测试?

软问题:
1、你为什么会想到做测试这个职业?
2、你对于你接下来的规划是怎样的?
3、为什么离开上家公司?

1、你们的项目一般多久迭代一次?
2、python是面向对象的吗?你知道python都有哪些数据类型?
3、给你两个集合,一个是1,2,3,一个是2,3,4 请你用python内置的函数把两个集合共同的元素拿出来。
4、你们的接口测试如何进行的?如何形成脚本部署到服务器实现数据驱动?
5、在postman中参数互联怎么实现?请说出具体的代码内容和操作步骤。
6、冒烟和回归测试的区别?
7、这个界面你会如何去进行测试?

软问题:
1、你为什么会想到做测试这个职业?
2、你对于你接下来的规划是怎样的?
3、为什么离开上家公司?

四、BPM测试题目

  1. 测试分析和设计试题
    某上市公司需更清试其统计系统是否符合下面的统计规则要求,请设计测试用例。
    上市公司高层人员有职务、任职状态审核状态(审核通过,职务生效;待审核,职务
    来生效)三个属性。统计系统按下面的统计规则对上市公司高层人员进行统计并输出统
    计结果。该统计系统的统计规则说明和所输出的统计结果示意分别如下。
    1 )统计规则说明
    (1)高层人员按照职务区分有董事、监事、高管;
    (2) 按照任职状态有现任、历任;
    (3) 高层人员的审核状态有审核通过、待审核,
    (4)一个高层人员可以有一个或多个职务,每个职务都对应一 个任职状态。
    (5)高层人员的任职状态为“审核通过”的才需统计,
    2)统计结果示意
    公司A-共(10)个高层人员:资事3人,其中现任2人,历任1人:监率4人,其
    中现任4人,历任0人:高管3人,其中现任3人,历任1人;

五、深交所项目数据库笔试题

题目二: (7分)
设有三个关系表:
学生(学号,学生姓名,年纪,性别)
课程(课号,课程名,老师姓名)
选课(学号,课号,成绩)
完成下列问题:
(I)这三张表的主键各是什么?
(2)对于全部学生都选修的课程,用一句SL检索出课程名。
(3)对于没有选修“刘英“老师所投课程且选修少于三门课程的学生用一句SQL检
索出学生姓名。(注意: 本题选出来的学生要没h选修刘英老师的课”)。

题目三:(5分)
数据表了,含三个字段(年,季度,增长率),数据记录如下:
年 季度 增长率
2010 1 0.10
2010 2 0.11
2010 3 0.09
2011 2 0.10
2011 3 0.12
2011 4 0.14
2012 1 0.11
2012 2 0.07
2012 4 0.06
实现以下的查询结果输出。
年 一季度 二季度 三季度 四季度
2010 0.10 0.11 0.09 -
2011 - 0.10 0.12 0.14
2012 0.11 0.07 - 0.06
编写一句SQL语句实现该查询

题目四 (7分)
表Table有两个字段,分别为编号(chaer类型)、姓lchar类型),
要求:执行可剩除语句, 当姓名列有相同时只保留编最小的记录,
Tablel示例:
编号 姓名
3 a
1 a
2 b
3 b
6 b
8 c
3 c
5 c

剩除后的结果应如下:
编号 姓名
1 a
2 b
3 c
1简要描述基本思路
2.编写一句SQL语句实现该副除操作

题目五: (7分)
表Tablel含三个字段(姓名,课程,分数) .表中课程数量未知。用一句SQL语句查海出
每门课都大于80分的学生姓名
Tablel
姓名 课程 分数
张三 语文 79
张三 数学 90
张三 英语 100
李四 语文 81
李四 数学 89
李四 英语 90
王五 语文 90
王五 数学 88
王五 英语 92
… … …
例如:如上数据,查询出来的结果是
姓名
李四
王五


题目六: (15分)
用如下SQL建立两张表
create table Tablel(
CALNDR DT date,-日期
CURRENCY ID char(3), - 存款币种,LSD- 美元RB-人民币….
DEPOSITOR ID char(10), 一存款人
D. TRNOVR dc(1730. —存款金额
PRIMARY KEY (CALNDR DT, CRENCY ID, DEPOSITOR ID)
);
create table Tablo2(
CARENCY ID char(3), - 有款币种
DEFPOSITOR ID char(10), —存款人
F TENOYR dec(17,3),一-存款变更金额
PRIMARY KEY (CURRENCY ID, DEPISITOR 1D)
)
其中:
Tablel存放是的所有存款人有存款敷据变更时候的存款余额数据,该库中存有多天的数据。(注意:对于存教币种-存款人, 只有当日有存款数据变化的时候才会有记录, 也就是说不是每天都有记录)
Table2存放是存款币种+存款人今天存款变更数据,只存今日数据。
问题对于今日没有存故变更的存款币种+存款人想查询最新存款币种+存款人余额数据。
1.简要描述基本思路
2.编写句SOL语句实现该查询

题目七: (20分)
数据表TABLE1(发布日期、贷款利率)存有银行分布的历次一年期贷款利率。例如:
发布日期 贷款利率
2010-01-01 5.1%
2010-10-01 5.1%
2011-01-01 6.0%
2012-10-31 6.0%
2012-11-10 6.0%
2012-12-31 6.0%
2013-03-31 5.9%
2013-09-01 5.5%
2014-05-01 5.5%
2015-01-01 5.1%
2016-06-01 5.1%
2017-09-01 5.1%
这个表只记录了离散日期的数据,日期间的贷款利率和最近日期的一致,但是存在相邻记录的贷款利率相同的情况下。为方便获得每天的一年期银行贷款利率,我们设计了如下数据表TABLE2(起始日期,截止日期,贷款利率),存放各日期段内的银行贷款利率,并把相邻相同的数据做了去重处理。TABLE1数据生成TABLE2的数据记录示意如下:
起始日期 截止日期 贷款利率
2010-01-01 2010-12-31 5.1%
2011-01-01 2013-03-30 6.0%
2013-03-31 2013-08-31 5.9%
2013-09-01 2014-12-31 5.5%
2015-01-01 9999-12-31 5.1%
现在需要写SQL,根据TABLE1表生成TABLE2表。
1.详细描述思路(此题较难,请重点描述思路!)
2.编写一句或多句SQL语句实现

题目八:(8分)
要往一个数据量非常大的数据表T(无主键约束)插入一批大数据,由于某种错误操作,这些数据被重复插入两次,为了补救这个失误,你会怎么做?(注意:数据量非常大)

题目九:(8分)
1.请你谈谈对拉链表(或缓慢变化维表)的理解或认识
2.分享过往在工作经验维护和使用拉链表(或缓慢变化维表)经验

题目十:(10分)
1.请你谈谈对数据库索引技术的理解和认识
2.分享过往在查询效率优化方面的工作经验

六、交易测试笔试题

1、单项选择题(每题1分,共9分)
1. 在SQL语言的Select语句中,用于对结果元组行排序的是哪一今子句
A.GROUP BY B.HAVING C. ORDER BY D.Where

2.下列关于 alpha. beta测试的描述中正确的是:-
A. alpha 测试需要用户代表参加:
B. beta测试是不是验收测试的 种:
C. alpha 测试不需要用户代表参加:
D. beta 测试是系统测试的种:

3. 以下循环执行()次
int main(int ere., char*argv)
int x-10:
int y=l;
while(+x<0)
(
printf(“%d\n”,y);
(
x++;
y++;
A.4 B.5 C.9 D.10

4.一个输入项的合法输入范围是“当月日期”,则合理的测试边界值为( )
A.前月第一天,当月第一天,当月最后一天,下月最后一天
B.前月最后一天,当月第一天,当月最后一天,下月第一天
C.当月第一天,当月月中,当月最后一天
D.当月第一天,当月最后一天

5. 以下状态迁移图(中括号表示状态,箭头表示边),(a->b]. (b)-)tel.(b)->[a1. e->-a).1b)->10)则覆盖所有边至少需要( )个案例
A.3 B.2 C.4 D.1

6.一个对象有《个属性, 每个属性有3种可能的值,如果要求对所有值的组合进行测试。则共有( )种组合
A.12 B.81 C.7 D.64

7. 下面的( )方法能够有效地检测输入条件的各种组合可能引起的精误。
A.等价类划分: B.边界值分析
C.错误推测: D.因果图

8. 查找sudenet 表中所有电话号码(列名: tlephon)的第一 位为8或6.第三位为0的电话号码。( )
A. select telephone from student where telephone like“[8.61%0

B. select telephone from student where telephone like *(8.6)%0%
C. select telephone from student where telephone like“[8.61 0%
D. selee telephone from student where telephone like “[8,6]. 0”

9.最主要的软件质 量度量指标有正确性、可维护性、完整性和可用性,下面关
于这些质量指标的描述中正确的是(
)。
A. 软件维护的工作量比开发阶段的工作量小
B.正确性用每千行代码的故障(ault)数来度量
C.软件完整性是指软件功能与需求符合的程度
D.可用性与用户的操作效率和用户对软件的主规评价有关

2、多项选择题(每题2分,共14分)
1. 单元测试属于( )。
A.白盒测试 B.功能测试
C.验收测试 D.动态测试

2.不下列属于性能测试的租
A.压力测试
B.指标测试
C.配置测试
D.并发测试

3.属于黑盒测试方法的有
A.测试用例覆盖
B.输入覆盖
C.输出覆盖
D.分支覆盖
E.语句覆盖
F.条件覆盖

4.以下关于回归测试的说法, 正确的有
A.回归测试要测试全部用例。
B.选择回归测试策略应该兼顾效率和有效性两个方面。
C.回归测试是重复性较多的活动。
D.软件开发的各 个阶段都会进行多次回归测试。

5.以下关于测试用例的说法正确的有
A.测议用例包括测议目标、测设环境、输入教据、测设步骤、预期结果、测试脚本等。
B.测试用例构成了 设计和制定潮误适程的基础。
C.一个功能点或者用正面测试用例,或者用负面测试用例来测,不可同时使用。
D.测试用例一经设计好,就应固化,不可更改。

6.下 列哪些方面属于可用性测试范畴,正确的有

A.有效性(effective)
B.效率(eff icient)
C.吸引力(engaging)
D.容错能力(error tolerant)
E.易于学习(easyto learn)

7. 下列说法正确的是:
A.软件测试就是为了验证软件功能实现是否正确,是否完成既定目标的活动所以软件测试在软件工程的后期才开始具体的工作。
B. 功能测试时系统测试的主要内容,检查系统的功能、性能是否与需求规格说
明相同。
C.软件测试的目的是尽可能多的找出软件缺陷。
D.系统测试的对象仅包括需要测试的产品系统的软件。

3、填空题(每题2分,共8分)
1.网络字节顺序采用_
字 节序的排序方式,即字节 存储在起始位置。
2. TCP和UDP采用_来识别应用程序, 取值范围是

3.Linux系统中,使用命令同时编辑多个文件时,在中跳转到下一个文件的命令是,显示行号的命令是
4.边界值为1000,精度为小数点后3位,请列出边界测试的数值。

4、数据库应用(共18分)
1.设有图书管理数据库,
图书(总编号C(6).分类号 cB.节名CU6.作着c6.出版单位C(20),单价N (6.2))
读者(借书证号C(4), 单位C(8). 姓名c(6)性别C(2).职称C6).地址C(20) )
借阅(借书证号c(4),总编号C(6).借书日期D(8)
(3)假如借阅表与图书表存在以F数据:
图书表:

总编号 分类号 书名 作者 出版单位 单价
S1 AI 计算机 张三 机械 25
S2 A2 语文 李四 三联 13
S3 A2 数学 王五 机城 21


借阅表:

借书证号 总编号 借节日期
001 S1 2014-1-6
002 S2 2014-1-6


SQL语句查询,已经借出图书的总编号、姓名、作者和单价,查询结果按照单价的顺序排列(使用join)-(8分)

(4)请用SQL语句,列出王姓读者的解两条记录。- (5分)

2. 设有如下关系表R,
R(NO, NANE. SEX. AGE. CLASS)
主关键字是NO.其中N0为学号。NAME为姓名。SEX为性别。AGE为年龄,
CLASS为班号。写出实现下列功能的SQL语句。
插入“95031-”班学号为30.姓名为“郑和”的学生记录: - (5分)

5、简答题(共27分)
1.请简述TCP和UDP协议的区别。— (3分)
2.请画出TCP/IP的分层模型,并简述每层的功能: — (3分)
3.c/s和b/s结构的软件有何不同?—(3分)
4. 简述QTP的工作原理— (3分)
5. 单元测试、集成测试、系统测试、验收测试的侧重点是什
6.简述性能测试、负载测试和压力潮试的区列? (3分)
7.请用一行命令实现:杀死进程名称包含Ps1或PS2或PS3的逃程。- (3分)
8.对本目录下 config. xml文件进行处理,将文件中”time 20000字符串生全部替换为“time=O”字符串,请使用命令实现。一(3分)
9. 1.txt文件的内容为证券ID的记录,内容格式如下,请使用命令实现将该文件中有重复出现的证券1D输出。- (3分)
内容格式:
000001
000002
000004
000100
000004
000002
000004

6、测试分析和设计简答题 (共24分)
为保护投资者利益,防范股票恢复上市首日交易风险,根据业务需要对这些股票
进行自动临时停牌监控。监控规则为:
1)指标类型:涨跌幅(价格波动幅度)、换手率
2)指标内容:
一、停牌规则定义:
(1)档位一:停牌时长0分钟,停牌条件(涨幅首次达到0. 跌幅首次达到-10%,换手率首次达到50%)

七、监察测试岗笔试题

一、单项选择题(每题2分,共28分)
1. 下列四组sqL. 命令,全部属于数据定义命令的是
A.create drop update
B. create drop alter
C. create drop grant
D. create drop select

2.用户文档测试中不包括的是
A.用户需求说明:
B.操作指南:
C.用户手册:
D.随机帮助:

3.以下循环执行 ( )次
int main(int arge, charargv)
int x=10
int y=1:
while(++x<0)
printf(“%d\n”,y):
x++;
y++;
A.4 B.5 C.9 D.10

4. 一个输入项的合法输入范围是“当月日期”,则合理的测试边界值为:( )
A.前月第一天,当月第一天,当月最后一天,下月最后一天
B.前月最后一天,当月第一天,当月最后一天,下月第一天
C.当月第一天,当月月中,当月最后一天
D.当月第一天,当月最后一天

5. 以下状态迁移图(中括号表示状态,箭头表示边):
[a]->[b], [b]->[c], [b]->[d], [c]->[d], [b]->[o]
则覆盖所有边至少需要( ) 个案例
A.3 B.2
C.4 D.1

6.一个对象有4个属性,每个属性有3种可能的值,如果要求对所有值的组合
进行测试,则共有( )种组合
A.12 B.81
C.7 D.64

7.下面的 ( )方法能够有效地检测输入条件的各种组合可能引起的错误。
A.等价类划分:
B.边界值分析
C.错误推测:
D.因菜图
8.查找student表中所有电话号码(列名: telephone) 的第一位为8或6. 第三
位为0的电话号码。( )
A. select telephone from studem where telephone like ‘【8,6】0%”
B. select telephone from student where telephone like‘(8,6)%0%”
C selec telephone from studen where telephone ike ‘【8,6】0%”
D. select telephone from student where telephone like ‘【8,6】0


9.在陪定文件中查我与设定条件和符字符事的命令为。( )
A. Crep
B. gzip
C .find
D. son

10 .在vi中强制退出不保存的办法是 。( )
A.:q
B.:w
C.wq
D.:q!

11. 对名为fido的文件用chmod 551 fido进行修改,则它的许可权是( ).
A.rwxr-xr-x
B. -rwxr—r—
C.-r-xr-x—x
D.-r-r-r—

12.用什么命令显示所有装载的模块?(
)。
A. Lsmod
B. dirmod
C. modules
D. modlist

13.用SQL语句建立表时将属性定为主关键字,应该使用( )。
A. CHECK
B.
PRIMARY KEY
C. FREE
D. UNIQUE

14. 使用SQL语句进行有条件分组查询时,可以(_
)。
A.使用WHERE语句
B.在WHERE后面使用HAVING子句
C.在SELECT后面使用HAVING子句
D.在GROUPBY后面使用HAVING子句
二、数据库应用(共32分)
1. 设有成交管理数据库:
学生表student :
学号: sno, 学生姓名: sname, 学生年龄: sage, 学生性别: ssex
课程表course:
课程编号: cno课程 名称: cname
教师编号: tno
成绩表sc:
学号: sno,课程编号: cno成绩: score
教师表teacher:
教师编号: tno 教师名称: tname

1.查询出平均成绩大于60分的学号和平均成绩(4分)
2.查询出所有课程成绩大于60分同学的学号和姓名(用in) (5分)
3.查询出所有姓王同学的学号,姓名,选课数量和总成绩(用join) (8 分)
4.删除学习过‘叶平’老师课的成绩表的记录(5 分)
5.插入学号为30,姓名为“郑和”的学生记录; (5分)
6.把SC表中‘叶平’老师教的课的成绩更改为平均成绩(5分)

三、分析题(共2题)
1、会员瞬时买入金额异常放大报警
报警说明:
证券品种包括股票类,基金类,回购类等
目前有一个实时报警监控,从9:30到15:00监控单个会员N分钟内买入金额(不
包含回购类)超过阀值产生报警:
会员N分钟买入金额≥绝报警阀值,1级报警阀值金额≥5亿元,2级报警阀值≥10亿,3级报警阀值≥15亿
请写出测试用例或者测试点验证该报警程序。

2.、3分钟排名统计
功能说明
在每个交易日,有一个实时监控统计程序,每隔3秒钟,计算前3分钟区间
涨跌幅排名前10的证券数据。请写出测试用例或者测试点如何测试这个监
控统计程序。

备注:
(1)区间涨跌幅=100*分子A/分母B
分子A=行情截止记录的最新成交价格行情起始记录的最新成交价格
分母B对于非新股取昨日收盘,对于新股取今日开盘。
证券行情起始记录:该证券<=起始时间的最近一次 行情采样
证券行情截止记录:该证券<=截止时间的最近一次 行情采样
证券区间行情记录=该证券时间在起始记录(含),截止记录(含)之间的所有记录

(2)股 票有停牌,临时停牌,正常交易状态
(3)程序运行时间9:30-15:00,市场11:30-13:00休市。
3分钟的起始时间获取方法为:
取当前系统时间为截止时间,取当前时间减3分钟为起始时间(如果小于开盘时间则取开盘时间9:30:00, 如果小于下午开盘时间大于上午收盘时间,则取为13:00:00)

八、监察与中心数据库笔试题

第一题(15分)

本试卷后续题目SQL请按定的编码规范书写 (15 分)

1、代码需要规范
2、代码需要有注释
3、代码命名需要见名知义

第二题(7分)

设有三个关系表:
学生(学号,学生姓名,年纪,性别)
课程(课号,课程名,老师姓名)
选课(学号,课号,成绩)
完成下列问题:
(1)这三张表的主键各是什么?
(2)对于全部学生都选修的课程,用一句sqL检索出课程名。
(3)对于没有选修“刘英”老师所授课程且选修少于三门课程的学生,用一句sql检
索出学生姓名。(注意: 本题选出来的学生要没有选修刘英老师的课”)。

第三题(5分)

数据表T,含三个字段(年,季度,增长率),数据记录如下:
年 季度 增长率
2010 1 0.10
2010 2 0.11
2010 3 0.09
2011 2 0.10
2011 3 0.12
2011 4 0.14
2012 1 0.11
2012 2 0.07
2012 4 0.06
实现以下的查询结果输出。
年 一季度 二季度 三季度 四季度
2010 0.10 0.11 0.09 -
2011 - 0.10 0.12 0.14
2012 0.11 0.07 - 0.06
编写一句SQL语句实现该查询

第四题(7分)

表Tablel有两个字段,分别为编号(char类型)姓名(char类型)。
要求:执行一句删除语句,当姓名列上有相同时,只保留编号最小的记录。
Tablel示例:
编号 姓名
3 a
1 a
2 b
3 b
6 b
8 c
3 c
5 c
删除后的结果应如下:
编号 姓名
1 a
2 b
3 c
1.简要描述基本思路
2.编写一句SQL语句实现该删除操作

第五题(7分)

表Table1含三个字段(姓名,课程,分数),表中课程数量未知。用一句SQL 语句查询出每门课都大于80分的学生姓名
Table1
姓名 课程 分数
张三 语文 79
张三 数学 90
张三 英语 100
李四 语文 81
李四 数学 89
李四 英语 90
王五 语文 90
王五 数学 88
王五 英语 97
例如:如上数据,查询出来的结果是
姓名
李四
王五

第六题(15分)

用如下SQL建立两张表
create table Table1(
CALNDR_DT date, —日期
CURRENCY_ID char(3), —存款币种,USD-美元,RMB-人民币
DEPOSITOR_ID char(10), —存款人
D_TRNOVR dec(17,3), —存款金额
PRIMARY KEY (CALNDR_DT, CURRENCY_ID, DEPOSITOR_ID)
);
create table Table2(
CURRENCY_ID char(3), —存款币种
DEPOSITOR_ID char(10), —存款人
F_TRNOVR dec(17,3), —存款变更金额
PRIMARY KEY (CURRENCY_ID, DEPOSITOR_ID)
);
其中:
Table1存放是的所有存款人有存款数据变更时候的存款余额数据,该库中存有多天的数据。(注意:对于存款币种+存款人,只有当日有存款数据变化的时候才会有记录。也就是说不是每天都有记录)
Table2存放是存款币种+存款人今天存款变更数据,只存今日数据。
问题:对于今日没有存款变更的存款币种+存款人,想查询最新存款币种+存款人余额数据。
1.简要描述基本思路
2.编写一句SqL语句实现该查询

第七题(20分)

数据表TABLEI (发布日期、贷款利率) 存有银行分布的历次一年期贷款利率。例如:
发布日期 贷款利率
2010-01-01 5.1%
2010-10-01 5.1%
2011-01-01 6.0%
2012-10-31 6.0%
2012-11-10 6.0%
2012-12-31 6.0%
2013-03-31 5.9%
2013-09-01 5.5%
2014-05-01 5.5%
2015-01-01 5.1%
2016-06-01 5.1%
2017-09-01 5.1%
这个表只记录了离散日期的数据,日期间的贷款利率和最近日期的一致, 但是存在相
邻记录的贷款利率相同的情况。为方便获得每天的一年期银行贷款利率,我们设计了如
下数据表TABLE2(起始日期,截止日期,贷款利率) ,存放各日期段内的银行贷款利率,
并把相邻相同的数据做了去重处理。TABLE1 数据生成TABLE2的数据记录示意如下:
起始日期 截止日期 贷款利率
2010-01-01 2010-12-31 5.1%
2011-01-01 2013-03-30 6.0%
2013-03-31 2013-08-31 5.9%
2013-09-01 2014-12-31 5.5%
2015-01-01 9999-12-31 5.1%
现在需要写SQL,根据TABLE1表生成TABLE2表。
1.详细描述思路(此题较难,请重点描述思路!)
2.编写一句或多句SQL语句实现

第八题(8分)

要往一个数据量非常大的数据表T (无主键约束)插入一大批数据,由于某种误操作,
这些数据被重复插入两次,为了补救这个失误,你会怎么做? (注意: 数据量非常大)

第九题(8分)

1.请你谈谈对拉链表(或缓慢变化维表)的理解和认识
2.分享过往在工作经验维护和使用拉链表(或缓慢变化维表)经验

第十题(10分)

1.请你谈谈对数据库索引技术的理解和认识
2.分享过往在查询效率优化方面的工作经验

第十一题

业务流程:
1、工作流程是如何的。
2、模型设计需要注意什么
3、对于你的负责人认为你的代码逻辑有问题,需要按照他的逻辑代码来修改,你该如何处理。
4、面对业务提出需求的要求,你是怎么处理的。
5、当你的需要确认时,但因负责人评审你的代码一直有问题,需要反复修改。你该如何处理。
6、当业务质疑数据有问题时,你该怎么处理。
7、当你的报表确定时,运行一段时间,业务发现需要增加一个维度,那么你的以前的数据该怎么处理。
8、你有哪些技术想学的。
9、你会哪些BI工具




)

期货题目

第一题(15分)

本试卷后续题目SQL请按定的编码规范书写 (15 分)

1、代码需要规范
2、代码需要有注释
3、代码命名需要见名知义

第二题(7分)

设有三个关系表:
学生(学号,学生姓名,年纪,性别)
课程(课号,课程名,老师姓名)
选课(学号,课号,成绩)
完成下列问题:
(1)这三张表的主键各是什么?
(2)对于全部学生都选修的课程,用一句sqL检索出课程名。
(3)对于没有选修“刘英”老师所授课程且选修少于三门课程的学生,用一句sql检
索出学生姓名。(注意: 本题选出来的学生要没有选修刘英老师的课”)。

第三题(5分)

数据表T,含三个字段(年,季度,增长率),数据记录如下:
年 季度 增长率
2010 1 0.10
2010 2 0.11
2010 3 0.09
2011 2 0.10
2011 3 0.12
2011 4 0.14
2012 1 0.11
2012 2 0.07
2012 4 0.06
实现以下的查询结果输出。
年 一季度 二季度 三季度 四季度
2010 0.10 0.11 0.09 -
2011 - 0.10 0.12 0.14
2012 0.11 0.07 - 0.06
编写一句SQL语句实现该查询

第四题(7分)

表Tablel有两个字段,分别为编号(char类型)姓名(char类型)。
要求:执行一句删除语句,当姓名列上有相同时,只保留编号最小的记录。
Tablel示例:
编号 姓名
3 a
1 a
2 b
3 b
6 b
8 c
3 c
5 c
删除后的结果应如下:
编号 姓名
1 a
2 b
3 c
1.简要描述基本思路
2.编写一句SQL语句实现该删除操作

第五题(7分)

表Table1含三个字段(姓名,课程,分数),表中课程数量未知。用一句SQL 语句查询出每门课都大于80分的学生姓名
Table1
姓名 课程 分数
张三 语文 79
张三 数学 90
张三 英语 100
李四 语文 81
李四 数学 89
李四 英语 90
王五 语文 90
王五 数学 88
王五 英语 97
例如:如上数据,查询出来的结果是
姓名
李四
王五

第六题(15分)

用如下SQL建立两张表
create table Table1(
CALNDR_DT date, —日期
CURRENCY_ID char(3), —存款币种,USD-美元,RMB-人民币
DEPOSITOR_ID char(10), —存款人
D_TRNOVR dec(17,3), —存款金额
PRIMARY KEY (CALNDR_DT, CURRENCY_ID, DEPOSITOR_ID)
);
create table Table2(
CURRENCY_ID char(3), —存款币种
DEPOSITOR_ID char(10), —存款人
F_TRNOVR dec(17,3), —存款变更金额
PRIMARY KEY (CURRENCY_ID, DEPOSITOR_ID)
);
其中:
Table1存放是的所有存款人有存款数据变更时候的存款余额数据,该库中存有多天的数据。(注意:对于存款币种+存款人,只有当日有存款数据变化的时候才会有记录。也就是说不是每天都有记录)
Table2存放是存款币种+存款人今天存款变更数据,只存今日数据。
问题:对于今日没有存款变更的存款币种+存款人,想查询最新存款币种+存款人余额数据。
1.简要描述基本思路
2.编写一句SqL语句实现该查询

第七题(20分)

数据表TABLEI (发布日期、贷款利率) 存有银行分布的历次一年期贷款利率。例如:
发布日期 贷款利率
2010-01-01 5.1%
2010-10-01 5.1%
2011-01-01 6.0%
2012-10-31 6.0%
2012-11-10 6.0%
2012-12-31 6.0%
2013-03-31 5.9%
2013-09-01 5.5%
2014-05-01 5.5%
2015-01-01 5.1%
2016-06-01 5.1%
2017-09-01 5.1%
这个表只记录了离散日期的数据,日期间的贷款利率和最近日期的一致, 但是存在相
邻记录的贷款利率相同的情况。为方便获得每天的一年期银行贷款利率,我们设计了如
下数据表TABLE2(起始日期,截止日期,贷款利率) ,存放各日期段内的银行贷款利率,
并把相邻相同的数据做了去重处理。TABLE1 数据生成TABLE2的数据记录示意如下:
起始日期 截止日期 贷款利率
2010-01-01 2010-12-31 5.1%
2011-01-01 2013-03-30 6.0%
2013-03-31 2013-08-31 5.9%
2013-09-01 2014-12-31 5.5%
2015-01-01 9999-12-31 5.1%
现在需要写SQL,根据TABLE1表生成TABLE2表。
1.详细描述思路(此题较难,请重点描述思路!)
2.编写一句或多句SQL语句实现

第八题(8分)

要往一个数据量非常大的数据表T (无主键约束)插入一大批数据,由于某种误操作,
这些数据被重复插入两次,为了补救这个失误,你会怎么做? (注意: 数据量非常大)

第九题(8分)

1.请你谈谈对拉链表(或缓慢变化维表)的理解和认识
2.分享过往在工作经验维护和使用拉链表(或缓慢变化维表)经验

第十题(10分)

1.请你谈谈对数据库索引技术的理解和认识
2.分享过往在查询效率优化方面的工作经验

第十一题

业务流程:
1、工作流程是如何的。
2、模型设计需要注意什么
3、对于你的负责人认为你的代码逻辑有问题,需要按照他的逻辑代码来修改,你该如何处理。
4、面对业务提出需求的要求,你是怎么处理的。
5、当你的需要确认时,但因负责人评审你的代码一直有问题,需要反复修改。你该如何处理。
6、当业务质疑数据有问题时,你该怎么处理。
7、当你的报表确定时,运行一段时间,业务发现需要增加一个维度,那么你的以前的数据该怎么处理。
8、你有哪些技术想学的。
9、你会哪些BI工具

题目一:
本试卷后续剧目SQL请按定的编码规范书写(15分)

题目二: (7分)
设有三个关系表:
学生(学号,学生姓名,年纪,性别)
课程(课号,课程名,老师姓名)
选课(学号,课号,成绩)
完成下列问题:
(I)这三张表的主键各是什么?
(2)对于全部学生都选修的课程,用一句SL检索出课程名。
(3)对于没有选修“刘英“老师所投课程且选修少于三门课程的学生用一句SQL检
索出学生姓名。(注意: 本题选出来的学生要没h选修刘英老师的课”)。

题目三:(5分)
数据表了,含三个字段(年,季度,增长率),数据记录如下:
年 季度 增长率
2010 1 0.10
2010 2 0.11
2010 3 0.09
2011 2 0.10
2011 3 0.12
2011 4 0.14
2012 1 0.11
2012 2 0.07
2012 4 0.06
实现以下的查询结果输出。
年 一季度 二季度 三季度 四季度
2010 0.10 0.11 0.09 -
2011 - 0.10 0.12 0.14
2012 0.11 0.07 - 0.06
编写一句SQL语句实现该查询

题目四 (7分)
表Table有两个字段,分别为编号(chaer类型)、姓lchar类型),
要求:执行可剩除语句, 当姓名列有相同时只保留编最小的记录,
Tablel示例:
编号 姓名
3 a
1 a
2 b
3 b
6 b
8 c
3 c
5 c

剩除后的结果应如下:
编号 姓名
1 a
2 b
3 c
1简要描述基本思路
2.编写一句SQL语句实现该副除操作

题目五: (7分)
表Tablel含三个字段(姓名,课程,分数) .表中课程数量未知。用一句SQL语句查海出
每门课都大于80分的学生姓名
Tablel
姓名 课程 分数
张三 语文 79
张三 数学 90
张三 英语 100
李四 语文 81
李四 数学 89
李四 英语 90
王五 语文 90
王五 数学 88
王五 英语 92
… … …
例如:如上数据,查询出来的结果是
姓名
李四
王五


题目六: (15分)
用如下SQL建立两张表
create table Tablel(
CALNDR DT date,-日期
CURRENCY ID char(3), - 存款币种,LSD- 美元RB-人民币….
DEPOSITOR ID char(10), 一存款人
D. TRNOVR dc(1730. —存款金额
PRIMARY KEY (CALNDR DT, CRENCY ID, DEPOSITOR ID)
);
create table Tablo2(
CARENCY ID char(3), - 有款币种
DEFPOSITOR ID char(10), —存款人
F TENOYR dec(17,3),一-存款变更金额
PRIMARY KEY (CURRENCY ID, DEPISITOR 1D)
)
其中:
Tablel存放是的所有存款人有存款敷据变更时候的存款余额数据,该库中存有多天的数据。(注意:对于存教币种-存款人, 只有当日有存款数据变化的时候才会有记录, 也就是说不是每天都有记录)
Table2存放是存款币种+存款人今天存款变更数据,只存今日数据。
问题对于今日没有存故变更的存款币种+存款人想查询最新存款币种+存款人余额数据。
1.简要描述基本思路
2.编写句SOL语句实现该查询

题目七: (20分)
数据表TABLE1(发布日期、贷款利率)存有银行分布的历次一年期贷款利率。例如:
发布日期 贷款利率
2010-01-01 5.1%
2010-10-01 5.1%
2011-01-01 6.0%
2012-10-31 6.0%
2012-11-10 6.0%
2012-12-31 6.0%
2013-03-31 5.9%
2013-09-01 5.5%
2014-05-01 5.5%
2015-01-01 5.1%
2016-06-01 5.1%
2017-09-01 5.1%
这个表只记录了离散日期的数据,日期间的贷款利率和最近日期的一致,但是存在相邻记录的贷款利率相同的情况下。为方便获得每天的一年期银行贷款利率,我们设计了如下数据表TABLE2(起始日期,截止日期,贷款利率),存放各日期段内的银行贷款利率,并把相邻相同的数据做了去重处理。TABLE1数据生成TABLE2的数据记录示意如下:
起始日期 截止日期 贷款利率
2010-01-01 2010-12-31 5.1%
2011-01-01 2013-03-30 6.0%
2013-03-31 2013-08-31 5.9%
2013-09-01 2014-12-31 5.5%
2015-01-01 9999-12-31 5.1%
现在需要写SQL,根据TABLE1表生成TABLE2表。
1.详细描述思路(此题较难,请重点描述思路!)
2.编写一句或多句SQL语句实现

题目八:(8分)
要往一个数据量非常大的数据表T(无主键约束)插入一批大数据,由于某种错误操作,这些数据被重复插入两次,为了补救这个失误,你会怎么做?(注意:数据量非常大)

题目九:(8分)
1.请你谈谈对拉链表(或缓慢变化维表)的理解或认识
2.分享过往在工作经验维护和使用拉链表(或缓慢变化维表)经验

题目十:(10分)
1.请你谈谈对数据库索引技术的理解和认识
2.分享过往在查询效率优化方面的工作经验


九、进阶面试总结

_A__面试准备题目_
_ _
_ _
1、 请你做下自我介绍
各位面试官好,我叫XXX,来自XXX,XXXX年出生,2018年7月毕业于河南科技学院,我具有2年的软件测试经验,我在上家公司主要做功能测试,从事一个网站的建立项目,因为个人发展原因,今天来到贵公司面试

2、 你不是本专业怎么会进入软件测试行业?
我从事这个行业主要是因为我在大学的时候经常利用业余时间学习计算机方面的知识,对软件行业比较感兴趣,我有同学从事这个行业说这行比较有发展前景,我自己也通过各种方式了解了软件测试行业,所以本人选择了转行到软件测试行业

3、 你为什么离职到这儿(假如上一份工作在外地)(或者问你愿不愿意长期待在上海这个大都市?)
因为我通过了解上海的软件测试行业发展比较迅速,对测试行业的人才需求比较大,有利于我个人发展,且需要软件测试岗位的公司比较多,另外,众所周知,上海是一个国际化大都市,是优秀人才的聚集地,在这里可以学到很多东西,而且我家人在上海工作,在这里工作可以和家人在一起,
4、 你对上一家公司如何评价
我的上家公司环境蛮不错的,整个项目组的成员都很团结,氛围很浓郁,遇到不懂的问题我能够和同事们进行沟通,但是考虑到我自身发展的因素,我还是被迫辞职了

5、 你都会哪些技能
会mysql、SQLserver数据库技术,Linux的基本命令和环境部署,了解Python语言,这些我之前在大学和公司都有学过这些东西,文档管理工具SVN,,缺陷管理工具禅道等都在平时工作中学习过Jmeter测试工具等

6、 介绍一下你上一个项目
我的上一个项目是上海融巧科技有限公司网站项目,主要做的是一个关于该公司的网站模块的测试,主要有六大模块如首页、课程介绍、融巧咨询、学员天地、关于我们等,首先我们的开发、测试和业务人员与客户进行沟通,了解需求,业务人员编写需求规格说明书,之后进行讨论总结出评审后的需求说明书,然后项目经理派发任务给开发和测试人员,开发根据需求规格说明书和设计说明说进行开发工作,之后进行单元测试,我们测试则进行测试计划的设计、评审、测试用例的设计,之后开发完成开发工作,并且搭建好测试环境之后我们首先进行冒烟测试,测试主要功能是否完备环境通不通,之后进行案例的执行,执行过程中做好测试记录,并且用缺陷管理工具禅道对缺陷进行发现、记录、跟踪,一轮测试完成后进行第二轮和第三轮的回归测试,之后编写测试总结和报告。

7、 介绍下你们的项目流程 与测试流程区分开
答:(1)接到项目后,由项目经理、产品经理、开发经理、测试经理和客户进行沟通,分析需求,由产品经理编写需求文档,编写之后进行需求评审,看看有没有不能完成或者有必要增加或修改的地方
(2)评审过后,由需求人员把需求文档细化成需求规格说明书,由项目经理编写项目计划并分配任务,开发人员根据需求说明书、设计说明书进行软件开发,然后开发人员进行单元测试。这时我们测试人员了解客户需求,根据需求规格说明书编写测试用例之后对测试用例进行评审,在评审中注意有无遗漏或有误的地方,修改案例
(3)测试用例评审ok后,这时开发人员也开发好了,搭建好测试环境,我们首先进行冒烟测试,看看软件关键功能可不可以正常用,环境通不通。然后我们根据测试用例进行测试,在测试过程中遇到bug后,用缺陷管理工具禅道记录bug,并根据缺陷生命周期跟踪bug,回归通过后关闭缺陷
(4)所有测试执行后,缺陷也关闭了,然后测试人员编写测试总结报告,完成后到运行维护阶段。

8、 介绍下你们的测试流程(或者问你怎么去做测试工作的?或者问你平时在单位是怎样开展工作的?)
首先会召开需求分析会议,参加人员有产品(或者叫业务)、开发和测试,主要是探讨需求需要的一些功能点,完了之后,开发就排期进行开发,我们就根据主管写出来的计划、分配到的任务编写测试用例,写完之后会进行用例评审,需要修改的就修改整理形成最终的用例版本,之后开发人员将软件开发完成并部署到SIT测试环境后,我们会依据测试用例来执行测试,测试过程中,对于发现的BUG提交到缺陷管理工具禅道,并跟踪bug状态直至关闭,首轮测试完后开始进行回归测试或者第三轮回归测试(回归几轮都是根据具体的可用测试时间来决定的,一般我们都是回归测试一轮就结束)最后测试完成后编写测试报告。

9、 你是否了解网络协议
局域网常用的三种通信协议分别是TCP/IP协议、NetBEUI协议和IPX/SPX协议TCP/IP协议毫无疑问是这三大协议中最重要的一个,作为互联网的基础协议,没有它就根本不可能上网,任何和互联网有关的操作都离不开TCP/IP协议。不过TCP/IP协议也是这三大协议中配置起来最麻烦的一个,单机上网还好,而通过局域网访问互联网的话,就要详细设置IP地址,网关,子网掩码,DNS服务器等参数。

TCP/IP协议族中包括上百个互为关联的协议,不同功能的协议分布在不同的协议层, 几个常用协议如下:

1、Telnet(Remote Login):提供远程登录功能,一台计算机用户可以登录到远程的另一台计算机上,如同在远程主机上直接操作一样。
2、FTP(File Transfer Protocol):远程文件传输协议,允许用户将远程主机上的文件拷贝到自己的计算机上。
3、SMTP(Simple Mail transfer Protocol):简单邮政传输协议,用于传输电子邮件。
4、NFS(Network File Server):网络文件服务器,可使多台计算机透明地访问彼此的目录。
5、UDP(User Datagram Protocol):用户数据包协议,它和TCP一样位于传输层,和IP协议配合使用,在传输数据时省去包头,但它不能提供数据包的重传,所以适合传输较短的文件。

HTTP协议简介

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。


10、什么是系统测试
答:系统测试是指针对软件产品系统进行的测试,是做完单元测试和集成测试后进行的测试,总体包含功能测试与非功能测试。功能测试是验证软件系统功能是否实现系统需求规格的测试过程,而非功能测试是验证系统是否在实现功能测试的基础上,测试系统的容错性、稳定性、异常处理能力,以及高强度输入的处理能力、可用性、性能等是否符合用户要求的测试过程。

10、 你认为你在项目中最自豪的事是什么?
最自豪的是我经常能发现别人不能发现的BUG,因为我写的测试用例是根据测试需求最基本的功能点进行设计的,且设计方法比较科学,测试覆盖率比较高,并且在测试完成后我都会总结一些问题进行补充测试用例,对遗漏的问题进行总结,对下一次问题进行改进

11、 你认为你的优点和缺点分别是什么
我的优点是执行力比较好,上面下达的任务我能按部就班的完成,有比较好的责任感,会将一件事认真负责的做下去,遇到困难不会退缩,会想法涉法询问有经验的同事查找资料等方法去解决,我有良好的团结协作意识,对于一个共同完成的项目会将自己的事情主动做好,并且也协助同事做好他的事情,发现一个问题会紧追不舍,我的文档整理能力也比较强,缺点就是本人技术水平有限,不能完全独自一个人解决所有的问题,这点自己会在以后的工作中和业余时间通过不断学习来改进我的方法和技术

12、 你在项目中遇到最窘迫的事,你是怎么解决的
记得我刚进公司的时候,处理问题的能力比较差,对公司的业务部怎么熟悉,做事效率比较低,花了一个月时间才适应过来,后来环境熟悉后,我知道了最为一个团队,每个人都各司其职,各有所长,只要大家在一起多交流沟通,都能成功解决自己遇到的问题

13、 你的未来规划是什么
本阶段我的规划是不断加强我的功能测试技术,等到进贵公司后,尽快熟悉公司的业务和操作系统,以最快的速度适应公司的工作节奏,之后打算自己提升在自动化技术以及性能测试方面的能力,利用自己的业余时间不断学习和进步

14、 你们公司有多少人?项目组有多少人?测试组有多少人?
我们公司有60多人,项目组有15之多,测试组有3个人

15、 你认为开发与测试之间的关系是什么?
开发与测试其实并不是相互对立的关系,他们其实是站在统一战线上的战友,他们都是为了提高软件质量,共同满足客户需求的过程,是一种相互协作的关系

16、 Web测试包括哪几类测试?(界面测试、功能测试、可用性测试、客户端兼容性测试、安全性测试)

17、 黑盒测试与白盒测试的区别
(1)黑盒测试也称功能测试,通过测试来检测每个功能是否都正常使用,测试中把程序看成一个黑盒子,在完全不考虑内部程序结构和特性的情况下 ,执行测试。黑盒测试是以用户角度,从输入数据与输出数据的对应关系出发进行的测试。 缺点是:发现不了本身设计或规格说明的问题。黑盒测试设计测试用例的方法包括:等价类划分法、边界值分析法、判定表法、因果图法、正交法、错误猜测法等
(2)白盒测试是基于代码的测试,白盒是指盒子是可视的,清楚内部是如何运作的,白盒测试人员要全面了解程序内部逻辑结构、对所有的逻辑路径进行测试。 常用的白盒测试用例设计方法有:语句覆盖法、判定覆盖法、条件覆盖法、判定条件覆盖法、路径覆盖法

18、 V模型与w模型的区别
V模型主要是测试的基本层次 W模型主要是开发与测试同事进行

19、 你认为做好测试计划工作的关键是什么?
测试任务的分配,怎样安排测试的时间和人天的安排,测试的策略,用什么样的测试方法和测试用例的方法,还有风险和解决方案,考虑到在以后的测试过程中会遇到什么样的阻碍以及怎么去解决出现的问题

20、 当开发人员认为你提的问题不是Bug时,你怎么办?
首先确认是否自己对需求理解错误或者操作不当导致,如果不是则确认是否是需求不明确,如果需求不明确则告知项目经理,并由项目经理确认;如果是双方理解差异则也只有请项目经理判断

1)尽量保持面对面的沟通,尽量表达清楚,逻辑思维清晰,明确问题的利害
2)保持耐心,将问题阐述完整并得到对方确认
3) 如果跟开发人员对问题存在争议,直接向上级或者产品经理确认问题
21、 什么是冒烟测试
冒烟测试是对应用程序的重点功能进行测试,主要是看测试的软件主要功能能否实现,环境通不通
22、 什么是回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,因此首先要意识到回归测试的必要性,不要麻痹大意。而且回归测试假如时间非常紧,我们需要注意选择最合适的测试用例执行回归

23、 按照测试阶段划分,测试分哪几类?(单元测试、集成测试、系统测试、验收确认测试)

24、 常见的测试方法有哪些?(功能性测试:所有功能模块是否都实现功能;性能测试:内存CPU占用以及瓶颈数据是否达标;压力测试:最大峰值;负载测试检验系统的能力最高达到什么程度;易用性测试;安装测试;界面测试;配置测试;文档测试;兼容性测试;安全性测试)

25、 软件测试和软件质量的关系
软件测试不能保证软件质量,软件质量是由多重因素影响的,当我们改进规范化、科学化软件开发过程,利用更高深的开发技术和测试技术的时候能够使软件质量得到一定的保证

26、 单元测试、集成测试、系统测试的侧重点是什么
单元测试也叫模块测试,是对软件开发的代码进行的测试,
集成测试主要是看模块之间的衔接和参数的传递是否准备好
系统测试主要看系统的运行与其他软件的兼容性,包括功能和非功能测试

27、 测试计划包含哪些内容
5个W一个H
Why:为什么要进行测试,测试的目的是什么
What:测试哪些方面,不同阶段的工作内容
When:测试不同阶段的起止时间
Where:相应的文档、缺陷存放位置,测试环境等
Who:测试的人员安排
How:测试的策略方法以及测试工具

28、 编写测试用例的注意事项
其中最重要的是选取最有价值的最有效的测试用例去覆盖,选择的测试用例不能过于简单也不能太复杂,要尽量用最少的测试用例覆盖尽可能多的功能模块

29、 Bug的生命周期
录入缺陷后,测试人员应该跟踪一个缺陷的整个生命周期,从new到closed的所有状态包括new、open、fixed、rejected、delay、closed和reopen这些状态。
提交缺陷到缺陷管理工具,这时缺陷的状态是new。当确认是bug后,打开缺陷,此时缺陷状态为open,并且指派给相应的开发人员。开发人员进行修改把缺陷状态置为fixed修改状态,修改好后等待测试人员回归测试。如果开发人员认为不是bug有权拒绝修改把缺陷状态改为rejected。如果开发人员认为暂时不需要修改或暂时不能修改,则延后修改,缺陷状态为delay。修改状态的bug经过测试人员复测通过后,则关闭bug,状态为closed。如果复测不通过,则重新打开bug这时的缺陷状态是reopen,等待开发人员重新修改。


30、 QA和QC他们的共同点和区别
QA是质量保证人员 QC是质量控制人员
他们都是对质量进行管理,都是在查找错误,但是QC查找的是产品错误,而QA查找的是过程错误
31、 你的测试职业发展规划是什么
我的目前发展规划是积累更多的测试经验,多学点技术,一步一步脚踏实地向高级测试工程师迈进,同事将自己向自动化和性能测试方面靠近

32、 一套完整的测试应该由哪些阶段组成(测试需求1、测试计划2、测试设计3、案例评审4、测试执行5、测试评估)

33、 有哪些测试方法:
功能测试、性能测试、负载测试、压力测试、易用性测试、安装测试、界面测试、文档测试、配置测试、兼容性测试、安全测试、恢复测试、敏捷测试等

34、 软件测试用例设计方法或者问你怎样编写测试用例
首先根据需求提炼测试功能点,依照我们的各种测试用例方法如:
黑盒测试用例方法有:等价类划分,边界值,因果图,正交表,场景法,错误猜测法,判定表法
白盒测试用例方法有:语句覆盖法、判定覆盖法、条件覆盖法、判定条件覆盖法、路径覆盖法 差不多就这些了

35、 集成测试与系统测试的关系(集成测试主要根据概要设计说明书,系统测试的主要根据需求设计说明书;集成测试是系统模块间的衔接以及参数的传递等的测试,系统测试是整个系统测试的运行以及与其他软件的兼容性)
36、 怎么看待加班问题
能接受加班,因为一方面是我个人的原因,由于自己能力和技术上达到不到公司要求水平,我可以利用加班时间去弥补我自己这方面的不足,另一方面是项目的变动或者时间比较紧,客户的需求是我们测试工作的首要考虑因素,所以为了将产品尽早上线我也愿意加班
37、 如何测试一部电梯
功能性方面:首先看看这部电梯是否能够使用,能不能承载重物,看看使用说明
安全性 看这部电梯有没有产品安全标识,验证在使用过程中是否能够保证安全使用
易用性 方面:看看这部电梯操作是否都能正常,按键能不能操作,,门能否能打开
界面 :先看看电梯外观是否完好无损,有没有破坏的地方,或者设计不合理的地方
兼容性 :看看这样的电梯安装在不同地区的楼层是都都能正常使用,在不同的温度,人员重量下是否正常使用
性能测试:看看电梯的控制主板是否正常,是否需要等很长时间
压力测试 :实验用此电梯的极限重量的物品放在电梯里面,看电梯是否会报警
可靠性:长时间使用这部电梯看看电梯正常工作的最长时间是多少

在项目中如果第一轮测试不能完成怎么办?第二轮测试不能完成怎办?
第一轮不能完成的话:
我会选择加班来增加我自己的工作量,其次会挑选一些主要功能模块或者优先级别高的测试案例进行执行,如果相差时间很多的话会和上级反映情况
第二轮不能完成的话:
如果时间比较紧,就讲将第二轮测试当做回归测试,检验主要功能是否实现,将重点放在出现缺陷集中的地方进行测试

Oracle数据库

SQL语言的特点
(1)集合性
所有SQL语句都接受集合作为输入,并且返回集合作为输出
(2)统一性
SQL语句提供了统一的命令,方便用户学习和使用,包括增删改查
(3)易于移植性
所有的关系型数据库都支持SQL语言,因此用户可以将技能从一个DBMS转移到另一个
ORACLE数据库的版本
ORACLE database 11g enterprise 企业版 客户端是PL sql
Where 后面不能跟聚合函数(avg(sal)、count()、max()、min()、sum())删选用having子句代替

1、简单的增删改查
(1)增加:insert into 表名(列1,列2) values(值1,值2);
例如:
Insert into persons(firstname,lastname) values(‘峰’,’赵’);
(2)删除:delete from 表名 where 列名称=值;
例如:
Delete from persons where name=’乐乐’;
删除所有行:delete from 表名;
Delete from 表名;
Delete和truncate区别
Delete删除表的内容,oracle会产生回滚记录。可以用rollback语句撤销
Truncate会删除表结构,删除速度比delete快,不会产生回滚记录
(3)修改:update 表名 set 列名=新值 where 列名=某值;
例如:
Update peson set name=’小小’ where addess=’杭州’;
(4)查询:select
from 表名;
Select 列名 from 表名;
Select 列名 from 表名 where 列 运算符 值;
Between…and/in/like用于where中
例如:
Select from persons where city like ‘N%”;
Select
from persons where city like ‘%g’;
Select from persons where city like ‘%lon%’;
Select
from persons where lastname in(‘adams’,’carter’);
Select from persons where age between 10 and 20;

2、倒序升序(desc、asc)
3、去重(distinct)
4、两表连接查询:内连接、外连接(左外连接、右外连接、全部外连接)
A inner join B on A.a=B.b
A left join B on A.a=B.b
A right join B on A.a=B.b
A full join B on A.a=B.b
5、创建表:
Create table 表名称(
列名1 数据类型,
列名2 数据类型,

6、什么是主键约束?什么是外键约束?
1.主键约束(PRIMARY KEY

1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。
2) 是不可能(或很难)更新.
3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
4) 主健可作外健
外键约束主要用来维护两个表之间数据的一致性。

7、计算一个列的平均值
Select avg(column_name) from 表名
8、group by/having
例如:查询emp表中平均工资大于2000的部门编号
select deptno from emp group by deptno having avg(sal)>2000;
9、count()用法
例如:查询emp表中一共有多少员工
Select count(
) from emp;
10、varchar2和char类型的区别
Varchar2()用于存储可变长度的字符串,节省资源空间char用于存储指定长度的字符串,它的效率较高,但是占用的资源空间较多
11、会写存储过程吗

Java题目

1、 面向对象程序设计具有哪几个特点?
封装性、继承性、多态性
2、 类是封装对象的属性和行为的载体,在Java中对象的属性以成员变量的形式存在,对象的方法以成员方法的形式存在
3、 冒泡排序、直接选择排序、反序排序
4、 根据半径求圆的周长和面积

自动化

1、 录制模式有哪几种?区别分别是什么?
正常录制、模拟录制、低级录制

2、 你们项目使用对象库编程还是描述性编程
对象库编程优势:
(1)可以通过Complete Word、“F7”等多种方式进行高效编程,这个特性描述性编程不具有
(2)对象库编程有一个比较好的特性,假设脚本中引用了同一个对象10多次,这个对象的名字之前取的不好,后面要求更改的时候,此时只需要在对象库中改一次就能达到批量更改脚本中相应对象内容了,非常容易维护。
(3)对象库编程不容易打错字,因为有Complete Word
描述性编程优势:
(1)不用维护庞大的对象库,不过需要维护庞大的代码。这其实也算不上优势了
(2)描述性编程可以完成一些特殊的需求,比如上一节中讲到的情况

3、 你们使用的是什么语言来实现自动化?用的什么工具?
VBScript 语言,用的是QTP自动化工具

4、 TO和RO区别?
Test Objects(测试对象)和Runtime Objects(运行时对象)
测试对象(TO)和运行时对象(RO)的区别:TO就是被添加到对象库中的对象,RO其实是被测软件在运行时实际所运行的那个对象。但是无论是TO还是RO,它们都是QTP封装的对象,共同使用QTP封装好的一些属性,RO有点特殊,它可以调用自身接口的属性。

5、 GetRoProperty、GetToProperty、SetToProperty分别是什么方法

6、 自身接口属性和封装接口属性的区别
·封装接口是对象的不完全属性,有些对象的属性值是封装接口无法获取得到的
·运行时的对象(RO)可以看见自身接口的所有属性,而对象库中的测试对象(TO)只可以看见被封装的一些接口
·封装属性是不能修改实际运行时的对象的,只能获取属性的值,而调用自身接口就可以改变实际运行时的对象的
·封装属性是支持TO和RO的,自身接口只支持RO

7、 怎么调用自身接口属性
对象.Object.自身属性
对象.Object.自身方法

8、 第二种描述性编程方式怎么用
Set a=Descriptioon.Create()

9、 你在项目里遇到哪些常见对象无法识别的原因?分别怎么解决?
(1)先打开浏览器,在运行软件
(2)对象可以被QTP识别,但是加载的插件不正确
(3)同一个界面中存在两个或两个以上的属性相同的对象
(4)实际运行时的对象发生了改变导致与对象库不匹配

十、面试过程中的问题

1、自己项目不清,在自我介绍的时候没有将其具体介绍到当中去,在说项目的时候将自己担任的角色融入其中,具体做了什么工作说清楚
2、概念比较模糊,对有的问题没有分清概念就回答问题
3、答非所问,经常抓不住考官的问题侧重点,要把握每个问题的目的,迎合考官的思路去回答问题
4、语言组织能力欠缺,不能结结巴巴,显得很不熟练,没有做过这个项目一样,回答问题要孜然,表情和动作要随和,不能太拘谨
5、不能有冷场的情况,遇到回答不上来的问题可以说:对不起,这个问题有点模糊了,请容我思考一会或者说很长时间没有接触了,有点淡忘了
6、回答问题不能过于简洁,要用长句,将主动权操纵在自己手里,尽量拖延自己回答的时间




第一部分 (工作经验考验)
1、说说你们公司测试的一个基本测试流程是什么?(重要)
首先会召开需求分析会议,参加人员有产品(或者叫业务)、开发和测试,主要是探讨需求需要的一些功能点,完了之后,开发就排期进行开发,我们就根据主管写出来的计划、分配到的任务编写测试用例,写完之后会进行用例评审,需要修改的就修改整理形成最终的用例版本,之后开发人员将软件开发完成并部署到SIT测试环境后,我们会依据测试用例来执行测试,测试过程中,对于发现的BUG提交到缺陷管理工具禅道,并跟踪bug状态直至关闭,首轮测试完后还需要第二轮回归测试或者第三轮回归测试(回归几轮都是根据具体的可用测试时间来决定的,一般我们都是回归测试一轮就结束)最后测试完成后编写测试报告。
(系统内部集成测试(System Integration Testing) SIT
用户验收测试(User Acceptance Testing) UAT
SIT在前,UAT在后,UAT测完才可以上线)

5、 你们需求分析会议主要目的是什么?
探讨项目功能点,针对不清楚的及时提问,同时业务人员针对大家提出的建议和发现的问题整理出一份最终的需求文档供开发和测试工作使用。

6、 如果需求过少,你应该怎么办?
首先根据自己的业务经验提出疑问,
然后再与有经验的同事讨论学习,
如果确实只是需求少,可以当做一软件的一个优化测试就需要考虑到其影响范围,并最终确定测试范围。

7、 编写测试用例的时候,会用到什么方法?
等价类、边界值、因果图法、正交实验法、错误推测法、场景法等。

接着又问了一个:你觉得你在写用例的时候用到了吗?
我的回答是用到了,
(1) 等价类划分是我们用的最多的案例编写方法:如一个栏位里面限制了只能输入字母和数字组合,那么有效等价类就是字母和数字的组合、而单独输入字母或者数字或者其他字符类型就是无效等价类
(2) 边界值划分也是用的比较多的一个案例编写方法:如一个栏位要求字符长度控制在4-16位,那么我编写案例的时候就可以划分为0-3、4、5-15、16、17这几类长度、划分的范围有多个值的选择一个就行
(3) 因果图法一般和判定表驱动分析法(也可简称判定表法)是同时使用,最典型的就是一些查询页面,因为我们需要组合多个查询条件,从而验证预期的查询结果是否正确。
(4) 场景法我们一般使用的也很多,特别是一些业务流程比较复杂的测试,比如信用卡进件系统中,不同的个人信息在流程到达准入欺诈检查节点的时候可以造成不同流程节点走向,比如客户A个人征信记录良好,则流程会正常继续下去,而客户B因为个人征信记录有不良行为,则流程可能就此终止,信用卡申请失败。这个时候这种案例编写方法特别管用

8、 会写测试计划吗、包含哪些内容?
一般都说:没有写过,是我们主管写的,但我们会接触过这个文档,且我们的工作安排都是依照测试计划严格执行的。大概包含有:目的、背景、测试范围、测试开始结束时间、测试策略、测试人员安排、测试环境、风险评估等等。



第二部分 (工作经验考验)
1、app测试与web测试的最大的异同在哪里?或者说你遇到的最大的异同是什么?
答: 相同点:
同样的测试用例设计方法;
同样的测试方法;都会依据原型图或者效果图检查UI;
测试页面载入和翻页的速度、登录时长、内存是否溢出等;
测试应用系统的稳定性
不同点:

app的中断测试:来电中断、短信中断、蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机重启)
app的安装卸载:全新安装、升级安装、第三方工具安装、第三方工具卸载、直接删除卸载

消息推送测试、手机授权测试、前后台切换、网络环境(wifi/2G/3G/4G/无网络)

兼容性测试:web项目考虑不同浏览器的兼容;app需要考虑手机不同操作系统、不同机型、不同屏幕等

web自动化测试工具较常用QTP,而手机自动化monkey、monkeyrunner

遇到的最大的异同,直接从上面选择一个来说就行。

2、遇到版本迭代,通常是怎么处理的呢?(什么是版本迭代请百度)
答:1)准备一份关键业务测试用例(主要业务场景),每次版本迭代需要测试。
2)对于增加的功能点,原来没有的测试用例需要增加,修改的功能点对应的测试用例需要修改,其中特别需注意修改点可能影响到的功能。

3、 需求评审哪些人参加?
答:一般需要产品经理,研发老大,测试老大参与;如果必要时可以要所有的开发人员和测试人员都参加,这样会对需求更加明确,也更加直接的了解需求和业务。

4、你们的bug是怎么管理的?对于复现概率不高的bug是怎么处理的?你下一次测试的时候对于这样的bug点是怎么做的?
答:公司有缺陷管理平台来进行管理,我们用的是禅道。
关于复现率较低的bug,在实际工作中采取的是全部上报,但是我会在标题中注明重现率低或偶现。
在工作中我们如果有时间的话可以多费些心思在重现bug上面,学会分析可能产生的原因,同时在发现bug后第一件事情就是要将证据保留下来,截图,错误信息等等,这些及有助于证明这个bug的存在,也有助于bug的重现,所有这些应该培养成习惯。

5、你对你们qa认为做的最好的地方和你认为做的不好的地方在哪里?
答:如果公司没有这个职位就说我们公司没有开设这个职位。
QA是质量管理职位,很多大公司有专门的质量管理部。
在项目开发过程,会由QA进行全程的监督,查看是否按照CMMI的标准进行软件开发。文档是否齐备,开发基线是否明确,是否存 在 风险,BUG的削减是否能够完成目标之类的。

6、你们的用例怎么分级的?
答:用例的优先级:重要功能、主业务流程优先,优先级别高;次要功能模块或者界面UI测试优先级低一些,一般就这样来分级的,比如:
我们信用卡项目中的进件系统,对于进件系统的申请流程走向和每个节点系统自动处理的结果我们案例的优先级比较高,而比如说录入客户信息功能中,栏位字符长度控制的相关测试案例优先级就比较低。

7、你对测试工作的职业发展有什么看法?
答:做好功能测试,培养好自己的测试逻辑思维与工作方式以及习惯,然后向高级测试工程师转变。并且打算提升自己在自动化和性能测试方面的测试技能。

8、测试工程师应该具备什么品质?
1)耐心细心:因为有时候测试工作涉及的业务内容复杂且枯燥,这时候就要求我们能明察秋毫且不轻言放弃

2)负责任:对自己测试的项目有一定的责任心。对于发现的BUG,一定要确认开发已经修复且没有造成其他影响才能关闭缺陷。

3)良好的沟通能力:主要表现在和业务沟通了解需求的时候可以高效的了解清楚不明白的地方;发现BUG问题的时候,简单明了的向开发说清楚问题所在,提高工作效率。

4)团队协作能力:不管在哪个工作环境,工作都需要大家团队协作才能完成,假如我们是执行者,我们必须严格按照领导的计划按时完成分配的任务,假如我们单独负责一个项目就需要懂得和同事如何分工协作,如何合理安排每一个资源,这样我们才能最大限度的提高工作效率。

第三部分 (理论考验)
软件测试笔试——简答题(一)
1.什么是软件测试?
答:软件测试就是为了发现程序中的错误而执行程序的过程。

2.你认为测试工作在整个产品或项目研发过程中的作用是什么?
答:
1)为了发现程序员在开发中存在的代码以及逻辑错误
2)为了审核产品的完成是否符合用户的需求
3)为了提高客户的体验
4)为了交付更高质量的产品

3.Alpha测试与beta测试的区别(这道题目一般很少问)
答:Alpha测试是公司内部在模拟实际操作环境下进行的一种验收测试,公司内部会组织内部员工、也仍然需要用户的参与。Alpha测试不能由程序员或测试员完成。
Beta测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。Beta测试不能由程序员或测试员完成。

4.您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。(上面有类似的题目,以上面的答案为准)
答:熟悉的测试用例设计方法:等价类法、边界值法、错误推测法、场景法。
等价类法:涉及到输入框输入数据的长度、数据类型;会用到这种方法划分等价类;比如项目中某个标题输入框,长度是1-16个汉字,会根据长度、以及数据类型划分等价类设计测试用例;
边界值法:一般涉及到数据范围的,依然像项目中标题输入长度1-16,会用到边界值法;
错误推测法:例如评论框输入,会有不支持iPhone自带表情的输入,系统未做处理,会异常;
场景法:主要依据流程图去划分不同的一个业务场景。具体例子比如登录。

5.您认为做好测试用例设计工作的关键是什么?
答:充分了解需求、灵活运用案例设计方法。以较少的用例覆盖所有的功能模块,满足用户的需求。

6.您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。
答:有开展评审工作。
评审的过程及内容(以会议评审来讲):
1)编写评审计划
2)评审材料准备好(主要是测试用例)
3)提前发布评审通知(OA通知、邮件、或者讨论组发布信息), 同时将评审材料发送给评审组成员,以节约沟通成本
4)召开会议评审;针对评审用例检查清单,评审过程中收集相关人员的反馈信息(即问题记录清单),并在此基础上进行测试用例更新,直到评审通过
5)评审结束后,测试负责人出测试用例评审报告给到相关人员;评审结果经项目经理同意确认。

7.测试结束的标准是什么?
答:
用例全部通过测试。
覆盖率达到标准。
缺陷率达到标准。
其他指标达到质量标准

8.描述软件测试活动的生命周期?
答:测试周期分为计划、设计、执行、评估、验收。其中:
计划:对整个测试周期中所有活动进行规划,估计工作量、风险,安排人力物力资源,安排进度等;
设计:完成测试方案,编写测试用例,从技术层面上对测试进行规划;
执行:搭建测试环境,执行测试用例,遇到问题提交bug并跟踪解决验证;
评估:记录测试结果,进行测试分析,完成测试报告。
验收:用户进行验收,我们会出用户手册、操作指引,公司有严格的评审流程,以保证每一步输出的有效性。
第四部分 (理论)
软件测试笔试——简答题(二)

1.测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
目的:对整个测试周期中所有活动进行规划,保证项目进度
内容:主要任务是编写测试计划,内容包括测试范围、进度的安排,人力物力的分配,整体测试策略的制定,和风险的评估与规避措施有一个制定等
最重要的:测试策略和测试方法

2.您认为做好测试计划工作的关键是什么?
1)明确测试的目标,增强测试计划的实用性
2)坚持“5W”规则,明确内容与过程
3)采用评审和更新机制,保证测试计划满足实际需求
4)分别创建测试计划与测试详细规格、测试用例

3.简述一个标准的缺陷(Bug)跟踪处理过程
生命周期:新建、指派、解决、待验、关闭。一个bug就会经历这些过程,可能有些bug一次修复还没有解决好,我们就需要重新激活,然后指派…..走这一系列的流程直至bug关闭。

4.软件的缺陷等级应如何划分?
A类—严重错误,包括以下各种错误: 1. 由于程序所引起的死机,非法退出 2. 死循环 3. 数据库发生死锁 4. 因错误操作导致的程序中断 5. 功能错误 6. 与数据库连接错误 7. 数据通讯错误
B类—较严重错误,包括以下各种错误: 1. 程序错误 2. 程序接口错误 3. 数据库的表、业务规则、缺省值未加完整性等约束条件
C类—一般性错误,包括以下各种错误: 1. 操作界面错误(包括数据窗口内列名定义、含义是否一致) 2. 打印内容、格式错误 3. 简单的输入限制未放在前台进行控制 4. 删除操作未给出提示 5. 数据库表中有过多的空字段
D类—较小错误,包括以下各种错误: 1. 界面不规范 2. 辅助说明描述不清楚 3. 输入输出不规范 4. 长操作未给用户提示 5. 提示窗口文字未采用行业术语 6. 可输入区域和只读区域没有明显的区分标志
E类—测试建议

5.一条软件缺陷(Bug)记录应该包含哪些内容?如何提交高质量的软件缺陷(Bug)记录?
答:一条bug信息至少需要以下几条:
bug标题,阐述bug大体的内容;bug产生的模块; bug对应的版本;bug严重级别,优先级; bug详细现象描述,包括bug出现的操作步骤,报错日志信息、bug截图等等。
提交高质量的软件缺陷记录需要做到以下几点:
唯一性。一个bug说明一个问题或者说明一类问题
可重现。提供这个bug的精确步骤,要让开发人员容易看懂
一致性。Bug描述及所有信息要前后一致,不可有歧义
完整性。能附带bug现象截图的就带截图,有报错日志的就贴上日志信息
客观性。Bug描述不要带有个人观点,不要对开发人员进行评价,对事不对人

  1. 您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。
    我之前所用的软件缺陷管理平台是禅道。
    生命周期:新建、指派、解决、待验、关闭。一个bug就会经历这些过程,可能有些bug一次修复还没有解决好,我们就需要重新激活,然后指派…..走这一系列的流程直至bug关闭。

7.如果有一个bug,只出现一次,怎么处理?
尽量去重现当时的情况,也要提交bug到缺陷管理平台并备注是偶发。

8.您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?
个人认为,开发人员可能大多不善表达,但提高沟通效率和改善沟通的效果,作为测试人员可以从以下几个方面来做:
1)尽量保持面对面的沟通,尽量表达清楚,逻辑思维清晰,明确问题的利害
2)保持耐心,将问题阐述完整并得到对方确认
3) 如果跟开发人员对问题存在争议,直接向上级或者产品经理确认问题
维持测试人员同开发团队中其他成员良好的人际关系的关键:
一是真诚,而是团队精神,三是在专业上有共同语言


11、案例评审是干嘛的?评审的标准是什么?参与人员分别有哪些?有哪几类评审?评审的好处与目的?
答:案例评审是指根据需求编写的测试用例,开发人员业务人员测试人员一起参加讨论,看用例有没有设计有异议、有遗漏或者需要修改、增加的地方。
评审的标准:主要看测试用例对需求的覆盖,测试用例的正确性、全面性,用例是否具有代表性(最少的用例测最多的缺陷),测试用例是否描述清楚,预期结果是否正确。
评审的分类:评审包括部门(内部)评审,公司评审,客户评审。
评审参与人员:对应业务人员、开发人员、测试人员
评审的好处与目的:完善我们的用例,防止测试人员有漏测的情况,通过评审把一些功能点和开发沟通清楚,就不会有到测试的时候说不清的情况。

12、概述下软件设计和编码阶段工作流程
答:概要设计阶段产出概要设计文档然后到概要设计评审,评审完了进行详细设计,产出详细设计文档,然后对详细设计文档进行评审。评审完了进行正式编码,编码完了进行单元测试,单元测试通过后生成单元测试报告总结。

13、怎么划分bug的严重等级
答:紧急、严重、一般、建议

14、测试结束的标准
答:执行完了所有测试用例并且所有缺陷已复测通过并且关闭或者在商定的范围内

15、软件测试活动有哪几个阶段
答:单元测试-集成测试-系统测试-验收测试

16、一条缺陷记录包括哪些内容?如何提交高质量的缺陷报告?
缺陷所属模块
缺陷级别
相关缺陷用例
缺陷重现步骤
缺陷附加描述
缺陷提交人
缺陷处理人
缺陷状态
尽量使用和开发人员能够交流语言来描述,尽量用最少步骤使缺陷重现,一个缺陷一个报告,注意自己的语气及时报告缺陷。

17、请你详细描述一下测试用例设计的完整过程
答:了解测试用例的测试需求,根据需求及测试策略使用科学方法编写测试用例,根据经验和其他测试方法优化补充测试用例,对测试用例进行评审,改进和优化测试用例。

18、三角形三边为a,b,c根据a、b、c三边,设计三角形的测试用例的具体分析步骤
在三角形计算中,要求三角形的三个边长:A B C 。
1、 当三边不可能构成三角形时提示错误,可构成三角形时计算三角形周长。
2、若是等腰三角形打印“等腰三角形”, 若两个等腰的平方和等于第三边平方和,则打印“等腰直角三角形”。
3、若是等边三角形,则打印:“等边三角形”。
4、画出程序流程图并设计一个测试用例。
分析一下:
1、构成三角形的条件:任意两边之和大于第三边;
2、构成等腰三角形的条件:任意两边相等;
3、构成等腰直角三角形的条件:任意两边相等,而且两条边的平方和等于第三边的平方和;
4、构成等边三角形的条件:三条边都相等。
那么用什么样的设计方法进行测试用例的设计呢?
一、等价类划分:三角形三条边A、B、C的数据类型不同
二、边界值分析:由于三角形的边长可以是正整数或正小数,所以就不对长度进行测试,那么边界值分析就不用了
三、因果图法:三角形的三条边数据输入组合
我们再分析一下三角形的等价类:
有效等价类:
输入3个正整数或正小数:
1、两数之和大于第三数,如A 2、两数之和不大于第三数
3、两数相等,如A=B或B=C或C=A
4、三数相等,如A=B=C
5、三数不相等,如A!=B,B!=C,C!=A
无效等价类:
1、空
2、负整数
3、非数字
4、少于三个数

三角形测试用例类别
输入条件 有效等价类 无效等价类
是否是三角形 (A>0) (1)
(B>0) (2)
(C>0) (3)
(A+B>C) (4)
(B+C>A) (5)
(C+A>B) (6)
(A<=0) (7)
(B<=0) (8)
(C<=0) (9)
(A+B<=C) (10)
(B+C<=A) (11)
(C+A<=B) (12)
是否是等腰三角形 (A=B) (13)
(B=C) (14)
(C=A) (15)
(A!=B)and(B!=C)and(C!=A) (16)
是否是等腰直角三角形 (A=B)and(A2+B2=C2) (17)
(B=C)and(B2+C2=A2) (18)
(C=A)and(C2+A2=B2) (19)
(A!=B)and(B!=C)and(C!=A) (20)
是否是等边三角形 (A=B)and(B=C)and(C=A) (21) (A!=B) (22)
(B!=C) (23)
(C!=A) (24)


三角形测试用例:用最少的测试用例覆盖所有的有效等价类,而无效等价类每个类型都要覆盖到

序号 输入[A,B,C] 覆盖等价类 输出
1 [3,4,5] (1)(2)(3)(4)(5)(6) 是三角形
2 [0,1,2] (7) 非三角形
3 [1,0,2] (8) 非三角形
4 [1,2,0] (9) 非三角形
5 [1,2,3] (10) 非三角形
6 [1,3,2] (11) 非三角形
7 [3,1,2] (12) 非三角形
8 [3,3,4] (1)(2)(3)(4)(5)(6)(13) 等腰三角形
9 [3,4,4] (1)(2)(3)(4)(5)(6)(14) 等腰三角形
10 [3,4,3] (1)(2)(3)(4)(5)(6)(15) 等腰三角形
11 [2√2,2√2,4] (1)(2)(3)(4)(5)(6)(17) 等腰直角三角形
12 [4,2√2,2√2] (1)(2)(3)(4)(5)(6)(18) 等腰直角三角形
13 [2√2,4,2√2] (1)(2)(3)(4)(5)(6)(19) 等腰直角三角形
14 [3,4,5] (1)(2)(3)(4)(5)(6)(16)(20)(22)(23)(24) 是三角形
15 [3,3,3] (1)(2)(3)(4)(5)(6)(16)(21) 等边三角形
16 [,,,] 无效等价类 错误提示
17 [-3,4,5] 无效等价类 错误提示
18 [a,3,@] 无效等价类 错误提示
19 [3,4] 无效等价类 错误提示



19、你了解CMM吗
答:CMM是衡量企业过程的成熟水平,分为5个等级
初始级:过程的执行是随意而无序的,项目对外而已完全是个黑盒子,客户或高层管理者在项目结束前根本无从着手进行干预控制
可重复级:实施了基本的项目管理和过程控制,比较依赖以往项目的成功经验来确保新的类似项目的成功
已定义级:软件组织具备了规范化的能力,具备可量化、文档化的过程管理,进一步减少了项目成功对于人的依赖性
已管理级:过程的执行时有序的,对外而言,具备一定得透明度,客户或高层管理者在项目执行过程中能够加以干预和控制(加入了评估和度量机制)
优化级:关注改进的持续性,融入了技术改革、缺陷预防等理念。
19、一个完整的测试过程一般包括哪些阶段?
测试需求的分析和测试计划的设计、
测试用例的设计(包含案例评审)、
测试环境的搭建、
测试执行、
缺陷分析和报告、
测试报告和总结
20、如何制定测试计划?
答:软件测试计划是对测试过程的一个整体上的设计。通过收集项目和产品的信息,分析整理出测试范围、测试风险,并且对测试用例、工作量、资源和时间等进行估算,对测试采用的策略、方法、环境、资源、进度做出合理的安排。因此,测试计划的要点包括以下内容:
a、确定测试范围
b、制定测试策略
c、测试资源安排
d、进度安排
e、风险及对策
20、测试分工有什么好处?
答:测试分工能避免人员思维局限性,同样一个案例,由不同人来执行,可能发现不同的问题,因为不同测试人员思维方式、能力、经验不一样,因此合理分工、交叉测试能避免遗漏Bug
21、测试环境的搭建需要注意哪些?
答:根据具体系统和需要进行环境搭建,大致可能包含:
测试数据的准备、
测试工具的准备、
测试机器和操作系统的准备、
安装包的准备、
网络环境的搭建,
服务器的配置和搭建等
脚本的开发
22、进入正式测试前要做什么?
答:应该先进行冒烟测试,冒烟测试通过后才能进入正式测试,提前准备好数据和搭建好测试环境
23、你认为如何衡量一个Bug的质量?
答:从Bug自身考虑—-衡量一个Bug的质量应该看这个bug的级别比较高或者Bug是迄今为止尚未被发现的级别高的缺陷
再考虑录入Bug的质量——一个合格的录入缺陷应包含:
发现问题的版本、
问题出现的环境、
是否可重现、
问题重现的操作步骤、
预期行为的描述、
错误结果的描述及缺陷截图

最后考虑Bug报告本身描述是否正确清晰,不要有错别字,不能把几个Bug录入到同一个缺陷编号。

24、回归测试要注意哪些问题?
答:回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,因此首先要意识到回归测试的必要性,不要麻痹大意。而且回归测试假如时间非常紧,我们需要注意选择最合适的测试用例执行回归

25、一般缺陷报告有哪些内容:
答:1、发现问题的版本
2、出现问题的环境
3、问题重现步骤
4、错误行为的描述
5、预期行为的描述
26、测试结束后还要做哪些工作?
答:测试结束后应该及时编写测试报告和测试经验总结。客观地报告测试过程、执行情况、缺陷情况、软件质量情况等。还要及时总结测试经验,提炼出一些典型bug类型,总结成bug模式,对于有效发现bug的案例总结出来,供他人学习和借鉴。

27、软件测试原则:
1.所有的软件测试都应追溯到用户需求
2.尽早地和不断地进行软件测试
3.完全测试是不可能的
4.测试无法显示软件潜在的缺陷
5.充分注意测试中的群集现象
6.程序员应避免检查自己的程序
7.尽量避免测试的随意性

第一章 软件测试行业
1、软件测试行业简介
2、严重bug的危害
3、软件测试的发展的几个阶段
软件调试-》专门的软件测试部门-》第一次定义-》成为专门的学科-》与开发的融合
软件测试的定义: 软件测试是以发现错误为目的而进行的程序,或系统的执行过程
4、软件测试行业的现状与前景
国内软件测试行业与国外软件测试行业对比:
5、测试人员的现状:浮躁
6、软件测试人员自身要求

面试问答题
1、目前的软件测试行业的现状
2、现在的测试人员的能力水平:能力水平偏低,尤其是在案例设计能力、测试的规范化执行、自动化测试和性能测试等方面。
3、软件测试发展的过程
4、你对软件测试发展的认识,方向(会出现更多更专业的测试工具、自动化测试会越来越普遍、开发人员的测试意识增强)


第二章 软件测试组织
1、软件的测试的团队
2、软件测试的组织形式的分类:专职和兼职 项目型和维护型
3、如何融入一个项目团队
(学习需求文档、
查阅用户手册、
学习设计文档、
查阅bug库、
编写设计案例、
虚心的学习态度)
4、测试的规范
a、测试用例的规范:测试用例的模板
b、缺陷报告的规范:
c、测试报告:
d、测试工具使用是否规范

5、测试提交流程: 开发好了代码—-开发人员自己测一下(单元测试)——下发给测试人员——冒烟测试(验证主要功能是否正常、环境是否通)—冒烟测试不通过,返回开发人员
——冒烟测试通过——-进入正式的测试

面试问答题
1、你在上家的测试组织是怎么工作
2、怎么融入新的团队?怎么开展新工作?
3、如果给你带一个团队,你会做哪些工作?


第三章 软件测试人员的素质要求
1、良好的心理素质
2、正确的测试态度
3、缜密的思维能力
4、好奇心
5、责任感
6、沟通能力

面试问答题:
1、你觉得自己是否适合做软件测试的工作
2、测试人员是否需要掌握开发语言
3、测试人员除了测试技术外,还要掌握哪方面技能?


第四章 软件工程与软件测试
1、什么是软件工程?
包括软件需求的形成、需求分析、设计、实现、测试、安装部署、运行维护直到软件被更新或者被替换成新的版本。
过程管理、产品管理、资源管理和质量管理
2、软件生命周期
生命周期可以分成6个阶段:计划—>需求分析à设计à编码à测试à运行维护
3、软件工程是贯穿在整个软件生命周期的各个阶段
4、软件工程的发展历史:初始阶段-工程化阶段-工厂化阶段-过程管理阶段-关注个体阶段
5、软件工程的目的:提高软件的质量和生产率,最终实现软件的工业化生产
6、项目三要素:成本、进度、质量
7、软件开发模型
A、线性模型
B、渐进模型
C、变换模型
7.1线性模型—瀑布模型(需求明朗)
项目立项——需求分析——设计——-编码——测试—-运行维护
瀑布模型的缺点:产品很迟才能被看到,这会给项目带来很大的风险,尤其是集成的风险。
7.2渐进式模型—-螺旋模型(需求不明朗,软件开发初期阶段)
需求分析—-风险分析—-设计、编码——测试与评审——-需求分析
7.3变换模型
基于模型设计语言的开发模式
8、CMM与软件测试
CMM:软件工程能力的评估方法
CMM把软件企业的过程管理能力划分为5个等级:
A、 初始级:混乱无序的过程,项目的成功与否在于几个关键人员的努力
B、 可重复级别:实施了基本的项目管理和过程管理,依赖过往成功的项目经验来确保新的类似项目的成功。
C、 已定义级:遵循一定的标准来进行管理。具备可量化的、文档化的管理。
D、 已管理级:加入了评估和度量机制
E、 优化级:缺陷预防,技术的改革

9、测试用例要素
项目名称 前置条件 编号 正反例 案例描述 缺陷重现步骤 预期结果 实际结果 优先级 执行人 执行日期等
10、sql 语言特点
集合性 统一性 可移植性
11、SQL语言分类
DQL数据查询语言 DML数据操纵语言 TCL事务控制语言 DDL数据定义语言 DCL数据控制语言
12、对于一个杯子的思考维度
功能性 安全性 易用性 界面 兼容性 性能测试 压力测试 可靠性 本地国际化
13、测试报告的内容
测试背景、参考资料、测试范围、目的、标准、测试过程、时间、环境、方法、测试情况的分析、覆盖率、总结(人、天)、经验、风险点、附件(案例、截图、缺陷报告)
14、需求文档如何测试
正确性、必要性、优先级、明确性、歧义性、完整性、一致性、可维护性

测试用例设计方法
1、等价类划分
针对输入数据子集合,找出有代表性的数据
步骤(1)划分等价类并编号
(2)建立等价类表
(3)设计测试用例以便覆盖所有的有效等价类
(4)设计新的用例(用有意义的值)
2、边界值分析法
应用场合:输入条件明确取值范围,或规定取值个数,或者明确有序集合
步骤:(1)划分等价类
(2)分析样点(上点、离点、内点)
(3)创建等价类表
(4)确定测试用例
3、判定法
多种输入条件下执行不同的操作
条件桩 条件项 动作桩 动作桩
(1)标识输入和输出条件
(2)构造判定表
(3)逐列分析条件组合 填入动作项
(4)简化判定表
(5)生成测试用例
4、因果图
描述系统的输入输出的因果关系以及输入与输入之间的约束关系
输入与输出的关系:恒等 非 或 与
输入与输入之间的关系:异 或 唯一 要求 强制
步骤:(1)标识输入与输出条件
(2)画出因果图
(3)将因果图转化成判定表
(4)简化判定表
(5)生成测试用例

十一、案例面试总结

测试模型——总体框架:
a) 单元测试:单功能测试
b) Bvt测试:冒烟测试
c) 集成测试:功能集成测试、内部接口测试、重点专项功能测试
d) 系统测试:性能与压力测试、业务连续性测试、安全性测试、兼容性测试、外部接口联调
e) 验收测试:但用户验收测试,工单补录
f) 上线测试:性能监控
image.png

测试模型:
采用敏捷开发和测试的原因:
由于版本节奏比较快,开发与测试几乎并行,一个版本周期内会有两版在推动,也就是波次发布,波次发布用于尝试新加入的功能,做小范围快速的开发,验证和发布,为下个大版本的功能做实验和调研。快速发版的需求要求测试快速响应,敏捷测试模式适应项目需求。
模型优势:
1. 工作任务划分清晰,工作效率高
2. 与开发和产品沟通紧密,团队协作性强
3. 测试介入到整个项目的所有会议中,对整体版本信息情况把控全面
模型的缺陷:
1. 模块提交较快,测试时有压迫感
2. 项目规划要合理,不然测试时会出现复测的现象,加大工作量。
测试流程:
1. 需求评审
a) 从用户体验角度提供设计建议
b) 从经验角度,分析设计是否存在风险
c) 联合其他模块分析,设计是否存在漏洞
2. 测试计划制定:
a) 测试用例设计
b) 测试用例评审和测试时间评估
c) 测试资源申请
3. 测试计划执行:
a) 用例执行
b) Bug修复验证和推动版本进度
c) 性能监控,压力测试,兼容测试
4. 发布与测试报告总结:
a) 版本发布和线上质量监控,用户反馈实时响应
b) 测试用例更新整合,测试计划评估
c) 提供版本最终测试报告,包括用例覆盖率,bug数据分析等
测试流程:
n 需求:全程跟进需求变更,与产品无缝沟通,在测试阶段有需求变更要第一时间了解改动范围,如果影响版本的质量要说明风险,评估需求是否必须更改以及是否影响发布上线的时间线。
n 计划制定:规划测试项目需要的功能开发和自动化开发人员比例,规划整个测试流程需要的时间,要预留处理紧急事件的buffer。
n 执行:协调测试资源,部署测试环境,督促开发和产品提供一切需要的测试工具,测试数据等,推动版本进度,每日进行bug review,标识出bug解决的优先级和提测的时间点,每日提供低昂日产品质量报告。
测试类型:
测试类型的流程:
u 接口测试 -》功能测试(第一轮回归)-》性能测试和压力测试 -》 Bug修复验证(第二轮回归) -》 灰度放量,验收测试。
分类:
n 接口测试:接口上传参数的正确性,和服务器返回值的正确性,容错性验
n 功能测试:主要是黑盒测试,验收证需求的可能性,对新需求的兼容性测试也会设计,包含了top的厂商,机型,ROM,分辨率兼容。
n 性能测试:主要是对应用的功耗测试,内存占用,CPU占用,耗电量,响应时间进行测试,每个大版本统计一次数据。
n 压力测试:使用Monkey进行随机性事件的压力测试,每日任务,机型分布按照厂商,Rom,分辨率覆盖。
测试工作占有率:压力测试:10%;接口测试:10%;性能测试:20;功能测试:65%。
灰度放量:分局后台打点数据,收集活跃用户的版本分布,以百万级为衡量标准,对小范围用户进行新版本的放量操作,根据用户使用体验收集数据,知道版本bug修复和用户体验的提升。
用户反馈:长期对发布版本进行质量监控,根据反馈问题的有限级(p0 ,p1 ,p2),做出实时响应,p0级问题要当天处理给予答复,优先级逐级递减。

1,朋友圈发送功能设计测试用例:
可以大致问一下考察的测试点儿有哪些:主要从功能,界面/易用性,中断,断网,兼容性,安全性,性能测试。
1. 朋友圈发送功能:
1)只发送文本
i. 考虑文本长度1-1500个字符(该数据为百度数据),超出最大字符长度
ii. 考虑文本类型:纯中文,纯数字,纯字母,纯表情(微信表情/手机自带表情),混合类型,包含URL链接因为过长纯类型需要管行很容易出现边框问题,所以这里先考虑过长纯类型情况。
iii. 文本是否支持复制粘贴
iv. 为空验证
v. 用空格验证(前中后分别进行验证)
2) 只发送图片
a) 本地相册选择/拍照
b) 图片数量验证:1-9张图片,超出9张
c) 图片格式验证:常见图片格式jpg, png(以实际微信需求支持的格式为准),动态gif图片,不支持的图片格式
d) 图片尺寸验证:最大700800像素,超出最大尺寸范围是否压缩
e) 图片大小验证:1-300Kb,超出大小
f) 图片的预览验证:点击支持预览大图,多张图片支持左右滑动预览
g) 图片的增删改操作
h) 为空验证
3)只发送视频
a) 本地相册选择/拍照
b) 视频秒数验证:1-10S,超出10S
c) 视频个数验证:1个,超过1个
d) 视频格式验证:支持的视频格式,例 mp4,不支持的视频格式
e) 视频大小验证:苹果400kb以内,Android200-300kb,超出规定大小
f) 视频预览增删改操作
g) 视频为空
4) 发送文件+图片:输入满足要求的文本,图片进行一次验证。
5)发送文本+视频:输入满足要求的文本,视频进行一次验证。
6)发送图片+视频:不支持发送
7)朋友圈发送内容是否有限制,例如一些敏感字。
8)所在位置
a) 不显示位置:发送到朋友圈动态不显示位置
b) 选择对应位置:搜索支持,自动定位,手动编辑
c) 点击取消,返回上一级页面
9)谁可以看
a) 设置公开:所有朋友可见
b) 设置私密(仅自己可见):自己查看朋友圈-可见,好友查看朋友圈-不可见。
c) 设置布恩可见(选中的朋友不可见):不被选中的朋友-可见,被选中的朋友-不可见,是否有人数上限
d) 点击取消,返回发送页面。
10)提醒谁看:
a) 提醒单人/提醒多人:被提醒的朋友-收到消息提醒,违背提醒-唯有消息提醒。
b) 是否有人数上限
c) 点击取消,返回发送页面
11)同步qq空间:默认不同步,同步到qq空间
12)取消发送朋友圈操作
a) 选择相机,点击取消,返回朋友圈页面
b) 进入朋友圈发送页面,选择文本图片,点击取消
13)朋友圈当天发送次数是否有限制
2. 朋友圈浏览功能:
1) 文本查看
a) 过长文本内容是否隐藏,并支持查看全文
b) 右键选择复制,收藏,翻译
c) url链接是否支持点击跳转页面
2) 图片查看
a) 小图片右键支持收藏/编辑
b) 点击支持大图浏览
c) 选择发送给朋友、收藏、保存图片,编辑
d) 多正图片支持左右滑动浏览
3) 视频查看
a) 右键视频支持静音播放/收藏
b) 点击视频播放案件支持播放视频
c) 选择发送给朋友,收藏,保存视频,编辑
4) 分享动态浏览:qq空间/公众文章/非腾讯产品分享后朋友圈是否正常显示
5) 赞:点赞,取消点赞
6) 评论
a) 评论长度:评论字数合理长度,评论超过字数上限
b) 评论类型:纯中文,纯数字,纯字母,春字符,纯表情(微信表情/手机自带表情),混合类型,博阿含url链接;
c) 评论是否支持复制粘贴
d) 为空验证
e) 发表评论后删除
f) 评论回复操作
7) 删除朋友圈动态
8) 更换相册封面
9) 刷新是否正常获取新动态
10) 上滑是否加载更多
3. 界面/易用性测试:
1. 技术人员角度:页面布局设计是否根产品原型图/ui效果一致
2. 单除了考虑1之外,我们同样要考虑到用户使用:功能操作是否简便,页面布局排版风格是否美观合理,提示语相关信息是否易于理解
4. 中断测试:
1. 主要考虑核心功能;当钱功能存在实时数据交换,例发朋友圈,浏览朋友圈进行中断,是否容易出现崩溃
2. 中断包括:前后台切换,锁屏解锁,断网重连,app切换,来电话/来短信中断,拔插耳机线/数据线
5. 网络测试:
a) 三大运营商不同分别进行测试
b) 网络切换测试:Wi-Fi/4G/3G/2G
c) 无网络测试:对于缓存在本地的数据,部分朋友圈信息是否支持浏览
d) 弱网测试
i. 延迟:页面响应时间是否可以接受,不同网络制式持否区分超时时长,出现请求超时,是否给予相应的提示
ii. 丢包:有无超时重连机制,如果未相应,是否给予相应提示
iii. 页面呈现的完整性验证。
6. 兼容性测试:
a) Android手机端,苹果手机端,pad版(主流)功能界面显示是否正常
b) 个平台朋友圈展示数据是否一致
7. 安全性测试:
发送朋友圈时,文本输入脚本代码,是否出现异常
8. 性能测试:
a) 服务器型测试: 可通过loadrunner/jmetergongj实现,主要关注TPS,响应时间,吞吐量,CUP,内存等
b) app客户点性能测试:可通过GT工具实现,运行时关注cup,内存,流量,电量等占用率。
9. app压力测试稳定性测试:通过monkey工具实现,频繁发送朋友圈,浏览朋友圈请求,是否容易发生崩溃。

Android常见的几种Runtime Exception(运行异常)
1、Null Pointer Exception - 空指针引用异常
2、Class Cast Exception - 类型强制转换异常。
3、Illegal Argument Exception - 传递非法参数异常。
4、Arithmetic Exception - 算术运算异常
5、Array Store Exception - 向数组中存放与声明类型不兼容对象异常
6、Index out of Bounds Exception - 下标越界异常
7、Negative Array Size Exception - 创建一个大小为负数的数组错误异常
8、Number Format Exception - 数字格式异常
9、Security Exception - 安全异常
10、Unsupported Operation Exception - 不支持的操作异常
文件未找到异常:File Not Found Exception


常见adb shell命令行之性能相关:
2,问一下常用的adb 命令:
adb version: 查看手机是否链接,版本号
adb install: 安装,绝对路径
adb uninstall: 卸载
adb version: 查看手机是否链接,版本号
adb kill-server:结束服务
adb star-server:开启服务
adb push: 从电脑复制到手机
adb pull: 从手机复制到电脑
adb shell top –m 2 –n 1: 查看进程(-m 2 显示进程2行的内容,-n1 显示一次)
adb shell logcat | grep 文件名 :过滤日志
adb logcat | find 软件名称 电脑磁盘的路径:导出日志
adb shell top | grep 文件名: 实时监控
cpu内存查看方法:
top –m 5 –n 1 | grep 软件包名
-n 刷新几次; -d 刷新间隔; -m 显示最大数据量; -t显示进程名称; -s按指定行排序

image.png
Linux 命令:
查看进程: ps –ef | grep (grep +文件名 过滤文件)
查看实时更细日志: tail –f
显示文件头部: head 文件名(之显示10行)
创建文件: touch 文件名
修改文件: vi +文件名
查看当前目录下有哪些文件ls /ls –al
复制 : cp 源文件 目标路径
压缩文件: tar zcvf
解压文件: tar zxvf
查看用户权限: groups 用户名
查看文件权限: ll | grep 用户
查看网卡信息: vi /etc/sysconfig/network-scripts/ifconfig-ens33


前提条件是:安装Fiddler的机器,跟手机在同一个网络里,建议使用360随身wifi在电脑上创建网络来操作,否则手机不能把HTTP发送到Fiddler的机器上来。

截获智能手机发出的HTTP包有什么用?
用处一: 手机软件程序员利用Fiddler,可以截获手机发出的HTTP包, 从而调试程序
用处二: 软件测试人员用于测试智能手机上的软件。
用处三: 截获了HTTP/HTTPS后,你想干什么就干什么,比如修改Request,或者Response.

配置Fiddler, 允许”远程连接”
打开Fiddler, Tools-> Fiddler Options 。 (配置完后记得要重启Fiddler).
选中”Decrpt HTTPS traffic”, Fiddler就可以截获HTTPS请求
选中”Allow remote computers to connect”. 是允许别的机器把HTTP/HTTPS请求发送到Fiddler上来




获取Fiddler所在机器的IP地址
在电脑命令行中输入ipconfig 找到电脑无线网卡对应的ip地址,比如Fidder所在的机器地址是: 172.27.35.1

手机上安装Fiddler证书
这一步是为了让Fiddler能捕获HTTPS请求。 如果你只需要截获HTTP请求, 可以忽略这一步
1. 首先要知道Fiddler所在的机器的IP地址: 假如我安装了Fiddler的机器的IP地址是: 172.27.35.1
2. 打开手机的浏览器, 访问 http://172.27.35.1:8888, 点”FiddlerRoot certificate” 然后安装证书


手机上配置Fiddler为代理
打开手机, 找到你连接的wifi的并长按勾选“高级选项”, 打开HTTP代理, 输入Fiddler所在机器的IP地址(比如: 172.27.35.1) 以及Fiddler的端口号8888

*3,问一下怎么使用Fiddler抓包

现在手机上的应用(比如Safari, Firefox, Itunes, App Store)发出的HTTP/HTTPS都可以被Fiddler获取。
实例: 打开chrome,  
1. 输入http://www.cnblogs.com/tankxiao. 看看Fiddler能否捕获。
2. 输入https://dynamic.12306.cn/otsweb/ 看看Fiddler能否捕获。
是不是HTTP和HTTPS都截获到了????, 你不但能截获, 还可以下断点,修改Request, 修改Response, Do what you want.
用完了, 记得把手机上的Fiddler代理关闭, 以免手机上不了网。

Fiddler中设置断点修改Request
Fiddler最强大的功能莫过于设置断点了,设置好断点后,你可以修改httpRequest 的任何信息包括host, cookie或者表单中的数据。设置断点有两种方法
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->Before Requests(这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpu www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpu
命令行在fiddler的左下角


操作实例:
在fiddler命令行中输入: bpu www.baidu.com
在手机浏览器中输入www.baidu.com 并开始访问
在左侧的请求栏选择被中止的请求,并在右侧请求的host项上右键选择Edit Header…


将该项修改为www.so.com后保存,并点击Run to Completion,手机上访问的baidu就变成了so.com

Fiddler中设置断点修改Response
当然Fiddler中也能修改Response
第一种:打开Fiddler 点击Rules-> Automatic Breakpoint ->After Response (这种方法会中断所有的会话)
如何消除命令呢? 点击Rules-> Automatic Breakpoint ->Disabled
第二种: 在命令行中输入命令: bpafter www.baidu.com (这种方法只会中断www.baidu.com)
如何消除命令呢? 在命令行中输入命令 bpafter

以上教程参考网上
http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html
http://www.cnblogs.com/TankXiao/p/3063871.html
更多知识可以在网上搜索查到


1.HTTP请求常见的方法?get和post的区别?
Get:向服务器获取资源
Post:区别:
(1)post比get更安全
(2)get对URL的长度有限制、post可以比get放更多的数据
(3)get参数是在params、post放在body体里
2.常见状态码有哪些、分别是什么意思
常见必记状态码:200、302、404、500、502
3.cookie和session的区别?
(1)Cookie:是保存在客户端,session是存储在服务器端的
(2)session比cookie更安全
(3)cookie有大小限制(取决于浏览器的,不超过4k)
4.怎么设计接口测试用例?
(1)入参数数据
n 正向
n 反向
(2)业务逻辑
(3)SQL注入

1.自我介绍
1.自我介绍
2.自动化中发现的bug多吗?
3.讲一下你们之前的自动化测试流程
4.提交bug的内容有哪些
5.如何编写测试用例?
6.如果你发现你和开发所理解的需求不一致怎么办?
7.selenium元素定位
8.selenium中的智能等待
9.你们做ui和接口的自动化测试框架?
10.如果元素无法定位,你会怎么办?
11.alert弹窗怎么解决?frame框架呢?
12.如何处理多窗口?
13.po模型是什么
14.web页面中,你们使用哪种工具定位元素?
15.讲一下响应的状态码
16.怎么调用自身的接口属性
17.to和ro是什么,有什么区别

近期面试题整理,仅做参考

十二、APP面试(项目:咪哒APP 项目类型:线上APP录歌,上传,类似于全名K嗝)


问题1:请描述下上家功能的业务流程?
问题2:请对您负责的模块进行详细阐述
问题3:如果要您独立负责一个APP 如何进行测试才能保证软件的质量
问题4:用例如何写?包含哪些?
问题5:请描述下充值模块、体现模块 如何编写测试用例
问题6:请描述下回款计划如何测试
问题7:美颜相机 10个不同滤镜 、10个不同贴子进行组合 如何写用例能全部覆盖
问题8:测试计划会写吗?上家公司是如何编写的
问题9:了解性能测试吗?
问题10:开发不认为是BUG的时候 测试该怎么做
问题11:上一家公司目前是什么状态呢?

ERP、CRM、OA面试(项目:经销商管理 项目类型:处理经销商进销货记录 )

问题1:在上家公司负责的模块有哪些?
问题2:会数据库增删改查吗?
问题3:修改表A中的名字为张三、年龄为18
问题4:为什么从上家公司离职?


APP或WEB征信面试(项目:做征信接口,针对企业应用)

问题1:请问您这边在上家公司负责的WEB和APP 主要测试那些模块?
问题2:上家公司数据库用的多吗?
问题3:如何测试回款计划?
问题4:为何做上家公司离职?
问题5:你觉得你的优点和缺点是什么?
问题6:你的学校是统招的吗?
问题7:如何接触到软件测试这一行的,今后有什么发展
问题8:如果在一个项目上 公司给项目人员都奖励了 但是采用的方案是你的意见和建议 但是奖励没有你 你会如何做?
问题9:如果一个项目你有比领导更好的计划和方案如何处理?
问题10:如果你给公司带来了巨大的经济损失?如何挽救?


十三、《测试面试人事问题汇总》

1、面试准备

面试时初次见面,做到衣服整洁就好,给人好的印象,积极,向上,谦虚,有朝气(重要),做到不卑不亢,虽然我们希望得到一份工作,但记住,在面试中大家是平等的,正所谓此处不要爷,自有要爷处。所有不用太过谦虚,一定要放松,把面试当成一次正常的聊天才是最好的面试方式。做到礼貌,积极,谦虚但不自傲才是面试的态度。还有坐姿,不要太正式也不要太随意。面试中多和面试官使用微笑和眼神交流,这传说中的放电。简历中所有技术内容需要你熟悉,因为面试官一般根据你的简历去问。
面试官招人:先看人的品行和【交流】能力,再看技术。
当我们介绍自己的时候,需要有层次的把自己的大概情况交代给对方,要有层次感,
例如交代如下:
经理(如知道姓的情况下,带姓问候)您好,我这边情况大概是这样的,我叫xxx, 老家是xxxx的,在这个行业大概干了有xx年,刚开始在xxx公司,xxx公司做主要负责xxxx项目,主要做一些xxxx测试,干了大概xx年,目前在xxxx公司,负项目的测试主要负责xxx的测试,技术方面的话,目前技术方向掌握的有: 功能测试、后台接口自动化测试、性能测试、,大概的情况就是这样。

2、你为什么辞职?

现在项目已经收尾,活不多,一天去了也没社么事,再待下去就荒废了,所以想换一个工作,顺便提高下自己的技能和工资待遇。
1、 公司项目完成,事情不多。比较闲,再呆下去就废了。
闲不是挺好的嘛? 嗯,是这样的刚开始挺好,学习了个月,但是时间太长了。我觉得危机感挺强的,学了selenium自动化做了一些模块,还是想换一份工作,提升一下自己。
2、换省份工作。
3、跨地域换项目、项目组位置变更。公司项目完成。部分调到其他区域,不想离家太远,我家公司离得这里很近

3、你觉得你有什么优点和缺点?

  1. 优点:我觉得在项目中不管是测试还是沟通都能够轻松胜任,接收能力,和适应能力感觉还是可以的。<br /> 缺点:感觉在工作中自己比较急性子,有的时候老是想法工作早早做完,催开发催的比较急。

4、你能经常加班吗?

 这个可以有,咱这个行业加班是正常的,我以前连续好几个月都是996,这个问题都不大。

5、你在哪读的大学,学的什么专业,都学了什么?为什么从事这个行业。

6、你们公司有多少人,有多少测试?有多少开发,人员结构是怎么样的?

我们公司总共的人数我是没注意,整个IT部门大概百十号人,因为有好多项目,我们组大概10来个开发,2个测试。1:3    1:4

7、你们公司做什么的,做的是哪一方面的? 结合项目

8、谈谈软件测试职业发展,以及个人的打算,你能不能说下你的3到5年的职业计划(规划)

3到5年内,我需要精通某些行业的业务,因为无论在什么时候业务是测试的基础。再就是技术方向,要更深入的去学习,比如学学目前主流的 python 和appium,我想花一些时间研究研究,能够做到技术方向的资深测试工程师。

9、为什么我们应该录取你?沟通技术比较了解,

10、请谈谈你个人的最大特色。

最大特色可能就是工作比较有耐心,细心吧。比较喜欢学习。

11、你能适应加班吗?

加班这块我还是能适应的,(因为目前还是单身,没啥顾忌的。)咱这个行业都懂的,加班是家常便饭了,以前公司到项目末期赶进度连续3个月的996,也是扛下来了。这块不是太大问题,但是也要合理的休息,不能半年996,这样人的精神状态就不好了。

12、今天我们就谈到这,你有什么要问的吗?

1、我想问问我们这边测试团队大概多少人?
2、目前项目的进度是迭代还是新项目启动?
3、项目是否稳定是否做完就停止了?

13、你为什么做软件测试?

   大学里边学了一些C++ /  java ,觉得挺不错,后来实习就干这个。就一直在干,觉得也不错。

14、你希望的待遇为多少?

   我目前的薪资大概是xxx,期望涨一些吧,就xxx K吧。目前12期望13.5。已经有两份12k的offer了。税前还是税后,避不避税

15、日常一天工作是干什么的?

先看看邮件有没有新的安排(会议,新模块提测,紧急的需求,看自动化项目有没有报错,因为开发加班),看昨天提交的bug有没有修复,然后根据之前的工作安排接着进行测试(有新需求就谢谢用列。准备测试数据等),晚上下班前提一下日报

十四、功能测试常见问题

1.什么是软件测试?

软件测试(英语:Software Testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。软件测试的经典定义是:发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
面试中或者理解中的答案:
面试中面试官可能会问:你觉得什么是软件测试?
软件测试,就是在整个测试过程中,尽可能的多发现软件的bug(缺陷),并且各项指标达到需求规格说明书要求,比如软件的功能是否正确、软件的兼容性、易用性、可靠性、安全性、还有软件的性能是否符合要求。

2. 常用的浏览器有哪些: 谷歌(chrome),火狐(firefox) IE,360
3. 常见的系统有哪些: windows系统(PC端) linux系统(PC系统) unix
ios系统 安卓系统(APP系统)

2.软件测试的分类:

image.png
image.png
单元测试:对软件中的最小可测试单元进行检查和验证,比如开发人员开发好的单个功能接口,我们需要调用这些最小的单元接口做测试,经常使用的方法是接口测试。
集成测试:集成测试我理解的分为两种,一种是在一个项目中,在单元测试基础上的,根据业务线把多个接口连接起来测试,就是集成测试。另外一种是跨项目集成,比如项目之间存在接口调用关系,这种我理解为多平台集成测试。
系统测试:整个软件前后台都开发完成后,对软件的 兼容性、易用性、可靠性、安全性、 还有软件的性能进行整体测试。
验收测试:测试人员测试完成后,移交给业务人员进行的UAT验收测试。
静态测试:不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。
动态测试:实际运行被测软件,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。

白盒测试: 查看源代码进行查找缺陷。
黑盒测试: 不需要查看源代码。
随机测试也称为猴子测试,是指测试中所有的输入数据都是随机产生成的,其目的是模拟用户的真实操作,随意向系统输入操作。
功能测试:主要检查实际软件的功能是否符合用户的需求。

★★★功能测试又可细分为
逻辑功能测试:检查逻辑是否正确。
界面测试:验证软件用户界面的设计是否合乎用户期望或要求。它常常包括菜单,对话框及对话框上所有按钮,文字,出错提示,帮助信息等方面的测试。
易用性测试:从软件使用的合理性和方便性等角度对软件系统进行检查,来发现软件中不方便用户使用的地方。
安装测试:是验证软件能否正常进行安装和卸载的测试。
兼容性测试:兼容性测试常见的比如 PC端,我们主要测试浏览器的兼容性,比如 谷歌,
Ie,火狐,360的兼容性。手机APP端,我们一般验证,安卓和ios系统的各个版本,是否兼容,还有安卓系统也要验证不同品牌手机的兼容性。

性能测试:主要是验证系统的性能指标是否满足需求要求。

回归测试:版本迭代过程中,上线前,就是重复执行以前测试时的测试用例,看看老的版本功能是否正确。
什么是返测: 返测是开发人员修复好bug后,对bug进行验证。
冒烟测试:是指在对一个新版本进行系统的大规模测试之前,先验证一下软件的主流程是否正常,是否具备可测性。
随机测试:是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。

什么是Alpha测试(α测试)?
通常也叫“验证测试”:主要是指在软件开发完成以后,在软件开发环境下,开发方对要提交的软件进行全面的自我检查与验证(开发人员自测)。
开发方通过检测和提供客观证据,证实软件的实现是否满足规定的需求
什么是β测试
 β测试就是我们常说的uat测试,测试人员完成测试后,移交给业务人员进行uat验收测试。

3、你们公司有几套环境?

<1:我们公司环境是这样:
有开发环,开发人员使用的,
测试环境有3套,常规版本用一套,紧急版本用两套,
还有uat测试环境,这个是业务做uat测试用的。
还有生产环境—》真正供用户使用的环境,一般出现问题,
去上边跟踪日志(权限非常小)。
<2: 这几套环境的流程?
1.开发环境下,各个开发人员开发好自己的功能后,移交到
测试环境(这个过程一般如下: 开发开发好功能,提交代码到
测试环境,重新部署测试环境)
2.测试完成后,运维人员会把最终正确的版本发布到生产环境。
<3. 常规版本和紧急版本的作用
1. 一般情况常规版本用来发布 每个月规定的版本,比如我们项目一个月有
2个版本,发布日期都是确定的,就用常规版本来测试。
2. 一般项目有紧急需求的话,或者生产出问题,我们使用紧急版本进行测试。

4、软件生命周期:


image.png
image.png
image.png
迭代开发 对应—》迭代测试
敏捷开发 对应—》敏捷测试

5、什么是敏捷测试?或者叫迭代测试?

敏捷、渐进、迭代测试就是说项目为了快速上线供客户使用,先出一个基础版本,再在
这个版本基础的上不断的进行迭代开发、测试、上线。我们公司基本上一个月有两个版本。

6、敏捷测试测试要点在哪?

敏捷测试如果迭代的速度比较快的话,一定要做好回归测试,在迭代过程中,新的功能可能在上个版本的功能上进行更改的,所以如果回归测试没有做好的话,容易漏测试点。老的功能比较容易出问题。这也是敏捷测试比较大的风险。

3、 你们公司做软件测试的流程是怎么样的?

你们公司功能这一块怎么测试?

你们是怎么做功能测试的?

我们这边是这样的,首先需求下来以后,我们开一次需求评审会议(有开发人员,测试人员业务人员),对下个版本的需求进行评审,需求搞明白以后,我们就写测试大纲,测试大纲和测试案例,案例写完做一次案例评审(一般都是项目组内部评审),然后进入测试阶段,测试出问题提交bug跟踪bug,所有案例测试完成和回归测试完成后 ,发系统测试报告,然后移交给业务人员进行UAT测试,UAT那边测试完成后发 UAT验收报告,功能这块是这么做的。 功能测试完成后,有的项目我们还需要维护自动化脚本,如果新项目我们还需要做性能测试。

17、你是怎么做手机测试的?

其实手机测试的分析方法和pc端测试所用的测试方法基本是一样的,但手机测试需要额外的测试一些内容比如:
1、兼容性测试:
(1)Android、iOS各个主流版本的兼容性
(2)不同手机分辨率的兼容性
(3)网络的兼容性:4G/Wifi下。
2.如果是手机APP的话,还需要测试安装、卸载测试,跨版本升级测试。
还有关联性测试:主要测试客户端与PC端的交互,客户端处理完后,PC端与客户端数据一致。

手机app你们使用的是什么工具?
我们目前测试这一块都是用真机进行测试。

5、什么是测试计划,谁负责写?测试计划包含哪些内容?

测试计划包含项目的测试进度、人员安排、任务分配等内容。一般测试经理编写。

6、什么是测试大纲,谁负责写?测试大纲包含哪些内容?

测试大纲简单来说就是测试案例的简化版,正式编写测试案例之前,理出来的大体的
测试主流程。一般测试人员编写。

7、什么是系统测试报告,谁负责写?系统测试报告包含哪些内容?

系统测试报告是测试人员测试完成之后移交UAT人员的报告,其中包含,当前版本的所有的需求点,所有需求点对应bug数量,bug是否已经修复完成等内容,如果是未修复完成的bug,要标注清楚,还需要未修复原因。测试是否通过出口标准等内容。

image.png

8、什么是UAT验收报告,谁负责写?UAT验收报告包含哪些内容?

UAT验收报告UAT人员的测试结果报告,其中包含,测试是否通过出口标准,测试案例清单,测试缺陷清单等内容。

9、什么是缺陷?

缺陷就是bug,比如设计的功能和需求说明书有出入、兼容性、易用性、性能不不达标等都算的上是缺陷。

10、什么是缺陷报告?

当测试人员发现了一个缺陷,需要填写一份“缺陷报告”来记录这个缺陷,并通过这个缺陷报告告知开发人员所发生的问题——缺陷报告是测试人员和开发人员交流沟通的重要工具。

11、缺陷报告包含什么?

<1、缺陷编号
一般缺陷管理工具中的缺陷编号是自动产生的
<2、缺陷标题
简要的描述一下缺陷
<3、缺陷的发现者
<4、缺陷所属的模块
<5、发现缺陷的日期
<6、在哪个版本中发现的缺陷
<7、指派给谁进行处理。
<8、缺陷的重现执行步骤。

12、缺陷的状态

描述缺陷此时所处的状态
例如:
新提交的缺陷——new
打开的缺陷——open
被拒绝的缺陷——rejected
已经被修改完的缺陷——fixed
重新打开的缺陷——reopen
关闭的缺陷——closed

13、缺陷的严重程度

1.小的功能问题——Low
2.中等程度的功能问题——Medium
3.大的功能问题——High
4.非常严重的功能问题——Very High
5.造成死机或影响开发、测试进度的问题——Urgent

14、修复缺陷的优先级

Low——允许在发布产品中存在
Medium——发布之前修复
High——下一个版本修复
Very High——本版本修复
Urgent——立刻修复
注意:
1、缺陷的严重程度和优先级并不一定成正比关系
例如:
界面问题的严重程度一般比较低,但优先级可能最高——立即修复
某些重大的功能问题可能暂时解决不了,但不影响软件其他功能的使用,这时优先级可能定义的比较低——在发布之前修复
2、缺陷的严重程度确定好以后,一般就不再做更改了;而优先级确定好以后,可能根据实际情况会适当调整。
例如:
测试人员确定一个缺陷为某个优先级(如:立即修复),但开发组认为这个缺陷不太好解决,而这个缺陷又不影响其他功能,这时可能要求在下一个版本修改或发布之前修改。
3.不是所有已发现的缺陷都会被修复的
有些缺陷修复的成本太高或者由于进度压力可能在发布之前得不到修复,这样的缺陷一定要经过项目组的讨论,权衡成本和风险,要确保不会对用户造成重大的影响及法律纠纷。后面再通过升级软件或打补丁的方式修复缺陷或弥补缺陷

15、缺陷报告的处理流程:

image.png
image.png

16、目前主要的测试用例设计方法是什么?

我在工作中常用的方法有: 等价类划分、边界值、场景法、因果图、判定表法
错误猜测等方法。用的比较多的还是场景法,根据需求去分析业务流程,尽可能多的找
出多个测试点,对于非正常流程的测试点更要多去分析,因为往往项目上线后出问题,
不是正常流程出问题,而是各种非正常的情况出问题。
延伸问题:能简单给我举个例子吗?
比如经典的案例ATM取款机测试,正常的流程就一个,但我们要多去分析
异常的测试点,比如 插入非银行卡、输入密码错误次数处理等异常流程。

17、你在实际测试中遇到最麻烦的问题是什么?

 最麻烦的问题就是需求不明确问题,有的时候需求文档给的不明确,要多次和业务去<br />沟通,还有的时候业务给的需求很多有问题,写测试案例,不但要理清楚需求,还要对需求<br />进行合理性分析,需求感觉有问题需要和业务去讨论,这个花费时间是最大的,也比较麻烦。<br />     还有需求变更问题,有的时候项目时间比较紧,需求变更后,可能没有时间进行全面<br />的回归,这时候我们需要分析,需求变更的模块可能会影响到其他哪些模块,要对这些模块<br />进行局部回归,这些也是最麻烦的。<br />还有一些项目管理规范问题,比如公共接口的更改,有的开发人员为了自己的需求把公共接口改掉后,可能这个公共接口其他平台也在用,但是其他平台测试人员并不清楚接口已经被更改掉,其他项目上线后会出问题。<br />还有一些问题比较难追踪,比如开发人员日志打印太少,或者异常不进行处理,只是<br />Throws给调用方,这个时候看日志追问题是个比较麻烦的事情。

18、你觉得做测试最重要的是什么?

1.我觉得做测试最重要的是分析能力,对需求进行深度分析,不能遗漏测试点,常见的测试点一般的开发都能想到,主要是这些细节测试点,往往那些遗漏的测试点最容易出问题。
2.其次是具备一些开发知识,比如说做接口测试,自动化测试我们需要和开发去沟通,接口的请求方式,是基于什么协议的,知道具体的协议后,我们能够选择比较合适的工具进行测试,比如接口发布的是webservice协议,我们使用soapUI这种工具更方便测试,
基于普通的http或者https协议用jmeter测试更容易测试。还有比如做一些性能、自动化测试需要具备开发的知识。
3.还有就是沟通能力,做测试需要和开发业务打交道,要能够很流畅的沟通,是做测试的基本条件。

19、在工作中你觉得是一个bug,开发认为不是bug,怎么办?

这种问题其实大部分集中在对需求的理解不同,出了这种问题先和开发人员一起分析需求,看看需求谁理解的需求是正确的,如果说还有问题,一般都是一起和业务进行沟通来确定这块的需求。

20、需求不懂怎么办?

一般情况下,我们这边会先把需求发出来,看了之后我会把需求的问题整理出来,需求评审的时候提出来,或者在写测试案例过程中,发现一些细节不明确,就写邮件和业务去确认需求,也把开发抄上大家一起讨论。

16、 如何测试一个纸杯?(给你一个笔等等这些问题,都以如下套路回答)

  功能度:用水杯装水看漏不漏;水能不能被喝到
  安全性:杯子有没有毒或细菌
  可靠性:杯子从不同高度落下的损坏程度
  可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用
  兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
  易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
  疲劳测试:将杯子盛上水放24小时检查泄漏时间和情况;

17、你自认为测试的优势在哪里?

我的觉得自己在分析能力上要好一些,对于一个需求搞懂需求后,不仅仅测试正常的流程,还要测试各种异常流程,还有对需求一定要吃透,这个才是最重要的,还有就是责任心,我觉得测试工作一定要严谨,测试一定要有耐心还有责任心,还有就是经验,功能测试,接口测试,性能测试都做过,我觉得经验也是宝贵的财富。

11给你一个需求你怎么去测试?

首先先要划分模块,搞懂需求,分析每个需求的测试点,比如分析正常的流程,再分析各种异常流程,还有了解功能对应的表结构,理解和分析需求其实占了70%的时间,然后写测试案例,执行测试案例,跟踪bug,测试完成提交系统测试报告。

2、给你一个具体的需求怎么去测试如下:

主要是分析测试点,先测试正常流程比如….
再测试各种异常流程比如:…..
1、给你三条边的数据,你怎么判断他是一个三角形?
2、给你一个ATM提款机你怎么去测试?
3、给你一个公交卡你怎么去测试?
4、给你一个登陆怎么去测试?
5、给你一个购物车怎么去测试?

3、经常和开发沟通哪些问题?

 对于复杂的功能,经常对一下需求,看看和开发理解的时候一致,出现问题也和开发讲一声,让他们尽快处理。

4、你觉得测试哪些地方容易出问题?

  功能测试方面的话,开发人员更偏向于正向的需求逻辑,往往在异常的测试点上出问题,所以我们测试要尽可能多的深刻的分析测试点。还有一些细节问题,比如登陆后每个页面的session验证,这个也是我们容易忽略的。<br />接口测试的话我感觉,事务的回滚,有的时候一个业务流程可能会对好几张表的DML<br />操作,如果业务流程失败,我们必须进行事务回滚,把对表的操作还原回来,还有经常一些<br />接口之间调用的操作没有进行很好的处理,导致运行报错,比如接口A调用其他接口B的时候接口B返回的数据如果为空代码中应该对返回为空进行处理并且打日志,但很多开发人员往往只进行调用忽略异常情况处理,导致经常报空指针问题。<br />      性能测试问题比较常见的是事务响应时间过长,往往是表的数据量比较大,或者SQL写的不够好,导致缓慢。需要对数据库操作进行优化。<br />     

7、印象最深刻的bug是什么?

有一次 开发人员改表结构、该公共接口、他负责的功能是OK没问题了,但是项目影响到其他平台使用这个表和公共接口,导致我负责的功能没问题,其他平台上线功能出问题了,
所以后来我们专门为这个事制定了一个规范,更改表结构和更改公共接口,一定是要抄送各个平台测试和开发人员,对这些更改做一个风险评估,还有加强回归力度,所有功能必须认真回归。
还有一次做性能测试,在并发测试的时候,发现A用户和B用户的数据相互交叉使用了,
后来发现就是一个session控制的问题,一些页面没有进行session控制,导致并发的时候
出问题。

4、测试过程中你都经常碰到哪些问题?

经常碰到的问题最简单的就是功能逻辑有问题,代码缺少对异常流程的控制。
还有页面点击报 404 /500 等错误,500比较多,页面直接抛出各种异常,比如空指针
SQL Exception 等问题。还有接口测试中,事务回滚问题经常不进行处理,异常抛出不
明确,还有接口调用空指针等问题。

6、如果你发现是一个bug,开发人员不承认。怎么办?

这问题也是碰见过,主要就是说对一些复杂需求开发和测试理解有分歧,基本上和开发进行讨论,看到底按谁的思路来,如果说没有确定答案,找业务人员进行确认就好了。如果
感觉业务人员给的答案不满意,和自己的测试经理沟通下,并且保留与开发还有业务人员的邮件往来,留个底。

7、目进度比较急,测试不完怎么办?

  这个问题经常有,有的时候版本比较赶时间,所以一定要跟开发商量好,让开发把模块的开发顺序调整下,尽量先开发影响其他模块测试进度的模块,保证我手里有活干,一般我们一个人测试好几个开发的功能,一个功能卡住,切换另外的功能进行测试,一定要和开发保持密切沟通,还有一定要催开发提高改bug的效率。如果实在是测试不完,一定要提前和测试经理沟通这个风险,比如有的bug修改起来非常麻烦,这时候可能会把某些需求砍掉,<br />放到下个版本再上线。

8、需求不理解怎么办?问开发吗?

 我这边需求问题一般直接和业务这边进行沟通的,测试前大概和开发进行沟通看看开发和我理解的思路是否一致。<br /> 

8、怎么样才算测试完成?

测试完成后会发 系统测试报告,移交给UAT ,UAT验收完成发UAT验收报告。代表整个测试完成。

9、你们缺陷是怎么管理的?

11、你们需求是怎么管理的? 在管理工具上直接下,或者在git下直接下,通过右键附件下发。通过 RTX工具进行分享。

12、你们公司用的什么bug管理工具? jira、QC、禅道、螳螂

13、案例写在哪?

14、导入测试案例?

15、怎么样才是好的缺陷报告

提交缺陷的时候有哪些要素:
1、缺陷标题 和 缺陷所属模块
缺陷状态,缺陷所属版本,指派给谁
2、缺陷描述 ,缺陷描述包含 缺陷具体的描述和重现步骤,页面问题截图。
好的缺陷报告: 重现步骤描述非常清晰,最好有错误截图和后台日志错误截图。

16、页面上点击按钮或者提交报错/没反应/、、/你怎么办?

17、系统上线发布后出现问题怎么办?

18、在页面操作报错怎么处理?

19、在测试过程中比较容易忽略的测试点有哪些?

20、你测试的时候比较难测试的有哪些?

21、项目发布流程

 测试环境发布的话比较简单,开发把项目通过git或者svn等工具提交到测试环境<br />服务器,然后用jenkins进行项目构建。Jenkdins中有一些触发器,比如代码更新的时候自动部署,或者设置时间自动部署,当然也可以进到手动部署。和我们把接口自动化脚本挂到Jenkins上差不多。<br />     项目上线这块,项目上线我们是用的是替换war包的方式,每个版本的代码都打成war包部署放到项目服务器中。<br />22/给你一个需求怎么去测试?<br />    在实际工作中,如果需求下来后,还是先理解需求,分析测试点,如果需求有问题找业务去确认,当然对于复杂的需求,我也经常和开发进行提前沟通,双方要确定测试点。因为说实话有的开发我们是放心的,有的开发他可能做出来的功能经常太多的bug,所以也需要和开发保持沟通。 <br />23/你去一个新项目组怎么去测试?/如果你来我们公司的话怎么去测试?<br />     如果是新项目组或者是新公司,我会先熟悉我们项目组和我工作有关系的人,我需要明确谁是我上级,谁做需求这一块,我负责测试的项目是哪些开发负责的。这样出问题我知道找谁。再就是熟悉公司大概的业务流程,需求,如果是迭代项目就比较容易,看看老的需求,在页面操作操作基本就OK了,如果是新项目,还是得多问多交流。快速搞懂需求。<br /> 

十五、数据库

知识文档:
1、你知道哪些数据库?常用的数据库有哪些?
答:我这边在工作中常用的数据库有两种,一种是oracle,一种是mysql,
用数据库的话,一般就是有时候做测试需要造测试数据,还有做接口自动化的时候需要使用jdbc进行数据库查询验证结果,还有性能测试里边经常写一些存储过程来造数据。 有的时候,为了解决生产问题,我们会在生产环境上执行一些 plsql的存储过程脚本来修改生产数据,需要我们读懂plsql脚本,并且对脚本进行测试。数据库这块大概我在工作中就用这么多。
2、数据库你们用的哪个版本?你们连接数据库用的是什么工具?
oracle用的是10g 用的连接工具是 plsql工具,mysql以前记得用的是5.0版本,用的是navicate远程连接工具。
3、Oracle数据库 增删改查关键字分别是什么?
4、Oracle数据库有哪些连接方式,他们有什么区别?
包含 等值连接,等值连接呢 会把多个表连接的不匹配数据过滤掉。
还有 外连接: 使用 left join/right join/full join 进行连接。主要用来过滤出不匹配的数据的时候使用。
5、分组和排序的关键字是什么?
group by 和order by
6、分组前和分组后用什么关键字进行过滤?
分组后过滤有having 其他一般过滤的话用where
7、常见的oracle数据类型有哪些?
oacle中: mysql中:
8、约束是什么? 常见的约束有哪几种?
9、什么是索引,索引怎么创建,索引都创建在哪些列上?
10、什么是视图?视图的作用?怎么去创建视图?
11、创建序列的关键字是什么?序列主要用在哪些地方?
12、什么是数据库伪列?常用的伪列有哪些?伪列的作用是什么? 数据库分页什么怎么分的,请举个例子
13、To_date 和to_char 的作用?
14、数据库分页是怎么做的?
15、mysql和 oracle有什么区别?
1. 他们两个库基本用法差不多,两个库的变量类型不同。
比如 oracle 声明数字类型字段使用的是 number类型,而mysql用的是 int float double类型。 还有oracle中经常使用 varchar2类型,mysql中只有 char varchar类型。

2. 还有一些语法不同, 比如 分页查询 oracle比较复杂使用 rownum 进行子查询嵌套分页,
而mysql就比较简单 使用 limit直接分页。

mysql分页:
取前5条数据
select from table_name limit 0,5
或者
select
from table_name limit 5
查询第10到第15条数据
select from table_name limit 10,10

oracle分页:
SELECT b.
FROM
(
SELECT A., ROWNUM RN
FROM (SELECT
FROM emp order by sal desc) A
WHERE ROWNUM <= 20
) b
WHERE b.RN >= 10

十六、mysql和oracle的区别:

1、 Oracle是大型数据库而Mysql是中小型数据库。
2、 Oracle没有limit,在mysql中我们用limit分页很方便,oracle要分页的话,需要使用rownum。

Oracle分页技术:
select a.* from
(select rownum rm, e.* from emp e) a
where rm >=5 and rm<=10;
Mysql分页技术:
查询第5到第10条数据
select * from table_name limit 4,6
3、oracle建表时,没有auto_increment,oracle要想让表的一个字段自增,要自己添加序列,插入时,把序列的值,插入进去。
—mysql
— 设置自增ID从N开始
CREATE TABLE empautoinc(
ID INT PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT = 100 ; —(设置自增ID从100开始)
4、字段定义不同。
oracle使用number表示小数和整数,mysql 用 int表示整数,用double表示小数
oracle有varchar2类型,mysql是没有的,mysql使用的是 varchar和char
5、mysql连接的时候需要再选择库,oracle就一个总库。

十七、plsql这块你懂哪些?

一、plsql简介:plsql是oracle脚本语言。

应用1、 在生产环境下,往往需要修改错误的生产数据,所以开始需要进行DML【plsql脚本】脚本修改数据【所有在前台的交易,后台数据库都生成响应的数据,如果出现问题,可以在后台直接进行数据修改,我们写的数据修改的脚本叫DML脚本,脚本上线之前要对该脚本进行测试,叫DML脚本测试】。
应用2、plsql可以批量造数据、修改表中的数据,比oralce语句更为复杂和方便。【在测试过程中,如性能测试我们需要在数据库中造符合条件的数据,这时候我们可以使用 plsql脚本批量造数据】

什么是游标?

1、游标关键字是 cursor,用来存储一个结果集的,比如我们批量处理数据的时候可以使用游标先把数据抓出来,再对结果集进行循环处理。
2、游标分为显式游标和隐式游标:
隐式游标,不需要手动进行 打开游标关闭游标的。
显式游标,需要自己打开游标关闭游标。(如果不关闭,可能会造成内存泄露)
For循环迭代游标就是隐式游标,loop迭代游标是显式游标。
3、怎么样批量造数据?
批量造数据使用plsql语句块可以直接造,先声明变量,再在写循环语句,
进行插入。大概的语句结构就是 declare …begin …end 这样的结构。begion end
中间使用一个循环插入比如使用 while循环、for循环。
4、什么是触发器?
5、什么函数?
相关文档1: 数据库基础、

相关文档2: PLSQL教程

相关文档3:功能测试使用数据库

相关文档4: 数据库笔试:

十八、Java

Java是基于面向对象设计思想的设计语言, 我当时学了java基础知识,比如 java面向对象的知识比如 构造方法、继承、接口、抽象类等,还有一些比如数组、集合、异常处理机制等内容,能大概看懂java代码,和分析常见的一些报错信息。

1 你会开发语言吗?/ java这块你掌握的怎么样?java代码你都知道什么?/你都会哪些?

语言的话我这块主要用的用的java这一块比较多,主要用来做做自动化,比如做接口自动化测试和selenium2自动化测试我这块用的都是java语言。
追问:开发人员写的代码能看懂吗?
大概还是能看懂的,有的时候会看看开发写的接口逻辑,会把开发的代码从git上拉到eclipse中看一看。

2 什么是面向对象呢?

面向对象我理解的还是 一切都是对象,比如我们在封装 java读取excel的时候,或者
对Properties文件解析的时候,会把这些文件看成一个对象(File f = new File())进行解析,
在做接口自动化的时候,会把http连接看成一个对象,所以一切皆为对象。
面向对象的特征是封装、继承、多态。封装就是属性私有对外提供get/set方法,主要控制访问权限, 也可以把常用的功能封装起来, 比如 做接口自动化,我们要使用jdbc进行连接,我们可以封装jdbc连接,还有每次要去数据库中验证接口的结果,所以需要大量的查询,我们可以把查询封装成一个方法,每次使用调用就OK。继承的话就是一个类继承一个父类,子类可以重复利用父类的属性和方法。多态的话,就是 父类类型指向子类对象的时候,该对象调用被子类覆盖的方法,会自动调用子类的方法。大概就是这样。
1、什么是jre和jdk?
JRE: Java Runtime Environment
JDK:Java Development Kit
JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具
2、Jdk怎么安装?Jdk常用版本?你用的是哪个版本的jdk?
先安装jdk的exe程序,在配置jdk环境变量。
Jdk常见版本 1.5 1.6 1.7
Jdk 1.6.
3、jdk 环境变量怎么配置?
1. 系统变量→新建 JAVA_HOME 变量,变量值填写jdk的安装目录。
2. 系统变量→寻找 Path 变量进行编辑配置java_home的位置。

3. 检验是否配置成功 运行cmd 输入 java -version

3、你是怎么看报错信息/分析的?

先看看报什么错,是哪种异常,比如像我碰到最多的是 空指针异常,SQL异常,还有做自动化的一些元素定位不到异常、断言异常等等。一般java的报错信息需要从下往上看,java里边的报错信息是迭代调用抛出的,所以在这些信息中需要找到我们代码有关系的方法。再去看看这个方法出了什么问题。

4、冒泡排序。

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
  冒泡排序算法的运作如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码:
public class BubbleSort{
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < score.length - i - 1; j++){ //对当前无序区间score[0……length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
if(score[j] < score[j + 1]){ //把小的值交换到后面

int temp = score[j];

                 score[j] = score[j + 1];<br />                     score[j + 1] = temp;<br />                 }<br />             }            <br />             System.out.print("第" + (i + 1) + "次排序结果:");<br />             for(int a = 0; a < score.length; a++){<br />                 System.out.print(score[a] + "\t");<br />             }<br />             System.out.println("");<br />         }<br />             System.out.print("最终排序结果:");<br />             for(int a = 0; a < score.length; a++){<br />                 System.out.print(score[a] + "\t");<br />        }<br />     }<br /> }<br />**8、最简单数组排序**<br />   Arrays.sort(数组名)<br /> <br /> <br />**10、访问修饰符public,private,protected,以及不写(默认)时的区别?** <br />修饰符 当前类 同 包 子 类 其他包<br />public  √   √   √   √<br />protected   √   √   √   ×<br />default √   √   ×   ×<br />private √   ×   ×   ×<br /> <br />**11、String 是最基本的数据类型吗? **<br />答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type)<br /> <br />**12、int和Integer有什么区别? **<br />Int 是基本类型,Integer 是引用类型。<br />- 原始类型: boolean,char,byte,short,int,long,float,double <br />- 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double<br /> 

13、重载(Overload)和重写(Override)的区别

1.方法重载是发生在一个类里边,方法名字相同,参数列表不同。
2.方法重写发生在父子类之间,子类继承父类的方法,可以重写父类方法名相同的方法。

14、什么是多态?

子类继承父类后,父类的类型,指向子类的对象,该对象调用父类方法,会自动调用子类被重写的方法.(多态)

什么是抽象方法和抽象类?

抽象方法 是由 abstract 修饰的方法 并且没有 方法体。 只用来定义方法,而不实现方法。
抽象类,由abstrct修饰的类叫抽象类,可以有抽象方法和普通方法。
抽象类的特征:抽象类不能被 创建对象。也就是说不能被 new出来。
抽象方法需要子类去继承实现。
一个类继承一个抽象类,必须实现该抽象类的 抽象方法。

什么是接口:

接口 用 interface 来定义
里边只能有 抽象方法,皆空用来声明功能,但不实现,需要一个类实现
这个接口,并且重写里边的抽象方法。
14、抽象类(abstract class)和接口(interface)有什么异同?
1.抽象类可以有普通方法和抽象方法,而接口只能有抽象方法。
2.抽象类用 abstract 修饰的类,而接口是由interface 来修饰的类。
3.抽象类可以用来被继承使用继承,但接口只能用来被实现。

15、static关键字的特征
//1.方法和变量 如果 被static修饰 可以使用 类名.方法 或者 类名.变量名 进行调用
//2. 全局变量和局部变量: 全局变量在类体中声明, 整个类都可以使用.
//3. 局部变量在方法内声明,只有该方法才能使用.
//4. 静态方法中,只能使用全局静态变量.

16、Java 中的final关键字有哪些用法?
答:(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

17、Error和Exception有什么区别?

答:Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

18、列出一些你常见的运行时异常?
答:
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)

19、什么是异常?
1. 代码经常出现问题,这些问题就是异常。
2. 异常类分两大类型:Error类代表了编译和系统的错误,不允许捕获;Exception类代表了标准Java库方法所激发的异常。Exception分为 受检查异常,和运行时异常。
<1:受检查异常 如jdbc连接,代码必须抛出异常,否则变异不通过
Class.forName(“oracle.jdbc.driver.OracleDriver”);
conn= DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”, “scott”, “1234”);

20、异常的处理方式。

异常处理的方式1:
使用 try。。Catch 把可能出现异常的代码包起来,一旦出现异常,进行处理。
try{
可能出现异常的代码
}catch(异常类名字 e){
处理异常的代码
}
try中一旦出现异常,抛出一个异常对象,该异常对象
类型,如果跟catch中异常类型一致,就会被catch
截获该异常,执行catch中代码
e:指代异常名字,默认都是写成e

异常处理方式2:
使用throws 抛出异常,当前方法不对该异常进行处理。

Try……Catch 和throws 的区别:
1. Try……Catch 捕获异常并且进行处理。
2. Throws 将异常抛出,谁调用谁去处理。
常见异常:
Java Exception:
1、ArithmeticException:数学运算异常,比如除数为0时会报该异常
NullPointerException:空指针异常,(找不到对象或者对象为null的异常)。
ClassNotFoundException 找不到类异常
SQLException sql语句异常。
StringIndexOutOfBoundsException 字符串下标越界异常。

空指针异常案例如下: 注意 try。。Catch后边可以跟 finally{} 进行最终处理。
Finally后的{}里边的代码一定会被 执行。
注意: finally和 final
1. Finally用在try..chtch之后,进行最终的代码处理,Finally后的{}里边的代码一定会被 执行。
2.而 final 用来修饰 变量,表示变量为常量,变量的值不能改变。
用来修饰类表示类,不能被继承。

21、怎么样自定义异常?
自定义异常可以创建一个类,继承exception类。
21、throw 和throws的区别。
用来抛出具体的异常如:
throw new NameOrPwdException(“用户名或密码错误!”);
Throws 声明该抛出某个异常,谁调用谁进行处理。
空指针异常类:NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。
操作数据库异常:SQLException
算术异常类:ArithmeticExecption
方法不存在异常
java.lang.NoSuchMethodException
22、阐述final、finally、finalize的区别。
答:
- final:修饰符(关键字)有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子类,即不能被继承,因此它和abstract是反义词。将变量声明为final,可以保证它们在使用中不被改变,被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。被声明为final的方法也同样只能使用,不能在子类中被重写。
- finally:通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。
- finalize:Object类中定义的方法,Java中允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。

23、List、Set、Map 之间的区别

List集合是存放数据是有序的存放,而set集合是无序的。
Map集合以键值对方式进行存放。

24、什么是继承?
继承使用 A类 extends B类 : A类就继承了B类。
子类继承父类 如 Gril 继承 Persion类子类就能够使用父类的 属性和方法。
但是父类不能使用子类的属性和方法。
java中的继承 为 单继承。一个类只能继承另外一个类,不能继承多个。
多个类 可以继承同一个父类。
一个类只能继承一个父类。
24、你知道几种循环结构?
For循环 while循环 do while 循环
25、While循环和 dowhile循环有什么区别?
两者的使用方法基本相同, 但dowhile循环会先执行 do里边的循环体语句,再去判定是否执行下一次。
26、Final关键字
1. final 修饰 变量 值不能被改变。
2. final 修饰 类 该类不能被继承(如System 类 String类).
数组和集合的区别
1.数组的特征:
<1. 定长.
<2. 只能存放同类型数据.
集合:
<1. 能够存放不同类型数据.
<2. 自带自动扩容功能.

File文件操作

1、 要操作文件,必须先获取一个文件的对象。
2、 File file = new File(指定文件路径);
3、file.exists() 判断是否存在
4、创建文件 file.createNewFile()—//如果目录已经存在,才能使用该函数创建文件
5、创建文件夹 file.mkdirs() 路径李的每一部分都会当做一个目录去创建
Mkdir 创建一级目录

什么是io流?

Java里边的io流主要用来读写文件内容, 比如自动化测试需要读取并且excel中的测试案例,还有一些配置文件比如jdbc,log4g的perperties文件,也需要流进行读取。

你都用过什么流?
常用的比如一些基础流, FileReader和FileWriter 用来读写文件,为了加快速度效率
还有一些缓冲流 比如BufferedReader和BufferedWriter。用这几个刘可以读写文件内容比较常用。

static void readAndWrite(String from,String to){
File file = new File(from);
File file2 = new File(to);
if(file.exists()){
BufferedReader reader = null;
BufferedWriter writer = null;
try {
reader = new BufferedReader(new FileReader(file));
writer = new BufferedWriter(new FileWriter(file2));
while(true){
String line = reader.readLine(); //读取一行数据
if(line!=null){
writer.write(line+”\n”); //写一行并且换行
}else{
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(reader!=null&&writer!=null){//如果reader创建时爆出异常, reader会为空没有必要关闭。
reader.close();
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
三、 日志
1、什么是日志:日志就是程序运行过程中产生的相关记录信息,比如
代码报错我们可以看到控制台日志。
2、日志的级别
# Logger输出的信息是有优先级别的: 
ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF———级别由小到大
# 常用的有:DEBUG,INFO,WARN,ERROR

三、log4j

作用:我们可以在自动化项目中配置log4j,使用log4j将自动化的日志保存在文件中。比如我们可以配置log4j.properties的配置文件,设置不同的log4j的级别保存在不同的路径下。比如把debug以上级别的文件设置在一个文件中,把错误级别日志写在另外的文件中,方便查询日志。

四、log4j怎么配置的?
1、 日志首先需要配置日志文件log4j.properties ,该文件声明记录哪些级别的日志,日志保存在哪。
2、 再开发一个log4j工具类,可以获取log4j对象。

Log4j工具类是怎么开发的?
1、这个比较简单,方法的入参设置为 Class类对象,方法第一步加载 log4j.perperties文件,在使用 getLgger方法获取传入的类的log对象。
### 设置###
#log4j.rootLogger = debug,stdout,D,E
#控制台使用 标准输出级
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=D://logs/log.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

### 输出ERROR 级别以上的日志到=d://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = d://logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}[ %t:%r ] - [ %p ] %m%n


public static Logger getLogger(Class<? extends Object> clazz){
PropertyConfigurator.configure(“res/log4j.properties”);
Logger logger = Logger.getLogger(clazz);
return logger;
}

1、JDBC是什么?

JDBC全称是Java DataBase Connectivity,即Java数据库连接,它是一种可以执行SQL语句的Java API。

2、JDBC的使用过程

使用jdbc分为3步:
1、项目中添加依赖à 创建连接对象à操作数据库(分为查询和 增删改 两部分操作)。

3、添加依赖jar包

Mysql如下:


mysql
mysql-connector-java
5.1.38


Oracle如下:oracle需要手动添加jar包,见 maven 环境搭建文档。

2、创建oracle连接对象:


public static Connection getConnection() {
Connection conn=null;
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);//加载 驱动类
conn = DriverManager.getConnection(“jdbc:oracle:thin:@192.168.41.129:1521:orcl”, “scott”, “1234”);//获取连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

4、jdbc操作数据库有两种方式,Statement和 PreparedStatement

先看看一个简单的例子:
使用两种方式对oracle进行查询。 见 Demo001
结论如下:
采用了Statement对数据库操作,如果现在SQL语句需要传入变量,只有采用拼接的方式,这样做有很多缺点,例如拼接容易出错或容易产生SQL注入等。
Statement的缺点:
•同样的SQL语句,每次都要发送,不能进行有效的缓存。
•拼接SQL字符串非常容易出现错误。
•不能防止恶意数据,易产生SQL注入。
升级后的新接口PreparedStatement(推荐):
•预编译SQL语句,并进行有效的缓存,性能更好。
•允许使用问号占位符参数,并且该参数必须获得值后才可以执行。
•无需拼接SQL语句。
问号占位符参数:INSERTINTO User(id,name,age,birthday)VALUES(?,?,?,?);
来看一下通过PreparedStatement对数据库操作的代码:
注意以下两点:
1.问号占位符不能加引号。
2.占位符参数设置值从下标从1开始

5、封装连接对象。

因为每次连接数据库都要创建连接对象和关闭连接对象,所以我们需要将
数据库连接和关闭封装成方法供我们以后多次重复的调用。避免重复代码。
public class ConnectOracle {

public static Connection getConnection() {
Connection conn=null;
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);//加载 驱动类
conn = DriverManager.getConnection(“jdbc:oracle:thin:@192.168.41.129:1521:orcl”, “scott”, “1234”);//获取连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

//释放资源
public static void close(Connection conn, Statement stat, ResultSet rs){
if(conn != null){
try {conn.close();} catch (SQLException e) {e.printStackTrace();}
}
if(stat != null){
try {stat.close();} catch (SQLException e) {e.printStackTrace();}
}
if(rs != null){
try {rs.close();} catch (SQLException e) {e.printStackTrace();}
}
}
public static void main(String[] args) {
Connection conn = ConnectOracle.getConnection1();
System.out.println(conn);
}
}

6、使用PreparedStatement进行 增删改查。


package com.chengcai.study.javabasic;


import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.chengcai.tools.ConnectOracleUtils;
public class Demo002 {
/*
* 增加
*/
public void create() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
// 获取连接
connection = ConnectOracleUtils.getConnection();
// 准备sql语句
String sql = “INSERT INTO user(user_name,user_password,user_birth) VALUES(?,?,?)”;
// 获取PrepareStatement对象
preparedStatement = connection.prepareStatement(sql);
// 填充占位符
preparedStatement.setString(1, “zhangmoumou”);
preparedStatement.setString(2, “zhang123”);
// 执行sql
int num = preparedStatement.executeUpdate();// 返回影响到的行数

System.out.println(“一共影响到” + num + “行”);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
ConnectOracleUtils.close(connection, preparedStatement, null);
}
}

/*
* 读取查询
*/
public void retrieve() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = ConnectOracleUtils.getConnection();
String sql = “SELECT user_name,user_password,user_birth FROM user”;
preparedStatement = connection.prepareStatement(sql);
resultSet = preparedStatement.executeQuery();

// 遍历结果集
while (resultSet.next()) {
String username = resultSet.getString(1);
String password = resultSet.getString(2);
Date userbirth = resultSet.getDate(3);

System.out.println(username + “:” + password + “:” + userbirth);
}
} catch (Exception e) {
} finally {
ConnectOracleUtils.close(connection, preparedStatement, resultSet);
}
}

/*
* 修改更新
*/
public void update() {

Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = ConnectOracleUtils.getConnection();
String sql = “UPDATE USER SET user_password = ? WHERE user_name = ?”;
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, “passwordupdate”);
preparedStatement.setString(2, “mary”);
int num = preparedStatement.executeUpdate();

System.out.println(“一共影响到” + num + “行”);
} catch (Exception e) {
// TODO: handle exception
} finally {
ConnectOracleUtils.close(connection, preparedStatement, null);
}
}

/*
* 删除
*/
public void delete() {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = ConnectOracleUtils.getConnection();
String sql = “DELETE FROM user WHERE user_id = ?”;
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setInt(1, 3);
int num = preparedStatement.executeUpdate();

System.out.println(“一共影响到” + num + “行”);
} catch (Exception e) {
// TODO: handle exception
} finally {
ConnectOracleUtils.close(connection, preparedStatement, null);
}
}
}

十九、使用jdbc操作 mysql数据库

1、为项目导入驱动包


mysql
mysql-connector-java
5.1.38

2、获取mysql连接

/获取mysql连接/
public static Connection getConnectionForMysql() {
Connection conn=null;
try {
Class.forName(“com.mysql.jdbc.Driver”);//加载 驱动类
conn = DriverManager.getConnection(“jdbc:mysql://127.0.0.1:3306/jforum”,”root”,”1234”);//获取连接
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}

3、使用jdbc操作mysql数据库

同oracle操作数据库。

4、使用 properties文件管理 数据库配置参数。

解耦。
//第一步:通过properties解析读取properties文件内容
Properties properties = new Properties();
File file = new File(“res/jdbc.properties”);
properties.load(new FileInputStream(file));

String url = (String) properties.get(“url”);
String user = (String) properties.get(“user”);
String password = (String) properties.get(“password”);
String driver = (String) properties.get(“driverClassName”);
//第二步: 使用properties文件的数据进行数据库连接
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}

二十、前端教程:

**后端指的是网站数据的收集及处理保存, 通常负责数据这块;

一、网页是什么?

通过互联网访问的特殊的文件,网页位于 MVC 视图层,供前端客户使用。比如登录,就是用前端语言进行实现。

二十一、HTML:

1、什么是HTML?

HTML:学名:超文本标记语言,能够刻画出网站想要的控件效果。

2、第一个html/基本结构:

基本结构:



</strong><br /><strong> <!--网页标题,出现在浏览器的选项卡上 --></strong><br /><strong>






1、注意
如果结构不对、标签不对,浏览器会使用怪异模式强行解析网页内容。
用怪异模式解析的网页,不同浏览器显示结果不同。
2、告诉浏览器用什么编码解释内容语法:
在head中
3、标签格式:
HTML 标记标签通常被称为 HTML 标签 (HTML tag)。
· HTML 标签是由尖括号包围的关键词,比如
· HTML 标签通常是成对出现的,比如
· 标签对中的第一个标签是开始标签,第二个标签是结束标签
HTML 属性
HTML 标签可以拥有属性。属性提供了有关 HTML 元素的更多的信息。
属性总是以名称-值对的形式出现,比如:

属性总是在 HTML 元素的开始标签中规定。

3、 HTML常用标签:

1、 : 之间的文本描述网页
2、: 一般用来描述字符集、标题、和引用的文件路径。
3、: 之间的文本是可见文本。
4、

: 被显示为标题
5、

: 被显示为段落

6、 : 文本输入框
7、选择框
8、按钮:
9、单选按钮:

Male


Female


10、加密输入框:
11、下拉菜单:
12、超链接:
请点击
13、table表格:
其中:tr代表一行 td代表一个格子




111213
212223
242526

14、表单:用来把前端页面的内容提交到后台

用户名:




密 码:










14、面试问题大全 - 图21
15、有序列表:





16、无序列表:






17、文本域: