记录一下测试实习生的面试题,方便查阅

网易2017 实习生笔试题

https://www.cnblogs.com/zoe-mine/p/6759664.html

http使用面向连接的TCP作为传输层协议。

系统测试类型https://zhidao.baidu.com/question/652763639355316365.html

软件测试中桩模块与驱动模块的概念与区别(转载),打桩

https://www.cnblogs.com/gdf456/p/10073222.html

如何进行测试需求分析:从接收需求到用例设计

http://www.ltesting.net/ceshi/ceshijishu/csyl/2019/0617/208666.html

C#单元测试小例子

https://www.cnblogs.com/adamgq/p/8419395.html

排序算法

  以下是对

https://www.cnblogs.com/manshufeier/p/9364178.html

的总结

内排序
分类 排序法 最差时间分析 平均时间复杂度 空间复杂度 稳定性
插入排序 直接插入排序 O(n^2) O(n^2) O(1) 稳定
希尔排序 O(1) O(1) O(1) 不稳定
交换排序 冒泡排序 O(n^2)​​​​​​​ O(n^2)​​​​​​​ O(1) 稳定
快速排序 O(n^2) O(n*\log_{2}n) O(\log_{2}n)~O(n) 不稳定
选择排序 简单选择排序 O(n^2) O(n^2) O(1) 稳定
堆排序 O(n*\log_{2}n) O(n*\log_{2}n) ​​​​​​​O(1)O(1) 不稳定
归并排序 2路归并排序 O(n*\log_{2}n) O(n*\log_{2}n) O(n+\log_{2}n) 稳定

摘要:内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。在数据结构里表示复杂度\log就是\log_{2}

外排序:

外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要在内外存之间多次交换数据才能进行。

1、多路平衡归并排序 

2、置换-选择排序 

3、最佳归并树形排序

按照算法的复杂度分为两大类:

1.简单算法:冒泡排序、简单选择排序、直接插入排序

2.改进算法:希尔排序、堆排序 、归并排序、快速排序

TCP的三次握手和四次挥手

SYN:代表请求创建连接,所以在三次握手中前两次要SYN=1,表示这两次用于建立连接,至于第三次什么用,在疑问三里解答。

FIN:表示请求关闭连接,在四次分手时,我们发现FIN发了两遍。这是因为TCP的连接是双向的,所以一次FIN只能关闭一个方向。

ACK:代表确认接受,从上面可以发现,不管是三次握手还是四次分手,在回应的时候都会加上ACK=1,表示消息接收到了,并且在建立连接以后的发送数据时,都需加上ACK=1,来表示数据接收成功。

seq:序列号,什么意思呢?当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。

初始序列号是随机生成的,这样不一样的数据拆包解包就不会连接错了。(例如:两个数据都被拆成1,2,3和一个数据是1,2,3一个是101,102,103,很明显后者不会连接错误)

ack:这个代表下一个数据包的编号,这也就是为什么第二请求时,ack是seq+1,

记录一下测试实习生的面试题,方便查阅_第1张图片

在创建连接时,

1.客户端首先要SYN=1,表示要创建连接,

2.服务端接收到后,要告诉客户端:我接受到了!所以加个ACK=1,就变成了ACK=1,SYN=1

3.理论上这时就创建连接成功了,但是要防止一个意外(见疑问三),所以客户端要再发一个消息给服务端确认一下,这时只需要ACK=1就行了。

三次握手完成!

记录一下测试实习生的面试题,方便查阅_第2张图片

在四次分手时,

1.首先客户端请求关闭客户端到服务端方向的连接,这时客户端就要发送一个FIN=1,表示要关闭一个方向的连接(见上面四次分手的图)

2.服务端接收到后是需要确认一下的,所以返回了一个ACK=1

3.这时只关闭了一个方向,另一个方向也需要关闭,所以服务端也向客户端发了一个FIN=1 ACK=1

4.客户端接收到后发送ACK=1,表示接受成功

四次分手完成!

我为什么没有在上面的过程中,加入seq和ack呢?就如我对这两个关键字的解释的一样,这两个是数据拆分和组装必备元素,所以所有的请求都需要这两个元素,只要明白了作用,就可以自己举一反三。

关于握手和分手,主要还是SYN,FIN,ACK的变化,这才是重点!

 

疑问二,每次发送请求时为什么ack要+1

关于seq和ack关键字的解释中已经说明了。

疑问三,为什么需要三次握手

下面解释明明两次就可以建立连接的为什么还要加第三次的确认。

如果发送两次就可以建立连接话,那么只要客户端发送一个连接请求,服务端接收到并发送了确认,就会建立一个连接。

可能出现的问题:如果一个连接请求在网络中跑的慢,超时了,这时客户端会从发请求,但是这个跑的慢的请求最后还是跑到了,然后服务端就接收了两个连接请求,然后全部回应就会创建两个连接,浪费资源!

如果加了第三次客户端确认,客户端在接受到一个服务端连接确认请求后,后面再接收到的连接确认请求就可以抛弃不管了。

疑问四,为什么需要四次分手

TCP是双向的,所以需要在两个方向分别关闭,每个方向的关闭又需要请求和确认,所以一共就4次。

