一面:(大概四十分钟)

1、自我介绍
2、实习和项目
3、代码题:回文数

/*判断回文数*/
#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;
}

4、各种排序算法]

5、内存溢出泄露原因、解决办法
内存溢出 out of memory: 指程序要求的内存超出了系统所能分配的范围,出现out of memory;比如创建一个大的对象,而堆内存放不下这个对象,这也是内存溢出。
检测:使用Memory Analyzer (MAT)进行内存分析
危害有以下两点:
1)程序崩溃,导致拒绝额服务
2)跳转并且执行一段恶意代码
造成缓冲区溢出的主要原因是程序中没有仔细检查用户输入。

内存泄露 memory leak: 是指程序在申请内存后,无法释放已申请的内存空间(指分配出去的内存无法被gc回收)。
检测方法: 测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当 程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。(分配+1,释放减1)
或者使用VLD即可

区别:
1、内存泄露可能会导致内存溢出。
2、内存溢出会抛出异常,内存泄露不会抛出异常

6、与内存有关的Linux指令
top 查看内存占用 (top)
free 查看内存使用情况 (free -m)
df 查看硬盘空间 (df -lh)

7、方法和函数的区别
相同点:一段代码;通过名字来进行调用;
不同点:
(1) 所有传递给函数的数据都是显式传递的, 函数和对象无关。
(2)方法中的数据是隐式传递的;方法和对象相关。
 方法可以操作类内部的数据(请记住,对象是类的实例化–类定义了一个数据类型,而对象是该数据类型的一个实例化)
(3)在类中的函数叫方法,不在类中的函数叫函数。

8、怎么判断一个bug是前端还是后端的
通过请求与响应来判断。

如果前端已经把数据发送给了后端,后端接到请求,而后端没有返回数据请求/返回有误,则是后端出了问题;

如果前端在用户输入数据后,发送的请求没有带数据或者出错,则是前端的问题,或者后台已经传回了数据,但在前端显示不出来,这是前端问题。

9、linux查看日志语句

tail:     -n  是显示行号;相当于nl命令;例子如下:
tail  -100f   test.log      实时监控100行日志
tail  -n  10  test.log   查询日志尾部最后10行的日志;
tail  -n +10  test.log    查询10行之后的所有日志;

head:   head -n 10  test.log   查询日志文件中的头10行日志;
 head -n -10  test.log   查询日志文件除了最后10行的其他所有日志;
 
cat: tac是倒序查看,是cat单词反写;例子如下:
cat -n test.log |grep "debug"   查询关键字的日志

10、数据库建表,,增加,删除,查看
建立:

create table student (id int,name varchar(20),age int);

增:

insert into  <表名> (字段1,字段2,字段2) VALUES (?,?,?);
Insert into student (id,name,age) values (1,’Tj’,18)

Delete(对字段)/drop(表)    
alter table  <表名>   drop column <字段名称>; //删除字段
delete form <表名> where 字段名 =值;        //删除记录
drop <表名>;//删除表

改:

Alter(对表)/update(对字段)
alter table <表名> add <字段名> <字段类型>(长度)
alter table <表名> modify <字段名> <字段类型>(长度)
update <表名> set money=money-100 where name=’张三’;

查:

selete * from <表名> where 字段名 = 值
selete * from <表名> where 字段名 = 值 and 字段名 = 值

11、drop和delete的区别

drop主要用于删除结构
例如删除数据库:drop database XX,删除表 drop table XX。字段也是结构的一种,也可以使用drop了?对的,但是我们改变了表结构要先alter方法。例如,我们要删除student表上的age字段的信息,可以这样写:alter table student drop age

delete主要用于删除数据
举个例子,要删除 student表上名字为‘张三’的所有信息:delete from student where name=‘张三’。这种情况下用delete,由此可见delete常用于删除数据。

12、测试流程,测试分工

单元测试、集成测试、确认测试、系统测试、验收测试

单元测试: 分别完成每个单元的测试任务,以确保每个模块能正常工作。单元测试大多采用白盒测试,尽可能地发现模块内部的程序错误。
集成测试: 把以测试的模块进行组装,进行集成测试。大多采用黑盒测试,目的在于检验与软件设计相关的程序结构问题。

确认测试: 完成集成测试后,对开发工作初期指定的准则进行检验。采用黑盒测试,检验软件是否完成所有功能和性能需求

系统测试: 完成确认测试后,给出合格的软件产品,系统测试就是为了检验所开发的软件能否与系统的其他部分(硬件、数据库等)协调合作

**验收测试:**突出了客户的作用,软件开发人员也有一定的参与。

测试流程
1、测试需求分析阶段:阅读需求,理解需求,主要是对业务的学习,分析需求点,参与需求评审会议。
2、测试计划阶段:主要任务是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。
3、测试设计阶段:主要是编写测试用例,会参考需求文档(原型图),概要设计,详细设计等文档,用例编写完成之后会进行评审。
4、测试执行阶段:搭建环境,执行冒烟测试(预测试),然后进入正式测试,bug管理直到测试结束
。5、测试评估阶段:出测试报告,确认是否可以上线。

测试分工:测试分工具体内容 按照测试类型分工
按项目模块划分
按测试流程划分
按测试内容分工

13、用例设计:发朋友圈

二面:(大概二三十分钟)

1、数据库、联合索引

2、是否可实习

3、什么时候毕业

4、期望薪资

反问

1、工作要涉及的技术栈以及工作内容了解情况