• 4
  • 5
分享

经过艰苦的3技术+1HR面,终于告别0offer了,这是面试测试之前整理的牛友们的面经,答案来着互联网,有不合适的地方请大家指出。技术面中除了问项目,其余80%的问题来自牛友们提供的面经,祝大家找到合适的offer。

  • http和https的区别

  • https协议需要到CA(CertificateAuthority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。

  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

  • http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

  • linux命令,找出关键字出现的次数

  • 语法:grep字符串文件名|wc-l,grep输出,wc-l按行统计

例子:

  • 统计task-hbase-transform.log中NullPointerException出现的次数:grepNullPointerExceptiontask-hbase-transform.log|wc-l。

  • 如果是多个字符串出现次数,可使用:grep'objStr1\|objStr2'filename|wc-l#直接用|链接起来即可。

数据库查找,学生成绩单里两门成绩>80的学生名字

SELECTS.name
FROMStudentS
WHERES.score>80
GROUPBYS.name
Havingcount(*)>=2;

浏览器中输入一个URL后,按下回车后发生了什么

1、浏览器查找域名的IP地址

图1.jpg

2、浏览器与目标服务器建立TCP连接

  • http协议建立在tcp协议之上,http请求前,需先进行tcp连接,形成客户端到服务器的稳定的通道。俗称TCP的三次握手。

  • tcp连接完成后,http请求开始,请求有多种方式,常见的有get,post等。

  • http请求包含请求头,也可能包含请求体两部分,请求头中包含我们希望对请求文件的操作的信息,请求体中包含传递给后台的参数。

  • 服务器收到http请求后,后台开始工作,如负载平衡,跨域等,这里就是后端的工作了。

  • 文件处理完毕,生成响应数据包,响应也包含两部分,响应头和相应体,响应体就是我们所请求的文件。

  • 经过网络传输,文件被下载到本地客户端,客户端开始加载。

3、html页面的解析与渲染

  • 客户端浏览器加载了html文件后,由上到下解析html为DOM树(DOMTree)。

  • 遇到css文件,css中的url发起http请求。

  • 这是第二次http请求,由于http1.1协议增加了Connection:keep-alive声明,故tcp连接不会关闭,可以复用。

  • http连接是无状态连接,客户端与服务器端需要重新发起请求--响应。在请求css的过程中,解析器继续解析html,然后到了script标签。

  • 由于script可能会改变DOM结构,故解析器停止生成DOM树,解析器被js阻塞,等待js文件发起http请求,然后加载。这是第三次http请求。js执行完成后解析器继续解析。

  • 由于css文件可能会影响js文件的执行结果,因此需等css文件加载完成后再执行。

  • 浏览器收到css文件后,开始解析css文件为CSSOM树(CSSRuleTree)。

  • CSSOM树生成后,DOMTree与CSSRuleTree结合生成渲染树(RenderTree)。

  • RenderTree会被css文件阻塞,渲染树生成后,先布局,绘制渲染树中节点的属性(位置,宽度,大小等),然后渲染,页面就会呈现信息。

  • 继续边解析边渲染,遇到了另一个js文件,js文件执行后改变了DOM树,渲染树从被改变的dom开始再次渲染。

  • 继续向下渲染,碰到一个img标签,浏览器发起http请求,不会等待img加载完成,继续向下渲染,之后再重新渲染此部分。

  • DOM树遇到html结束标签,停止解析,进而渲染结束。

无效链接

  • 死链接(DeadLinks)指的是无效链接,也就是那些不可到达的链接。通俗地理解是以前可以通过点击这个链接到达网站页面,后续可能由于网站迁移、改版或操作不当等原因,使得链接指向的目标页面不存在而无法访问所遗留的链接,即称为死链接。

  • 访问死链接时,一般会出现“抱歉,您所访问的页面不存在”的提示信息或者404状态页面。

进程和线程

区别:

  • 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

进程与线程的资源

  • 线程共享:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。

  • 线程独有:栈(保存其运行状态和局部自动变量)、程序计数器。

进程与线程的同步

  • 进程:无名管道、有名管道、信号、共享内存、消息队列、信号量

  • 线程:互斥量、读写锁、自旋锁、线程信号、条件变量

僵尸进程

  • 定义:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或者waitpid获取子进程的状态信息,那么子进程的进程描述符等一系列信息还会保存在系统中。这种进程称之为僵死进程。

  • 危害:在Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processstable)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。

