个人2020春招面经记录

                          真实的面经
  1. drop/truncate/delete区别
    delete每次删除一行,truncate和drop一次性删除所有数据
    truncate只能对table,delete可以是视图和表
    速度drop>truncate>delete
    删除表用drop, 保留表将数据删除,和事务无关用truncate,和事务有关用delete
    Truncate 比 delete快,使用的系统和事务日志资源少。
    没有备份谨慎用drop和truncate
    Truncate后,表和索引的空间会恢复到初始大小,delete不会减少表和索引所占空间,drop将表所占空间全部释放掉
    Delete每次删除一行,删除操作保存在事务日志,方便回滚。Truncate删除行不能恢复。
  2. tcp和udp的区别
    tcp面向对象的连接,三次握手,udp无连接传输
    tcp可靠、有序、不丢失,udp不可靠传输
    tcp面向字节流,udp面向数据报
    tcp有拥塞控制和流量控制,udp没有
    tcp点到点,udp一对一、一对多、多对一、多对多
    tcp首部20字节,udp首部8字节
    tcp全双工可靠信道,udp不可靠信道
    tcp : smtp telnet http ftp ,udp: dns tftp rip dhcp snmp nfs
  3. 常见游戏引擎
    Unity 3D:诛仙,王者荣耀,仙剑,神庙逃亡
    虚幻引擎:绝地求生
    Cry engine 3:末日之战
    白鹭egret:
    Cocos2D:消消乐
  4. 栈和队列的区别
  5. 栈是先进后出,队列是先进先出
  6. 栈插入和删除操作都在一端,队列插入和删除操作在两段进行
  7. 子网划分掩码问题
  8. http/tcp除了四次握手还有哪些建立连接的方式
    发送RST包表示强制关闭tcp连接

关系数据库的三个完整性
实体完整性、参照完整性、用户定义完整性
五个约束:
Not null unique primary key foreign key check

http端口80,https端口443

构造函数没用返回值,返回的是void*

C和java的优点
C
语言简洁、灵活方便;
运行速度快、效率高
语法限制不严格、程序设计自由度大
缺点:
容易出错
可移植性不好

Java
跨平台能力强
多线程
安全可靠
库函数丰富,节省开发时间
缺点:
灵活性不足

Java的protect。Public。private的范围
Public可以跨类和跨包访问
Private只能被该类的对象访问,子类不能访问,不能跨包
Protect只能被类本身和子类访问
Default在同一个包中访问
一个球100楼
井盖为什么圆
圆的可以滚,方便移动
方便工人疏通下水道
防止井盖竖直掉落

怎么测试微信的点赞功能
功能测试:
是否可以点赞
取消点赞
多次点赞
点赞顺序按时间排列
点赞显示头像和名称
点赞后能否进行评论
点赞之后退出页面点赞消息是否依然存在
多用户点赞再次打开朋友圈是否可以看谁点赞了
接口测试:
点赞后共同好友是否收到提示
相同好友的提示信息是否按时间顺序排列
相同好友点赞是否显示头像和名称
兼容性测试:
手机端和电脑端是否都可以进行点赞和点赞取消功能
不同移动端是否可以点赞和点赞取消
可用性:
弱网是否可以点赞
网络断开是否可以点赞
用户点赞几秒后看到点赞成功
多用户点赞时能否收到全部提示信息
安全性测试:
点赞是否泄漏微信用户相关信息

测试整个流程
需求分析-------测试计划-------测试设计------测试用例编写------测试执行------bug跟踪管理-------测试报告生成
Bug生命周期:
发现---------分配-------修复-------反测------关闭

职业规划
高级测试工程师:
3~4年测试经验,分析需求、获得测试策略方案、参与同行评审、为其他初级测试工程师当顾问、拓展编程语言、操作系统、网络、数据库,具有丰富的行业知识。宏观把控能力,偏向技术管理。补充新的知识、紧跟潮流、有强大技术背景做支持、合理安排团队成员

状态码
200,客户端请求成功
206,实现断点续传或者同时分片下载
300,可选重定向,被请求的资源有一系列可供选择的反馈信息,由浏览器/用户自行选择
301,永久重定向,被永久移动到新的位置
302,临时重定向,请求资源临时从不同的url中获得
304,客户端发送一个带条件的get请求,该请求未被允许,文档内容未被改变
403,服务器收到请求,但拒绝提供服务

