全部面试题

Python

Python如何创建虚拟环境?

# 创建文件夹
python -m venv my_venv
# 激活
Linux:
source bin/activate
Windows:
activate.bat

python计算次方?

pow(x, y)
x ** y

super是什么?有什么作用?

super是对父类的引用.
可以提高代码复用性、可维护性.

L = [1, 2, 3, 11, 2, 5, 3, 2, 5, 3] 一行代码得出 [1, 2, 3, 5, 11]

list(set(L))  # set去重

L = [1, 2, 3, 4, 5] L[10:]的结果是?

空列表

L = [1, 2, 3, 5, 6] 如何得出 '12356'?

''.join([str(i) for i in L])  # int不能直接join

计算1-100的和?

from functools import reduceresult = reduce(lambda x, y: x + y, range(1, 101))
print(result)

1-10,对每个数字的平方?

result = map(lambda x:x**2,range(1,11))for n in result:print(n)

{“a”,”ab”,”abc”,”bc”,”cd”}输出含有c字符的元素?

result = filter(lambda x: "c" in x, {"a", "ab", "abc", "bc", "cd"})for n in result:print(n)

Python如何释放内存?

当一个对象的引用计数变为0时,python就会调用它的析构函数。

Python正则中search和match?

match() 只有在0位置匹配成功的话才有返回
search() 扫描整个string查找匹配

求两个列表的交集、差集、并集?

# 交集
list(set(a) & set(b))
# 差集
list(set(a) ^ set(b))
# 并集
list(set(a) | set(b))

Python传参数是传值还是传址?

实际都是传的引用。
如果是不可变对象(比如数字、字符或者元组),相对于传值。
如果是可变对象(比如字典或者列表),相当于传址。

算法

给定数组[5, 3, 2, 6, 1, 4],请实现冒泡排序,从小到大。

a = [5, 3, 2, 6, 1, 4]n = len(a)
for i in range(n - 1):for j in range(n - 1 - i):if a[j] > a[j + 1]:a[j], a[j + 1] = a[j + 1], a[j]

string = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.28?192.0.0.1"
要求:返回一个IP数组,并且按IP最后一位排序返回。
P.S.语言随意,只需要能够正确排序返回接口。(Java、Python、Shell均可)

import res = "192.0.0.1?!289.0.0.1!0.0.0.0!192.163.10.20?192.0.0.1"
ips = re.split(r"\?!|!|\?", s)def lastOne(i):return i.split('.')[-1]ips.sort(key=lastOne)
print(ips)

全排列,是把一堆字符按照一定的顺序排列起来,所有可能的组合。
比如,"123"的全排列为"123"、"132"、"213"、"231"、"312"、"321"。
请用Python实现全排列。

test_list = ['x', 'y', 'z']def permutations(sequence, i):if i == (len(sequence) - 1):print(str(sequence))else:for j in range(i, len(sequence)):sequence[i], sequence[j] = sequence[j], sequence[i]permutations(sequence, i + 1)sequence[i], sequence[j] = sequence[j], sequence[i]permutations(test_list, 0)

给定一个不确定的Json对象,求Json子节点的最大深度。

