测试/测试开发复习

(考虑做测试,因为太菜了,找了一些测试相关的笔试/面试经验,整理了一下知识点作为复习参考。
分类可能不是很准确(QAQ)

(纯测试的话主要看重测试用例的设计,测试开发就对计算机基础和算法代码这些要求更高QvQ)

测试用例:
  • 登录的测试:用户名/密码输入,验证码输入/获取等
  • 游戏商城的测试、抽卡的测试、副本的测试
  • 收发邮件的测试
  • 版本迭代设计新的测试用例
数据结构
  • 红黑树/AVL树:
    • AVL树是平衡二叉树,任何节点左子树和右子树的深度不超过1
    • 红黑树是不严格的平衡二叉树只要求部分平衡(黑色完美平衡)
    • 红黑树的读取效率略低于AVL,插入和删除效率则更高,维护开销较小,空间开销与AVL类似
    • 内容多是优先选红黑树
  • 链表
  • 散列表,
  • concurrent hash map, hashmap, hashset区别
    • hashmap基于哈希表的map接口实现。储存键值对,一个key对一个value,键不可重复,使用put()添加元素;使用键对象计算hashcode;比较快,因为使用唯一的键获取对象。
    • hashset实现set接口。仅仅储存对象,也就是没有key,只有value,且不可重复,使用add()添加元素;使用成员对象计算hashcode;比map慢。
    • ConcurrentHashMap基于双数组和链表的Map接口的同步实现,key唯一,value可重复,不允许null值和null键;是无序的。由于hashmap是非线程安全的,多线程在使用HashMap的时候,就要用concurrent hash map 来解决同步问题
sql数据库(win默认大小写不敏感)
  • 写sql语句
    • mysql数据表salars中有一个字段是phone,有大量脏数据phone1,phone2,…,phone10000,随机分布在表里,现在需要将这些表清除,使用的mysql语句是什么
      • Alter table salars drop phone;
      • Delete from salars where like ‘phone%’
    • 授权代码
      • Grant insert on mydb.book to a_user
    • 创建表
      • Create table employee(id int, name varchar(40), sex char(4));
    • 增删改查代码
      • ( change column是列的重命名、修改属性)
      • (alter column是用来设置或移除列的默认值)
      • Alter table employee add image blob;(存图片)
      • Alter table employee drop sex;
      • Alter table employee modify name varchar(30);
      • Rename table employee to user;
      • Alter table user character set utf8;
      • Alter table user change column name username vachar(100);
      • Insert into user(id, username, image) value(…)
      • Update user set id = 1(所有id为1)
      • Updateuser set username = ‘ha’, id = 2 where username = ‘…’;
      • Drop table user
    • 数据库如何删除一个表,如何连接两个表
      • 外连接 join(左右全)(不匹配bunull)
      • 内连接(只显示匹配的)
      • 交叉连接(笛卡尔积)
    • 用SQL实现一个函数或储存过程
      • 输入参数为Item_Name, Item_Type,输出Item_ID参数
      • 如果Item_Name和Item_Type的组合在表中已存在,则返回原有Item_ID
      • 如果不存在,在表中插入新的记录,并返回新插入记录的Item_ID
      • Item_ID是唯一的序列编号
      • 对Item_Name的判断不分大小写
      • 需要考虑函数或储存过程被多个Session同时调用的问题
  • 什么是主键/外键
    • 主键:用于标识记录,不能重复/为空;复合主键指复合唯一
    • 外键:用于与其他表建立联系,可重复,可能为空
  • 索引
    • 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
    • 两个行的索引不可一致
    • Create index UserIndex on user (id)
  • sql的数据库类型(关系型)
  • 关系型数据库事务的特性
    • 原子性:事务要不全完成,要不全不完成
    • 一致性:数据库完整性不会被事务破坏,意味着写入的资料必须符合规则
    • 隔离性:允许并发事务对数据读写修改,隔离性防止交叉执行导致的数据不一致
    • 持久性:即时系统故障也不会丢失对数据的更改
  • SQL四个安全性等级
    • 客户机操作系统的安全性
    • SQL 服务端的登录安全性
    • 数据库的使用安全性
    • 数据库对象的使用安全性
  • 四种隔离级别
    • 串行化:避免脏读、不可重复读和幻读
    • 可重复度:避免脏读、不可重复读
    • 读已提交:避免脏读
    • 读未提交:无法保障
测试:
  • 功能会议–测试用例编写–冒烟测试–详细测试–回归测试–checklist检查
  • 冒烟测试:针对每个版本或每次需求变更后,在正式测试前,对产品或系统的一次简单的验证性测试。
    • 详细测试前的环节,快速展开
    • 属于高级别测试,通常站在系统的角度
    • 集成测试版本前,确保测试版顺利集成
    • 形成集成版本时,保障新的更改不破坏完整与稳定
    • 后期缺陷修正,每个都要先冒烟,通过再发布
    • 最好有自动化测试脚本,每次更新后执行脚本验证一下
  • 详细测试
    • 细致每个逻辑资源和配置
    • 尽量模拟多个可能
    • 测试异常情况
    • 测试数据读取网络、存储等
    • 测试新功能影响
  • Checklist
    • 利用记录在上线前再检查一遍
  • 精准测试
    • 一套测试辅助系统,测试分析系统
    • 根据测试用例追踪模块和代码,大型调试器
  • 弱网测试
    • 信号差
    • 高丢包
    • 不同网络切换
    • 断线重连
    • 前后端数据一致检查
      • 可能用到抓包工具如Wirehark和fiddle
  • 性能测试(工具Loadrunner和Jmeter等)
    • CPU
      • 占用
    • 内存
      • 占用
    • FPS(帧率)
    • 耗电
    • 流量
  • 压力测试
    • 服务器cpu、内存
    • TPS(每秒请求响应数,TPS=并发数/响应时间)
      • 并发数
      • 事务响应时间
    • 系统吞吐量(单位时间系统传输数据总量)
    • 事务成功率
  • 兼容测试
  • 安全测试
  • 日志测试
  • 接口测试是什么
    • 接口:外部系统与系统之间以及内部各个子系统之间的交互点
    • 接口分类:程序内部的接口,系统对外的接口
    • 接口测试原理:
      • 模拟前端/客户端向服务器发送/接受数据判断是否正常
    • 接口测试可使用测试工具Jmeter(java)、Postman、Soapui等模拟发出http请求
    • 可以使用python脚本模拟客户端发送http请求
    • 常见的请求有POST和GET类型
  • web端和移动端测试的了解
    • b/s结构,响应时间,cpu,内存
    • c/s结构,响应时间,cpu,内存,流量,电量等
  • 工具测试
  • sdk测试,用户数据、消费、渠道对接测试等
  • 自动化测试工具
    • App Appium
    • Web Selenium
    • JMeter
  • 软件开发/bug生命周期
  • Bug 0致命 1严重 2一般 3无关紧要
操作系统
  • 解释死锁,四个必要条件,如何预防
    • 死锁是因为争夺资源产生的僵持状态,饥饿指一个进程一直得不到资源
    • 通过资源分配图检测
    • 四个
      • 互斥条件:一个资源只被一个进程使用
      • 请求与保持条件:一个进程因为请求资源而阻塞时,对已获得的资源保持不放
      • 不剥夺条件:在使用完之前,不强行剥夺进程已获得的资源
      • 循环等待条件:若干(个数不限)进程之间存在一个循环等待链,链中每个进程已经获得的资源都被下一个进程所请求
    • 只要系统死锁,四个必要条件必然成立,只要上述条件之一不满足就不会发生
    • 合理分配资源,避免永久占据,防止进程在等待中占用资源等
  • 进程
    • 进程是可并发执行的程序在某个数据集合上的一次计算活动,一个可独立运行的程序单位,也是操作系统进行资源分配和调度的基本单位。
    • 资源分配最小单位
    • 有自己独立的地址空间,互相资源独立
    • 将某些进程挂起(suspend),置于磁盘对换区,释放其所占资源,暂时不启用低级调度,起到平滑负载的目的。
    • 开销大
    • 进程组成:
      • 进程控制块(PCB):感知的唯一标志
      • 程序块
      • 核心块
      • 数据块
      • 进程上下文
    • 进程调度(剥夺:不让跑完,非剥夺:让跑完)
      • 先来先到
      • 短时间作业优先
      • 时间片轮换
      • 多级反馈
  • 线程
    • 程序执行最小单位,处理机调度最小单位
    • 每个进程有相应的线程,执行程序就是是执行一系列线程
    • 同进程的线程共享进程地址空间,互相共享进程资源
    • 不能独立执行,要有应用程序提供线程执行控制
    • 开销小
    • sleep让资源,不释放锁,wait不让
  • 并行和并发
    • 并行要有多个处理器,同精确时刻有不同程序执行
    • 并发是时间段内同时进行,(通过cpu调度等让其看起来像)
  • 进程间通信,线程间通信
    • 进程七种IPC
      • 管道:半双工,数据在一个方向流动
        □ 普通管道pipe(单工)流管道半双工
        ® 亲缘关系进程通信(父子、兄弟)
        ® 特殊的文件类型,不属于文件系统,只在内存里
        □ 命名管道(FIFO)
        ® 一种文件类型
        ® 可以在无关进程通信
      • 消息队列message queue
      • 信号量semaphore
      • 共享存储share memory
      • Socket套接字
    • 线程(Java)
      • 等待/通知
      • Join
      • volatile关键字
      • threadLocal
  • 进程&线程
    • 三个状态:就绪(被CPU调度选中下一个执行)、运行、等待(阻塞)
    • 五个状态
      • 开始/新建
      • 就绪
      • 运行(正在占用处理器/资源)
      • 阻塞
      • 结束
  • 多进程
    • 多道技术让cpu变成多个虚拟的cpu
    • 指计算机同时运行多个软件
    • win开进程开销大,而linux开进程开销小(为什么服务器多用linux)
  • 多线程开发
    • 线程是进程的一个最小运行单元,一个进程有多个线程执行就是多线程
    • 能够提升程序的效率
    • 可应用与一些等待的任务上,如文件读取
    • 越多线程耗内存越多,会影响性能,因为要在线程间来回切换(线程是异步的,但这是系统不断来回切换导致的,不是真的同时)
  • 32/64位系统区别
    • 支持的处理器不同
    • 支持的最高内存不同(寻址能力)
    • 与其他硬件的兼容性不同
Linux
  • Linux命令

    • 进程查看 ps -IA所有 -aux详细 | grep + 名字查询具 -ef f查看进程和线程()树状
  • shell是linux的批处理

    • 前缀:#!/bin/sh #!/bin/bash 而bat是 echo off
网络:
  • IP协议 http、https协议
  • http状态码
    • 1 收到,请继续操作
    • 2 成功接收并处理
    • 3 资源被转移,重定向资源,需要进一步操作
    • 4
      • 403拒绝访问
      • 。网页不存在
    • 5 服务器
  • TCP/IP模型分为网络接口层(数据链路+物理),网际层(网络),传输层,应用层
    • 应用层:HTTP、FTP、smtp
    • 传输层:TCP、UDP
    • 网际层:IP、ARP、ICMP、路由协议等
  • OSI模型分:物理,数据链路,网络,传输,会话,表示,应用
  • tcp/ip协议
    • 内容
    • 头文件作用
  • TCP/UDP传输协议
    • 有/无连接
    • 数据流/数据报
  • TCP为什么三次握手四次挥手
    • 三次握手
      • 第一次握手客户端发送syn=j,等待确认
      • 第二次握手服务器收到并确认,发ack=j+1,并且向客户端发syn=k,等待确认
      • 第三次握手客户端收到并确认,发送ack=k+1,完成三次握手
      • (两次握手可能出现死锁)
    • 四次挥手
      • 第一次挥手客户端发出连接释放FIN=1,进入终止等待状态,此时仍然接受服务端数据
      • 服务器收到连接释放报文,发出确认,进入关闭等待状态,等完了后,发送连接释放报文FIN=1,并仍然接受客户端数据
      • 客户端收到确认后,从终止等待进入二阶终止等待状态,
      • 客户端等待并收到连接释放报文后发出确认,过一段时间后关闭
      • 服务端受到确认后关闭
  • TCP如何保障连接可靠性
    • 检验和(和UDP一样),分段反码相加
    • 序列号(每个字节数据编号)
    • 确认应答ack
    • 超时重传
    • 连接管理(三四)
    • 流量控制(根据接收端处理能力调节数据发送速度)
    • 拥塞控制(慢启动、拥塞窗口等)
  • tcp快速重传(不管计时器,三次确认立刻重传)、滑动窗口(多个发送应答,提高效率)
  • SYN攻击
    • DOS攻击:拒绝服务,通过发送大量虚假请求,消耗服务器资源
    • SYN攻击是一种DOS攻击,通过大量半连接请求消耗服务器资源
    • DDOS:多台主机进行攻击
  • 访问URL,URL加载过程,DNS解析
  • 如何读取不同服务器的数据
Python:
  • 怎么学习python
  • 语言特性
    • 简单
    • 高级(语言)
    • 免费开源
    • 解释型,一边编译一边执行
    • 可移植,运行在不同平台上
    • 可拓展
    • 丰富的库
    • 面向对象
    • 可嵌入型
  • 类是一个文件的一段代码,模块是一个文件,包是多个文件
  • 多进程fork创建新
  • ord(a)求ASCII码,chr(ord(a))让ASCII码转回字符
  • From urllib import request page = request.urlopen(url) html = page.read.decode() (内置模块)
  • Import request第三方模块
  • 多线程
    • Import threading
    • T = threading.Thread(target=,arg=)
    • T.start()(thread简单,不能继承其他类)
  • 常见数据结构
    • 列表list
      • List = [1, 2, ‘v’]
      • List.append(a)
      • List.insert(1, a)
      • List.pop()
      • List.remove()
      • List.sort()
      • Del list[1:3] 1到3都删掉
    • 元组tuple
      • Tuple = (1,2,3)
      • Type(Tuple)
    • 字典dict
      • Dict = {}
      • Dict = {‘a’:1}
      • If (‘a’ in DIct)
    • 集合set:
      • Set = set()
      • Set.add(6)
  • == 和 is(一个比值,一个比对象)
  • 用过什么基本库
  • 单例:
    • 保障一个类只有一个实例对象存在(例如配置文件)
    • 使用模块实现
      • Class XX(): def foo(self) : pass xx = XX()
      • From a import xx
    • 使用装饰器实现
      • def XX(): _in = () def _XX(): return _in[] return _XX
      • @XX
      • Class A() :
    • 使用类(多线程下需要加锁)
    • 使用_new_方法,实例化一个对象时先执行new再执行init
  • 如何提高效率
C++:
  • 继承封装和多态是什么
    • 封装把方法集中在一个对象里
    • 继承保留基类的属性
      • 公有继承让基类公有和保护成员被继承,并保留原有状态,私有成员不被访问
      • 私有继承让基类公有和保护成员都不能被访问,子类也不可转换成基类
      • 保护继承让基类公有和保护成员都作为保护成员被继承,只能被派生类或友元访问
    • 同名方法有不同功能
  • 实现STL的map/vector等会用什么底层结构
    • vector底层为数组,支持快速随机访问
    • list底层为链表,快速增删
    • deque双向队列,快速访问并高效插入删除
    • stack栈用list或deque
    • queue用list或deque
    • Priority_queue优先队列用vector
    • set用红黑树,有序,不重复
    • mutiset用红黑树,有序,可重复
    • map用红黑树
    • hashset用hash表
    • hashmap用hash表
  • 虚函数和纯虚函数
    • c++没有抽象类的概念,提高纯虚函数来实现抽象类,存在纯虚函数的类就是抽象类,只能作为父类被继承
    • 纯虚函数被实现后成为虚函数,但如果子类没有实现纯虚函数,那子类也变成抽象类
    • 接口是一种特殊的抽象类
JAVA:
  • 跨平台,比c++执行更慢,所有代码都在类里定义,没有指针,解释型而不是编译型
  • Final 关键字:
    • 修饰类时代表这个类不能被继承
    • 修饰方法时该方法不能被修改/重写
  • 泛型:创建对象/调用方法时才去明确的类型(类型安全,不用强制类型转换)
  • 接口和抽象类的区别
    • 抽象类要被子类继承,接口要被类实现
  • String类的设计是不可变的,final类型,不能被继承,其值也不可变
    • 同样的string指向同样的对象,字符串存在堆内存里,而指针在栈里
      • concat()连接,+连接
      • compareTo()比较
      • charAt(i)取第i字符
      • substring(begin,end=len)子串
    • StringBuffer 可变
  • 增强for循环
    • for(Ele e : arrayname){};
  • Android的远程调用(就是跨进程调用)就是通过IBinder实现的,用于进程间通信
  • 如何实现多线程
    • Handler + thread
      • 主线程包含一个消息队列,存msg和runnable等对象
      • 用Handler向消息队列发送这两种对象并处理
      • 新建Handler对象是会绑定创建它的线程
      • handler会把对象存到消息队列里,并在他们出列时执行他们
    • AsyncTask
    • ThreadPoolExecutor
    • IntentService
算法/代码:
  • 位运算

  • 随机数生成器
    std::random_device rd; //(c++)
    rd()是一个随机数
    来自 http://c.biancheng.net/view/635.html

    import random
    print(random.randint(0,9))
    来自 https://www.runoob.com/python3/python3-random-number.html

  • 排序算法(冒泡和快排各自的优点),哪些是稳定的,哪些是不稳定的(稳定是指相同数字互相顺序不变)(这里只写了时间复杂度,实际上也要考虑空间复杂度)
    在这里插入图片描述

  • 电梯算法(电梯调度算法)

    • 先来先服务FCFS
      • 按照乘坐顺序进行调度
    • 最短寻找楼层时间优先(SSTF)
      • 下一个服务对象是楼层离现在最近的对象
      • 可能把人困在电梯
    • 扫描算法(SCAN)
      • 比SSTF稳定
      • 一直在1楼到顶楼徘徊
      • 非实时
    • LOOK算法
      • 改进的SCAN,当移动方向的前方没有请求时改变方向
    • SATF算法
      • 与SSTF相似,但不是找楼层的时间,而是最短访问时间
  • 实时电梯调度算法

    • 最早截止期优先调度EDF(任意寻找楼层,吞吐率低)
    • SCAN-EDF
      • 先EDF,同时限里SCAN
    • PI
      • 分优先级
    • FD-SCAN
      • 可行截止日期scan,已时限最早的作为scan方向
  • 银行家算法

    • 分配资源前计算安全性
    • 假如满足当前进程资源需求后,属于资源还能满足剩下进程里需求最小那个,这就是安全的,分配资源,否则让她等待
  • 实现斐波那契函数

    • 递归方式
    • f(n) = f(n - 2) + f(n -1), f(1) = 1, f(2) = 1.
  • 判断单链表是否有环

  • Two sum

    • 找出数组中和为目标值的两个元素,不能重复利用同样的元素(如3+3=6)
  • 一个密码,有数字和大小写字母就是强密码,判断是否强

  • dp动态规划,背包问题等

  • 二叉树照层输出

    • DFS/BFS 深度/宽度优先搜索
    • 宽度优先搜索:
    Vector<vector<int>> levelOrder(TreeNode root) 
    				Vector<vector<int>> result);
    				If (root == null ) return result;
    				
    				deque<TreeNode*> queue;
    				queue.push_back(root)
    				Nonull ++;
    				Last_nonull = nonull;
    				
    				While(!queue.Empty()) 
    					vector<int> subList;
    					Int this_null'
    					While(this_null < last_nonull)
    						This_null++;
    						subList.push_back(queue.front()-val)
    						If (queue.front()-left)
    							Push_back(queue.front()-left)
    							Nonull++;
    						If (queue.front()-right)
    							Push_back(queue.front()-right)
    							Nonull++;
    						Nonull--;
    						Queue.pop_front();
    					result[row-1] = subList
    				Return result;
    
  • knn算法

  • 决策树和聚类

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值