单元测试通常在编码阶段做的

每一层的协议
物理层:802.3
数据链路层:hdlc(高级数据链路控制协议,远程用户资源共享和信息交互)、ppp(点对点协议,在点对点连接传输数据包的方法)
网络层:ip(网际协议,负责网络通信)、icmp(控制报文协议,ip主机与路由器之间传递信息)、arp(地址解析协议,ip地址获得物理地址)
传输层:tcp、udp
应用层:ftp、http、dns(域名解析,域名映射到ip地址)、telnet、smtp

软件测试:一种促进鉴定软件正确性、完整性、安全性、质量的过程。在规定的条件下对程序进行操作,发现程序错误,衡量软件质量,对其是否满足设计要求进行评估的过程。

瀑布模型:
项目开发的进程从上一个阶段流到下一个阶段,上一项活动的工作对象作为输入,将输入的成果作为内容传给下一项活动。
软件生命周期:制定计划、需求分析、软件设计、程序编写、软件测试、运行维护。

Ram随机存储内存,断电丢失
Rom只读内存,只能读出事先存的数据

A连接B就要把A的公钥复制到B

数据结构的逻辑结构:集合、树形、线性、图形
物理结构:顺序、链式、索引、散列

软件质量特性:
功能性、可靠性、易用性、效率、维护性、可移植性

Ip数据报字段
版本
首部长度
区分服务
总长度
标识
标志
片偏移
生存时间
协议
首部校验和
源地址
目的地址

软件交付前的测试
单元、集成、系统、确认

测试用例一般需要写:
编号、名称、级别、条件、操作步骤、预期结果、实际结果、执行结果。
测试用例由测试出入数据和预期输出结果两部分组成

结构化程序的三种基本逻辑结构是:
顺序结构、选择结构、循环结构

Unix
建立文件目录 mkdir dirname
删除文件目录 rmdir dirname
改变文件目录 mv oldname newname

好的软件结构外观呈椭圆形

软件实施活动的进入准则
需求工件被基线化
详细设计工件被基线化
构架工件被基线化

QA : 质量保证
QC:质量控制(QC是测试啊)
QM:质量管理

软件测试的二八原则
百分之八十的缺陷出现在百分之二十的代码中,体现了缺陷的群集现象

黑白灰补充
黑盒主要是发现:
是否有不正确或者遗漏的功能
在接口上输入是否能正确接收,能否输出正确结果
是否有数据结构错误或者外部信息访问错误
性能是否满足要求
是否有初始化或者终止性错误
白盒对程序模块的检查:
对程序模块所有独立的路径至少测试一遍
对逻辑判定为真或者假的情况都至少能测一遍
循环边界或者循环界限内执行循环体
测试内部数据结构的有效性
灰盒测试:
主要关注输出对于输入的正确性,关注输出也关注内部结构但关注内部不像白盒那样详细。解决的问题是针对有时候输出正确但其实内部逻辑是错的,但是全用白盒效率会很低。

软件容错:
对于自身的错误具有屏蔽性
可以从错误状态恢复到正常状态
发生错误时能完成预期的功能
在一定程度上具有容错能力
实现容错技术主要是利用冗余
结构冗余、信息冗余、时间冗余、冗余附加技术

扫码的测试点:
功能:
是否可以保存扫码图片,用相册图片进行扫码
扫残缺、模糊是否成功
过小的二维码是否自动放大
二维码的有效期验证,失效的是否可以扫
跳转的页面是否正常
光线暗是否会提示打开手电筒
扫码成功和失败是否有不同的提示音
扫码过程中来电中断会怎么样
性能:
弱网
Cpu、内存占用、耗电
界面:
美观大方
安全:
跳转页面非法是否有提示

终止进程
Kill
默认-15,系统发送信号给程序,程序接到后先释放自己的资源再停止,-9是exit的意思,不会被系统阻塞,能顺利杀掉进程

http常见状态码
1xx 信息,服务器正在处理请求
2xx 成功,请求已正常处理完毕
3xx 重定向,需要额外操作完成请求
4xx 客户端错误,客户端原因导致服务器无法处理请求
5xx 服务器错误状态码,服务器原因导致请求错误

