招银网络---C++
Posted qq_1248742467
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了招银网络---C++相关的知识,希望对你有一定的参考价值。
基本情况信息
1.自我介绍
2.项目介绍
3.为什么要做测试,不去做开发
4.测试需要哪些技能
需要一定的代码能力、了解计算机网络TCP/IP协议、熟悉数据库、软件测试的基础理论、协调沟通能力
5、找工作你最看重什么,报酬、价值观、稳定性
价值观
工作中,有合得来的同事在能更好地合作、有脾气好,能听进意见的领导能更好地沟通、有更多的成长空间和学习机会能更好地努力、遇到的客户和事情能有效处理就有更高的效率。比起这些,给的工资只需要满足基本生活要求就可以,因为90后现在更缺的不是金钱,而是符合其要舒适工作价值观的职业环境。
6、如果有同事没有完成任务,影响到你的进度,你怎么办
首先,必须得保证任务完成,因此我肯定会帮忙。后面再委婉得告诉他,我们下次提前一些完成,免得遇到突发情况无时间应对
9、项目三要素,范围、时间、成本,让你舍弃一个,你舍弃什么?
10、对公司有什么了解?
招银网络属于招商银行的子公司,主要是作为招商银行总行科技的重要力量,招银网络科技的核心业务是为招商银行全球化发展提供强有力的软件开发及技术支持
11、概括个人特质(缺点与不足是如何改善的?)
优点:自信开朗,学习能力强,能适应不同的环境,勤奋自律
缺点:小拖延
12、如果工作中遇到自己无法解决的问题,如何与领导沟通?
首先,把目前所遇到的问题每一点都捋清楚,然后给出可能的解决方法,与领导一起商量
13、期望薪资
20W
14、加班能接受吗
C++
1、链表和数组的区别
1、链表是链式存储结构,数组是顺序存储结构;
2、链表通过指针连接元素,而数组则是把所有元素按顺序进行存储;
3、链表插入和删除元素不需要移动元素,数组删除和增加元素需要移动元素
2、讲一下哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
*3、二叉树的前序中序后序*
4、C++虚函数和纯虚函数
- 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。
2.虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。 - 虚函数的定义形式:virtual {method body}
纯虚函数的定义形式:virtual { } = 0;
在虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时候要求前期bind,然而虚函数却是动态绑定(run-time bind),而且被两者修饰的函数生命周期(life recycle)也不一样。
5、重写和重载
重载和重写的区别:
(1)范围区别:重写和被重写的函数在不同的类中,重载和被重载的函数在同一类中。
(2)参数区别:重写与被重写的函数参数列表一定相同,重载和被重载的函数参数列表一定不同。
(3)virtual的区别:重写的基类必须要有virtual修饰,重载函数和被重载函数可以被virtual修饰,也可以没有。
6、vector和数组的区别
1、内存中的位置
C++中数组为内置的数据类型,存放在栈中,其内存的分配和释放完全由系统自动完成;vector,存放在堆中,由STL库中程序负责内存的分配和释放,使用方便。
2、大小能否变化
数组的大小在初始化后就固定不变,而vector可以通过push_back或pop等操作进行变化。
3、初始化
数组不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值;而向量可以。
4、执行效率
数组>vector向量。主要原因是vector的扩容过程要消耗大量的时间。
数据库
1、数据库有哪些数据类型,其中时间类型和字符串有什么区别
字符串转时间戳
select unix_timestamp(‘2019-01-20’);
时间戳转字符串
select from_unixtime(1451997924,’%Y-%d’);
2、左右内外连接的区别,关键字是什么
左连接: 在 LEFT JOIN 左边的表里面数据全被全部查出来,右边的数据只会查出符合ON后面的符合条件的数据,不符合的会用NULL代替。
右连接: 与 LEFT JOIN 正好相反,右边的数据会会全部查出来,左边只会查出ON后面符合条件的数据,不符合的会用NULL代替。
内连接: 相当于左连接与右连接的合并,去掉所有含NULL的数据行,剩下的就是查询出来的数据了。其实就是两边的表都必须满足条件。
3、char和v_char的区别
char有固定的长度,而varchar属于可变长的字符类型。
char(N)用来存储非二进制字符串,插入时,对于少于N个字符的会自动在尾部加空格,查询时,尾部的空格就会被丢弃掉
vachar(N) 用来存储非二进制字符串,插入时,对于少于N个字符的不填补空格,查询时,尾部的空格不会被丢弃掉
4、常见的网络攻击类型和防范
5、数据库去重
SELECT distinct job FROM powernode.emp;
6、数据库查看有多少行
select table_name,table_rows from tables where TABLE_SCHEMA = 'databaseName' order by table_rows desc;
select sum(table_rows) from tables where TABLE_SCHEMA = "test" order by table_rows asc;
7、数据结构几个排序算法
8、一张表有学生姓名、班级、分数,找出平均分大于60的班级;
select distinct from student order by stu_id
9、数据库的密码怎么改
1.打开cmd进入mysql的bin目录;(如我的路径是F:\\MySQL\\mysql-5.7.24-winx64\\bin)
2.通过输入命令 mysql -u root -p 指定root用户登录MySQL,输入后回车会提示输入密码,输入我们原来的密码然后回车。
3.修改MySQL的root用户密码,格式:mysql> set password for 用户名@localhost = password(‘新密码’);
例如(上面例子将用户root的密码更改为root):mysql> set password for root@localhost = password(‘root’);
4.退出mysql重新登录,输入新密码root登录就可以了;
10、数据库如何创建一个存储过程
存储过程,带有逻辑的sql语句
1)执行效率非常快!存储过程是在数据库的服务器端执行 2)移植性很差!不同的数据库的存储过程是不能移植的。
11、MySQL的监听端口,安装后有几个库
默认监听端口号是3306
四个库:
information_schema,数据字典
performance_schema,主要用于收集数据库服务器性能参数
mysql 系统表
test 空白
12、对视图的了解,视图有持久性吗;
视图(VIEW)也被称作虚表,即虚拟的表,是一组数据的逻辑表示,其本质是对应于一条SELECT语句,结果集被赋予一个名字,即视图名字。
视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化,视图数据也随之变化。
不具备持久性
13、商品数量减少,但数据库没更新的原因
不可能每秒就查询一次当前的值,可能是查询的时间间隔还没到
计网
1、三次握手四次挥手,为什么是这么多次。
2、计网有哪些层,每一层的作用,有哪些协议,https原理
3、https和http区别
4、线程和进程的区别,多线程怎么保证互不干扰;
5、死锁,死锁了怎么办;
6、cookie session
7、哈希map,哈希table
8、B+树
代码
1、找出字符串中重复的字符?怎么测试(count计数)
#include<iostream>
#include <vector>
#include <string>
#include <set>
#include <algorithm>
using namespace std;
int main(){
string s;cin>>s;
vector<char> ans;
for(int i=0;i<s.size();i++){
//直接count计数就可以了
int k=count(s.begin(),s.end(),s[i]);
if(k>1){
ans.push_back(s[i]);
}
}
set<char> s1 (ans.begin(),ans.end());
vector<char> ans1(s1.begin(),s1.end()); //去重
for(int i=0;i<ans1.size();i++){
cout<<ans1[i]<<" ";
}
return 0;
}
2、常用语言是C++,写一道水仙花数
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153。
输入: m n
输出: m n 范围内的水仙花数
#include<iostream>
#include <vector>
#include <cmath>
using namespace std;
int main(){
int m;cin>>m;int k=m;vector<int> ans;
//m一直在改变呀
while(m){
ans.push_back(m%10);
m=m/10;
}
int result=0;
for(int i=ans.size()-1;i>=0;i--){
result += pow(ans[i],3);
}
if(result == k){
cout<<"是水仙花"<<endl;
}
else cout<<"不是水仙花数"<<endl;
return 0;
}
3、代码题:检测输入字符的合法性,输出规定的计算结果
#include <iostream>
#include <string>
using namespace std;
int main()
{
int a, b,c;
string name;
cin >> name;
a = name.find_last_of('c');//从后往前数 第一个出现字符C的index
b = name.find_last_of('.');//从后往前数 第一个出现字符.的index
c= name.find_first_of('.');//从前往后数 第一个出现字符.的index
cout<<a<<" "<<b<<" "<<c<<endl;
if (a==name.length()-1&&b == name.length()-2&&a!=string::npos&&b!= string::npos&&c!=0)
cout << name +"pp";
else cout << "invalid";
return 0;
}
4、闰年写测试用例
#include <iostream>
using namespace std;
int main()
{
int n;cin>>n;
int k=((n%4==0 && n%100==0) || n%400==0);
if(k!=0){
cout<<"是闰年"<<endl; //2000
}
else cout<<"不是闰年"<<endl; //1990
return 0;
}
5、判断回文
/*判断回文数*/
#include<iostream>
#include<vector>
using namespace std;
bool func(int n){
vector<int> arr;
while(n){
arr.push_back(n%10);//各位
n= n/10;
}
for(int i=0;i<arr.size()/2;i++){
if(arr[i]!=arr[arr.size()-i-1]){
return false;
break;
}
else{
return true;
}
}
}
int main(){
int n;
while(cin>>n){
if(n<0){
cout<<"不是回文数"<<endl;
}
else{
if(func(n)){
cout<<"是回文数"<<endl;
}
else{
cout<<"不是回文数"<<endl;
}
}
}
return 0;
}
6、重新解释一下数组去重的原理
7、队列和栈的区别,c=a+++b,用栈实现队列;
(1)队列的插入称为入队,队列的删除称为出队;栈的插入称为进栈,栈的删除称为出栈。
(2)队列是在队尾入队,队头出队,即两边都可操作;栈的进栈和出栈都是在栈顶进行的,无法对栈底直接进行操作。
(3)队列是先进先出(FIFO),即队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(不能从中间插入),每次离开的成员总是队列头上(不允许中途离队);而栈为后进先出(LIFO),即每次删除(出栈)的总是当前栈中最新的元素,即最后插入(进栈)的元素,而最先插入的被放在栈的底部,要到最后才能删除。
8、n的阶乘;
#include <iostream>
using namespace std;
int main()
{
int n;cin>>n;
int ans=1;//4!=4*3*2*1
while(n){
ans *=n;
n--;
}
cout<<ans<<endl;
return 0;
}
9、代码字符串倒序
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string s;cin>>s;
string s1;cin>>s1;
reverse(s.begin(),s.end()) ;
cout<<"s: "<<s<<endl;
for(int i=0;i<s1.size()/2;i++){
swap(s1[i],s1[s1.size()-i-1]);
}
cout<<"s1: "<<s1<<endl;
return 0;
}
测试
1、测试一个web页面
一、功能测试
输入正确的用户名和密码,点击提交按钮,验证是否能正确登录,登录成功后跳转至对应的页面;
输入错误的用户名或者错误的密码,点击提交会登录失败,并且有相应的错误提示框;
登录成功后能否能否跳转到正确的页面;
用户名和密码,如果太短或者太长,应该怎么处理;
用户名和密码,中有特殊字符,和其他非英文的情况,是否允许输入等;
用户名和密码前后有空格的处理;
密码是否以星号(*)显示;
记住用户名的功能(用户名和密码是否可以被浏览器记住)
登陆失败后,不能记录密码的功能;
二、界面测试
布局是否合理,2个testbox和一个按钮是否对齐;
testbox和按钮的长度,高度是否复合要求;
界面是否好看;
图片,颜色,字体,超链接,是否都显示正确
三、性能测试
打开登录页面需要几秒
输入正确的用户名和密码后,登录成功后跳转到新页面不超过5S
能同时支持多少个用户同时登录
四、安全性测试
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取);
用户名和密码是否通过加密的方式,发送给Web服务器;
用户名和密码的验证,登录完成后查看服务器日志验证正确,而不仅仅是前端javascript验证;
用户名和密码的输入框,应该屏蔽SQL注入攻击;
用户名和密码的的输入框,应该禁止输入脚本(防止XSS攻击);
错误登陆的次数限制(防止暴力破解);
五、可用性测试
是否可以用全键盘操作,是否有快捷键;
输入用户名和密码后按回车,是否可以登录;
六、兼容性测试
主流的浏览器下能否显示正常,并且功能正常(IE,7,8,9,10,Firefox, Chrome, Safari,等);
不同的平台是否能正常工作,比如Windows, Mac;
移动设备上是否正常工作,比如Iphone;
2、测试他们的系统,钱转出去没到账有哪些可能原因
网络延迟
收款人的资料填写错误,比如账号呀
转账需要一定的时间
系统故障
3、对于掌上银行app中积分商城这个对象,你会从哪些方面去测试它
登录界面,积分获得、积分到账,积分有效期限,积分更新,消费、信息更新,交易功能,不同网络条件下的功能测试
4、测试一个拨打电话的功能
功能:
性能:拨打之后,对方多久能收到;双方通话的延迟时间;双方通过的耗电量;
异常:在通话中是否能拨打电话;在通话中是否能接听电话;
弱网:没有信号 5G 4G 3G 2G wifi
兼容:不同的运营商 不同的系统 不同的机型 不同的版本
5、举例子讲一下边界值测试
银行转账有一些限额,好像每天在ATM上最多只能取两万
取带小数的
取不是100的整数(199)
取3000
取20000
6、银行查询余额功能测试?
1、没有钱可以查么
2、
7、微信扫码测试
以上是关于招银网络---C++的主要内容,如果未能解决你的问题,请参考以下文章