处理方法:

  • 改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。这是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

  • 把父进程杀掉。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

孤儿进程

  • 父进程运行结束,但子进程还在运行(未运行结束)的子进程就称为孤儿进程。孤儿进程最终会被init进程(进程号为1)所收养,因此init进程此时变成孤儿进程的父进程,并由init进程对它们完成状态收集工作。(linux下,init是内核启动的第一个用户级进程,init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程。)

Linux命令

  • "|":管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

  • grep:-v不显示匹配上的内容;-n显示匹配上的内容

  • grep-vdown,显示不包含down的内容。

  • grep-ndown,显示包含down的内容。

  • du:(diskuse)显示每个文件和目录的磁盘使用空间。

  • df:(diskfree)显示磁盘分区上可以使用的磁盘空间。

单例模式

  • 什么情况下会用到:假如有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建AppConfig对象的实例,这就导致系统中存在多个AppConfig的实例对象,在配置文件内容很多的情况下会严重浪费内存资源。类似AppConfig这样的类,我们希望在程序运行期间只存在一个实例对象。

  • 优点:速度快、在使用时不需要创建、直接使用即可。

  • 缺点:可能存在内存浪费

GET和POST的区别

  • GET在浏览器回退时是无害的,而POST会再次提交请求。

  • GET产生的URL地址可以被Bookmark,而POST不可以。

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的,而POST么有。

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Requestbody中。

APP是用多进程安全还是用多线程安全

  • 写网页(html,js,css)的,写的很随意,导致chrome渲染的时候出现bug,整个chrome崩掉,我google再nb的程序员也写不出来0bug的浏览器,单个页面不行就算了,我越界到别人地址上了,大家一块崩溃吧。

  • 插件也是参差不齐,插对了没问题,插错了不但是把自己弄坏,整个进程崩了,其他线程也别活了。

  • 别有用心者,我是黑客要努力的超越漏洞,我从页面a刺穿到别人的页面上(安全性问题).

  • 原因:多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

序列化和反序列化

定义:Java序列化就是指把Java对象转换为字节序列的过程。Java反序列化就是指把字节序列恢复为Java对象的过程。

作用

  • 序列化:在传递和保存对象时,保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。

  • 反序列化:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

总结

  • 核心作用就是对象状态的保存和重建。

TCP和UDP的区别、特点

TCP的主要特点是:

  • 面向连接。

  • 每一条TCP连接只能是点对点的(一对一)。

  • 提供可靠交付的服务(无差错,不丢失,不重复,且按序到达)(校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。)。

  • 提供全双工通信。

  • 面向字节流。

UDP的主要特点是:

  • 无连接。

  • 尽最大努力交付(不保证可靠交付)。

  • 面向报文。

  • 无拥塞控制。

  • 支持一对一、一对多、多对一和多对多的交互通信。

  • 首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。

采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大。

UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

Integer和int的区别

  • Integer是int的包装类,int则是java的一种基本数据类型

  • Integer变量必须实例化后才能使用,而int变量不需要

  • Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值

  • Integer的默认值是null,int的默认值是0

判断一个类是否“无用”,则需同时满足三个条件:

  • 该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例;

  • 加载该类的ClassLoader已经被回收

  • 该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

ARP协议

工作过程

图2.png

  • 第一步:首先,每个主机都会有自己的ARP缓存区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系

  • 第二步:当源主机要发送数据时,首先检测ARP列表中是否对应IP地址的目的主机的MAC地址

  • 如果有,则直接发送数据。如果没有,就向本网段的所有主机发送ARP数据包,内容:我是IP地址,mac地址,谁是IP地址,mac?

  • 第三步:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包。如果是,则首先从数据包中取出源主机的IP和mac地址写入到ARP列表中,如果以存在,则覆盖。然后将自己的mac地址写入arp响应包中,告诉源主机自己是它想要找的mac地址

  • 第四步:源主机收到ARP响应包后,将目的主机的IP和mac地址写入arp列表,并利用此信息发送数据

如果源主机一直没有收到arp响应数据包,表示arp查询失败。