200一切正常、204请求成功但没有内容返回、206服务器完成部分get请求
301永久重定向、302临时重定向、303资源存在另一个URL,应使用get访问、304客户端附带条件但是条件不满足、307临时重定向
400请求报文存在语法或者参数错误,服务器不理解、401发送请求需要http认证,但是认证失败、403请求资源访问被服务器拒绝、404找不到请求资源、500服务器执行请求时出错、502网关错误、503服务器超负载或者正在维修,无法处理请求、504网关超时。

白盒测试的各种区别:
语句覆盖:判断语句都能执行一次
判定覆盖:比语句覆盖增加了false的情况
条件覆盖:对判定条件都取一次,比如a>5&&b<0就取a>5&&b>=0和a<=5&&b<0
判定条件覆盖:每个判定真假各一次,每个判定中条件各一次。a>5&&b<0就取a>5&&b>=0和a<=5&&b<0和a>5&&b<0
组合覆盖:a>5&&b<0就取取a>5&&b>=0和a<=5&&b<0和a>5&&b<0和a<=5&&b>=0所有条件组合
路径覆盖:走完所有路径(特别是if嵌套的时候)

数据库事务的四种特性
原子性、一致性、隔离性、持久性

Tcp粘包、拆包:
粘包、拆包发生原因
发生TCP粘包或拆包有很多原因,现列出常见的几点,可能不全面,欢迎补充,
1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。
2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。
3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。
4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。
等等。
粘包、拆包解决办法
通过以上分析,我们清楚了粘包或拆包发生的原因,那么如何解决这个问题呢?解决问题的关键在于如何给每个数据包添加边界信息,常用的方法有如下几个:
1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。
3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
等等。

Mysql数据恢复到任意时间点
(对误删除的数据恢复就可以恢复到任意一个时间点)
先做全量备份,在基础上回放增加的binlog直到指定的时间点
恢复到备份时间点是mysqldump
一般用mysqldump作完全备份用bin-log做增量备份

ArrayList和LinkedList的区别

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

Linux文件的常用命令
Mkdir创建指定名的文件
Ls打印当前目录清单
Cd切换目录
Pwd查看当前目录的完整路径
Rm删除一个目录中的文件
Rmdir删除空目录
Mv移动文件或将文件改名
Cp复制文件或目录
Touch修改文件时间戳或者新建一个不存在的文件
Cat连接文件或者标准输入打印,显示文件内容
More,类似于cat,more一页一页的显示,sapce键就下一页,b就回退一页
Tail,从指定点开始将文件输出到标准输出流

Osi同层水平方向传送的数据单元是pdu协议数据单元
相邻层的接口叫idu接口数据单元
相邻层之间的服务是通过SAP服务访问点进行的

3G的三种制式
移动的TD-SCDMA
联通的WCDMA
电信的CDMA2000

内聚性最高的是逻辑内聚

C语言的基本单位是函数

成员函数不一定是内联函数、成员函数可以重载、成员函数是静态的

C语言赋值不能连等

进程通信方式:管道、消息队列、共享内存、信号量、socket、信号、文件锁
线程通信方式:共享内存、消息传递

Continue只能跳出本次循环,继续下一次循环。For是可以跳出整个循环的

字符串拷贝函数
Char* cpy(char *des, char *src)
{
Char *p=des;
While(*des++=*src++)
Return p;
}

属于ddl(数据定义语言data define language)的有哪些
Create alter drop
属于dml(数据库操纵语言 data manipulation language)
Select update insert delete

数据库的范式
第一范式:添加一个规范要求,所有域都是原子性的,即数据库的每一列都是不可分割的院子数据列
第二范式:数据库表中的每个实例或记录都必须可以唯一的区分
第三范式:任何非主属性不依赖于其他非主属性
第四范式:任何非主属性不能对主键子集依赖

ER图
矩形----实体
椭圆形—属性
菱形—-实体联系

static变量也称作静态变量,静态变量和非静态变量的区别是:
静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。
而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

指令周期由若干机器周期组成,1机器周期=6状态周期=12时钟周期

渗透测试
通过模拟恶意黑客攻击方法,评估计算机网络系统安全。

主键外键索引
主键:能唯一标识表中的一条记录的属性组
外键:用于两个表的数据连接
索引:就是为了让查询效率加快
唯一键:保证对应字段数据的唯一性

