目录
13. 写代码,输入年月日,输出是一年中第几天,然后用黑盒和白盒测试分别测试这个程序
6.map,set的区别,用什么实现的,然后追问二叉树,平衡二叉树。。。
14.时间复杂度,如果一个算法的时间复杂度是O(1)代表的含义是什么
19.int和float的字节数,如果在不同的机型上有没有区别
20.类里有一个int有一个virtual,占多少字节。各在什么位置。
3.事务是什么?事务的特性、主要作用;一致性是啥,隔离级别,分别解决了什么问题?默认是什么级别?序列化是啥,可重复度读是啥。。。
4.索引是什么、结构、原理以及优缺点;为什么使用B+树;什么情况下不建议使用索引;在一列添加索引,什么情况下索引什么并没有生效,如何改进;
10. Mysql Oracle是什么类型的数据库 还有什么其他类型的数据库? Mysql的优势是什么?
17.数据库建表存储引擎怎么选(innodb,myisam的区别)?同一条SQL语句在InnoDB和MyISAM下哪个执行快?
28.输入中文 数据库查询出来是乱码如何解决 例如GBK如何转UTF-8
3. 快速排序、堆排序原理、冒泡排序,最好和最坏的情况下时间复杂度是多少
2. 进程和线程分别是什么?进程和线程的区别?进程间通信的有哪几种方式
3.统计字符串字符再按字典顺序输出,然后一直问还有没有改进空间
测试
1.测试的一些方法,因果图
按测试对象
(1)白盒测试
(2)黑盒测试
(3)灰盒测试
按测试对象是否执行
(1)静态测试
(2)动态测试
按测试手段
(1)手工测试
(2)自动化测试
2.测试的流程
需求分析
(1)梳理清楚需要设计的点是什么
(2)需求来源:需求规格说明书、API文档、竞品分析、个人经验
设计用例
评审用例
配置环境
执行用例
(1)执行用例前会做一个冒烟测试:核心是快速的对当前软件的核心功能进行验证。若有问题,将此版本回退给开发
回归测试及缺陷跟踪
(1)回归测试:指的是当我们将某个缺陷提交给开发,修复完成之后,需要测试人员再次对其进行测试
(2)缺陷跟踪:当测试人员发现某个缺陷之后需要一直对其进行状态的跟踪
输出测试报告
测试过程中产生的数据进行可视化输出
测试结束
产生的文档进行整理归档
3.测试主要测试哪些方面?
功能性、可靠性、易用性、效率性、可维护性、可移植性
4.编写测试用例包括哪几个条目
(1)标题或者描述
(2)前置条件,要执行这个测试所需要满足的条件
(3)用例编号
(4)执行步骤
(5)预期结果
(6)实际结果,这个是每次测试用例执行完后需要填写的
(7)用例执行日期
(8)用例执行者(如果是一个人测试的话,这个字段就是所有用例所共有的)
(9)测试环境:包括软硬件环境,配置信息等,但因为我每次测试都在同样环境中执行不止一个用例,所以测试环境是每次执行的测试用例所共有的信息.
5.兼容性测试是什么?
软件兼容性测试是指检查软件之间能否正确地进行交互和共享信息。
6.测试微信登陆功能
一、界面
1、登录界面是否清晰合理美观,无乱码(文字简洁、无错别字)
二、功能(主要采用等价类、边界值方法)
1、输入正确的用户名、密码,是否登录成功
2、输入错误的用户名或者密码,登录失败有没有提示(用户名或密码为空)
3、不同的登陆方式:手机号、微信号、扫码
4、记住用户名的功能
5、点击登陆页面中的注册、找回密码等是否能跳到正确的页面
6、大写键盘开启,是否提示
三、安全性
1、在登录页面,输入的密码是否隐藏显示
2、多次登录失败,系统会不会阻止后续的尝试以应对暴力破解
3、用户名、密码能否支持复制、粘贴
4、密码输入框内的密码是否都可以在页面源码模式下被查看
四、兼容性
1、不同平台下能否正常打开登录界面,界面正常
2、相同平台下的不同版本能否正常打开登录界面,界面正常
3、不同分辨率下显示是否正常
4、不同网络下显示是否正常
五、性能压力
1、打开登陆页面,需要多长时间
2、输入正确用户名、密码之后点击登录按钮,直到登录成功打开页面,需要多长时间(小于3秒)
3、多个用户同时进行登录操作,相应登录的时间是否会变长(小于5秒)
7.怎样测试用户体验?
(1)感官体验:呈现给用户视听上的体验,强调舒适性。
(2)交互体验:呈现给用户操作上的体验,强调易用/可用性。
(3)情感体验:呈现给用户心理上的体验,强调友好性。
(4)浏览体验:呈现给用户浏览上的体验,强调吸引性。
(5)信任体验:呈现给用户的信任体验,强调可靠性。
8.测试一个刷脸支付的平板,你认为应该测试哪些方面?
【功能靠用,效率可以】
功能性、可靠性、易用性、效率性、可维护性、可移植性
9.APP兼容性怎么测试?
(1)系统
a.安卓 不同版本
b. ios 不同版本
(2)分辨率
(3)网络
a. wifi
b. 4G
(4)其他
数据兼容性(不同版本间的数据兼容)
蓝牙设备兼容性测试 (如果是一款使用蓝牙的应用)
存储卡兼容性测试(比如文件管理器)
第三方软件兼容冲突(比如输入法冲突)
10.测试商家扫客户二维码(提示二维码在app上)
用户角度:
功能性测试:
(1)用户能否成功生成用于支付的二维码
(2)二维码出现后屏幕能否变成增亮的模式,
(3)用户能否成功选取不同的付款方式,比如“花呗”、“账户余额”、“余额宝”、“银行账户”等。
(4)扫码完成后,用户能否收到支付成功的界面,并且界面能正确显示用户支付的金额,包括付款信息、是否使用优惠、折扣等。
界面测试:打开支付宝后,能否正确显示界面,二维码的界面是否正确,支付的每个步骤界面是否正确。
易用性测试:在整个用户支付的过程中,操作步骤是否简易方便。
兼容性:测试扫码支付功能,在不同手机品牌,不同操作系统下是否兼容。
安全测试:二维码如果超过安全时间后能否自动更新为新的二维码。测试整个支付流程的安全机制能否成功实现。
压力测试:持续的扫码,测试扫码支付功能在强压的状态下,工作状态如何。
网络测试:测试在不同网络环境下,不同网络信号强度的情况下,整个支付流程是否出现卡顿,卡顿的点容易出现在哪里。
商家角度:
功能性测试:
(1)扫码后能否成功扫到用户手机中的二维码,
(2)扫码成功后能否收到钱,并且成功生成收款的界面。
(3)支付宝后台、商家后台、用户手机能否成功传输支付结果信息。
易用性测试:在不同光线,屏幕不同亮度的情况下,能否成功完成扫码收款的功能。
其他测试与用户测试差不多。
11.测试实例(登录APP,用手机号得到验证码的方式登录)
通过性测试
输入正确的手机号码,点击获取验证码,查看手机是否收到短信。收到短信后输入验证码,若为登录功能,还应检查是否进行页面跳转,是否正确进行登录,是否可操作登录后应操作的项,若功能为注册,则应查看是否注册成功,去数据库检查数据的正确性,若测试成功后进行非通过性测试
正确的手机号验证的规则为:13,14,15,17,18为开头的11位数字
为空测试
(1)不输入手机号,不输入验证码 直接点击登录或注册等功能点 ,提示不能为空
(2)不输入手机号,只输入验证码 直接点击登录或注册等功能点 ,提示不能为空
(3)输入手机号码,不输入验证码 直接点击登录或注册等功能点 ,提示不能为空
输错手机号码错误测试
(1)输入汉字、小数,字符串,空格及组合在手机号码文本框中,提示手机号码不正确
(2)输入10位,12位数字进行登录,提示手机号码不正确,提示手机号码不正确
(3)输入11位非手机号码进行获取验证码,提示手机号码不正确
验证码
(1)输入错误的验证码,提示请输入正确的验证码
(2)输入多一位或少一位的验证码
(3)明确验证码的失效时长后,在时长之后输入验证码,提示该验证码已失效,请重新获取验证码
12.ATM用户插卡和取钱功能的测试
(1)成功取钱
(2)卡无效
(3)密码错误
(4)余额不足
(5)ATM机余额不足
(6)超过提款限额
13. 写代码,输入年月日,输出是一年中第几天,然后用黑盒和白盒测试分别测试这个程序
黑盒测试
年份 预期结果
能被4整除,不能被100整除的年份
能被4和100整除,不能被400整除
能被4、100、400整除的年份
偶数,不能被4整除
奇数年份
小于0的年份,月,天
不同的月份 1 2 12临界点
不同的日 1 28 29 30 31
白盒测试
(1)语句覆盖
(2)分支覆盖 闰年||平年
14.App买电影票
15.POS机 如何测试
16.测试支付宝的转账中的“转账到银行卡”的功能
C++
0.数组和指针的区别
(1)数组是用于存储多个相同数据类型的集合;指针相当于一个变量,存放的是其他变量在内存中的地址
(2)同类型指针变量可以相互赋值;数组不行
(3)数组在内存中连续存放;指针很灵活,可以指向任意类型的数据
(4)sizeof(数组名)=数组的大小;sizeof(指针),32位系统下=4
(5)数组传参时,会退化为指针
1.指针和引用的区别
(1)指针存储变量的地址,引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名
(2)指针可以为空;引用不可以为空,使用之前必须初始化
(3)指针的值在初始化后可以改变;引用不可以
(4)sizeof指针得到的是指针本身的大小;sizeof引用得到的是变量的大小
(5)指针可以多级;引用只有一级
2.内存分区
(1)代码区:二进制代码
(2)全局区:全局变量,静态变量,常量
(3)堆区:编译器自动分配和释放,存放函数的参数、局部变量。New分配的
(4)栈区:程序员分配和释放
(5)自由存储区:由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
3.静态(成员)函数的作用
(1) 不需要生成一个对象的实例就可以直接使用该函数
(2)提供一种方式访问静态成员变量
(3)避免使用全局函数,为函数设置一个类域的访问权限
4.静态变量,什么时候会用到
(1)变量所包含的对象体积较大,占用内存较多。
(2)变量所包含的对象生命周期较长。
(3)变量所包含的对象数据稳定。
(4)该类的对象实例有对该变量所包含的对象的共享需求。
5.构造函数和析构函数
构造函数用来初始化类对象的成员的,所以当创建类对象就会调用构造函数。特点:
(1)函数名和类名必须一样,没有返回值。
(2)当没有显式的定义构造函数时,系统会自己生成默认的构造函数。
(3)可以重载,不可以为虚函数。
析构函数用来释放对象使用的资源,并销毁非static成员。特点:
(1)函数名是在类名前加上~,无参数且无返回值。
(2)一个类只能有且有一个析构函数,如果没有显式的定义,系统会生成一个缺省的析构函数。
(3)析构函数不能重载。
6.map,set的区别,用什么实现的,然后追问二叉树,平衡二叉树。。。
map和set区别:
(1)map中的元素是key-value(关键字--值)对:关键字起到索引的作用,值则表示与索引相关联的数据;Set就是关键字的简单集合。
(2)set的迭代器是const的,不允许修改元素的值;map允许修改value,但不允许修改key。
(3)map支持下标操作,可以用key做下标,不建议使用;set不支持下标操作。
底层实现都是红黑树。
二叉树:每个节点最多含有两个子树的树结构。
平衡二叉树:任何节点的两个子树的高度最大差为1
红黑树:节点是红色或黑色;根节点、叶子节点是黑色;每个红色节点的两个子节点都是黑色
7. C++的三个基本特征以及每个的具体解释
封装:将对象的属性和行为封装起来,也就是将数据和基于数据的操作封装在一起,保护数据并隐蔽具体的细节,只保留有限的接口与外界联系
继承:是指可以让某个类型的对象获得另一个类型的对象的属性的方法。
多态:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。
底层原理
第一:编译器在发现基类中有虚函数时,会自动为每个含有虚函数的类生成一份虚函数表,该表是一个一维数组,虚表里保存了虚函数的入口地址。
第二:编译器会在每个对象的前四个字节中保存一个虚表指针vptr,指向对象所属类的虚函数表。在程序运行时,根据对象的类型去初始化vptr,从而让vptr指向正确的虚函数表。
8.循环和递归的区别,优缺点
循环:通过设置初始值和终止条件,在一个范围内重复运算
递归:函数内部调用这个函数本身。
(2)优缺点
递归
优点:可读性好;
缺点:浪费空间,而且递归太深容易造成堆栈的溢出。
循环
优点:代码运行效率好,没有额外的空间开销;
缺点:代码不如递归简洁
9.说一下宏
C/C++中的宏定义是进行符号常量定义,宏定义会在预处理阶段将用define定义的内容对代码中相应的标识符进行替换。
使源代码更具有可读性,能在一定程度上提高程序的运行效率。
10.重写和重载的区别
重载:具有不同参数(参数的类型,个数&