package test;import net.sf.json.JSONObject;import java.util.Iterator;public class AProblemDiGui {static int count = 0;public static void main(String[] args) {String param = "{\"ext_meta\":{\"id\":4332021940090402,\"uid\":0,\"similarity\":1,\"blockOid\":{\"id\":4332021940090402,\"uid\":0,\"similarity\":\"1239545\",\"blockOid\":null,\"blockTopicMd5\":null},\"blockTopicMd5\":{\"id\":4332021940090402,\"uid\":0,\"similarity\":\"1239545\",\"blockOid\":{\"id\":4332021940090402,\"uid\":0,\"similarity\":\"1239545\",\"blockOid\":null,\"blockTopicMd5\":null},\"blockTopicMd5\":null}}, \"msg\":\"found\",\"ext_meta1\":{\"id\":4332021940090402,\"uid\":0,\"similarity\":\"1239545\",\"blockOid\":null,\"blockTopicMd5\":null}}";System.out.println(getLength(param));}static public int getLength(String temp) {Boolean flag = true;JSONObject jsonObject = JSONObject.fromObject(temp);Iterator iteratorValue = jsonObject.values().iterator();Iterator iteratorKey = jsonObject.keySet().iterator();while (iteratorValue.hasNext()) {String value = iteratorValue.next().toString();System.out.println(iteratorKey.next() + ":" + value);if (value.startsWith("{")) {if (flag) {  //单层只记录一次count++;flag = false;}int tmp = getLength(value);if (tmp > count)count = tmp;}}return count;}
}

算法性能主要受哪些因素影响?

编程语言;数据结构;数据类型;数据规模;运行环境。

两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比。请编程序找出三队赛手的名单。

import itertoolsfor i in itertools.permutations('xyz'):if i[0] != 'x' and i[2] != 'x' and i[2] != 'z':print('a vs %s, b vs %s, c vs %s' % (i[0], i[1], i[2]))

Linux

vim怎么退出?

输入冒号:
q 不保存直接退出 wq 保存后退出 q! 强制退出

linux查看文本最后几行的命令?

tail -f 默认最后10行,有新增会继续显示
tail -n 显示最后n行

tree命令怎么用?

# 显示所有目录和文件
tree
# 只显示2层
tree –L 2
# 过滤
tree -P *.py

Linux压缩包加压和解压命令?

加压
tar -cvf
解压
tar -xvf

查看CPU、内存和磁盘信息?

# cpu
iostat -c
# 磁盘
iostat -d
# 内存
free
free -m  # 以M为单位

查看进程的命令?

top
top -p pid  # 某个进程

find命令的使用?

# 当前目录及其子目录*.c的文件
find . -name "*.c"
-iname 会忽略大小写

修改权限的命令?

sudo chmod 777 某一文件
sudo chmod -R 777 某一目录

Linux任务调度工具cron用过么?

* * * * *
分 时 日 月 星期几
*/X 间隔X
M-N 指定范围
M-N/X 指定范围内间隔X例子:
【每天早上6点】
0 6 * * *
【每两个小时】
0 */2 * * *
【晚上11点到早上8点之间每两个小时,早上八点】
0 23-7/2,8 * * *
【每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点】
0 11 4 * 1-3
【1月1日早上4点】
0 4 1 1 *

数据库

MySQL join、left join、right join区别。

join
只显示完全匹配on条件的数据
等价于 inner join
等价于 where 即多表联合查询
left join
保留左表数据,右表不匹配的为NULL
等价于 left outer join
right join
保留右表数据,左表不匹配的为NULL
等价于 right outer join

mysql分表的原因?

一张表数据量大了以后,会出现性能问题,需要做分表,减小数据库压力,提高性能。

mysql分表的方式?

垂直分表:将部分字段分离出来,设计成分表,根据主表的主键关联。
水平分表:将相同字段表中的记录按照某种Hash算法进行拆分多个分表。

衡量SQL的性能好坏的标准?

执行耗时短
资源开销小
执行计划好(调用&解析次数)

什么时候做读写分离?什么时候做分库分表?

访问量大的做读写分离
数量大的做分库分表

count(*)count(1)count(列名)区别?执行效率上?

执行效果上:
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空执行效率上:
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则count(1)的执行效率优于count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 select count(*)最优

某个表格中有10条一模一样的数据,现在要删掉其中的9条,请你写一下sql语句。

delete * from table_name limit 9

MySQL中char和varchar的区别?

char:定长,范围是0~255,效率高
varchar:不定长,最长是64k,效率偏低延伸:
char和varchar可以有默认值,text不能指定默认值。

数据库连接泄露的含义?

没有正确地关闭Connection、Statement和ResultSet资源,连接得不到释放,可用连接越来越少。

索引的优点与不足?

优点:
提高数据的检索速度;
加快表与表之间的连接;
减少服务器需要扫描的数据量;
唯一性索引可以保证表中数据的唯一性。
缺点:
创建索引需要时间;
索引需要占用物理空间;
修改数据时,索引也需要动态维护。

mysql日期获取?

# 当前时间
select now()
# 格式化,H24小时制,h12小时制
select date_format(now(), '%Y-%m-%d %H:%i:%s')
# 字符串转日期
select str_to_date('2020-04-18 21:42:23', '%Y-%m-%d %H:%i:%s')

主键、外键的作用?

主键:表记录的唯一标识,保证数据的唯一性。
外键:用于与另一张表关联,保证了数据的完整性。

索引的数据结构是什么?

B+树。

网络

http和https的区别?

http是明文传输,https是ssl加密传输,比http更安全。
http默认端口是80,https默认端口是443。
http连接是无状态的,https是需要身份认证的。
https需要到ca申请证书。

如何理解HTTP无状态无连接?

无状态:当客户端发送请求给服务器的时候,服务器并不知道是谁发的。
无连接:每个请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接。延伸:Cookie/Session用来保存状态。Keep-Alive用来保持连接。

TCP/IP五层协议和OSI七层协议?

TCP/IP五层协议:物理层、数据链路层、网络层、传输层、应用层。
OSI七层协议:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

TCP三次握手四次挥手?

三次握手
1.客户端发送SYN信号,表示告诉服务器,我要建立连接。
2.服务器返回ACK=1和SYN=1给客户端,表示我已经接收到了客户端的请求,并接收了请求。
3.客户端收到来自服务端响应后,知道服务端已经接受连接请求,再次发送ACK给服务器,确认服务端的SYN。 四次挥手
1.主动方A发送一个FIN(终止信号)给被动方B,表示要终结主动方A到被动方B的连接。
2.被动方B收到了FIN信号,返回ACK信号给主动方,表示从主动方到被动方的连接关闭了,也就是主动方不能再发送数据给被动方。
3.被动方B在发送完数据后,给主动方A发送一个FIN信号,请求要终结被动方B到主动方A的连接。
4.主动方A收到了FIN信号,返回ACK信号给被动方B,表示从被动方B到主动方A的连接关闭了,也就是被动方不能再发送数据给主动方。

一个完整http请求会经历哪些过程?

浏览器发起请求
解析域名得到ip进行TCP连接
浏览器发送请求数据和请求头信息
服务器应答
服务器返回响应头信息和响应数据
关闭TCP连接
浏览器收到响应数据

HTTPS的原理?

路由器,集线器,交换机的区别?

路由器 用于连接不同网段并且找到网络中数据传输最合适的路径。
集线器 将一些pc机连起来组成一个局域网。
交换机 与集线器相似,区别在于集线器共享带宽,交换机独享带宽。

Internet物理地址和IP地址转换采用什么协议?

ARP (Address Resolution Protocol)

常见协议位于哪一层?

应用层(http协议)
传输层(tcp或udp协议)
网络层(ip协议)
数据链路层(网卡、路由器等)
dns解析

HTTP xxx状态码代表什么?

状态码  说明
1xx     信息,服务器收到请求,需要请求者继续执行操作
2xx     成功,操作被成功接收并处理
3xx     重定向,需要进一步的操作以完成请求
4x      客户端错误,请求包含语法错误或无法完成请求
5xx     服务器错误,服务器在处理请求的过程中发生了错误

get和post请求有什么区别?

get传输数据量小,但是效率更高。
post可以传输更多数据,一般来说是会更安全,不过现在很多抓包的,也不一定安全。
get只支持ASCII字符,post支持标准字符集。

TCP UDP协议区别?

TCP面向连接,UDP是无连接的。
TCP提供可靠的服务,UDP尽最大努力交付,即不保证可靠交付。
UDP具有较好的实时性,工作效率比TCP高。
TCP连接只能是点到点的,UDP支持一对一,一对多,多对一和多对多。
TCP对系统资源要求较多,UDP对系统资源要求较少。

Web开发

浏览器同源策略包括哪几项?

域名 端口 协议

跨域header里需要加什么?

请求header
Origin: http://foo.example响应header
Access-Control-Allow-Origin:上面origin的地址
Access-Control-Allow-Methods:POST,GET
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin,Content-Type,Accept,token,X-Requested-With

URL由哪三部分组成?

协议
主机IP地址(有时也包括端口号)
资源的地址,如目录和文件名等

URL和URI的区别是什么?

URI,Uniform Resource Identifier,统一资源标识符,用来唯一的标识一个资源。
URL,Uniform Resource Locator,统一资源定位器,是URI的子集,用资源定位的方式实现了URI。

Cookie和Session的区别?

Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,可以在 Cookie里面记录一个Session ID,来实现Session跟踪。Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中。

如果客户端的浏览器禁用了Cookie怎么办?

一般这种情况下,会使用一种叫做URL重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如sid=xxxxx这样的参数,服务端据此来识别用户。

自动化测试

自动化测试有哪些评估指标?

测试用例数
执行频率
运行成功率

如何提高selenium脚本的执行速度?

减少操作步骤。
中断页面加载。
等待时间设置合理。
多线程。
代码层面:使用生成器节约内存循环代码优化核心模块用Cython  PyPy多进程、多线程、协程多个if elif条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

你觉得自动化测试最大的缺陷是什么?

维护成本高。

PageFactory设计模式?

PageFactory与PageObject思想大体差不多,只是表现形式不太一样,是通过注解方式来定位元素对象。主要技术点是@FindBy注解。

规划自动化阶段时涉及的要点是什么?

分析自动化范围,哪些做,哪些不做
选择合适的自动化工具/框架
确定测试可交付成果

XPath中使用单斜杠和双斜杠有什么区别?

// 表示的是从根节点搜索。
/ 表示的是从当前节点搜索。

什么是think time?它的作用是什么?

think time是指用户在进行操作时,每个请求之间的间隔时间。
作用是在脚本中加入think time,更加真实的模拟用户操作。

selenium中hidden或display=none的元素是否可以定位到?

不能。

selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

显示等待,driver.implicitly_wait(30)。
用多种不同的方式定位,1种失败自动尝试第2种。

如何去定位页面上动态加载的元素?

触发动态加载元素的事件,直至动态元素出现,进行定位。

如何去定位属性动态变化的元素?

xpath或者css通过同级、父级、子级进行定位。

点击链接以后,selenium是否会自动等待该页面加载完毕?

会的。

如何在定位元素后高亮元素(以调试为目的)?

重置元素属性,给定位的元素加背景、边框。

webdriver页面跳转?

get打开url或click页面链接。

在selenium中如何处理多个弹出窗口?

getWindowHandles();
driver.switchTo().window(ArrayIndex);

如何处理Selenium WebDriver中的警报/弹出窗口?

dismiss()  点击“Cancel”按钮
accept()  点击“Ok”按钮
getText()  返回警告框中显示的文本
sendKeys()  输入到警告框中

WebDriver定位元素方式有哪些?

ID, Name, CSS, XPath, ClassName, TagName, LinkText, PartialLinkText

测试工具

JMeter有几种参数化方式?

User Parameters
CSV Data Set Config
User Defined Variables
Function Helper备注:
1.用户参数,在Pre Precessor中,给多个user定义不同的值。
2.用户自定义变量,在Config中,定义一些初始化变量。

服务测试的难度在于服务会经常依赖一些其他服务,怎么解决?

Mock

JMeter各类组件的用途?

线程组设置运行场景。
采样器模拟用户请求。
前置处理器做环境及数据准备。
后置处理器做响应数据处理。
断言验证测试结果。
监听器收集显示结果数据。
逻辑控制器来控制业务。

性能测试

什么是性能平坦区?什么是性能拐点?

性能平坦区:不断加压,性能没有什么变化。是性能最佳区间。
性能拐点:性能开始急剧下降的点。

性能测试结果分析有哪些指标?

并发数。平均响应时间,吞吐量,吞吐率(TPS/QPS)。CPU,内存,磁盘IO,网络。

性能分析

数据库连接数,Cache命中情况。无死锁。PV(page view ):网站用户访问的网页的数量。UV (unique visitor ):访问某个站点或点击某个网页的不同IP地址的人数。JVM的GC、Heap。(GC曲线图 ygc耗时,无 Full GC)

什么是全链路压测?

基于实际的线上业务场景和真实环境,模拟海量的用户请求和数据对整个业务链进行压力测试。

QPS和TPS区别?

QPS,服务器每秒处理查询次数,是一台服务器每秒能够处理的查询次数。用户发起查询请求到服务器做出响应这算一次,一秒内用户完成了50次查询请求,那此时服务器QPS就是50。
TPS,服务器每秒处理的事务数。在针对单接口的时候TPS == QPS,多接口比如访问 ‘order.html’ 页面可能请求了3次服务器(如调用了css、js、order接口),TPS==1,QPS==3。

狭义并发和广义并发?

狭义并发指同一时间点开始做某件事情。
广义并发指同一时间段正在做某件事情。
理解:
1.压测时,会设置集合点,狭义并发。
2.持续压测一段时间,广义并发。

一个web系统,用户从打开浏览器输入网址页面到显示在浏览器中,响应时间通常可以细分为哪些?

浏览器请求时间
服务器处理时间
服务器响应时间
浏览器渲染时间

SDK性能测试关注点?

内存、CPU、流量、线程、接口耗时。

如果发现性能瓶颈,你怎么分析?

服务器硬件瓶颈
网络瓶颈(对局域网,可以不考虑)
服务器操作系统瓶颈(参数配置)
中间件瓶颈(参数配置,数据库,web服务器等)
应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)

TPS计算公式中的2个T指什么?

一个T是指Transaction,一个T是指RequestTime+ResponseTime。

TPS和QPS的区别?

QPS是TPS的一种。
T是Transaction,Q是Query。

TPS与吞吐量区别?

TPS,每秒通过事务数。
吞吐量,单位时间内系统能处理的请求数量。

什么是负载测试?

负载测试,加大并发,寻找系统性能拐点,并对比线上流量,做容量预估及规划。

分别说说应用、数据库、中间件的可靠性测试?

应用可靠性测试:在应用进程被kill后,能够在5分钟内自动拉起,并逐步恢复原有的业务处理能力。
数据库可靠性测试:例如主数据库出现异常时,备用数据库可以及时的成为主库,保证系统的高可用。
中间件可靠性测试:例如中间件主服务出现异常时,中间件从服务可以及时的成为主服务,保证系统的高可用。

容量规划的目的是什么?

什么时候调整节点
调整多少节点
设定限流
服务降级

异步消费压测怎么做?

往队列发送消息。
等堆积到一定数量后启动消费者服务(压测服务)。
记录消费速率,观察各项资源使用。

性能测试过程中对Redis、数据库、业务服务做哪些监控?

Redis缓存一般监控占用内存值、网络流量。
数据库监控连接数、磁盘空间。
业务服务监控并发数、响应延迟、错误率等。

什么是链路跟踪?

为了方便定位问题,需要能够记录每个用户请求时,微服务内部产生了多少服务调用,及其调用关系。

性能测试流程?

1、需求阶段1.1 提交需求1.2 性能测试方案和计划1.3 性能提测标准
2、准备阶段2.1 环境部署2.2 脚本编写和调试2.3 数据准备
3、执行阶段3.1 工作汇报3.2 压测和监控
4、报告阶段

做性能测试前有哪些准备工作?

压力机检查,硬件配置,负载均衡。
数据库检查,数据库连接,表空间,表数据量。
应用检查,参数配置,比如jvm,日志级别,节点是否正常,最大连接数等。
了解系统架构,了解用户使用场景,数据情况。
确认测试目标,性能指标。

1台客户端有300个客户与300个客户端有300个客户对服务器施压,有什么区别?

1台客户端有300个客户,是对服务器的持续施压,每次只有单个客户的流量。
300台客户端有300个客户,是对服务器的并发施压,同时有300个客户的流量。

压测中TPS上不去,那么你怎么分析这个问题?

网络带宽
连接池
垃圾回收
数据库配置
通信连接机制
硬件资源
压力机
压测脚本
业务逻辑
系统架构

移动端

android怎么抓取闪退日志的?

adb logcat -v time > logcat.log
抓取日志到当前路径下logcat.log文件

App应用启动和使用过程中有哪些测试点?

启动应用,预加载应用,重启应用,静置应用,进入页面,来回滑动页面。

用户体感时长有哪些?

渲染时长、可交互时长、可流畅交互时长。

0点后会发生什么?0点用户的真实体验如何?

氛围能否正确切换;隐藏的价格是否会出现;定时的模块能否透出。
在各种大图片,会场,动画,动效,游戏中徜徉的用户,内存还好吗?手机滚烫吗?会崩溃吗?

移动应用在升级安装时候应该考虑的场景?

APP有新版本时,打开APP是否有更新提示。
当版本为非强制升级版时,用户可以取消更新,老版本能正常使用。用户在下次启动app时,仍能出现更新提示。
当版本为强制升级版时,当给出强制更新后用户没有做更新时,退出APP。下次启动app时,仍出现强制升级提示。
不删除APP直接更新,检查是否能正常更新,更新后能否正常工作。
删除老的APP,重新下载APP,能不能正常工作。
检查更新后的APP和新安装的APP提供的功能一样。
检查在线跨版本升级能否成功,版本过老是否提示用户重装。
更新成功后,用户数据有没有丢失,各个配置项是否还原。

应用的闪退通常是什么原因造成的?

缓存垃圾过多
内存不足
版本兼容问题

移动应用的灰度是怎么做的?

先对部分用户推送升级。
一般选取Android作为灰度平台,appstore不支持灰度。
做好数据打点。
做好版本控制。
灰度回收能力。

你是如何做App应用的兼容性测试的?

各个机型
各个系统、各个系统版本
手机、平板
云测平台
云测服务

如何判断 Android 手机上是否安装了某个应用包?

packageManager.getInstalledPackages(0);  // 获取所有已安装程序

UI自动化用例中如何切换Android原生页面和H5页面?

driver.switch_to.context()

移动端稳定性测试方法?

单线程
多线程
前台/后台频繁调用
持续批量压力测试
随机接口并发组合
接口异常数据注入

adb命令?

adb devices  查看目前连接电脑的Android设备
adb reboot  重启手机
adb uninstall com.example.myapp  卸载手机已安装的应用
adb install gen.apk  安装应用
adb pull /sdcard/gen.apk  将手机文件“/sdcard/gen.apk”拉到电脑,存放位置在adb工具目录下
adb push gen.apk /sdcard/ 将adb工具目录下电脑文件“gen.apk”推到手机,存放位置sdcard根目录下
adb shell cat /proc/cpuinfo  获取CPU型号等信息
adb shell screencap /sdcard/screen.png  屏幕截图
adb shell screenrecord /sdcard/demo.mp4  录制屏幕

App测试和Web测试有什么区别?

性能测试,App测试中还需要考虑耗电量测试。
兼容性测试,WEB端是兼容浏览器,App端兼容的是手机设备。
安装测试,App测试是存在客户端层面的安装测试。
App测试有一些手机设备的专项测试。如交叉事件测试,操作类型测试,网络测试(弱网测试,网络切换)。
如果APP测试修改了服务器端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。
升级测试,升级测试的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。延伸:
交叉事件测试,就是在操作某个软件的时候,来电话、来短信、电量不足提示等外部事件。
操作类型测试,如横屏测试、手势测试。
网络测试,包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。

冷热启动的区别?

冷启动:在个人电脑中,冷启动是切断电源后重新启动。App类似,就是完全退出(不在后台运行)后重启启动。
热启动:非冷启动情况都可以称为热启动。热启动比冷启动多了一个触发点,那就是在后台启动App,比如双击苹果的HOME键,进行App的热启动。同时热启动通常会有一个计时器,特别是一些理财和银行的类的App会做此处理,当你间隔一段时间触发了热启动后,会让你再次登录(通过密码/手势/指纹)。也有比如网易新闻客户端这样的,当你间隔一段时间后触发热启动,会弹出广告页。

用例设计

需求测试需要考虑哪些方面?

契合需求方原始需求?
描述准确无歧义?
没有过度设计or设计缺失?
最优设计?
及时维护变更?

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

针对多个输入的组合,用尽量少的用例覆盖输入的两两组合。
确定有哪些因子。
每个因子有几种输入。
选择合适的正交表。

说下等价类划分设计测试用例的步骤?

先划分有效等价类和无效等价类
设计测试用例,尽可能多的覆盖有效等价类,直到覆盖完全
对于每个无效等价类,分别设计一条测试用例覆盖

公司内一直在使用的测试系统(B/S架构)突然不能访问了,需要你进行排查并恢复,说出你的检查方法?

1 本地网络连接
2 本地网络信号强弱
3 本地防火墙
4 本地硬件资源占用影响到请求
5 网络运营商系统控制(费用到期)
6 网络端口,IP冲突
7 网络交换机,路由器
8 应用服务器、数据库服务器

说一下parewise算法?

由于笛卡尔积的结果太多,随机测试的风险又比较高,据统计,大多数的bug都是两两组合的情况下产生的,于是parewise是综合来看,性价比比较高的一种。它是把所有参数做笛卡尔积,然后两两分组,对于一条用例,如果这条用例的两两分组的结果,都在其他用例中出现,且位置相同,那么这条用例就可以删除。按这个方法对每条用例进行过滤,得出精简后的用例。

测试用例设计方法都有哪些?

黑盒有等价类、边界值、因果图、状态图、场景法和错误猜测。
白盒方法有静态分析和动态分析。延伸:
静态分析,不执行程序。静态结构分析法、代码检查法、静态质量度量法 。
动态分析。基本路径测试、逻辑覆盖(语句覆盖、判断覆盖、条件覆盖、判断-条件覆盖、条件组合覆盖、路径覆盖)、域测试、符号测试。

web页面显示为空白页,怎么定位?

F12,看页面源码、页面资源加载和后端返回数据。
检查网络。

测试流程

敏捷迭代中的两个清单三个角色四个仪式分别是哪些?

两个清单:Product Backlog, Sprint Backlog。
三个角色:Product Owner, Scrum Master,Team。
四个仪式:迭代计划会议、每日站会、迭代评审会、迭代回顾会。

项目/研发/测试流程是什么样的?

敏捷流程:迭代计划会议,迭代开始,迭代开发测试,迭代回归,迭代评审,迭代回顾,迭代结束。
UserStory流程:分析,设计,开发,测试。
测试流程:需求评审,用例编写,用例评审,提测,跑单元测试、接口自动化、安全扫描、代码规范、codereview,ci测试,灰度回归,上线,跟日志。

什么时候可以结束测试了?

需求覆盖率100%,测试用例执行率100%,Bug修复率接近100%,Bug数逐渐下降并趋于平缓。如果有遗留Bug,需要得到项目经理和产品经理确认。

如何做好测试计划?

明确测试目标,分析测试范围,梳理测试重点和先后顺序。
选择测试类型和测试方法。
制定测试时间,分配测试资源。
评估测试风险。

如何处理线上事故?

处理流程:响应、评估、定级、定责、公示、申诉。
评估影响:业务范围、用户数、投诉、经济损失。
故障分析报告:故障等级、责任团队/责任人、故障时间、影响时长、故障描述、影响功能/业务范围、事故原因、故障处理过程、改进措施、报告人。

环境运维

缺少测试数据,有哪些办法解决?

代码中伪造
直接使用部分线上数据接口
线上数据同步
随机数据生成
线上请求在测试环境回放
测试人员手动塞数据
写工具进行自动化构造
Mock(App端,服务端)

持续集成是什么?持续交付是什么?持续部署是什么?

持续集成(CI)是在源代码变更后自动检测、拉取、构建和进行单元测试的过程。
持续交付(CD)通常是指整个流程链,它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本,基本上没有任何人为干预。
持续部署(CD)是指能够自动提供持续交付管道中发布版本给最终用户使用。根据用户的安装方式,可能是在云环境中自动部署、app升级、更新网站或只更新可用版本列表。

如何准备测试数据?如何防止数据污染?

生产数据备份、数据隔离、测试数据落入影子库、挡板、mock都可以。

分别说说网络拓扑结构图和应用系统架构?

网络拓扑结构图,主要是用来说明如何把网络中的业务服务器、数据库服务器、中间件服务器、防火墙、路由器、交换机等设备连接起来。
应用系统架构主要用来描述系统的各个服务之间的逻辑交互,例如redis缓存、mysql数据库、数据路由、中间件、主备服务器等等之间的关系。

了解蓝绿发布、灰度发布、滚动发布么?

蓝绿发布
项目逻辑上分为AB组,在项目系统时,首先把A组从负载均衡中摘除,进行新版本的部署。B组仍然继续提供服务。当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署。A组重新提供服务。最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已经升级完成,并且都对外提供服务。
蓝绿发布需要运行两个集群、两倍的实例数。灰度发布
只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上面来。
部署过程:(LB ==  Load Balance)
从LB摘掉灰度服务器,升级成功后再加入LB;
少量用户流量到新版本;
如果灰度服务器测试成功,升级剩余服务器。滚动发布
每次只升级一个或多个服务,升级完成后加入生产环境,不断执行这个过程,直到集群中的全部旧版本升级新版本。比较
蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。
灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本。
滚动发布:按批次停止老版本实例,启动新版本实例。K8S现成方案。

ELK是什么?

Elasticsearch:搜索引擎,同时也是日志的存储。
Logstash:日志采集器,它接收日志输入,对日志进行一些预处理,然后输出到Elasticsearch。
Kibana:UI组件,通过Elasticsearch的API查找数据并展示给用户。

微服务中网关、熔断、降级、限流?

微服务的调用可能出现混乱,需要一个把关的东西,也就是网关。在调用者和被调用者中间加一层网关,每次调用时进行权限校验。
当多次访问一个服务失败时,应熔断,标记该服务已停止工作,直接返回错误。偶尔发送健康检查。直至该服务恢复正常后再重新建立连接。
当下游服务停止工作后,如果该服务并非核心业务,则上游服务应该降级,砍掉对下游服务的调用,以保证核心业务不中断。
一个服务挂掉后,上游服务或者用户一般会习惯性地重试访问。这导致一旦服务恢复正常,很可能因为瞬间网络流量过大又立刻挂掉,因此服务需要能够自我保护——限流。

Docker常用命令?

docker pull 拉取或者更新指定镜像
docker push 将镜像推送至远程仓库
docker rm 删除容器
docker rmi 删除镜像
docker images 列出所有镜像
docker ps 列出所有容器

Docker容器有几种状态?

四种状态:运行、已暂停、重新启动、已退出。

接口测试

你平常做接口测试的过程中发现过哪些bug?

接口返回状态码不对,404,502
该做的校验没有做,比如支付金额可以传负数
通过parewise算法跑参数不同两两组合,接口报错
敏感数据明文传输,不安全
接口测试也涉及到业务测试,也会有业务bug,数据bug

POST提交数据有哪几种方式?

application/json
application/x-www-form-urlencoded
multipart/form-data、
text/xml

接口安全从哪些方面考虑?

身份认证,篡改他人数据。
参数加密。
后端对参数加校验。

单元测试

说说代码覆盖率的好处?

形成质量指标。作为版本发布的前置要求
分析测试死角。多个测试用例都覆盖不到的代码
找到历史废弃代码。收集方法覆盖率,为废弃代码判断提供依据
度量自动化用例。为自动化用例提供覆盖率统计情况
帮助代码优化。分析热区代码,为优化提供支撑
精准回归。构建代码调用关系,自动选择用例

代码覆盖率过程简述?

代码,插桩,编译,插桩后代码,运行,得到覆盖率数据。

单元测试的AIR原则和BCDE原则?

Automatic(自动化) 单元测试应该是全自动执行的,并且非交互式的。
Independent(独立性)保持单元测试的独立性。
Repeatable(可重复)单元测试是可以重复执行的,不能受到外界环境的影响。Border:边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。
Correct:正确的输入,并得到预期的结果。
Design:与设计文档相结合,来编写单元测试。
Error:强制错误信息输入(如:非法数据、异常流程、非业务允许输入等),并得到预期的结果。

Java代码覆盖率工具原理?

主流代码覆盖率工具都采用字节码插桩模式,通过钩子的方式来记录代码执行轨迹信息。其中字节码插桩又分为两种模式On-The-Fly和Offine。
On-The-Fly模式优点在于无需修改源代码,可以在系统不停机的情况下,实时收集代码覆盖率信息。
On-the-fly方式无须入侵应用启动脚本,只需在JVM中通过-javaagent参数指定jar文件启动Instrumentation的代理程序,代理程序在通过Class Loader装载一个class前判断是否需要注入class文件,将统计代码插入class,测试覆盖率分析就可以在JVM执行测试的过程中完成。

测试理论

分别说说黑盒测试和白盒测试的优缺点?

黑盒测试
优点:
不需要考虑内部逻辑,相对简单
能从用户角度出发,贴近实际操作
缺点:
代码覆盖率较低白盒测试
优点:
提供代码测试的覆盖率
缩小测试用例范围,精简用例
缺点:
测试要求比较高,投入会比较大

微服务架构,有哪些层次的测试?

微服务架构下,测试分为三个层次:
1. 端到端测试:覆盖整个系统,一般在用户界面机型测试。
2. 服务测试:针对服务接口进行测试。
3. 单元测试:针对代码单元进行测试。

什么是软件测试?目的是什么?

软件测试是为了发现bug而执行程序的过程。假设程序是有bug的,测试是找bug的过程,质量是测试保障的结果。
软件测试的目的是通过找bug来保障质量。

质量6个特性27个子特性?

功能性适合性、准确性、互操作性、保密安全性、功能性的依从性
可靠性成熟性、容错性、易恢复性、可靠性的依从性
易用性易理解性、易学性、易操作性、吸引性、易用性的依从性
效率性时间特性、资源利用性、效率依从性
软件维护性易分析性、易改变性、稳定性、易测试性、维护性的依从性
软件可移植性适应性、易安装性、共存性、易替换性、可移植性的依从性

聊聊SQA?

SQA Software Quality Assurance 软件质量保证,是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被项目所采用,以保证软件的质量。
SQA主要的工作活动包括需求文档评审、代码控制、代码评审、变更管理、配置管理、版本管理和软件测试。

软件测试类型有哪些?

功能测试,UI测试,接口测试,性能测试,安全测试,可靠性测试,负载测试,压力测试,容量测试,恢复测试,兼容性测试,文档测试,配置测试,易用性测试,探索性测试。
黑盒测试、白盒测试。
单元测试、集成测试、系统测试、验收测试。
冒烟测试、回归测试。
静态测试、动态测试。
α测试、β测试。
数据和数据库完整性测试。

一条Bug记录包括?

编号、类型、严重级别、优先级、环境、重现步骤、预期结果、实际结果、状态。

Bug生命周期?

新建 待确认 确认中/不用修复 修复中/暂不修复 测试中/测试不通过变为确认中 关闭

配置测试和兼容性测试区别?

配置测试的的侧重点在于软件的软硬件配置。
兼容性测试的侧重点在于不同软硬件环境之间的兼容性。
侧重点不同,但又是相辅相成的。

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

更改不同配置,进行比较。
如果都有问题,就是普通问题。
如果一些配置有问题一些配置没问题,就是配置问题。

背后的故事

2020年6月换工作,当时觉得毕业以来面试题都准备不好,遂网上搜罗了几百道面试题,共三万多字,没怎么整理,线性存放在文档里。2021年3月算是疫情之后真正的第一波求职高峰,正儿八经的金三银四。虽然我没有加入这个行列,但是关注公众号的一些小伙伴正在求职当中。借这个机会,把这些面试题按分类整理了一下,同步到电子书中,共160道题,分为17类,21339字。这么精准的数字,用Python脚本算出来的:

questions = 0
words = 0
file_list = os.listdir(interview_dir)
for item in file_list:_, suffix = os.path.splitext(item)if suffix == ".md":file_path = os.path.join(interview_dir, item)with open(file_path, encoding="utf8") as f:for line in f:if line.startswith("**"):questions += 1words += len(line.strip())print(f"questions: {questions}")
print(f"words: {words}")

希望能助大家一臂之力!我也是个苦逼的打工人,目前还没进过大厂,只面过美团和腾讯,一轮流,邀约都挺突然,投简历一个月后视频面试,完全没有准备就去面了。引以为戒。面试需要多准备,刷刷题,但是不要咬文嚼字去背题,尽量理解用自己的话表达出来。我开场白一般很短,在面试时有两三次说完了都被问:“啊?完了?”我自己做了面试官以后,发现开场白话多一点还是会适当加分的,不妨试一下。目前整理的这些题目并没有尽善尽美,若有错误,还请指正,我会努力纠正,优化它们的。更多面试题请持续跟踪在线电子书:

https://dongfanger.gitee.io/blog/

霍师傅,嘛时候一键三连呀,就在今天,就在今天~

参考资料:

https://www.nowcoder.com/

http://www.mianshigee.com/

测试开发面试题160道17类21339字相关推荐

  1. 初级测试开发面试题_初级开发人员在编写单元测试时常犯的错误

    初级测试开发面试题 自从我编写第一个单元测试以来已经有10年了. 从那时起,我不记得我已经编写了成千上万的单元测试. 老实说,我在源代码和测试代码之间没有任何区别. 对我来说是同一回事. 测试代码是源 ...

  2. 金九银十面试怒拿6个offer——测试开发面试题整理

    金九银十面试怒拿6个offer--测试开发面试题整理 1.软件测试的流程是什么? 2.测试用例主要有哪些元素? 3.软件测试有什么策略和阶段? 4.黑盒测试和白盒测试是什么?二者有什么区别? 5.软件 ...

  3. 吊打面试官系列之:常见测试开发面试题汇总,在面试的路上,总要先下手为强。

    测试开发面试题汇总 1.引言 2.热身题 3.理论基础 4.管理技能 5.服务端 7.移动APP 7.1 理论 7.2 实践 8.自动化测试 9.工具使用 10.算法 11.SQL 12.Linux ...

  4. 100道经典测试开发面试题,从基础到进阶(1)

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

  5. 从基础到进阶,100道测试开发面试题,进大厂涨薪必备

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

  6. Android开发面试题 71道经典题目

    注:本文来自"安卓巴士" Android面试题 1.        下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存   B. 内存回收程 ...

  7. 测试开发面试题(1)

    1.给你一个网站,你如何测试? 首先,查找需求说明.网站设计等相关文档,分析测试需求:制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试.界面测试.性能测试. 数据库测试.安全性测试 ...

  8. 月薪1.5w,经常面试的测试开发面试题

    1.你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案. 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明.设计文档等,确认实 ...

  9. 【面试题】测试工程师/自动化测试/测试开发面试题整理

    [自己做个笔记,大家有需要的可以看看,有问题欢迎指出] 文章目录 基础面试题 1.设计用例的方法.依据有哪些 2.软件的生命周期 3.测试流程 4.bug生命周期 5.你在测试中发现了一个bug,但是 ...

  10. 九月刚入职字节跳动的测试开发面试题,附答案

    朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给小伙伴们,面试&入职的经验! 大概是在7月中的时候他告诉我投递了简历,9月的时候经过了3轮面 ...

最新文章

  1. 深度神经网络中的归一化技术
  2. Java的知识点24——多线程技术理论——程序、进程、线程
  3. opencv setTo()
  4. 非常有用的User case用例描述模板
  5. win linux 装系统 通过 u盘
  6. 网络工程:1.2 CISCO 路由设备登录命令
  7. SQL Server 开发指南(经典教程)
  8. ApacheCN 深度学习译文集 20210125 更新
  9. mysql数据库横向转纵向_MariaDB Spider:实现MySQL横纵向扩展的小能手
  10. 神调侃!程序员必学推荐系统,我比女朋友更了解你!
  11. springcloud之eureka客户端的注册
  12. Codeforces 1071C Triple Flips 构造
  13. Bugku杂项 wp1
  14. 深入理解Pytorch负对数似然函数(torch.nn.NLLLoss)和交叉熵损失函数(torch.nn.CrossEntropyLoss)
  15. OSChina 周五乱弹 ——妹子喜欢我的幻觉封印怎么破除
  16. 黑苹果通过手机usb共享网络上网
  17. 7的倍数和末尾含7的数
  18. 鸿蒙系统名字来历,鸿蒙系统名字含义_华为鸿蒙操作系统自己研发吗
  19. 专访星环CEO孙元浩:成国产基础软件第一股 解决卡脖子工程
  20. 900页文档比对只需5分钟?鸿翼InWise文档比对,以人工智能撬动办公效率杠杆

热门文章

  1. YARN 工作流程详解
  2. css如何对上边框加阴影,CSS怎么添加阴影边框?
  3. LaTex 在线编辑编译,生成PDF —— Overleaf
  4. EXCEL无法插入公式
  5. 网易企业邮箱:授权码登录
  6. 【ORACLE】关于多态表函数PTF(Polymorphic Table Functions)的使用
  7. html5霓虹效果代码,HTML5 canvas蜂巢式彩色霓虹背景效果
  8. 关于能力素质模型建模
  9. [心得]如何系统自学经济学
  10. html的url中写什么意思,html中url指的是什么意思