OSI七层模型
物理层、数据链路层、网络层(icmp、igmp、ip、arp)、传输层(tcp、udp)、会话层、表示层、应用层(http、ftp、dhcp、smtp、dns、telnet、pop3)
优点:
开放的标准化接口、统一结构、模块化设计、网络分层
数据在产生的过程中每一层处理都会在前面封装上该层相应的数据,封装上去的这层就是协议数据单元(PDU)
原则:
同一层通信
逐层传输,不能跃层
每一层使用下层提供的服务,向上层提供服务
设备:
物理层:网卡、网线、集线器、中继器、调解调制器
数据链路层:网桥、交换机
网络层:路由器

Java垃圾回收机制
后台创建守护进程,在内存紧张时自动跳出来把内存的垃圾进行回收,保证程序正常运行
引用计数法或可达性分析法判断是不是垃圾
过程:
1.标记 2清除 3.压缩
垃圾回收机制能自动释放内存空间,减少编程负担。是java安全性策略的重要部分。
影响性能,需要判断有用无用。

栈的使用场景:
函数调用与返回、表达式求值、括号匹配、进制转化
队列应用场景:
实现多任务的重要机制

迭代器的作用:
检查容器内元素并遍历元素的数据类型

Linux删除目录
Rm -rf 目录名字
-r表示向下递归、-f表示直接强行删除

单元测试是白盒测试、集成测试是黑盒测试

指针数组和数组指针
指针数组是一个数组,数组里面的元素都是指针
数组指针,是指针,指向数组的指针

Const和static不能同时修饰成员

指针和引用的区别

  1. 指针是一个变量,变量存储的是一个地址,引用是一个别名
  2. 指针可以为空,引用必须初始化
  3. 指针可以有多级,引用只能有一级
  4. Sizeof指针是4,引用是指向对象的大小
  5. 指针在初始化后可以改变,引用在初始化后不能改变
  6. 指针有const,引用没有const

Static关键字:

  1. 全局静态变量
    在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.
    静态存储区,在整个程序运行期间一直存在。
    初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);
    作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。
  2. 局部静态变量
    在局部变量之前加上关键字static,局部变量就成为一个局部静态变量。
    内存中的位置:静态存储区
    初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);
    作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且值不变;
  3. 静态函数
    在函数返回类型前加static,函数就定义为静态函数。函数的定义和声明在默认情况下都是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
    函数的实现使用static修饰,那么这个函数只可在本cpp内使用,不会同其他cpp中的同名函数引起冲突;
    warning:不要再头文件中声明static的全局函数,不要在cpp内声明非static的全局函数,如果你要在多个cpp中复用该函数,就把它的声明提到头文件里去,否则cpp内部声明需加上static修饰;
  4. 类的静态成员
    在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。对多个对象来说,静态数据成员只存储一处,供所有对象共用
  5. 类的静态函数
    静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。
    在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员(这点非常重要)。如果静态成员函数中要引用非静态成员时,可通过对象来引用。从中可看出,调用静态成员函数使用如下格式:<类名>::<静态成员函数名>(<参数表>);

面向对象编程的三大特性是 封装、继承、多态。
封装:是指对象把自己的数据和对数据的操作封装在了一起;
继承:是指子类对父类的继承,子类把父类的数据和对数据的操作继承了过来,同时又增添了自己的数据和对数据的操作;
多态:主要有两种类型的多态。一种是操作的名称的多态,即多个操作的名称一样,但接受的消息类型必须不同;另一种是与继承相关的多态,来自不同类型的对象对同一操作的调用产生不同的效果。 在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

Linux查看端口占用
Netstat

区分前端和后端的问题
如何区分前端问题和后端问题?
前台的bug通常是功能、界面和兼容性等有关;
后台的bug与逻辑、性能和安全性有关。
与数据相关的错误、排序问题大多是后台问题;
对于APP页面toast提示可能是后台给的,可能是APP给的。
(1)检查接口
前端和后台之间是通过接口文件相互联系的,测试人员可以通过查看接口文件,来区分前端和后台bug。
(2)情况分析
a、检查请求的数据是什么?反馈的数据又是什么?
通过抓包工具来进行抓包分析。
大多数的浏览器都有自带的抓包插件,如 FireFox 的 FireBug 插件,Chrome、360急速模式、搜狗高速模式自带的 DevelopTools 插件(F12开启),在 NetWork 中可以看到当前页面发送的每一个http请求。请求接口、传参、响应三部分来判断Bug,另外,也可以在浏览器的控制台进行js代码调试定位。
1)请求接口URL是否正确
如果请求接口URL不正确,为前端Bug;
2)http请求中的参数是否正确
如果http请求中的参数不正确,为前端Bug;
3)如果接口URL和参数都正确,查看响应内容是否正确
如果这种情况下响应内容不正确,则为后端Bug
4)如果JS基础比较好的话,也可以在浏览器的控制台中输入JS代码进行调试。
b、根据接口的文件,检查数据是否正确。
如果发送的数据是正确的,但是后台反馈的数据是不符合需求的,那就是后台的问题。
如果前端没有请求接口,或者请求的时候发送数据与需求不符,那这个时候就是前端的问题了。