为什么要使用ARP协议

  • OSI模型把网络工作分为七层,彼此不直接打交道,只通过接口(layerinterface)。IP地址工作在第三层,MAC地址工作在第二层。当协议在发送数据包时,需要先封装第三层IP地址,第二层MAC地址的报头,但协议只知道目的节点的IP地址,不知道目的节点的MAC地址,又不能跨第二、三层,所以得用ARP协议服务,来帮助获取到目的节点的MAC地址。

ARP协议是第几层协议

  • 工作在二层,是三层协议。

ARP在生成环境产生的问题及解决办法:

  • ARP病毒,ARP欺骗。

  • 高可用服务器对之间切换时要考虑ARP缓存的问题。

  • 路由器等设备无缝迁移时要考虑ARP缓存的问题,例如:更换办公室的路由器。

关系型数据库与NOSQL

关系型数据库

  • Oracle、DB2、MicrosoftSQLServer、MicrosoftAccess、MySQL

非关系型数据库NOSQL(NotOnlySQL)

NOSQL特点:

  • 易扩展,数据之间没有关系的。

  • 大数据量,高性能。高性能读写非常灵活的。

  • 灵活的数据模型。不需要事先对存储数据建立字段。

  • 高可用。

NOSQL主要主流产品

  • Redis、CouchDB、mongoDB、Cassandra。NOSQL中比较火的三个数据库Redis、Memchache、MongoDb。

红黑树

  • 结点是红色或黑色

  • 根结点始终是黑色

  • 叶子结点(NIL结点)都是黑色

  • 红色结点的两个直接孩子结点都是黑色(即从叶子到根的所有路径上不存在两个连续的红色结点)

  • 从任一结点到每个叶子的所有简单路径都包含相同数目的黑色结点

MySQL中char、varchar和text三者的区别

在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。

它们的存储方式和数据的检索方式也都不一样。

数据的检索效率是:char>varchar>text

具体说明:

  • char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据需要记得用trim之类的函数去过滤空格。

  • varchar:存储变长数据,但存储效率没有char高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,

  • varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。

  • text:存储可变长度的非Unicode数据,最大长度为2^16-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。

关于存储空间:

在使用UTF8字符集的时候,MySQL手册上是这样描述的:

  • 基本拉丁字母、数字和标点符号使用一个字节;

  • 大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;

  • 韩语、中文和日本象形文字使用三个字节序列。

结论:

  • 经常变化的字段用varchar;

  • 知道固定长度的用char;

  • 超过255字节的只能用varchar或者text;

  • 能用varchar的地方不用text;

  • 能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;

  • 同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表

App测试和Web测试的区别

web和app的区别

  • web项目,一般都是b/s架构,基于浏览器的。

  • App则是C/S的,必须要有客户端。那么在系统测试测试的时候就会产生区别了。

首先从系统架构来看的话,Web测试只要更新了服务器端,客户端就会同步会更新。而且客户端是可以保证每一个用户的客户端完全一致的。但是App端是不能够保证完全一致的,除非用户更新客户端。如果是App下修改了服务端,意味着客户端用户所使用的核心版本都需要进行回归测试一遍。

性能方面

  • web页面可能只会关注响应时间。

  • App则还需要关心流量、电量、CPU、GPU、Memory这些了。

兼容方面

  • Web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容,不过一般还是以浏览器的为主。而浏览器的兼容则是一般是选择不同的浏览器内核进行测试(IE、chrome、Firefox)。

  • App的测试则必须依赖phone或者是pad,不仅要看分辨率,屏幕尺寸,还要看设备系统。系统总的来说也就分为Android和iOS,不过国内的Android的定制系统太多,也是比较容易出现问题的。

相比较web测试,app更是多了一些专项测试:

  • 一些异常场景的考虑以及弱网络测试。这里的异常场景就是中断,来电,短信,关机,重启等。

  • 而弱网测试是App测试中必须执行的一项测试。包含弱网和网络切换测试。需要测试弱网所造成的用户体验,重点要考虑回退和刷新是否会造成二次提交。需要测试丢包,延时的处理机制。避免用户的流失。

安装、卸载、更新:

  • web测试是基于浏览器的所以不必考虑这些。而app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件,更新的强制更新与非强制更新、增量包更新、断点续传、弱网,卸载后删除App相关的文件等等。

界面操作

  • 现在app产品的用户都是使用的触摸屏手机,所以测试的时候还要注意手势,横竖屏切换,多点触控,事件触发区域等测试。

设计用例的方法、依据有那些

