虾皮测试面经
虾皮一面:3.19(1h)
自我介绍
深挖项目
c++:
虚函数,虚表,虚指针是什么?
用virtual关键字申明并在一个或多个派生类中被重新定义的函数叫做虚函数,虚函数肯定是类的成员函数。存在虚函数的类都有一个一维的虚函数表叫做虚表。每一个类的对象都有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。对于虚函数调 用来说,每一个对象内部都有一个虚表指针,该虚表指针被初始化为本类的虚表。
Python:
Python装饰器是什么?
装饰器是给现有的模块增添新的小功能,可以对原函数进行功能扩展,而且还不需要修改原函数的内容,也不需要修改原函数的调用。装饰器是闭包的一种应用。简言之,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。使用时,再需要的函数前加上@demo即可。
计算机网络:
get请求,post请求的区别是什么?
GET使用URL或Cookie传参。而POST将数据放在BODY中。
GET的URL会有长度上的限制,则POST的数据则可以非常大。
POST比GET安全,因为数据在地址栏上不可见,get的参数直接暴露在URL上。
一般get请求用来获取数据,post请求用来发送数据。
GET请求只能进行url编码,而POST支持多种编码方式。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
TCP三次握手的具体步骤是?
(1) 第一次握手:建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器确认。
(2) 第二次握手:服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态。
(3) 第三次握手:客户端收到服务器B的SYN+ACK包,向服务器B发送确认包ACK,此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
SYN泛洪攻击是什么?
SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应 报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
操作系统:
进程与线程的区别是什么?
进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以共享内存的方式进行。
多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
进程与线程的同步分别用什么?
进程:无名管道、有名管道、信号、共享内存、消息队列、信号量
线程:互斥量、读写锁、自旋锁、线程信号、条件变量
进程如何通过信号量获得共享资源?
(1)测试控制该资源的信号量
(2)信号量的值为正,进程获得该资源的使用权,进程将信号量减1,表示它使用了一个资源单位
(3)若此时信号量的值为0,则进程进入挂起状态(进程状态改变),直到信号量的值大于0,若进程被唤醒则返回至第一步。
注:信号量通过同步与互斥保证访问资源的一致性。
数据库:
事务的四大特性是什么?如何去实现这四大特性?
原子性:将事物进行的操作捆绑成一个不可分割的单元,事物中进行的数据操作要么全部成功,要么全部失败。原子性通过undo log(回滚日志)来实现的,undo log能够保证在事务回滚时,能够撤销所有已经执行成功的SQL。
一致性:数据库前后必须处于一致性状态。字段的一致性是有保证措施的,例如整型的字符不能传入,字符串、时间等格式,字符串的长度不能超过列的限制。但是在应用层面是需要开发者自己来保证。
隔离性:多个用户并发访问数据库,数据库为每个用户开启一个事物,每个事物相互独立,互不干扰。事务间的读写靠MySQL的锁机制来保证隔离,事务间的写操作靠MVCC机制(快照读、当前读)来保证隔离性。
持久性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。事务提交时会把redo log同步在磁盘中的,所以当MySQL出现宕机时,可以从磁盘中读取redo log进行数据的恢复,从而保证了事务的持久性。
MySQL中的锁机制是什么?
按照功能分:读锁和写锁;按照作用范围分:表级锁和行级锁;按照思想的划分:乐观锁和悲观锁;
读锁:又称“共享锁”,是指多个事务可以共享一把锁,都只能访问数据,并不能修改。
写锁:又称“排他锁”,是不能和其他事务共享数据的,如果一个事务获取到了一个数据的排他锁,那么其他事务就不能再获取该行的其他锁,包括共享锁和排他锁。
表级锁:是指会将整个表进行锁定,性能较差。
行级锁:会将需要操作的相应行进行锁定,性能好。
悲观锁:是每次在读数据时,都会给数据加上锁,避免其他的读操作拿到锁。
乐观锁:是给数据添加一个版本号,通过对比版本号来实现数据前后一致性的对比。
索引有什么作用?优点是什么?缺点是什么?
索引的作用:创建索引能够大大的提高系统的性能
优点:
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
大大加快数据的检索速度,这也是创建索引的最主要原因
加快表与表之间的连接,在实现数据的参考完整性方面特别有意义
在使用分组和排序,子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:
创建索引和维护索引需要时间,这种时间随着数据量的增加而增加
索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占物理空间,如果要建立聚簇索引,需要的空间更大
当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这就降低了数据的维护速度。
left join、right join、inner join有何区别?
left join(左联接):LEFT JOIN子句允许您从匹配的左右表中查询选择行记录,连接左表中的所有行,即使在右表中找不到匹配的行也显示出来,但使用NULL值代替。返回包括左表中的所有记录和右表中联结字段相等的记录。
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
问了两道数据库题,手写sql语句
算法题:创建一个循环链表删除其中数值相同的重复节点
英语自我介绍(10min)
反问
虾皮二面:3.23(1h)
自我介绍
深挖项目
c++:
深拷贝、浅拷贝:
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。
数据库:
分别介绍一下脏读、幻读、不可重复读,并说明一下如何去解决?
1.脏读:
指一个事务A正在访问数据,并且对该数据进行了修改,但是这种修改还没有提交到数据库中(也可能因为某些原因Rollback了)。这时候另外一个事务B也访问这个数据,然后使用了这个被A修改的数据,那么这个数据就是脏的,并不是数据库中真实的数据。这就被称作脏读。
解决办法:把数据库事务隔离级别调整到READ_COMMITTED
即让用户在更新时锁定数据库,阻止其他用户读取,直到更新全部完成才让你读取。
2.幻读:
指一个事务A对一个表中的数据进行了修改,而且该修改涉及到表中所有的数据行;同时另一个事务B也在修改表中的数据,该修改是向表中插入一行新数据。那么经过这一番操作之后,操作事务A的用户就会发现表中还有没修改的数据行,就像发生了幻觉一样。这就被称作幻读。
解决办法:把数据库事务隔离级别调整到SERIALIZABLE_READ
3.不可重复读:
指在一个事务A内,多次读同一个数据,但是事务A没有结束时,另外一个事务B也访问该同一数据。那么在事务A的两次读数据之间,由于事务B的修改导致事务A两次读到的数据可能是不一样的。这就发生了在一个事务内两次读到的数据不一样,这就被称作不可重复读。
解决办法:把数据库事务隔离级别调整到REPEATABLE_READ
数据结构:
熟悉哪些排序算法?时间复杂度空间复杂度多少?
这里我把8种排序算法全说了,面试官问我最熟悉哪个,我就说了快排
快速排序的具体流程是?缺点是?如何改善?
采用了分治的策略
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
缺点:不稳定,初始序列有序或基本有序时,时间复杂度降为O(n^2)。
改善:通常采用“三者值取中”方法,即比较H->r[low].key、H->r[high].key与H->r[(10w+high)/2].key,取三者中关键字为中值的元素为中间数。
测试:
软件测试流程是什么?具体说一下
测试需求分析阶段:阅读需求,理解需求,主要就是对业务的学习,分析需求点,参与需求评审会议。
测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。
测试设计阶段:主要是编写测试用例,会参考需求文档(原型图),概要设计,详细设计等文档,用例编写完成之后会进行评审。
测试执行阶段:搭建环境,执行冒烟测试(预测试)-然后进入正式测试,bug管理直到测试结束。
测试评估阶段:出测试报告,确认是否可以上线。
熟悉哪些接口测试工具?有何特点?如何进行测试?
这里我回答了postman、jmeter和selenium
黑盒测试白盒测试的区别是什么?
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。
测试方法有哪些,能详细介绍一下吗?(越多越好)
1.等价类划分
等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。
2.边界值分析法
边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,那么其他取值出错的可能性也就很小。
3.正交试验法
正交是从大量的试验点中挑选出适量的、有代表性的点。正交试验设计是研究多因素多水平的一种设计方法,他是一种基于正交表的高效率、快速、经济的试验设计方法。
4.状态迁移法
状态迁移法是对一个状态在给定的条件内能够产生需要的状态变化,有没有出现不可达的状态和非法的状态,状态迁移法是设计足够的用例达到对系统状态的覆盖、状态、条件组合、状态迁移路径的覆盖。
5.流程分析法
流程分析法主要针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,这是从白盒测试中路径覆盖分析法借鉴过来的一种很重要的方法。
6.输入域测试法
输入域测试法是针对输入会有各种各样的输入值的一个测试,他主要考虑 极端测试、中间范围测试,特殊值测试 。
7.输出域分析法
输出域分析法是对输出域进行等价类和边界值分析,确定是要覆盖的输出域样点,反推得到应该输入的输入值,从而构造出测试用例,他的目的是为了达到输出域的等价类和边界值覆盖。
8.判定表分析法
判定表是分析和表达多种输入条件下系统执行不同动作的工具,他可以把复杂的逻辑关系和多种条件组合的情况表达的即具体又明确;
9.因果图法
因果图是用于描述系统输入输出之间的因果关系、约束关系。因果图的绘制过程是对被测系统的外部特征的建模过程,根据输入输出间的因果图可以得到判定表,从而规划出测试用例。
10.错误猜测法
错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例
11.异常分析法
异常分析法是针对系统有可能存在的异常操作,软硬件缺陷引起的故障进行分析,分析发生错误时系统对于错误的处理能力和恢复能力依此设计测试用例。
弱网测试具体有哪些方法?
软件:Clumsy、Fiddler
延迟(Lag):把数据包缓存一段时间后再发出,这样能够模拟网络延迟的状况;
丢包(Drop):随机丢弃一些数据;
截流(Throttle):把一小段时间内的数据拦截下来后再在之后的同一时间一起发出去;
重发(Duplicate):随机复制一些数据并与其本身一同发送;
乱序(Out of order):打乱数据包发送的顺序;
篡改(Tamper):随机修改小部分的包裹内容。
Linux:
常见Linux命令
top:查看cpu使用率
ps:查看进程
kill:于删除执行中的程序或工作。
最常用的信号是:
1 (HUP):重新加载进程。
9 (KILL):杀死一个进程。
15 (TERM):正常停止一个进程。
kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。
算法题:
判断链表中有没有环
判断两个链表是否相交
写一个getrandom函数,使其随机输出0、1,利用这个函数,使其随机输出0-1000
和面试官英语交流(10~15min)
反问
虾皮三面:3.23(15min)
自我介绍
成绩排名
项目介绍
项目中的难点,如何解决
相比于其他人,有什么优势
平时如何自学
未来职业规划
手头还有offer吗
家乡在哪里,以后愿意到哪里发展
反问
hr说4月初给邮件,等待ing

浙公网安备 33010602011771号