你能接收加班吗?

首先表明自己会争取做到不加班,

但是如果项目非常赶情况下,还是愿意和团队一起加班的。

假设你发现一个bug,但开发那边说不是bug,你会如何处理?

1、首先明确开发说不是bug的理由。

2、如果是需求变更, 那就找产品经理确认是否是需求变更。

3、如果开发说测试环境问题, 让他说明清楚测试环境问题是什么,按照他说的验证一遍, 如果确实如他所说, 关闭bug,但是不是他说的那样,继续激活bug给开发解决,确保产品质量。

4、如果开发说用户不存在这种使用场景, 但是我们不认可他说的,把这个bug 知会到测试经理,让测试经理去判定。

问薪资要求

我希望薪资可以达到3200,据我了解,贵司这个岗位薪资范围是150-200每天 ,而结合岗位职责及任职要求,我对自己也进行了相应评估,也愿意接受贵司的下一步考核。

三个数取最小值

int Minimum(int num1,int num2,int num3)
{
    int min = (num1 < num2) ? num1 : num2;
    min = (min < num3) ? min : num3;

    return min;
}

测试一个一次性杯你能想到多少个测试点

测试项目:一次性水杯

需求测试:查看杯子使用说明书
界面测试:查看杯子外观
功能度:用水杯装水看漏不漏;水能不能被喝到
安全性:杯子有没有毒或细菌
抗破坏性:杯子从不同高度落下的损坏程度
可移植性:杯子再不同的地方、温度等环境下是否都可以正常使用
兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等
易用性:杯子是否烫手、是否有防滑措施、是否方便饮用
用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述
疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等
压力测试:用根针并在针上面不断加重量,看压强多大时会穿透
跌落测试:杯子加包装(有填充物),在多高的情况摔下不破损
震动测试:杯子加包装(有填充物),六面震动,检查产品是否能应对恶劣的铁路\公路\航空运输
测试数据:测试数据具体编写此处略(最讨厌写测试数据了)。其中应用到:场景法、等价类划分法、因果图法、错误推测法、边界值法等方法
期望输出:该期望输出需查阅国标、行标以及使用用户的需求
说明书测试:检查说明书书写准确性

使用了分治思想的排序算法

堆排序

 思想:将待排序序列构造成一个大顶堆,然后再进行排序,每次交换较大值都需要重新构造大顶堆

import java.util.Arrays;

public class HeapSort {
	
	public static void main(String[] args) {
		int[] arr = new int[] {9,6,8,7,0,1,10,4,2};
		heapSort(arr);
		System.out.println(Arrays.toString(arr));
	}
	
	public static void heapSort(int[] arr) {
		//开始位置是最后一个非叶子节点,即最后一个节点的父节点
		int start = (arr.length-1)/2;
		//调整为大顶堆
		for(int i=start;i>=0;i--) {
			maxHeap(arr, arr.length, i);
		}
		//先把数组中的第0个和堆中的最后一个数交换位置,再把前面的处理为大顶堆
		for(int i=arr.length-1;i>0;i--) {
			int temp = arr[0];
			arr[0]=arr[i];
			arr[i]=temp;
			maxHeap(arr, i, 0);
		}
	}
	
	public static void maxHeap(int[] arr,int size,int index) {
		//左子节点
		int leftNode = 2*index+1;
		//右子节点
		int rightNode = 2*index+2;
		int max = index;
		//和两个子节点分别对比,找出最大的节点
		if(leftNodearr[max]) {
			max=leftNode;
		}
		if(rightNodearr[max]) {
			max=rightNode;
		}
		//交换位置
		if(max!=index) {
			int temp=arr[index];
			arr[index]=arr[max];
			arr[max]=temp;
			//交换位置以后,可能会破坏之前排好的堆,所以,之前的排好的堆需要重新调整
			maxHeap(arr, size, max);
		}
	}

}

归并排序

 思想:两两合并排序后再合并排序

import java.util.Arrays;

public class MergeSort {

	public static void main(String[] args) {
		int[] arr = new int[] {1,3,5,2,4,6,8,10};
		System.out.println(Arrays.toString(arr));
		mergeSort(arr, 0, arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
	//归并排序
	public static void mergeSort(int[] arr,int low,int high) {
		int middle=(high+low)/2;
		if(low

快速排序

思想:选取一个关键字使他左边的值都比他小,右边的值都比他大,然后左边和右边进行相同的操作。

import java.util.Arrays;

public class QuickSort {

	public static void main(String[] args) {
		int[] arr = new int[] {3,4,6,7,2,7,2,8,0,9,1};
		quickSort(arr,0,arr.length-1);
		System.out.println(Arrays.toString(arr));
	}
	
	public static void quickSort(int[] arr,int start,int end) {
		if(start

java的基本数据类型有?
8种:

  • 四种整数类型(byte、short、int、long)

  • 两种浮点数类型(float、double)

  • 一种字符型(char)

  • 逻辑型(Boolean)

先写那么多后面再根据我的面试情况更新

你可能感兴趣的:(记录一下测试实习生的面试题,方便查阅)