松原网站制作,官方入口,wordpress 页面属性模板,维影企业网站管理系统随着数字化时代的到来#xff0c;软件测试越来越受到重视。在未来的几年里#xff0c;软件测试将继续成为信息技术领域中的热门职业之一。如果你是一名正在寻找或准备进入软件测试行业的人#xff0c;那么这套常见面试题全套教程对你来说会非常有用。
这套教程旨在帮助你了… 随着数字化时代的到来软件测试越来越受到重视。在未来的几年里软件测试将继续成为信息技术领域中的热门职业之一。如果你是一名正在寻找或准备进入软件测试行业的人那么这套常见面试题全套教程对你来说会非常有用。
这套教程旨在帮助你了解2023年软件测试面试过程中可能会问到的常见问题从而帮助你更好地准备面试。这些问题涵盖了软件测试的基础知识和实践技能并且包括测试策略、测试方法、测试工具、测试流程以及测试管理等方面的内容。
通过认真学习这些问题及其答案并结合自己的经验和思考进行练习和总结相信你可以在软件测试面试中取得良好的成绩并最终获得心仪的工作机会。 01 软件测试理论部分 1.1 测试概念 1. 请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
单元测试完成最小的软件设计单元模块的验证工作目标是确保模块被正确的编码 集成测试通过测试发现与模块接口有关的问题 系统测试是基于系统整体需求说明书的黑盒类测试应覆盖系统所有联合的部件 回归测试回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性 验收测试这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。验收测试包括Alpha测试和Beta测试。 Alpha测试是由用户在开发者的场所来进行的在一个受控的环境中进行。并且在开发者对用户的指导下进行测试开发者负责记录发现的错误和使用中遇到的问题 Beta测试 由软件的最终用户在一个或多个用户场所来进行的开发者通常不在现场。由用户记录在测试中遇到的一系列问题并定期报给开发者。 2. 什么是黑盒什么是白盒黑盒和白盒的测试方法分别有哪些
黑盒:黑盒测试也称功能测试或数据驱动测试。把程序看作一个不能打开的黑盆子在完全不考虑程序内部结构和内部特性的情况下对程序接口进行测试。“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试 常用的黑盒测试方法等价类划分法边界值分析法因果图法场景法正交实验设计法判定表驱动分析法错误推测法功能图分析法。 白盒测试:也称为结构测试或逻辑驱动测试是针对被测单元内部是如何进行工作的测试 常用白盒测试方法 静态测试不用运行程序的测试; 动态测试需要执行代码通过运行程序找到问题; 逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖 1.语句覆盖每条语句至少执行一次。 2.判定覆盖每个判定的每个分支至少执行一次。 3.条件覆盖每个判定的每个条件应取到各种可能的值。 4.判定/条件覆盖同时满足判定覆盖条件覆盖。 5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。 6.路径覆盖使程序中每一条可能的路径至少执行一次。 3. 测试流程
需求测试-概要设计测试-详细设计测试-单元测试-集成测试-系统测试-验收测试 4. app测试性能指标
内存 cpu 流量 启动速度 5. web测试和app测试不同点
系统架构方面
web项目一般都是b/s架构基于浏览器的 app项目则是c/s的必须要有客户端用户需要安装客户端。 web测试只要更新了服务器端客户端就会同步会更新。App项目 则需要客户端和服务器都更新。 性能方面:
web页面主要会关注响应时间 而app则还需要关心流量、电量、CPU、GPU、Memory等。 兼容方面
web是基于浏览器的所以更倾向于浏览器和电脑硬件电脑系统方面的兼容 app测试则要看分辨率屏幕尺寸操作系统、网络。 web测试是基于浏览器的所以不必考虑安装卸载。 而app是客户端的则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景:包括安装时的中断、弱网、安装后删除安装文件 。
如果对你有帮助的话点个赞收个藏给作者一个鼓励也方便你下次能够快速查找感谢。
如接果你想获取该文章配套的视频视频教程以及练手的接口。
请狠狠点击【文章末尾推广小卡片】
并把所需的资料的文章链接发给我即可领取
如果你想获取简历模板面试技术宝典求职视频上千份测试真题
也请【狠狠点击文章末尾推广小卡片】
并把所需的资料的文章链接发给我即可领取 6. 缺陷按优先级分为哪些类型 p1-p5 面试重点
缺陷必须立即解决 缺陷要求正常排队等待修复 缺陷可以在方便时被纠正 下一个版本修复 不修复 7. 测试用例的内容是什么 面试重点
用例编号 测试概述或用例标题 测试步骤 预期结果 输入数据 优先级 前置条件等 8. 测试结束的标准是什么 面试重点
全部测试用例都被执行完成 未修改bug都被确认或置为应有状态暂缓修改的问题都有详尽的解析 测试报告编写完成 测试收尾工作结束 测试总结完成 项目处于试运行或上线阶段 在测试计划中定义结束的标准在一定性能下平稳运行多少天、本版本没有严重bug普通buh数量在多少个以下bug修复百分之多少以上 实际测试达到上述要求由项目、开发、测试经理共同签字认同测试结束版本即可发布。 1.2 软件开发模型 软件生命周期 从软件最初构思到最终消亡(退役)的过程。
1. 软件生命周期 立项 ---需求分析 ---设计、编码、测试 ---发布 ---运行维护 ---淘汰 软件立项》可行性研究 》需求分析 》概要设计 》详细设计 》编码实现 》单元测试 》集成测试 》系统测试 》验收测试 》运行维护 2. 瀑布模型 缺点1. 各阶段划分完全固定阶段之间产生大量文档极大增加工作量2. 由于开发模型是线性的用户只有等到整个过程的末期才能看到开发结果增加开发风险3. 不适应用户需求变化 3 . 快速原型模型(现在特别流行模式) Axure 软件 1. 原理迅速搭建一个可以运行的软件原型以便理解和澄清问题使开发人员与用户达成共识最后在确定需求基础上开发客户满意的软件产品
2. 特点适合预先不能确切定义需求的软件系统的开发
3. 优点 克服瀑布模型缺点减少由于软件需求不明确带来的开发风险 4. 增量模型(最常用开发模型之一) 分批次地分析、设计、编码和测试这些增量组件。
5. 迭代模型 开发进度快 1. 原理强调开发的深入 ---优化过程开发迭代是一次完整地经过所有工作流程的过程需求分析、设计、实施和测试工作流程
2. 优点降低在一个增量上的开支风险降低产品无法按照既定进度进入市场的风险加快开发工作进度适应需求变化快的场景6. 螺旋模型 1. 原理兼顾了快速模型的迭代的特征以及瀑布模型的系统化与严格监控
2. 优点最大特点引入其他模型不具备的风险分析使软件在无法排除重大风险时有机会停止以减少损失适合大型昂贵的系统级的软件应用1.3 软件测试模型
1. v模型 1. 原理揭示开发过程和测试过程中各阶段的对应关系
2. 缺点与不足仅把测试过程作为需求分析、系统设计及编码之后的一个阶段忽略了测试对需求分析、系统设计的验证需求的满足情况一直到后期验收测试才被验证没有体现出“尽早和不断地进行软件测试”原则2. w模型 1. 由两个 v 字模型组成分别代表测试与开发过程明确表示了测试与开发并行关系
2. 优点测试活动与软件开发同步进行测试对象不仅是程序包括需求与设计尽早发现软件缺陷可降低软件开发成本
3. 局限性无法支持迭代开发模型没有循环过程3. h模型 1. 将测试活动完全独立出来形成一个完全独立的流程
2. 只要测试条件成熟了测试准备活动完成了测试执行活动就可以进行了
3. 软件测试要尽早准备尽早执行不同测试活动可按某个次序先后进行也可反复进行迭代4. x模型 1. 针对单独的程序片段进行相互分离的编码和测试
2. 定位了探索性测试这是不进行事先计划的特殊类型的测试5. 软件测试生命周期 获取测试需求 编写测试计划 制定测试方案 开发与设计测试用例 执行测试 提交缺陷报告 测试分析与评审 提交测试总结 准备下一版本测试
6. 简述缺陷的生命周期 面试重点
软件测试人员提交缺陷报告 测试负责人审核后将缺陷分配给相关开发人员修复 缺陷被修改后有测试人员根据缺陷报告中修改记录进行返测 返测通过的缺陷由负责人关闭 返测未通过的缺陷直接返回给开发人员重新修改然后再由测试人员返测直到测试和开发达成一致处理意见。 1.4设计用例方法 1. 黑盒测试
等价类划分法 将系统的输入域划分为若干部分然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类 边界值分析法 是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试因此该方法要和等价类划分法结合使用。 正交试验法 正交是从大量的试验点中挑选出适量的、有代表性的点 状态迁移法 是对一个状态在给定的条件内能够产生需要的状态变化有没有出现不可达的状态和非法的状态 判定表分析法 判定表是分析和表达多种输入条件下系统执行不同动作的工具 因果图法 因果图是用于描述系统输入输出之间的因果关系、约束关系。 2. 白盒测试
静态: 动态逻辑覆盖法程序插桩技术基本路径法符号测试错误驱动测试 1.5 测试分类 1.按开发阶段划分 单元测试(模块测试) 针对软件设计的最小单位---程序模块进行正确性校验的测试工作。 目的检查每个程序单元能否正确实现详细设计说明中的模块功能、性能、接口和设计约束等要求发现各模块内部可能存在的各种错误。 单元测试需要从程序内部结构出发设计测试用例 多个模块平行独立地进行单元测试 集成测试(组装测试) 有序、递增的测试持续不断的过程持续时间比较长 在单元测试基础上将所有程序模块进行有序、递增的测试。 基础测试是检验程序单元或部件的接口关系逐步成为符合概要设计要求的程序部件或整个系统 确认测试(有效性测试)----时间短 在模拟环境下验证软件所有功能和性能及其他特性是否与用户预期要求一致。 系统测试 在真实系统运行环境下检查完整的程序系统能否和系统(硬件、外设、网络和系统软件、支持平台)正确配置、连接最终满足用户的所有需求 验收测试 按项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审决定是否接收或拒收系统 2.按测试技术划分 黑盒测试(80%) 通过软件外部表现来发现其缺陷和错误。黑盒测试把测试对象看出一个黑盒子完全不考虑程序内部结构和处理过程。在程序界面处进行测试只是检查程序是否按照需求规格说明书的规定正常实现 白盒测试(结构测试)不管黑盒测试做得有多完全白盒测试也有必要做 通过对程序内部结构和分析、检测来寻找问题。 把测试看成一个透明的盒子里检测是否所有结构及路径都是正确的检查软件内部动作是否按照设计说明的规定正常进行 灰盒测试(接口测试) 关注输出对输入的正确性 3. 按代码运行划分 静态测试不实际运行被测对象而是静态检查程序代码、界面或文档中可能存在错误的过程 代码测试主要测试代码是否符合相应的标准和规范 界面测试主要测试软件的实际界面与需求中的说明是否相符 文档测试主要测试用户手册和需求说明是否真正符合用户的实际需求 动态测试 实际运行被测对象输入相应的测试数据检查实际输出结果和预期结果是否相符的过程所以我们判断一个测试属于动态还是静态测试唯一标准就是看是否运行程序 4. 按软件特性 功能测试(黑盒测试)黑盒测试一方面检查实际软件功能是否符合用户需求 性能测试关注软件中某一功能在指定的时间、空间条件下是否使用正常 主要有时间性能和空间性能 安全性测试验证按在系统内的包含机制能否在实际应用中对系统进行保护使之不被非法入侵不受各种因素干扰 5. 其他测试 回归测试对软件新版本测试时重复执行之前某一个重要版本的测试用例(测试过程) 目的验证之前版本产生所有缺陷是否已被修复确认修复这些缺陷没后引发新的缺陷 冒烟测试(可行性测试)先验证一下软件基本功能是否实现在对一个新版本进行系统大规模测试 02shell编程和命令部分 2.1shell常用命令 1. 怎么用shell命令查看行号
获取文本对应文本的行号,可以用grep也可以用sed grep -n “xxx” a.txt | cut -d “:” -f 1 sed -n -e ‘/xxx/’ a.txt 2. 怎么查进程id
shell获取进程ID的方法有三种 1、ps -A |grep “cmdname”| awk ‘{print $1}’ 2、pidof “cmdname” 3、pgrep “cmdname” 3. 网络相关常用命令
ifconnfig查看网卡配置信息 route显示路由表 netstat:查看本地计算机所使用的网络服务状况 ping:测试本地计算机与目标主机是否连接 如ping 127.0.0.1 4. linux查看进程
ps a 显示现行终端机下的所有程序包括其他用户的程序。 ps u 以用户为主的格式来显示程序状况。 ps x 显示所有程序不以终端机来区分。 最常用的方法是ps -aux 5. top
用于实时显示 process 的动态。 语法top [-] [d delay] [q] [c] [S] [s] [i] [n] [b] 6. 查看磁盘
df命令参数功能检查文件系统的磁盘空间占用情况 du检查磁盘空间使用量 fdisk用于磁盘分区 7. 查看端口号、进程的指令是动态查看日志的指令怎么判断一个端口存不存在磁盘满了怎么处理删除一个目录下的txt文件你还熟悉其他什么linux指令
查看端口号命令 netstat –tunlp|grep 端口号 lsof -i:端口号 查看进程指令 ps -ef |grep 进程 -e 显示所有程序。 -f 显示UID,PPIP,C与STIME栏位。 动态查看日志 1、先切换到cd usr/local/tomcat5/logs 2、tail -f catalina.out 2.2 linux三剑客grep、sed、awk 、[find] grep指定文件中搜索特定的内容并将含有这些内容的行标准输出 格式grep [options] 文件名 [options]主要参数 c只输出匹配行的计数 i不区分大小写只适用于单字符 h查询多文件时不显示文件名 l查询多文件时只输出包含匹配字符的文件名 n显示匹配行及行号 s不显示不存在或无匹配文本的错误信息 v显示不包含匹配文本的所有行 -e使用正则匹配 -E使用扩展正则 --colorauto将 sed 流文本编辑器 awk 文本和数据处理 find作用是在目录中搜索文件它的使用权限是所有用户。 格式find [path][options][expression] path指定目录路径。它是一个路径列表相互用空格分离如果不写path那么默认为当前目录。 03 数据库部分 3.1概念 1. 主键 主关键字primary key 针对一个表来说的主键修饰的列唯一不能重复不能为空一个表中只能只有一个主键
2. 外键 针对两个表来说加强表与表之间联系
3. 关系模型的规范化 关系模式要满足的条件称为规范化形式范式(NF)
目的消除储存异常减少数据冗余保证数据完整性和存储效率 如果关系 R 的所有属性均为简单属性每个属性是不可再分的(无重复的列则 R 满足第一范式 第二范式(2NF)关系 R 满足第一范式每一个非主键关键字段完全依赖于主键则称 R 满足第二范式 第三范式(3NF):关系 R 满足第二范式且非关键字段之间不存在依赖关系则称满足第三范式。(从表只能引用主表中一个列) 总结一个基本的关系型数据库需要满足第一范式一个完整的关系型数据库要满足第三范式 4. 唯一约束
特征 不允许出现重复的值但是可以为多个 null 同一个表中可以有多个唯一约束 如果不给唯一约束名称就默认和列名相同 5. 非空约束
格式 列名 数据类型 not null 一个表里面也可以有多个非空约束 6. 默认约束 default 一个表中可以有多个默认约束
7. 外键约束
表的外键值必须在主表中能找到 当主表记录被从表参照时主表的记录将不允许删除 如果要删除数据需要先删除表中依赖该记录的数据删从表记录 主表被引用的表(被参照的表) zhu 从表应用的表 外键约束建立在表里面 cong 被引用的列要么主键约束要么唯一约束 注意在引用过程中主表和从表的来个两个列的数据必须保持一致。(内容也要保持一致) 8. 检查约束 描述限制某个列的取值范围 年龄 18-25 性别要么男或女
9. 主键、外键作用索引的优点与不足
主键 表中的唯一标示键 作用保证实体的完整性加快数据库的操作速度。 外键主键的从属表示两个表之间的联系 作用作用外键可以建立数据之间的关联避免冗余 索引 优点 通过创建唯一性的索引保证表中数据唯一性 加速数据的检索速度 加快表与表之间的连接 使用优化隐藏器提供系统性能 缺点 创建索引需要时间 索引需要占用物理空间 当对表中数据进行修改时索引也要动态维护减低数据的维护速度。 3.2表结构操作 1. 表的创建语法 create table 表名(属性名1 数据类型 [约束条件],属性名2 数据类型 [约束条件],属性名3 数据类型 [约束条件]);2. 删除表 drop table 表名;
3. 删除多个表 drop table 表名 1,表名 2 ...
1.修改表结构 1. 添加列(属性) alter table 表名 add 属性名 数据类型;
2. 删除表(属性) alter table 表名 drop 属性名;
3. 修改属性数据类型 alter table 表名 modify 属性名 数据类型;
4. 修改字段名 alter table 表名 change 旧字段名 新字段名 数据类型;
3.3数据库增删改查 create alter drop desc主要针对表结构来说的 insert delete update select 主要针对表中的数据来进行操作的 3.1.1 DML-INSERT insert 插入 值和列一一对应关系
格式 1 insert into 表名(列名 1,列名 2 ...) values(值 1,值 2 ...); 格式 2 insert into 表名 values(值 1,值 2 ...); 格式 3 insert into 表名 values(值 1,值 2,值 3 ...),(值 1,值 2,值 3 ...); 3.1.2. 删除 delete 格式 1代表清空表内的数据 delete from 表名; 格式 2 有条件的进行删除delete from 表名 where 条件; 3.3.3 DML–UPDATE 更新 格式 1 update table_name set 字段值; 格式 2 update table_name set 字段值,字段值; 格式 3 update table_name set 字段值,字段值 where 条件; 3.3.4. select 查询 1.基本格式:
select 列名 from 表名; select 列名 1,列名 2,列名 3 ... form 表名; 1. 使用关键字 distinct 查询
在查询返回结果中删除重复行 语法select distinct 列名称 from 表名称; 只针对一个列去重 2. 使用别名查询
根据需要对数据显示的标题进行修改 格式select 列名1 别名,列名2 别名,... from 表名; AS 关键字连接列表达式和指定的别名 select 列名 as 别名 from 表名; 3. 条件查询
格式select 列名 from 表名 where 条件; 如果在查询过程中有多个条件可以使用 and 或 or 进行连接 and 连接 —》同时满足 or 连接 ------只满足其一 4. 范围搜索范围
在范围之内 select 列名 from where 列名 between 开始值 and 结束值 不在范围之内 select 列名 from 表名 where 列名 not between 开始值 and 结束值; 5. 列表搜索条件
in: 只要匹配到括号里任意一个值就会有查询结果 格式select 列名 from 表名 where 列名 in (值 1,值 2,值 3 ...) not in 格式 select 列名 from 表名 where 列名 not in(值 1,值 2,值 3); 3.4 数据库表连接查询子查询、内连接、外连接 1. 多表查询
去重 显式 select [distinct] A.列名,B.列名,C.列名,... from C join A on A.keyC.FKeyA join B on B.keyC.FKeyA and B.keyA.key[GROUP BY 字段名]隐式 select [distinct] A.列名,B.列名,C.列名,... from 表A,表B,表Cwhere 表A.字段1 表B.字段1 and表B.字段2 表C.字段2 and ....[GROUP BY 表名.字段名]排序
select A.列名,B.列名,C.列名,... from C join A on A.keyC.FKeyA join B on B.keyC.FKeyA and B.keyA.key
[ORDER BY 表名.字段名]2. 子查询
子查询只返回一个值 子查询首选使用in做匹配 子查询在其他查询结果的基础上提供了一种有效的方式来表示where字句的条件 。 子查询的selec查询总是使用圆括号括起来。 对于子查询来说外查询条件要什么子查询就查什么。 一一对应的关系。 子查询结果分类 标量子查询(子查询结果为单个值) 子查询返回的结果是单个值〔数字、字符串、日期等) 常用操作符 列子查询(子查询结果为一列)子查询返回的结果是一列 常用操作符in、not in、any、some、all select 列表名 from 表名 where 字段名 all (子查询语句);select 列表名 from 表名 where 字段名 any (子查询语句);行子查询(子查询结果为一行) 常用操作符、、 in、not in select 字段名,... from 表名A where (字段名1,字段名2,...) (select 字段名1值字段名2值,... from 表名B where 条件) 表子查询(子查询结果为多行多列)in select 字段名,... from 表名A where (字段名1,字段名2,...) in (select 字段名1值字段名2值,... from 表名B where 条件) 3. 内连接只有匹配到的情况下才会返回结果值
格式一(隐式)
from 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...
form 表名1,表名2
where 表名1.列表名2.列; //列为相同的列格式二(显式):
select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...
from 表名1 inner join 表名2
on 表名1.列表名2.列4. 外连接
外部连接会返回from字句中提到的至少一个表或视图中的所有行左连接显示左边所有行。如果左表的某行在右表中没有找到匹配的行则结果集中的右表相对应位置为null。 select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2
from 表名1 left outer join 表名2
on 表名1.列表名2.列; //列为大家共有的列右连接显示右边所有行 right outer join
select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2
from 表名1 right outer join 表名2
on 表名1.列表名2.列; 区分是左连接还是右连接左连接以坐标为参考左表没有则返回null右连接以右表为参考右表没有则返回null 5.联合查询 把多次查询的结果合并起来形成一个新的查询结果集 对于联合查询的多张表的列数必须保持一致字段类型也需要保持一致。 union all会将全部的数据直接合并在一起union 会对合并之后的数据去重。 select 字段名 from 表A ....
UNION [ALL]
select 字段名 from 表B ...;3.4数据库视图、索引、事务 3.4.1 事务处理 事务一组操作的集合由一系列语句构成的逻辑工作单元。是一个不可分割的工作单元事务把所有操作作为一个整体一起向系统提交或撤销操作请求这些请求要么同时成功要么同时失败 1. 事务的四个属性 原子性对数据库所做操作要么全部执行要么全部取消 一致性事务完成时候必须使所有数据保持一致状态 隔离性事务所作的修改必须和其他事务所作修改隔离 持久性事务提交后对数据库所做操作永久保存 2. 事务操作 查看事务提交方式SELECT autocommit ; 设置事务提交方式SET autocommit 0 ; 开启事务START TRANSACTION或BEGIN 提交事务 commit 撤销语句rollback 3. 并发事务引发的问题 脏读一个事务可以读到另一个事务未提交的数据 不可重复读一个事务先后读取同一条记录但读取的数据不一样 幻读一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据 已经存在好像出现了 “幻影” 3.4.2 索引 1. 定义 索引index是帮助MySQL高效获取数据的数据结构(有序) 2. 创建索引主要作用 加快数据索引 保证数据唯一性 表与表之间参照完整性 在使用group by、order by子句进行查询时利用索引可以减少排序和分组时间。 3. 索引不足之处 建立索引系统要占用大约为表的1.2倍的硬盘和内存空间来保存索引。 更新数据的时候系统必须要有额外的时间来同时对索引进行更新以维持数据和索引的一致性。 4. 索引是否必须 创建索引需要占用数据空间并花费一定时间 遍历索引会减慢数据修改速度 5. 索引结构分类 BTree索引 相对于B-tree的区别1所有数据都出现在叶子节点上2叶子节点形成一个单向链表 在原BTree的基础上增加一个指向相邻叶子节点的链表指针就形成了带有顺序指针的BTree提高区间访问的性能 Hash索引 采用一定的hash算法将键值换算成新的hash值映射到对应的槽位上然后存储在hash表中 高性能底层数据结构是用哈希表实现的, 只有精确匹配索引列的查询才有效, 不支持范围查询只支持memory引擎 如果两个(或多个)键值映射到一个相同的槽位上就产生了hash冲突也称为hash碰撞可以通过链表来解决 特点 只能用于对等比较(,in)不支持范围查询between,,…) 无法利用索引完成排序操作 查询效率高通常只需要检索一次就可以了效率通常高于Btree R-tree索引空间索引主要用于地理空间数据类型只支持MyISAM引擎 Full-text全文索引是一种通过建立倒排索引,快速匹配文档的方式 6.索引分类 主键索引对于表中主键创建的索引默认自动创建有且只有一个 唯一索引避免同一个表中某数据列中的值重复可以有多个 常规索引快速定位特定数据可以有多个 全文索引查找文本中的关键字可以有多个 6. 选择创建索引的数据列 连接中频繁使用的列 定义有主键和外键的列 在指定范围中快速或频繁查询的列 需要按排序顺序快速或频繁检索的列 7.聚合索引和辅助索引的区别 聚合索引将数据存储与索引放到了一块索引结构的叶子节点保存了行数据必须有且只有一个 辅助索引将数据与索引分开存储索引结构的叶子节点关联的是对应的主键(id)可以存多个 8. 创建索引 create [UNIQUE|FULLTEXT] index 索引的名字 on 表名(列名); 创建唯一索引: create unique index 索引名字 on 表名(列名); 9. 删除索引 drop index index_name on table_name; drop index 索引名字 on 表名; 10.sql索引优化 查看sql执行频次show global STATUS like Com_______; 慢查询日志 show variables like ‘slow_query_log’; # 查询是否打开了慢查询开关 # find / -name -type f my.cnf
vi /etc/mysql/my.cnf
# 开启慢查询日志查询开关
slow_qurey_log1
# 设置慢日志时间
long_query_time1systemctl restart mysql; # 重启mysql cd /var/lib/mysql
tail -f xxxslow.log查看 sql耗时 select have_profiling; # 是否支持profile操作
select profiling # profiling # 开关是否已开启
set profiling1; # 开启profiling
show profiles; # 查看执行耗时
show profile for query query_id; # 查着指定query_id的SQL语句各个阶段的耗时情况
show profile cpu for query query_id; # 查看指定query_id的SQL语句CPU的使用情况3.4.3 视图 1.视图定义基于某个查询结果的虚表是从一个或多个表或视图导出的表视图数据的修改也会影响原表的数据 insert update delete 2.视图优点 简化操作使用数据库视图向最终用户和外部应用程序隐藏底层表的复杂性。通过数据库视图只需要使用简单的 SQL 语句不需要编写具有许多连接的复杂语句 安全性 将基表中重要的字段信息/敏感数据可以不通过视图给用户 允许创建只读视图以向特定用户公开只读数据用户只能在只读视图中检索数据但不能对其进行更新 独立性视图可以使应用程序和数据库表在一定程度上独立 3.视图缺点 性能差从数据库视图查询数据速度变慢特别是如果视图是基于其他视图创建的 修改限制 当用户试图修改视图的某些信息时数据库必须把它转化为对基本表的某些信息的修改对于比较复杂的试图,可能是不可修改的 每当更改与视图关联的基本表的结构时也必须更改视图 4.视图语句 创建视图 create view 视图名字 as select 语句; 修改视图 alter view 视图名 在视图中插入一行数据 insert into 视图名字 vulues(值1,值2...); 修改视图数据 update 视图名字 set 列值 where 条件; 删除视图中数据 delete from 视图名字 where 条件; 删除视图 drop view 视图名字; 删除多个视图 drop view 视图名1,视图名2,视图名3; 3.4.4 存储过程 1.存储过程定义 事先经过编译并存储在数据库中的一段sql语句的集合。减少数据在数据库和应用服务器之间的传输提高数据处理的效率 2.存储过程特点 封装、复用 可以接收参数也可以返回参数 减少网络交互效率提升 3.存储过程基本语法 创建 create PROCEDURE 存储过程名称([参数列表])
BEGINsql语句
END;调用
call 存储过程名称([参数]); 查看
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA 数据库名称; -- 查询指定数据库的存储过程及状态信息
SHOW CREATE PROCEDURE 存储过程名称 ; -- 查询某个存储过程的定义
1
2
删除
DROP PROCEDURE [ IF EXISTS ] 存储过程名称 04 计算机网络部分 1. 三次握手四次挥手过程 三次握手 第一次握手客户端发送syn包(syn1seqx)到服务器并进入SYN_SENT状态等待服务器确认 第二次握手服务器收到syn包必须确认客户的SYNackx1同时自己也发送一个SYN包syny即SYNACK包此时服务器进入SYN_RECV状态 第三次握手客户端收到服务器的SYNACK包向服务器发送确认包ACK(acky1)此包发送完毕客户端和服务器进入ESTABLISHED状态完成三次握手。 握手过程中传送的包里不包含数据三次握手完毕后客户端与服务器才正式开始传送数据。理想状态下TCP连接一旦建立在通信双方中的任何一方主动关闭连接之前TCP 连接都将被一直保持下去。 四次挥手:断开一个TCP连接则需要“四次挥手”。 第一次挥手主动关闭方发送一个FIN用来关闭主动方到被动关闭方的数据传送也就是主动关闭方告诉被动关闭方我已经不 会再给你发数据了(当然在fin包之前发送出去的数据如果没有收到对应的ack确认报文主动关闭方依然会重发这些数据)但是此时主动关闭方还可 以接受数据。 第二次挥手被动关闭方收到FIN包后发送一个ACK给对方确认序号为收到序号1与SYN相同一个FIN占用一个序号。 - 第三次挥手被动关闭方发送一个FIN用来关闭被动关闭方到主动关闭方的数据传送也就是告诉主动关闭方我的数据也发送完了不会再给你发数据了。 第四次挥手主动关闭方收到FIN后发送一个ACK给被动关闭方确认序号为收到序号1至此完成四次挥手。 2. OSITCP/IP五层协议的体系结构以及各层协议 OSI分层 7层物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层4层网络接口层、 网际层、运输层、 应用层。 五层协议 5层物理层、数据链路层、网络层、运输层、 应用层。 每层作用 物理层传输二进制比特流 数据链路层负责将上层数据封装成帧 网络层负责路由寻址和广播 广播发送消息和接收消息 *传输层负责建立一个可靠的端到端的连接端到端发送到接收 过程建立、维护、撤销(拆除) 会话层负责建立维护拆除会话为端应用之间提供控制功能(可靠性) 表示层完成对传输数据格式转换格式化发加密接解密发压缩接解压缩 应用层对应用软件提供网络支持 3. cookie、session、token cookie:在客户端存储在客户端用于存储会话信息的 session在服务器端记录用户的请求状态一般默认时间30min session_id会存在cookie中每次请求cookie中所有信息都会传递给服务器服务器通过session_id来识别是否是同一个用户请求不是同一个用户的话就会要求重新登录 token访问权限保存在客户端本地 鉴权访问的接口是否正常是否非法访问绕过前端。 防止跳过页面直接访问接口**token** 授权是否具有访问接口的权限。 唯一全局动态的 。 4. 常用状态码 100系列请求已收到继续处理 200系列:表示成功 200正常服务器正确响应了请求 300系列资源重定向 301:永久重定向请求的网页已永久移动到新位置 3022临时重定向被请求文档已经临时移至别处此文档新的url在location响应头中给出 303浏览器对于POST的响应进行重定向至新的url 307浏览器对于GET的响应重定向至新的url 400系列客户端错误 400错误请求服务器不理解请求的语法。 401未授权如请求参数、方法、格式等 403拒绝访问服务器理解客户的请求但拒绝处理它没有权限 404请求资源不存在 500系列服务器端出错 500服务器内部错误 501尚未实施服务器不具备完成请求的功能 502:服务器网关错误 503服务器由于维护或者负载过重未能应答 504请求超时 5. http请求头和响应头 http请求及其结构 请求信息包含请求行(request) 请求头部header 、空行和请求数据组成 响应及其结构 响应组成状态行、响应头报文、空行和响应正文 6. IP地址的分类 A类地址以0开头 第一个字节范围1~1261.0.0.0 - 126.255.255.255 B类地址以10开头 第一个字节范围128~191128.0.0.0 - 191.255.255.255 C类地址以110开头 第一个字节范围192~223192.0.0.0 - 223.255.255.255 D类地址以1110开头第一个字节范围224~239224.0.0.0 - 239.255.255.255作为多播使用 E类地址保留 以下是留用的内部私有地址 A类 10.0.0.0–10.255.255.255 B类 172.16.0.0–172.31.255.255 C类 192.168.0.0–192.168.255.255 7. 常见一些词汇 ARP:地址解析协议Address Resolution Protocol RARP:反地址解析协议(Reverse Address Resolution Protocol将ip地址转换为物理地址 FTP:文件传输协议File Transfer Protocol HTTP超文本传输协议Hyper Text Transfer Protocol TCP:传输控制协议(Transmission Control Protocol) UDP:用户数据报协议User Datagram Protocol 8. TCP的三次握手过程为什么会采用三次握手若采用二次握手可以吗 建立连接的过程是利用客户服务器模式假设主机A为客户端主机B为服务器端。 1TCP的三次握手过程主机A向B发送连接请求主机B对收到的主机A的报文段进行确认主机A再次对主机B的确认进行确认。 2采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B因而产生错误。失效的连接请求报文段是指主机A发出的连接请求没有收到主机B的确认于是经过一段时间后主机A又重新向主机B发送连接请求且建立成功顺序完成数据传输。考虑这样一种特殊情况主机A第一次发送的连接请求并没有丢失而是因为网络节点导致延迟达到主机B主机B以为是主机A又发起的新连接于是主机B同意连接并向主机A发回确认但是此时主机A根本不会理会主机B就一直在等待主机A发送数据导致主机B的资源浪费。 3采用两次握手不行原因就是上面说的失效的连接请求的特殊情况。 9. 常用四种请求方法 get post put delete . get和post区别 GET - 从指定的资源请求数据。请求的数据会附加在URL之后以?分割URL和传输数据多个参数用连接 POST - 向指定的资源提交要被处理的数据。POST请求会把请求的数据放置在HTTP请求包的包体中 10. http和https区别 HTTPS协议是由SSLHTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全。 HTTPS和HTTP的区别主要如下 https需要到cat申请证书需要交费 http是超文本传输协议信息明文传输https具有安全性的ssl加密传输协议 http和https使用完全不同的连接方式和端口号前者80后者443 http连接简单、无状态https可进行加密传输、身份验证网络协议 11. 请你说一下分布式和集群的概念。 分布式是指将不同的业务分布在不同的地方 集群是指将几台服务器集中在一起实现同一业务。 分布式中的每一个节点都可以做集群而集群并不一定就是分布式的。集群有组织性一台服务器垮了其它的服务器可以顶上来而分布式的每一个节点都完成不同的业务一个节点垮了哪这个业务就不可访问了。 12. 路由寻址(路由) 在路由器中从一个接口接收到数据包根据数据包所携带的目的地址进行定向转发到另一个接口的过程。 13. HTTP协议工作原理 浏览器作为HTTP客户端通过URL向http服务端即web服务器发送所有请求 web服务器根据接收到的请求后向客户端发送响应信息 05 web和app自动化 1. web元素定位七种方式 优先使用的6种 find_element_by_id (返回一个元素) find_element(s)_by_class_name (根据类名获取元素列表) find_element(s)_by_name (根据标签的name属性值返回包含标签对象元素的列表) find_element(s)_by_link_text (根据连接文本获取元素列表) find_element(s)_by_partial_link_text (根据链接包含的文本获取元素列表) find_element(s)_by_tag_name (根据标签名获取元素列表) find_element(s)_by_css_selector 根据css选择器获取 万不得已下使用的两个 find_element(s)_by_css_selector (根据css选择器来获取元素列表) find_element(s)_by_xpath (返回一个包含元素的列表) 2. app元素定位3种方式 by_id by_class_name by_xpath 3. adb常用命令 adb 帮助adb --help 启动adb 服务adb start-server 关闭adb 服务adb kill-server 获取设备号adb devices 获取系统版本adb shell getprop ro.build.version.release 发送文件到手机adb push 电脑端⽂件路径/需要发送的文件,手机端存储的路径 adb push C:\Users\win\Desktop\xx.png /sdcard 从手机拉取文件: adb pull 手机端的路径/拉取文件名 电脑端存储文件路径 adb pull /sdcard/xx.png C:\Users\win\Desktop 查看手机运行日志: adb logcat 进入到手机终端: adb shell 安装app到手机: adb install 路径/xxx.apk 卸载手机app : adb uninstall app 获取app启动包名和启动名(⚠手机需要先打开对应app) Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp 在 Windows 终端运⾏ adb shell dumpsys window w | findstr mCurrent 获取app启动时间: adb shell am start -W 包名/.启动名 查看设备ip地址 adb shell ifconfig wlan0 adb shell netcfg 查看设备cpu信息 adb shell cat /proc/cpuinfo 查看设备内存信息 adb shell cat /proc/meminfo 点亮屏幕 adb shell input keyevent 224 熄灭屏幕 adb shell input keyevent 223 3. 键盘操作常用函数 send_keys(Keys.BACK_SPACE)删除键BackSpace send_keys(Keys.SPACE)空格键(Space) send_keys(Keys.TAB)制表键(Tab) send_keys(Keys.ESCAPE)回退键Esc send_keys(Keys.ENTER)回车键Enter send_keys(Keys.CONTROL,‘a’) 全选CtrlA send_keys(Keys.CONTROL,‘c’)复制CtrlC send_keys(Keys.CONTROL,‘v’) 全选CtrlV send_keys(Keys.CONTROL,‘x’)复制CtrlX 4. 鼠标操作常用函数 context_click() 右击 -- 此方法模拟鼠标右键点击效果 double_click() 双击 -- 此方法模拟双标双击效果 drag_and_drop() 拖动 -- 此方法模拟双标拖动效果 move_to_element() 悬停 -- 此方法模拟鼠标悬停效果 perform() 执行 -- 此方法用来执行以上所有鼠标方法 5. selenium 原理 6. apppium 开源、跨平台的UI自动化测试工具支持多种语言编写的测试脚本 原理 1. test scripts(测试脚本发送一个请求到appium server) 2. appium server接收到请求后进行解析并把请求转发给 bootstrap.jar。 3. jar接收到appium的命令调用UIAutomator命令实现操作 4. 最终结果由bootstrap.jar返回给Appium server。 7. fixture 1 .必须继承unittest.TestCase类setUp、tearDown才是一个Fixture 2. setUp一般做初始化工作比如实例化浏览器、浏览器最大化、隐式等待设置 3. tearDown一般做结束工作比如退出登录、关闭浏览器 4. 如果一个测试类有多个test开头方法则每个方法执行之前都会运行setUp、结束时运行tearDown 06 python语法和高级编程 07数据结构和算法 7.1 概念 1. 几种基本的数据结构链表、栈、队列、树 链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 栈和队列是比较特殊的线性表 栈是只允许在一端插入和删除的表后进先出 队列:先进先出。只允许在头部进行删除操作在尾部进行插入操作 树树型结构是一类非线性数据结构 2. 请回答数组和链表的区别以及优缺点 1.数组 将元素在内存中连续存放由于每个元素占用内存相同可以通过下标迅速访问数组中任何元素。 如果应用需要快速访问数据很少插入和删除元素就应该用数组。 2.链表 链表中的元素在内存中不是顺序存储的而是通过存在元素中的指针联系到一起 如果应用需要经常插入和删除元素就需要用链表。 3. 有哪些排序算法 1.冒泡排序通过与相邻元素的比较和交换来把小的数交换到最前面。时间复杂度为O(n^2)空间复杂度是O(1)。 2. 选择排序在一次排序后把最小的元素放到最前面。选择排序是通过对整体的选择只有在确定了最小数的前提下才进行交换。选择排序的时间复杂度为O(n^2),空间复杂度是O(1)属于不稳定排序. 3. 插入排序通过比较找到合适的位置插入元素来达到排序的目的。注意在插入一个数的时候要保证这个数前面的数已经有序。时间复杂度也是O(n^2)空间复杂度为O(1)。是稳定排序 4. 快速排序:快速排序是比较和交换小数和大数这样一来不仅把小数冒泡到上面同时也把大数沉到下面。一般选取第一个数作为基准数。复杂度是O(nlgn)。空间复杂度是Ologn属于不稳定算法。 4. 堆和栈的区别 堆栈空间分配区别 1、栈操作系统由操作系统自动分配释放存放函数的参数值局部变量的值等。其操作方式类似于数据结构中的栈 2、堆操作系统一般由程序员分配释放若程序员不释放程序结束时可能由OS回收分配方式倒是类似于链表。 堆栈缓存方式区别 1、栈使用的是一级缓存他们通常都是被调用时处于存储空间中调用完毕立即释放 2、堆是存放在二级缓存中生命周期由虚拟机的垃圾回收算法来决定并不是一旦成为孤儿对象就能被回收。所以调用这些对象的速度要相对来得低一些。 堆栈数据结构区别 堆数据结构堆可以被看成是一棵树如堆排序 栈数据结构一种先进后出的数据结构。 5. 请问你知道什么加密算法吗 常见的加密算法分为三类对称加密算法非对称加密算法Hash算法 对称加密指加密和解密使用相同密钥的加密算法 Hash算法它是一种单向算法用户可以通过hash算法对目标信息生成一段特定长度的唯一Hash值但不能通过这个Hash值重新获得目标信息。常见的有MD4、MD5 7.2必考算法题 1. 冒泡算法 num [1, 5, 10, 58, 12, 2]
for i in range(len(num)-1): # 比较n-1轮n为元素个数for j in range(len(num)-1-i): # 剩余两两进行比较的次数if num[j] num[j 1]:num[j 1], num[j] num[j], num[j 1]2. 打印99乘法表 for i in range(1,10):for j in range(1,i1):print({}*{}{}.format(i,j,i*j),end )print()3. 杨辉三角** massage
杨辉三角本质上是二项式(ab)的n次方展开后各项的系数排成的三角形。其性质包括每行的端点数为1 一个数也为1每个数等于它左上方和上方的两数之和。l [[0] * i for i in range(1, 31)]
for i in range(30):for j in range(i 1):if j 0 or i j:l[i][j] 1else:l[i][j] l[i - 1][j - 1] l[i - 1][j]n int(input())
for i in range(n):for j in range(i 1):print({:5d}.format(l[i][j]), end)print()4. 水仙花 massage
求100-999 所有的水仙花数。所谓水仙花数是指一个三位数其各位数字立方和等于该数本身。
例如 153 是一个水仙花数153 1^3 5^3 3^3因此 153 就是一个水仙花数l []
for i in range(100,1000):a i // 100b (i%100) // 10c i % 10if a**3 b**3 c**3 i:l.append(i)
for i in range(len(l)):print(l[i],end )# 输出结果 153 370 371 407 5. 金字塔图案 massage
打印用“*”组成的金字塔图案。
输入描述:
多组输入一个整数2~20表示金字塔边的长度即“*”的数量也表示输出行数。输出描述:
针对每行输入输出用“*”组成的金字塔每个“*”后面有一个空格。while True:try:n int(input())for i in range(n):print( * (n - i-1) * * (i 1))except:break6. 波非那契数列 def fib(lenght):a, b 0, 1n 0while n lenght:yield ba,b b,abn 1
gen fib(9)
for i in gen:print(i,end )7. 序列中整数去重 massage
题目描述
给定一个整数序列把其中的重复的整数去掉并将去重后的序列从小到达排序输出。
输入描述:
第一行输入一个整数n表示序列有n个整数。
第二行输入n个整数每个整数大于等于1小于等于1000整数之间用空格分隔。
输出描述:
去重并且从小到大排列的整数序列整数之间用空格分隔。n int(input())
l list(map(int, input().split()))
new_l sorted(set(l))
for i in new_l:print(i, end )8. 数字直角三角形图案 massage
打印用数字组成的数字三角形图案。
输入描述:
多组输入一个整数3~20表示数字三角形边的长度即数字的数量也表示输出行数。
输出描述:
针对每行输入输出用数字组成的对应长度的数字三角形每个数字后面有一个空格。while True:try:n int(input())for i in range(n):for j in range(1,i1):print(j,end )print()except:break9. 一行代码实现1~100的和 print(sum([i for i in range(1,101)]))10. 反向输出一个字符串 # 法1
s str(input(请输入一个需要排序字符串))
# new_s s[-1::-1]
new_s s[::-1]
print(new_s)# 法2
str list(input(input a string:))
str.reverse()#该方法没有返回值若打印则出现None,但会对列表元素进行反向排序。因此用print(list)来查看排序即可
print(.join(str))总之软件测试是一项非常重要的职业在软件开发生命周期中起着至关重要的作用。2023年软件测试必问必背常见面试题全套教程旨在帮助你了解并掌握软件测试的基础知识和实践技能以便更好地准备面试并最终获得理想的工作机会。 但是光有理论知识是远远不够的。只有通过实践和经验积累才能成为一个优秀的软件测试工程师。因此在学习这些面试题的同时我们也应该注重实践多做项目和案例练习结合自己的经验不断总结和提升。 希望这套教程对你有所帮助祝你在将来的软件测试面试中取得成功