测试用例的设计方法:
等价类划分
边界值分析
错误推断
判定表
正交实验

Having和where的区别
having语句一般结合GROUP BY一起使用的
Having短语与WHERE的区别
WHERE子句作用于基表或视图,从中选择满足条件的元组。HAVING短语作用于组,从中选择满足条件的组。where是从查询满足条件的数据,用于查询数据之前;having用于在查出的数据中挑选满足条件的数据,在数据查出来之后处理。
软件测试5C标准
Correct(准确):每个组成部分的描述准确,不会引起误解
Clear(清晰):每个组成部分的描述清晰,易于理解
Concise(简洁):只包含必不可少的信息,不包括任何多余的内容;
Complete(完整):包含复现该缺陷的完整步骤和其他本质信息
Consistent(一致):按照一致的格式书写全部缺陷报告

左连接右连接区别
left join (左连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
right join (右连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。
full join (全外连接):返回左右表中所有的记录和左右表中连接字段相等的记录。

软件测试基本流程:
需求分析
测试计划
编写测试用例
测试执行
输出测试报告
文件修改命令:
Vi filename打开一个文件
查看ip地址命令:
Ifconfig
查看cpu、内存占用
Top

打开网页到显示的过程:

  1. DNS解析,将域名映射到ip地址
  2. Tcp连接,三次握手
  3. 发送http请求,主机向服务器请求数据
  4. 服务器发送html文件给浏览器
  5. 浏览器渲染显示网页

ABC类地址
A:1.0.0.0-126.255.255.255, 子网掩码:255.0.0.0
B:128.0.0.0-191.255.255.255 子网掩码:255.255.0.0
C:192.0.0.0-223.255.255.255 子网掩码:255.255.255.0

析构函数的作用
析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)。

查询选修了3门以上课程的学生学号
Select sno from sc group by sno having count ( * ) > 3

预处理、编译、汇编、链接
预处理:根据程序中#开头的命令执行相关操作,并生成一个新的 .i文件
编译:编译器ccl将.i翻译汇编程序存储在.s中
汇编:将汇编程序翻译成机器语言存储为.o(二进制文件)
链接:生成可执行文件

MySQL数据增删查改
增加: insert into 表名(字段名1,字段名2….)values (value1 , value2,….)
删除: delete from 表名 where condition
查询: select * from 表名
更新: update 表名 set 字段名1=value1, 字段名2=value2.

重载和重写
重写:子类对父类的方法进行重新辨析额,返回值和形参都不能改变。可以根据子类的需要,定义自己的行为。
重载:在一个类里面,方法名字相同,参数不同,返回类型可以相同也可以不同。每个重载方法有独一无二的参数列表。

Linux查看当前目录 新建空文件 新建目录 netstat
查看当前目录:pwd
新建空文件:touch
新建目录:mkdir
Netstat:监控tcp/ip 网络的工具。显示路由表、网络连接、网络接口设备状态
查看ip地址: ifconfig –a

多态
派生类对象的地址可以赋给基类的指针。通过基类指针调用函数时,编译时并不能确定是调用的基类还是派生类的函数。如果基类指针指向的是基类对象就调用的是基类的函数,基类的指针指向派生类的对象时就调用的派生类的函数。

软件测试流程
需求分析-------测试计划------测试设计------搭建环境------测试执行------测试记录------缺陷管理

等价类划分有效等价类和无效等价类
1)有效等价类 是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明所规定的功能和性能。
2)无效等价类 指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。

猜你喜欢

转载自blog.csdn.net/alike_meng/article/details/106601842