一面
1、自我介绍
2、TCP UDP的区别
(1) TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
(2) TCP提供可靠的服务、也就是说,通过TCP连接传输的数据是无差错、不丢失、不重复且按序到达;UDP尽最大努力交付,即不保证可靠交付
(3) TCP的逻辑通信信息是全双工的可靠信息;UDP则是不可靠信息
(4) 每一条TCP连接只能是点对点的;UDP支持一对多、多对一、多对多通信
(5) TCP面向字节流(可能会出现黏包问题),实际上是TCP白数据看成一连串无结构的字节流;UDP是面向报文的(不会出现黏包问题)
(6) UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
(7) TCP首部开销20字节;UDP的首部开销小,只有8字节
3、黑盒白盒测试
**黑盒测试:**又称为功能测试、数据驱动测试或者即可规格说明的测试,目的是检查程序各功能是否实现,并检查其中的错误;
**白盒测试:**又称为结构测试、逻辑驱动模式或者基于程序的测试,基于其内部结构,检查内部操作是否按照规定执行;
白盒测试:逻辑覆盖法,主要包括语句覆盖、判断覆盖、条件覆盖、判断条件覆盖、条件组合覆盖、路径覆盖等;
黑盒测试:等价划分类、边界值分析法、错误推断法
4、为什么选测试
1、首先是自己得兴趣,找bug很有趣
2、其次是软件测试这个岗位得薪资待遇、发展都比较好,令我感兴趣
5、软件测试的目标
覆盖需求书里面的所有功能或者要求,并且尽量用较少的测试用例覆盖较多的功能
6、有哪些研究生课程,研究生课程和研究方向
计算机网络、C语言、微机原理、信号与系统、图像处理、嵌入式、数字电路、模拟电路等等
7 发生漏测的情况,怎么避免
可以分为事中,事后,事前(平常)三个阶段;
如果是自己得过失,那就勇敢承认错误,多花时间精力提升自己得专业技能;但是如果不是测试这边的,也不要傻傻的背黑锅,不仅对自己的发展不好,也会影响测试部的名声
事中:漏测发生了,**不管项目组的声音如何,就是先看Bug是否能复现,然后尽快解决,是否发版,然后分析原因,**问题原因公开化,是自己测试问题就承担,不是就绝不要背锅,要项目组和你的上级都知道;
事后:有些Bug确实是没考虑到或者人为疏忽造成,或者环境原因,开发合并代码影响,开发优化代码直接发布,未经过测试发布,机型兼容等问题,所以一定要根据Bug的原因进行对症下药分析,并给出结果,防止再次出现的措施跟责任人,然后公开化。
平常(事前):做事有理有据,保持良好测试分析能力,推进测试流程,提高测试技能,完善测试内容,培训常态化,测试责任制,漏测跟绩效挂钩,良好的质量保证错误,如常规功能清单;
8、Is 和 ==的区别,==本质是什么(equal( ))
**== :**比较两个对象的内容是否相等,即两个对象的 value 是否相等,无论 id 是否相等,默认会调用对象的 eq()方法
is: 比较的是两个对象是不是完全相同,即他们的 id 要相等。
==:基本类型比较的是值是否相同;比较引用类型比较的是地址值是否相同
equals :比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同
9、字典中能否存放类对象,需要注意什么
10、Python中的全局变量能否在函数内部进行修改
11、Python中的多线程
12、实习过程中遇到问题是怎么解决的
13、 写测试用例 怎么保证覆盖更全面
1. 覆盖显性需求
需求文档或原型图上已经标注清楚的功能一定要全部覆盖,通过思维导图工具进行梳理一般都能保证。
2. 获取隐含需求
行业: 作为测试人员,测试某个行业的业务,就要学习该行业的业务知识,才能保证测试时能够考虑得更加全面。
竞品分析: 可以多关注同类产品的内容,分析标杆性的产品
根据自己的业务类型关注对应领域的产品。简单看看应用商城分类排行榜也就一目了然了。
沟通记录:如果可能收集到产品经理在与客户沟通的原始记录,也能够更好的理解客户的本意。在获知客户本意的基础上,更容易揣摩用户的隐含需求。
站在用户的角度分析: 如果可能多与一线的使用终端的用户沟通,可以获取第一手的用户使用流程。可以更好的站在用户的角度去思考。
14、 学校项目中遇到问题是怎么解决的
15、 TDD/FDD区别
FDD和TDD分别是频分双工和时分双工的英文缩写
区别:
1、双工方式
TDD:时分双工(Time Division Duplexing),收发共用一个射频频点,上、下行链路使用不同的时隙来进行通信
FDD:频分双工(Frequency Division Duplexing),收发使用不同的射频频点来进行通信
2、速率
理论上讲,在相同的带宽条件下,比如FDD分配10M+10M,TDD分配20M,TDD的速率会低于FDD,这主要原因是TDD的帧结构中有个叫做特殊子帧的帧,这些帧会被浪费一部分(比如其中的保护时隙)并不传送任何数据,而FDD的帧不存在这种完全浪费掉的情况。
3、覆盖
TD-LTE适合热点区域覆盖,FDD适合广域覆盖
在相同频率相同功率的条件下,FDD比TDD能提供更好的覆盖, TDD覆盖比FDD小80% (DL/UL=2:1)/小40%(DL/UL=1:1)。这主要原因是TDD上行链路存在发射功率的时间(一个10ms帧中)要比FDD时间短。
4、移动台移动速度
FDD是连续控制的系统,TDD是时间分隔控制的系统。在高速移动时,多普勒效应会导致快衰落,速度越高,衰落变换频率越高,衰落深度越深。
在目前芯片处理速度和算法的基础上,当数据率为144kb/s时,TDD的最大移动速度可达250km/h,与FDD系统相比,还有一定差距。一般TDD移动台的移动速度只能达到FDD移动台的一半甚至更低
16、4G和5G的区别? 你觉得5g用的fdd还是tdd?
5G与4G相比有3大特点1。超大带宽2。超低时延3。海量连接
5G比4G的速度快100倍,比4G的时延低了1/10。
17、 全双工 半双工
全双工:打电话,同时可发送可接收
半双工:对讲机,只能接收或者发送
18、多人项目怎么管理代码
上传
$ git init
$ git add .
$ git commit -m "update"
$ git push origin dev(分支名)
下载
git clone xxx --branch dev(分支名)
二面
1、除了黑盒白盒还有什么测试方法
2、白盒测试有哪些方法
3、测试重点是什么(我理解的问题)
4、项目遇到哪些编程问题,怎么解决的
5、多人项目怎么管理代码(想问git但是我确实没用过)
主管面
1.自我介绍
2.问了问项目,团队协作的问题
3.项目成员发生争执,怎么处理
4.加班怎么看
5.对华为的了解
6.为什么做测试
7.更偏向技术和管理
8.职业规划
10.实习经历讲一个
11.项目经历深挖
12.你身上符合测试工程师这个岗位的特质
细心,耐心、认真、负责、严谨、自学能力强,并且愿意花时间提升自己的专业技能 ;沟通能力超级重要;缜密的逻辑思维能力。
13.你觉得自己的工程能力如何
14.了解华为的业务吗
华为非常崇尚“狼”,认为狼是企业学习的榜样,要向狼学习“狼性”,狼性永远不会过时。
作为最重要的团队精神之一,华为的“狼性文化”可以用这样的几个词语来概括:学习,创新,获益,团结。用狼性文化来说,学习和创新代表敏锐的嗅觉,获益代表进攻精神,而团结就代表群体奋斗精神。
15.是否了解华为的企业文化(是否做好心理准备)
16.如何面对压力大
代码
1、IP地址,给出子网数,说下子网掩码是多少
IP地址=网络地址+主机地址
图1中的IP地址是192.168.100.1,
网络地址(相当于街道地址): 192.168.100.0
主机地址(相当于各户的门号): 0.0.0.1
IP地址(相当于住户地址): 网络地址+主机地址=192.168.100.1
广播地址: 192.168.100.255
IP地址范围不同:
A类IP地址 地址范围从1.0.0.1到127.255.255.254 (二进制表示为:00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。最后一个是广播地址。
B类IP地址地址范围从128.0.0.1-191.255.255.254 (二进制表示为:10000000 00000000 00000000 00000001-10111111 11111111 11111111 11111110)。 最后一个是广播地址。
C类IP地址范 围从192.0.0.1-223.255.255.254 (二进制表示为: 11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。最后一个是广播地址。
子网掩码不同:
A类IP地址的子网掩码为255.0.0.0
B类IP地址的子网掩码为255.255.0.0
C类IP地址的子网掩码为255.255.255.0
192.168.200.2 3
分配的是一个范围:192.168.200.0 1-14范围内
2、等差数列求和
#include<iostream>
using namespace std;
int main() {
int N, L;
cin>>N>>L;
//主要是为了从>=L得值开始
for(int i = L; i <= 100; i++) {
//求出每一个a1 也就是开头得那个初始开头得a1
if((2*N+i-i*i)%(2*i) == 0) {
int start = (2*N+i-i*i)/(2*i);
for(int j = 0; j < i-1; j++) {
cout<<start+j<<" ";
}
cout<<start+i-1;
return 0;
}
}
cout<<"No"<<endl;
}
3、给定一个60万以内的数求解可以构成直角三角形的所有数
海量数据
//a b 往后走,C往前走
for(int i=1;i<n-1;i++){
int a=i,b=i,c=n;//假设a ,b ,c已经有大小关系
while(b<c){
if(a+b>c && (a*a+b*b==c*c || ) ){
b++;c--;
}
if(a+b>c && (a*a+b*b<c*c || ) ){
c--;
}
if(a+b>c && (a*a+b*b>c*c || ) ){
break;
}
}
4、两个数组,从小到大输出数组中不重复的值
//两个vector求交集
vector<int> vectors_intersection(vector<int> v1,vector<int> v2){
vector<int> v;
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v));//求交集
return v;
}
//两个vector求并集
vector<int> vectors_set_union(vector<int>v1,vector<int> v2){
vector<int> v;
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_insert(v))
return v;
}
5、找出数组里的第二大的数
方法一:直接内置函数sort取arr[arr.size()-2]即可
方法二:(1)若是取最大得元素,则假设第一个最大max=arr[0]再依次比较
(2)Top(K) 快排+二分
(3)冒泡最外层循环只做两次就好
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int n;cin>>n;
vector<int> arr(n);
for(int i=0;i<n;i++){
cin>>arr[i];
}
const int INF = -999;//若是超过了这个int范围 ,就会变环一下
int fir, sec, thi;
//分别表示第一大、第二大、第三大
fir = sec = thi = INF;
for(int i=0;i<n;i++)
{ //以long类型读出,这里会有一定的效率损失
if(arr[i] > fir) //如果比第一个大
swap(arr[i], fir);
if(arr[i] < fir && arr[i] > sec) //比第一个小但比第二个大
swap(arr[i], sec);
if(arr[i] < sec && arr[i] > thi) //比第二个小但比第三个大
swap(arr[i], thi);
}
cout<<fir<<" "<<sec<<" "<<thi<<endl;
}
6、五进制加法(两个数组)
方法一:将五进制转为10进制,进行加法操作,再由十进制转为5进制
方法二:直接进行进制的加减
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
int m,n;cin>>m>>n;
vector<int> arr1(m);
vector<int> arr2(n);
vector<int> ans;
for(int i=0;i<m;i++){
cin>>arr1[i];
}
for(int i=0;i<n;i++){
cin>>arr2[i];
}
int i = m - 1;
int j = n - 1;
int carry = 0;
while (i >= 0 || j >= 0)
{
// 双指针, 让两个数的末位对齐, 两个指针 i, j均从末尾开始走
int digitA = i >= 0 ? arr1[i--] : 0;
int digitB = j >= 0 ? arr2[j--] : 0;
//int digitB = j >= 0 ? arr2[j--] - '0' : 0; //字符串的情况
int sum = digitA + digitB + carry;
carry = sum >= 2 ? 1 : 0;
sum = sum >= 2 ? sum - 2 : sum;
ans.push_back(sum);
}
if(carry == 1){
ans.push_back(carry);
}
reverse(ans.begin(), ans.end());
for(int i=0;i<ans.size();i++){
cout<<ans[i]<<" ";
}
}
6、一个字符串,有数字有字母,选出数字并排序。
#include<iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctype.h>
using namespace std;
int main(){
string s;cin>>s;
vector<int> arr;
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){
//判断字符是isalpha
//由于取出来是字符,因此需要将其转为数字
arr.push_back(s[i]-'0');
}
}
sort(arr.begin(),arr.end());
for(int i=0;i<arr.size();i++){
cout<<arr[i]<<" ";
}
return 0;
}
7、数据结构:数组,链表,二叉树(时间空间复杂度,如何实现增删搜索)比较优缺点
测试
1、饮料售货机
一、功能测试:
1、自动售货机的按钮能否正常使用,有没有按不动的情况
2、验证用户选择饮料功能是否正确,比如选择农夫山泉最终出来的是不是农夫山泉
3、验证投币付款功能是否正确,(包括不同面额的纸币硬币,会不会不接受有些面额)
4、找钱功能是否可用,输入10块,找5块这种
5、还有其他支付方式,比如微信支付宝;
6、有没有消费者投诉电话
7、操作过程有没有相应的提示音
8、能不能进行补货,售货机缺货时会不会有提醒
9、定价功能可否正常使用,是否支持非整数定价,像定个九块
10、优惠信息可否正常折扣,像有优惠券或打折时
11、以上操作是否跟网络状态有关系(弱网、强网、无网)
12、对于饮料有没有冷藏功能,冷藏的温度能不能设置
二、界面测试
1、按说明书检查,
2、操作界面的布局搭配是否合理,
3、按钮的大小、颜色、形状是否美观,是否通俗易懂
4、有没有消费者投诉电话
5、操作接口是否齐全
6、有没有设备编号、服务电话标识
7、售货机的大小是否得体
三、性能测试:
1、利用微信、支付宝等第三方平台支付时的响应速度;
2、选好饮料弹出提示信息的时间;
3、退币时的响应时间和退币速度;
4、付款时突然断电;
5、跟第三方支付平台的接口对接是否可用
6、软硬件结合的效率,软硬件软件发出操作指令后,硬件的及时正确响应
四、安全性测试:
1、售货机上的二维码是否在售货机内部,防止他人恶意替换二维码
2、收款码是否携带恶意病毒
3、售货机的材料是否安全无害
4、售货机设计的有没有锋利的地方,会不会划伤到顾客
5、售货机存钱的地方是否安全,会不会被他人偷取
2、直播测试
「功能测试」
输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。
输入错误的用户名或者密码,验证登录会失败,并且提示相应的错误信息。
登录成功后能否能否跳转到正确的页面
用户名和密码,如果太短或者太长,应该怎么处理
用户名和密码,中有特殊字符(比如空格),和其他非英文的情况
记住用户名的功能
登陆失败后,不能记录密码的功能
用户名和密码前后有空格的处理
密码是否非明文显示显示,使用星号圆点等符号代替。
牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换- -个按钮是否好用
登录页面中的注册、忘记密码,登出用另-帐 号登陆等链接是否正确
输入密码的时候,大写键盘开启的时候要有提示信息。
什么都不输入,点击提交按钮,检查提示信息。
「界面测试」
布局是否合理,testbox 和按钮是否整齐。
testbox和按钮的长度,高度是否符合要求。
界面的设计风格是否与UI的设计风格统一-。
界面中的文字简洁易懂,没有错别字。
「性能测试」
打开登录页面,需要的时间是否在需求要求的时间内。
输入正确的用户名和密码后,检查登录成功跳转到新页面的时间是否在需求要求的时间内。
模拟大量用户同时登陆,检查一定压力下能否正常登陆跳转。
「安全性测试」
登录成功后生成的Cookie,是否是httponly(否则容易被脚本盗取)。
用户名和密码是否通过加密的方式,发送给Web服务器。
用户名和密码的验证,应该是用服务器端验证,而不能单单是在客户端用javascript验证。
用户名和密码的输入框,应该屏蔽SQL注入攻击。
用户名和密码的的输入框,应该禁止输入脚本(防止 XSS攻击)。
防止暴力破解,检测是否有错误登陆的次数限制。
是否支持多用户在同一机器上登录。
同一用户能否在多台机器上登录。
「可用性测试」
是否可以全用键盘操作,是否有快捷键。
输入用户名,密码后按回车,是否可以登陆。
输入框能否可以以Tab键切换。
「兼容性测试」
不同浏览器下能否显示正常且功能正常
同种浏览器不同版本下能否显示正常且功能正常。
不同的平台是否能正常工作,比如Windows、Mac
移动设备上是否正常工作,比如iPhone、Andriod。
不同的分辨率下显示是否正常。
3、共享屏幕给了2段代码,一段是Python写的,一段是C++写的,问我能看出这2段代码运行后的结果吗,我说我主要用的JAVA,面试官说不好意思今天没准备JAVA,我就思考了10min左右写了下结果,跟类的加载机制有关,应该是先静态代码,后父类静态,子类静态,也不知道对不对 😂
4、测试一个网页登陆界面