100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 大厂测试开发常见面试题收集(python java 性能等)

大厂测试开发常见面试题收集(python java 性能等)

时间:2020-06-07 20:32:39

相关推荐

大厂测试开发常见面试题收集(python java 性能等)

1.Python 中方法的参数是值传递还是引用传递?

答:如果参数是常量则为值传递,如果参数是变量则为引用传递

2.Python 中元组和列表的区别

答:1.元祖不可修改。2.元祖不可删除

3.Linux 中查找某个文件并删除它

答:find / -name “*filename” |xargs rm -rf

4.Linux 查询 CPU、内存的指令

答:top

cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l ;查看物理CPU个数

free -h,

vmstat

5.Java 中的容器有哪些?它们的区别和特性?

答:

一.Collection类

1.一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的顺序保存元素,而Set不能有重复元素.Queue按照队列规则来确定对象产生的顺序(通常与它们被插入的顺序相同).

2.在实际编程中,Collection类一般不会被使用,通常使用其三个子类.

二.Map类

1.一组成对的"键值对"对象,允许你使用键来查找值.又被称为"关联数组"或者"字典".

三.List类:

1.子类包括ArrayList和LinkedList.

2.基本的ArrayList,它长于随机访问元素,但在List的中间插入和移除元素时比较慢.

3.LinkedList:它通过代价较低的在List中间进行的插入和删除操作,但对于随机访问元素操作比较慢.

6.Java 多线程的创建

答:Thread和Runnable

7.性能测试关注哪些指标?

答:cpu 的iowait,内存的实际内存与虚拟内存。硬盘的读写,数据库的读写速度

8.算法:快排的实现

答:(java,python自行查找)

9.算法:数组中查找出现次数过半的数

答:给出一种解法:

class Solution:

def MoreThanHlafNum_Solution(self,numbers):

dict={}

for i in numbers:

if not dict.has_key(i):

dict[i]=1

else:

dict[i]+=1

if dict[i]>len(numbers)/2.0:

return i

return 0

1

2

3

4

5

6

7

8

9

10

11

12

10.算法:查找链表的倒数第三个数

答:

public class LastKNode {

public static void main(String[] args) {

Node head=ListNode.getSingleList();

ListNode.printList(head);

int k=3;

head=new LastKNode().getLastKNode(head,k);

System.out.println(head.data);

}

public Node getLastKNode(Node head, int k){

Node node=head;

while(node. next!= null&&k>0){

node=node. next;

k--;

}

while(node!= null){

node=node. next;

head=head. next;

}

return head;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

11.登录页面怎么测?

答:用例设计参考:

功能测试:

1>输入正确的用户名密码,点击提交按钮,验证能否正确登录

2> 输入错误的用户名或者密码,点击提交按钮,验证登录失败,提示相应的错误信息

3 >登录成功后能否跳转到正确的页面

4>账号名或者密码长度过长或者过短,应该怎么处理(安全性,密码太短是否有提示)

5>账号和密码有特殊字符(空格),是否做了过滤

6>密码是否加密显示

7>输入密码 ,大写键盘开启的时候要有提示信息

8>什么都不输入,直接点击提交(非空检查)

9>登录失败后,不能记住密码的功能

10>登录页面中忘记密码等等链接跳转是否正确

11>牵扯到验证码,还要考虑文字是否扭曲过度导致辨认难度大

UI测试:

1>布局是否合理,两个textbox和一个按钮是否对齐

2>textbox的长度和高度是否符合要求

3>界面设计风格和UI设计风格是否一致

4>界面中的文字简洁易懂,没有错别字

性能测试:

1>打开登录界面,需要几秒

2>输入正确的用户名和密码,登录成功跳转到新页面,需要几秒

安全性测试:

1>登录成功后的cookie是否有HttpOnly(降低脚本风险)

2>账号和密码是否通过加密的方式,发送给web服务器

3>账号和密码的验证,应该是用服务器验证,而不单单是在客户端用javaScript验证

4>账号和密码的输入框,应该屏蔽SQL注入攻击

5>账号和密码的输入框,应该禁止输入脚本(防止XSS攻击)

6>错误登录的次数限制(防止暴力破解)

7>是否支持多用户在同一台机器上登录

8>一用户在多台机器上登录

可用性测试:

1>输入框是否可以用tab键切换

2>输入账号,密码后按回车,是否可以登录

3>是否可用全用键盘操作,是否有快捷键

兼容性测试:

1>主流的浏览器下能否显示正常已经功能正常

2>不同的平台是否能正常工作,eg:windows,mac

3>移动设备上是否正常工作,比如iphone,android

4>不同的分辨率

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

12.搜索框怎么测试?

答:测试搜索框,需从以下几个方面进行考虑:

一、功能实现

输入字符,有匹配的就展示出来,没有匹配的,会进行处理

1.对输入进行测试

正常输入存在的内容,查看搜索结果展示的数据是否完整

正常输入不存在的内容,查看搜索返回的结果

输入为空

超长输入

特殊符号,包含空格,特别要注意英文单引号

各种字符,如数字、字母、中文

反复输入相同的数据,如5次以上,看处理是否正确

输入正则表达式

验证搜索框的功能是否与需求一致,如模糊搜索或完全搜索

是否有忽略空格的功能,忽略前置空格和忽略后置空格,但是不能忽略中间空格

2.快捷键:

在输入结束后,按回车键,看系统如何处理

使用Tab键 ,ctrl+c /v/xz

3.光标和鼠标:

在光标停留的地方进行输入,看光标和输入的字符位置是否正确,会否跳转到别的地方

在输入框中,左键单击鼠标,双击鼠标,三击鼠标,如百度输入框,单击是插入,双击选中两个字符,三击选中输入的所有字符

输入框中,鼠标右键,会否有菜单栏,菜单栏下是否有常用的项,并且各项可用

4.其它功能

如百度的即搜即得,随着用户的输入,下面会列出好多实时变化的选项,类似于智能搜索

二、用户友好与易用性

三、不同平台的兼容性

浏览器,操作系统,分辨率

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

13.TCP 和 UDP 的区别?如何保证 TCP 的可靠性?

答:区别在于:

是否连接:TCP是面向连接的,UDP是无连接的,TCP的发送发要确认接收方是否收到数据段(3次握手协议)

传输可靠性:TCP是可靠的,UDP是不可靠的;TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复,它通过为每个数据报提供一个序号来完成此恢复,为确保正确收到数据,TCP要求目标计算机成功收到数据时发回一个确认(即ACK),如果在某个时限内未收到相应的ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复,但是接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。UDP协议不能保证数据准确无误的到达目的地,并不是说UDP就完全无法知道是否发生了错误,一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其可以进行整体校验,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。

TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式

TCP是面向字节流的,UDP是面向报文的(流模式和数据报模式)

TCP拥有拥塞控制机制,UDP没有拥塞控制,适合媒体通信

TCP要求系统资源较多,UDP较少

1

2

3

4

5

6

可靠性:

校验和:检验数据是否损坏

定时器:分组丢失则重传

序号:用于检测丢失的分组和冗余的分组

确认:接收方告知发送方正确接收分组已经期望的下一个分组;否定确认:接收方通知发送方未被正确接收的分组

窗口和流水线:用于增加信道的吞吐量

14.算法:二叉树的深度计算

答:代码过长,请自行百度

15.算法:一亿个无序数找出 Top 100

答:参考代码如下

package cn.usst.tophundred.quicksort;

import java.util.Random;

/**

获取一亿数据获取前100个最大值

1. 假设数组为 array[N] (N = 1 亿),首先利用quicksort的原理把array分成两个部分,左边部分比 array[N - 1] (array中的最后一个值,即pivot) 大, 右边部分比pivot 小。然后,可以得到 array[array.length - 1] (即 pivot) 在整个数组中的位置,假设是 k.

2. 如果 k 比 99 大,我们在数组[0, k - 1]里找前 100 最大值。 (继续递归)

3. 如果 k 比 99 小, 我们在数组[k + 1, ..., N ]里找前 100 - (k + 1) 最大值。(继续递归)

4. 如果 k == 99, 那么数组的前 100 个值一定是最大的。(退出)

*/

public class TopHundredQuickSort {

public static void main(String[] args) {

// the size of the array

int number = 100000000;

// the top k values

int k = 100;

// the range of the values in the array

int range = 1000000001;

// input for minHeap based method

int[] array = new int[number];

Random random = new Random();

for(int i=0; i<number; i++){

array[i] = random.nextInt(range);

}

TopHundredQuickSort topHundred = new TopHundredQuickSort();

// start time

long t1 = System.currentTimeMillis();

topHundred.tophundred(array, 0, array.length-1, k);

// end time

long t2 = System.currentTimeMillis();

System.out.println("The total execution time of quicksort based method is" + (t2-t1) + " millisecond");

// print out the top k largest values in the top array

System.out.println("The top " + k + " largest values are:");

for(int i=0; i<k; i++){

System.out.println(array[i]);

}

}

private void tophundred(int[] array, int start, int end, int k) {

int switchPointer = start;

// array最后一个值作为pivot

int pivot = array[end];

for(int i=start; i<end; i++){

if(array[i] >= pivot){

swap(array, switchPointer, i);

switchPointer++;

}

}

// 交换后 array左边的值比pivot大 右边的值比pivot小

swap(array, end, switchPointer);

if(switchPointer < k-1){

tophundred(array, switchPointer+1, end, k);

}else if(switchPointer == k-1){

return;

}else{

tophundred(array, 0, switchPointer-1, k);

}

}

private void swap(int[] array, int i, int j) {

int temp = array[i];

array[i] = array[j];

array[j] = temp;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

16.索引类型和优缺点

答:索引分类如下:

0、查看索引 show index from 数据库表名

1.普通索引

特点:是最基本的索引,它没有任何限制。

2.唯一索引

特点:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

3.主键索引

特点;是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引

4.组合索引

特点:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循**最左前缀**集合

如:`ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )`

这个表结构,每次使用索引的时候必须带上最左侧的索引值'column1',不然将会索引无效。

5.全文索引

从3.23.23版开始支持全文索引和全文检索,FULLTEXT,可以在char、varchar或text类型的列上创建。

1

2

3

4

5

6

7

8

9

10

11

12

13

索引的优缺点:

1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update和delete。因为更新表时,不仅要保存数据,还要保存一下索引文件。

2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。

索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

1

2

3

17.Redis 中有哪些数据结构

答:

redis提供五种数据类型:string,hash,list,set及zset(sorted set)。

string(字符串)

string是最简单的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value,其上支持的操作与Memcached的操作类似。但它的功能更丰富。

list(双向链表)

list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等。操作中key理解为链表的名字。

Redis 哈希(Hash)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

集合(Set)

set是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作。操作中key理解为集合的名字。

zset(排序set)

zset是set的一个升级版本,他在set的基础上增加了一个顺序属性,这一属性在添加修改元素的时候可以指定,每次指定后,zset会自动重新按新的值调整顺序。可以理解了有两列的mysql表,一列存value,一列存顺序。操作中key理解为zset的名字。

1

2

3

4

5

6

7

8

9

10

11

18.数据库的加锁,比如乐观锁、悲观锁?

答:悲观锁–>

MySql的悲观锁就是打开事务,当启动事务时,如果事务中的sql语句涉及到索引并用索引进行了条件判断,那么会使用行级锁锁定所要修改的行,否则使用表锁锁住整张表

1

乐观锁–>

我们在使用乐观锁时会假设在极大多数情况下不会形成冲突,只有在数据提交的时候,才会对数据是否产生冲突进行检验。如果数据产生冲突了,则返回错误信息,进行相应的处理。

1

19.Java 的接口与抽象类的区别(问的比较多,逢面试基本必问)

答:

抽象类:抽象类是无法实例化的特殊类。所以问题是为什么我们需要一个不能被实例化的类,抽象类只能是子类(继承自)。换句话说,它只允许其他类继承它,但不能实例化。优点是它为所有子类执行特定的层次结构。简而言之,它是一种契约,它强制所有子类执行相同的层次或标准。

接口:接口不是类,由Interface关键词定义,接口只有方法签名,没有方法实现(8之后支持默认方法)。与抽象类类似,它也是一种契约,用于定义所有子类的层次结构,或者它定义了特定的方法集和它们的参数。它们之间的主要区别是,一个类可以实现多个接口,但只能继承一个抽象类。

1

2

3

20.面向对象的特征有哪些方面?

答:

1.抽象:

抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。

2.继承:

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类 继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或 增加新的方法使之更适合特殊的需要。

3.封装:

封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4. 多态性:

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

21.int 和 Integer 有什么区别?

答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

原始类型封装类:

boolean Boolean

char Character

byte Byte

short Short

int Integer

long Long

float Float

double Double

22.String 和StringBuffer的区别?

答:JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数 值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型 地,你可以使用StringBuffers来动态构造字符数据。

23.HashMap和Hashtable的区别

答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

24.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现, 重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方 法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

25.启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

26.char型变量中能不能存贮一个中文汉字?为什么?

答:能够定义成为一个中文的,因为java中以unicode编码,一个char占16个位,所以放一个中文是没问题的。

27.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

28.List, Set, Map是否继承自Collection接口?

答:List,Set是,Map不是。

29.数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String有有length()这个方法

30.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

equals()和 ==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值

31.是否可以继承String类?

答:String类是final类故不可以继承。

32.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行

33.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,

参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

35.线程的基本概念、线程的基本状态以及状态之间的关系

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:运行、就绪、挂起、结束。

36.List、Map、Set三个接口,存取元素时,各有什么特点?

答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value值,value可多值

37.HTTP有没有状态,怎么解决HTTP无状态

答:

1、通过Cookies保存状态信息Server通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。

2、通过Session保存状态信息

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id;

如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个);

如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中通过Cookie返回给客户端保存。

38.基于WEB B/S系统测试时应考虑的因素有哪些?

答:

一、功能测试

1、链接测试

2、表单测试

3、Cookies测试

4、设计语言测试

5、数据库测试

二、性能测试

1、连接速度测试

2、负载测试

3、压力测试

三、可用性测试

1、导航测试

2、图形测试

3、内容测试

4、整体界面测试

四、客户端兼容性测试

1、平台测试

2、浏览器测试

五、安全性测试

40.什么是兼容性测试?兼容性测试侧重哪些方面?

答:兼容性是指协调性,

1.硬件上就是说你的电脑的各个部件,CPU,显卡等等组装到一起以后的情况,会不会相互有影 响,不能很好的运作.

2.软件上就是说你的电脑的软件之间能否很好的运做,会不会有影响啊?还有软件和硬件之间能否发挥很好的效率工作,会不会影响导致系统的崩溃.

1、平台兼容性:市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。

2、浏览器兼容性:浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、JavaScript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,JavaScript是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。

---------------------

作者:买榴莲也用卷

来源:CSDN

原文:/GG9527li/article/details/91627597

版权声明:本文为博主原创文章,转载请附上博文链接!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。