白盒测试

  • 白盒测试用例设计有如下方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。依据就是代码结构。

黑盒测试

  • 黑盒测试用例设计方法:基于用户需求的测试、等价类划分方法、边界值分析方法、错误推测方法、因果图方法、判定表驱动分析方法、正交实验法、场景法。依据是用户需求规格说明书,详细设计说明书。

软件测试的流程

  • 测试需求分析阶段:阅读需求,理解需求,主要就是对业务的学习,分析需求点,参与需求评审会议

  • 测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。

  • 测试设计阶段:主要是编写测试用例,会参考需求文档(原型图),概要设计,详细设计等文档,用例编写完成之后会进行评审。

  • 测试执行阶段:搭建环境,执行冒烟测试(预测试)-然后进入正式测试,bug管理直到测试结束

  • 测试评估阶段:出测试报告,确认是否可以上线

  • 测试流程:了解用户需求-->参考需求规格说明书-->测试计划(人力物力时间进度的安排)-->编写测试用例-->评审用例-->搭建环境-->测试包安排预测(冒烟测试)-正式测试-bug-测试结束出报告-->版本上线-->面向用户

Android中造成APP闪退的原因总结

  • 弱网络情况下,服务端响应不及时,可能倒是闪退。(网络异常引起的)

  • 应用版本太低,会导致不兼容,造成闪退。(有些API在老版本中有,在新版本中没有,造成对象为空引起闪退)

  • APP的SDK和手机的系统不兼容。

  • 缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件。会导致越来越卡,也会出现闪退情况。

  • 设计不合理,1个接口,拉取的数据量太大,请求结果会很慢,且占用大量内存,APP会闪退(比如,我们现在做的记录仪,进入相册列表时候,要拉取所有图片,拉取太慢了,就闪退了)

  • 不同APP间切换,交互测试,可能会出现闪退。

  • 权限问题。

网页很卡的原因

  • 带宽不足、硬件配置低、CPU或者是内存被占满。

  • http请求次数太多。

  • 接收数据时间过长,如下载资源过大。

  • JS脚本过大,阻塞了页面的加载。

  • 网页资源过多、接受数据时间长、加载某个资源慢。

  • DNS解析速度。

  • 网页加载慢

单元测试、集成测试、系统测试

  • 粒度不同:单元测试粒度最小,集成测试粒度居中,系统测试粒度最大。

  • 测试方式不同:单元测试一般由开发小组采用白盒方式来测试,集成测试一般由开发小组采用白盒加黑盒的方式来测试,系统测试一般由独立测试小组采用黑盒方式来测试。

  • 测试内容不同:单元测试主要测试单元是否符合“设计”,集成测试既验证“设计”,又验证“需求”,系统测试主要测试系统是否符合“需求规格说明书”。

  • 使用阶段不同:单元测试为开发人员在开发阶段要做的事情,集成测试和系统测试为测试人员在测试周期内级层做的工作。

聊天功能设计测试用例

  • 发送对象(普通用户、公众号、群、其他特殊主体)

  • 衍生功能(转发、语音转文字、删除等)

  • 消息发送---单聊、群聊、语音、文字、图片、表情、链接、字符及长度

  • 消息管理---发布通知、接受通知、发文件、消息提醒、通知提醒、声音、震动、好友请求、请求处理

  • 发送内容(空白、正常文字、超长文字、以前曾经引起过崩溃的特殊内容、特殊字符、表情、图片、多媒体、红包、语音等)

  • 消息推送---在线、离线、收发、时序

  • 权限管理---开放群(任何人入群),半开放群(验证入群),验证加好友,不需验证加好友

  • 隐私管理---黑名单,允许好友查看动态,允许陌生人查看动态,允许通过手机号查找,允许真实姓名查找

  • 成员管理---加人,被加,退出,被动退出,编辑,删除

  • 群组管理---创建群,消息设置,申请入群,扫二维码入群,退群,通知提醒,头像编辑,名称编辑,简介编辑,权限编辑,成员编辑

  • 好友管理---扫二维码加人,加好友,查好友,好友推荐,群组推荐,联系人导入,拉黑名单,解除好友,备注名

  • 动态管理---发动态,发投票,点赞,表情,评论,增加,删除,分享,隐藏,编辑

  • 登录退出---忘记密码,更换账号

  • 文件管理---接收,离线接收,预览,删除,分享,转存,文件格式,大小

  • 语音聊天---接通/挂断、通话质量、耳机插拔、音量调解、话筒/扬声器切换、打开/关闭麦克风、后台挂起

  • 视频聊天---接通/挂点/切换语音、视频质量、耳机插拔、音量调解、话筒/扬声器切换、前置后置摄像头切换、视频框切换、后台挂起

