荣耀——测试

1、跨站攻击的问题如何预防

2、假设项目商用的话,需要考虑哪些问题及如何测试

3、对荣耀了解多少

荣耀是华为旗下手机品牌。

荣耀品牌成立于2013年。以“创新、品质、服务”为核心战略,为全球年轻人提供潮酷的全场景智能化体验,打造年轻人向往的先锋文化和潮流生活方式。

在IoT生态产品侧 ,荣耀推出融合终端 、配件产品。通过HILINK协议 和旗下荣耀亲选电商平台,与具有制造优势资源及IoT厂商合作,打造先锋、潮酷的产品

荣耀的眼光并不局限在手机上面,荣耀开始把这样的优势延续到其他领域。在IoT领域也展示了相当的竞争力。荣耀智能手表、荣耀电视、荣耀平板、荣耀笔记本电脑,荣耀路由器……荣耀开始构建一个围绕年轻群体的产品生态集合,扩展产品范围。荣耀与华为,同根而生,却走着不同的道路。华为手机开始便将苹果与三星定为目标,想要做每个人都想要的手机,荣耀则抓住移动互联网和年轻消费群两大机会,以此切入手机市场,最终也成为一个巨头。从最初的手机系列,到后来的独立品牌,从互联网手机的竞争,到如今全渠道的覆盖,荣耀完成了当初独立时的任务,守住了互联网这块北坡,并厮杀出自己的一片天地。荣耀的目标,也不再是小米,甚至不再是手机领域的成绩,它想成为全球年轻人第一科技品牌。这种长远的目光会为荣耀未来的发展奠定基础。

4、软件的生命周期?生命周期中哪部分花的时间最长?

在这里插入图片描述

软件维护是正解

5、说一下白盒测试的几种方法

(1)语句覆盖
使程序中的每个可执行语句都能执行一次的测试用例
(2)判定覆盖(分支覆盖)
对于判断语句,在设计用例的时候,要设计判断语句结果为True和False的两种情况
(3)条件覆盖
设计用例时针对判断语句里面每个条件表达式true 和 false各取值一次,不考判断语句的计算结果
(4)判定条件覆盖(分支条件覆盖)
设计测试用例时,使得判断语句中每个条件表达式的所有可能结果至少出现一次,每个判断语句本身所有可能结果也至少出现一次。
(5)条件组合覆盖
设计测试用例时,使得每个判断语句中条件结果的所有可能组合至少出现一次
(6)路径覆盖
设计测试用例时,覆盖程序中所有可能的执行路径
优点:这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。
缺点:于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。

6、http和https的区别

 https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
 http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
 http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
 http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

7、cookie和session的区别

  1. cookie 和session的区别是:cookie数据保存在客户端的浏览器上,session数据保存在服务器端。
  2. session过期与否取决于服务期的设定,cookie在生成的时候设置过期时间进去。
  3. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session ;
  4. session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE ;
  5. 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K;
  6. 所以将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中。
    cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。

Cookie 机制是通过检查客户身上的“通行证”来确定客户身份的话(请柬)
Session机制就是通过检查服务器上的“客户明细表”来确认客户身份(客户明细表)
当我们完全禁掉浏览器的Cookie的时候,服务端的Session也会不能正常使用。

Q: 客户端浏览器将 Cookie 功能禁用,或者不支持 Cookie 怎么办?
A: 一般这种情况下,会使用一种叫做 URL 重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

Q:cookie为什么是不安全的?
cookie的信息是放在本地,很容易被获取到的,所以说是不安全的。

Cookie 和 Session 应用场景:
(1)登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。
(2)session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session

8、面向过程和面向对象的理解

面向过程
优点:性能比面向对象高,**因为类调用时需要实例化,创建对象,开销比较大,比较消耗资源;**比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展

面向对象
优点:易维护、易复用、易扩展**,由于面向对象有封装、继承、多态性的特性,**可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低

9、多线程的上下文切换

一、CPU时间片
CPU时间片即CPU分配给每个线程的执行时间段,称作它的时间片。CPU时间片一般为几十毫秒(ms)。
二、什么是上下文切换
CPU通过时间片段的算法来循环执行线程任务,而循环执行即每个线程允许运行的时间后的切换,而这种循环的切换使各个程序从表面上看是同时进行的。而切换时会保存之前的线程任务状态,当切换到该线程任务的时候,会重新加载该线程的任务状态。而这个从保存到加载的过程称之为上下文切换。

若当前线程还在运行而时间片结束后,CPU将被剥夺并分配给另一个线程。
若线程在时间片结束前阻塞或结束,CPU进行线程切换。而不会造成CPU资源浪费。
**线程的上下文切换分为让步式上下文切换和抢占式上下文切换。