微信红包功能怎么测试

功能

  • 在红包钱数,和红包个数的输入框中只能输入数字

  • 红包里最多和最少可以输入的钱数2000.01

  • 拼手气红包最多可以发多少个红包100、超过最大拼手气红包的个数是否有提醒

  • 当红包钱数超过最大范围是不是有对应的提示

  • 当发送的红包个数超过最大范围是不是有提示

  • 当余额不足时,红包发送失败

  • 在红包描述里是否可以输入汉字,英文,符号,表情,纯数字,汉字英语符号,是否可以输入它们的混合搭配

  • 输入红包钱数是不是只能输入数字

  • 红包描述里许多能有多少个字符10个

  • 红包描述,金额,红包个数框里是否支持复制粘贴操作

  • 红包描述里的表情可以删除

  • 发送的红包别人是否可以领取、发的红包自己可不可以领取2人

  • 24小时内没有领取的红包是否可以退回到原来的账户、超过24小时没有领取的红包,是否还可以领取

  • 用户是否可以多次抢一个红包

  • 发红包的人是否还可以抢红包多人

  • 红包的金额里的小数位数是否有限制

  • 可以按返回键,取消发红包

  • 断网时,无法抢红包

  • 可不可以自己选择支付方式

  • 余额不足时,会不会自动匹配支付方式

  • 在发红包界面能否看到以前的收发红包的记录

  • 红包记录里的信息与实际收发红包记录是否匹配

  • 支付时可以密码支付也可以指纹支付

  • 如果直接输入小数点,那么小数点之前应该有个0

  • 支付成功后,退回聊天界面

  • 发红包金额和收到的红包金额应该匹配

  • 是否可以连续多次发红包

  • 输入钱数为0,"塞钱进红包"置灰

性能

  • 弱网时抢红包,发红包时间

  • 不同网速时抢红包,发红包的时间

  • 发红包和收红包成功后的跳转时间

  • 收发红包的耗电量

  • 退款到账的时间

兼容

  • 苹果,安卓是否都可以发送红包

  • 电脑端可以抢微信红包

界面

  • 发红包界面没有错别字

  • 抢完红包界面没有错别字

  • 发红包和收红包界面排版合理,

  • 发红包和收到红包界面颜色搭配合理

安全

  • 对方微信号异地登录,是否会有提醒2人

  • 红包被领取以后,发送红包人的金额会减少,收红包金额会增加

  • 发送红包失败,余额和银行卡里的钱数不会少

  • 红包发送成功,是否会收到微信支付的通知

易用性(有点重复)

  • 红包描述,可以通过语音输入

  • 可以指纹支付也可以密码支付

微信朋友圈的点赞功能

  • 是否可以点赞、取消点赞

  • 多次点赞会出现什么情况

  • 多人点赞时的顺序是否按照时间顺序进行排列

  • 点赞是否显示头像和名称

  • 点赞之后能否进行评论

  • 点赞之后退出该页面,再次进入朋友圈点赞消息是否还存在

  • 多用户点赞,再次打开朋友圈是是否可以按照顺序看到是谁谁谁赞了我

  • 弱网络的情况下点赞能否实时更新

  • 点赞时有短信或电话进来,能否显示点赞情况

  • 点赞的人是否在可见分组里

  • 点赞之后共同好友的点赞和评论是否会提醒你

基础题

Java

  • 重写与重载

  • java集合

  • hashmap和hashtable的区别

  • arraylist和linkedlist的区别

  • map的put方法

  • Javagc机制

  • 垃圾回收算法:复制算法、标记-清除算法、标记-整理算法

  • 抽象类和接口的区别

  • 线程的实现方式有哪些extendThread、implementrunnable、implementcallable

  • Integer和int的区别

  • String、StringBuilder与StringBuffer

  • 内存溢出和内存泄露

  • protected,private,public

数据库

  • 事务的特性:原子性、一致性、隔离性、持久性。

  • 联合主键:设置多个字段同时为主键(PRIMARYKEY(Name,Age))

  • 复合主键:多个主键联合形成一个主键组合。(成绩表中的学号、课程标号)

  • mysql怎么优化

  • 数据库的备份是如何实现的

  • mysql创建一个学生表,包含id(int)和name(string),主键的创建:CREATETABLEstu(idINT(5),nameVARCHAR(100),PRIMARYKEY(id));

  • mysql建立索引CREATEINDEXindex_nameONtable_name(column_list)CREATEINDEXidx_c4ONt(c4);

  • 数据库查询10-20行内容:select*fromstulimit10,10;

  • 创建数据库:CREATEDATABASEdatabase_name;

  • 查找135开头的电话:select*fromtablewheretellike'135%';

  • leftjoin,rightjoin和innerjoin的影响性能的因素。

操作系统

  • 死锁的条件、原因,死锁的必备条件

  • 程序与进程

  • 进程通信的方式管道适用什么场景

并发和并行区别

  • 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。所以无论从微观还是从宏观来看,二者都是一起执行的。

  • 并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

网络

  • tcp三次握手和四次挥手

  • 网络七层有哪些,tcp,udp,arp,TCP/IP都在哪一层http,tcp,ip协议

  • tcp和udp的区别、特点

  • http请求方式有哪些:GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE。

  • 拥塞控制和快重传

  • TCP和UDP区别、怎么让udp实现可靠连接

  • socket编程

  • session与cookies区别,以及分别存储在什么地方

  • 常见的状态码:502网关错误(Badgateway)、504GatewayTime-out。

  • CDN

数据结构

  • 索引提到了B树

  • 数组和链表的区别,树是用什么存储的,可不可以用数组存储

  • 快排的时间复杂度(NlogN)、最坏情况(N^2)

  • 数据结构上的堆和栈有什么区别、底层结构是什么

  • 红黑树

  • 最大的K个数用什么排序算法,复杂度、同样是NlogN,快排和堆排序有什么区别。

python

  • ()代表tuple元祖数据类型,元祖是一种不可变序列。[]代表list列表数据类型,列表是一种可变序列。

  • lamda表达式:a=lambdax,y,z:(x+8)*y-z

  • 闭包

Linux

  • VI显示所有行的行号:visetnumber

  • 找到共用80端口的线程

  • linux基本指令awk、find、grep

  • shell脚本:统计一个文件中重复的行和重复次数

  • linux如何将文件从一台服务器转移到另一台服务器

  • 如何查找出现频率最高的100个ip地址

测试

  • 微信发红包测试用例。

  • 测试一个月饼礼盒。

  • 测试的维度。

  • 对收信发信进行测试

  • 怎么测试微信的搜索功能。

  • 测试朋友圈发布视频功能

  • 如果有一部分用户反馈APP的视频加载不出来,你会从哪里方面去定位问题

  • 在一个产品的周期中,你会怎么安排测试工作

  • 怎么测试小程序的并发性的

  • 对页面的测试、对杯子、电梯系统、三角形这些常规的测试用例,总结一下

  • 对聊天进行测试

  • 对朋友圈点赞进行测试

  • 测试微信朋友圈评论功能

  • 熟悉的软件测试的方法

  • 电梯的测试用

  • 测试商场的支付功能,设计测试用例

  • 黑盒白盒测试

  • 项目的测试用例

  • 游戏的测试维度

  • varchar(256)变为varchar(1024)测试

  • 对抖音的界面进行测试

  • 测试微博的刷新功能

  • 用户登录页面的测试

  • 抖音页面怎么测试

  • 微信发红包怎么测试

  • 登录测试?弱网测试,无网测试怎么做?

  • 测试一瓶水、测试一个矿泉水瓶

  • 如何测试用户登录界面

  • 测试中如何模拟网络环境不好的条件fiddler

  • 如何测试一个登陆案例

  • 设计一个测试方案,生产好的矿泉水瓶要放到流水线上生产的测试方案。

  • 一个手机小程序,只能输入1-100的数字,还有一个提交按钮,设计测试用例

  • 为微信的点赞功能设计测试用例,假如点赞了但是点赞数没有加一,可能报错在哪里?网络良好的情况下,发现数据传输过程出现404的情况,你认为是什么问题。

  • 给抖音的评论功能设计测试用例

  • 给你一个QQ登录界面有一个登录按钮一个自动记住密码的复选框账号密码输入框,你怎么设计测试用例?

  • 一个发帖功能(可以发文字、图片、定位),你会测试哪些方面功能测试,网络测试,平台测试

  • 然后问我如果想要上新一个新尺寸的视频,我会想要测试什么。