前者是指执行线程主动释放CPU,与锁竞争严重程度成正比,可通过减少锁竞争来避免;
后者是指线程因分配的时间片用尽而被迫放弃CPU或者被其他优先级更高的线程所抢占,一般由于线程数大于CPU可用核心数引起,可通过调整线程数,适当减少线程数来避免。

笔试复盘:

**1、

输入:第一行是每次读取的固定的长度    ;
     第2-n行是需要合并的数组,不同的数组使用回车换行分隔
 输出:合并的数组
难点:1、输入的行数不固定  2、每一行有几个数也不固定 
     例子:3
          2,5,6,7,9,5, 7
          1,7,4,3,4
          输出:2 5 6 1 7 4 7 9 5 3 4 7

**

#include<iostream>
#include<vector>
using namespace std;
int main(){
	int len;cin>>len;//每一次提取的固定长度 
	vector<string> allstr;
	//需要合并的数组 strtemp 
	
	string strtemp;
	int i,j,temp;
	while(cin>>strtemp){
		
		allstr.push_back(strtemp);
		
	}
	
	int sumlen=0;//sumlen总共的长度  len每一次的定长 
	//逗号也算 1个位置,因此是8 
	for(int i=0;i<allstr.size();i++){
		sumlen += allstr[i].length();
	}
	
	string result;//用于存放字符串 
	int num=0,l=0;// num用来判断每一次遍历 固定长的 第几个
	// l是算的 ',' 
	while(sumlen){
		for(int i=0;i<allstr.size();i++){
			//多个字符串  并且从每一个进行截取 
			if(allstr[i].length()!=0){//还没取完 
				l=0;num=0;
				for(int j=0;j<allstr[i].length();j++){
					//j用来遍历每一个字符串 
					l++;
					if(allstr[i][j]==','){
						num++;//判断取了几个值   1,2,3,  取了三个 
					}
					if(num==len){
						break;
					}
				}
				if(num==len){
					result += allstr[i].substr(0,l);//逗号和值的长度  l 
					allstr[i]=allstr[i].erase(0,l);
				}
				else{
					//剩下的字符串的 数字  长度  <len 
					result += allstr[i];
					result += ',';
					allstr[i].erase(0);
				}
			}
		}
		
		
		//所有字符串的剩余长度和 
		//主要是结束循环和和下一次的遍历 
		sumlen=0;
		for(int i=0;i<allstr.size();i++){
			sumlen += allstr[i].length();
		}
	}
	result.erase(result.length()-1);
	cout<<result<<endl;
	return 0;
} 

2、

请输入字符串字母的“高中低”以及先后顺序对其进行重组,优先按照“高中低”分为三组,然后再对每一组内的字母按照自然顺序进行排序,没有用null表示即可
输出的数组中不需要去掉重复的数组
属于高的字母:bdfhkl
属于中的字母:aceimnorstuvwxz
属于低的字母:gjpqy

输入:cvjjap
输出: null
     acv
     jjp
#include<iostream>
#include<vector>
#include <set>
using namespace std;
int main(){
	set<char> high,middle,low;
	char a[]={'b','d','f','h','k','l'};
	char b[]={'a','c','e','i','m','n','o','r','s','t','u','v','w','x','z'};
	char c[]={'g','j','p','q','y'};
	
	for(int i=0;i<6;i++){
		high.insert(a[i]);
	}
	for(int i=0;i<15;i++){
		middle.insert(b[i]);
	}
	for(int i=0;i<5;i++){
		low.insert(c[i]);
	}
	string s;cin>>s;
	string ans_high,ans_middle,ans_low;
	for(int i=0;i<s.size();i++){
		
		if(high.count(s[i])!=0){
			//也可以使用计数   high.count(s[i])!=0 
			ans_high.push_back(s[i]);
		}
		else if(middle.count(s[i])!=0){
			ans_middle.push_back(s[i]);
		}
		else{
			ans_low.push_back(s[i]);
		}
	}
	if(ans_high.size()==0){
		cout<<"null"<<endl;
	}
	else{
		cout<<ans_high<<endl;
	}
	if(ans_middle.size()==0){
		cout<<"null"<<endl;
	}
	else{
		cout<<ans_middle<<endl;
	}
	if(ans_low.size()==0){
		cout<<"null"<<endl;
	}
	else{
		cout<<ans_low<<endl;
	}	
	return 0;
} 

3、

由素数组成的数组arr,如果位置相邻的同学抱团位主持人手中的数则抱团成功,
输入:第一行为用例个数n
     接下来的n行表示每一个需要抱团的数
输出:n个 Yes or No
在这里插入代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值