问题查找

  • 让你设计一个俄罗斯方块怎么设计

  • web页面空白有哪些原因

  • 测试工具loadrunner,postman,selenium用来测什么

  • 分析一下少量联通用户反映刷抖音无法显示原因


作者:offer超级多多多多

原文链接:https://www.nowcoder.com/discuss/374134?toCommentId





  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   近些年,随着互联网行业的不断发展,用户规模也有了爆发性的增长。产品的性能成为影响用户体验的重要因素。因此,性能测试越来越受到大型互联网企业的重视。  在做性能测试时,通常都会借助一些压测工具来模拟大量的并发用户。 目前业界压测工具种类繁多,比如Loadrunner、Jmeter、Locust、Ngrinder、Apache ab、Wrk、Webbench等。  面临这么多的压测工具,我们应该如何做出选择呢?你在公司里现在用的是什么工具呢?  相信很多小伙伴此刻喊出了“Jmeter”的名字,确实是,这几年 Jmeter因其使用简单,学习成本低,跨平台等特性,在行业内应用非常的广泛,拥有非常高...
            0 0 3910
            分享
          • 在软件开发过程中,测试人员负责确保软件产品的质量,检查它们是否满足预定的需求并在各种环境下正常运行。虽然测试人员可以利用手工测试方法,但编写代码以进行自动化测试是必不可少的进阶技能。本文将阐述测试人员为什么需要编写代码,并探讨编写代码测试的好处。在软件测试过程中,有几种不同的测试方法,包括单元测试、集成测试、系统测试和验收测试。为了更有效地进行这些测试,测试人员通常需要编写代码来自动化测试用例。这样可以提高测试的速度、效率和准确性。编写代码可以帮助测试人员更深入地了解软件的工作原理,从而更好地发现潜在的问题。总结下来编写代码测试有以下好处:* 提高测试效率:通过编写代码来自动化测试,测试人员可...
            0 0 1009
            分享
          •   面试时答得不是很好, 现在在这里好好的给电梯写一个测试用例, 进行总结。  需求文档测试  · 查看电梯的使用说明书: 如何正确的使用电梯, 使得电梯能够安全正常的运行。  · 查看电梯的维护说明书: 如何对电梯进行检查, 维护, 检修以及进行零部件的更换。  · 查看电梯的安全说明书: 如何在停电, 电压不足, 超重, 以及一些特殊的情况下保证电梯的安全性。  功能测试  · 电梯中的按钮(上升键, 下降建, 楼层键)是否都是正常可用的。  · 电梯中的报警电话是否都正常。  · 电梯中的灯是否都可以正常的使用。  · 不按电梯...
            0 0 1153
            分享
          • 上篇提到让应用自动抓取Crash日志提交到服务器,如果发布之前没有经过严格测试(个人练手做的一些小应用),会发现有很多异常都是显而易见的错误,只是没有严格测试忽略了而已,其实android自带了一个自动化测试工具,Monkey,可以用来简单测试一下程序的健壮性如何。monkey测试的原理就是利用socket通讯的方式来模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。当Monkey程序在模拟器或设备运行的时候,如果用户出发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件。要获取Monkey命令自...
            16 16 1667
            分享
          • 一、判断题软件测试就是为了验证软件功能实现的是否正确,是否完成既定目标的活动,所以软件测试在软件工程的后期才开始具体的工作。(×)发现错误多的模块,残留在模块中的错误也多。(√)测试人员在测试过程中发现一处问题,如果问题影响不大,而自己又可以修改,应立即将此问题正确修改,以加快、提高开发的进程。(×)单元测试通常应该先进行“人工走查”,再以白盒法为主,辅以黑盒法进行动态测试。(√)功能测试是系统测试的主要内容,检查系统的功能、性能是否与需求规格说明相同。(√)软件质量管理即QM由QA和QC构成,软件测试属于QC的核心工作内容。(√)软件测试只能发现错误,但不能保证测试后的软件没有错误。(√)软...
            11 11 1121
            分享
      • 51testing软件测试圈微信