已上岸字节,整理一波测开面经

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

http和https的区别

  • https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

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

  • 语法:grep 字符串 文件名|wc -l ,grep输出,wc -l按行统计
  • 例子:
    • 统计task-hbase-transform.log中NullPointerException出现的次数:grep NullPointerException task-hbase-transform.log|wc -l
    • 如果是多个字符串出现次数,可使用: grep 'objStr1\|objStr2' filename|wc -l#直接用 | 链接起来即可。

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

    SELECT S.name
    FROM Student S
    WHERE S.score > 80
    GROUP BY S.name
    Having count(*)>=2;

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

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

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

    • http协议建立在tcp协议之上,http请求前,需先进行tcp连接,形成客户端到服务器的稳定的通道。俗称TCP的三次握手。
    • tcp连接完成后,http请求开始,请求有多种方式,常见的有get,post等。
    • http请求包含请求头,也可能包含请求体两部分,请求头中包含我们希望对请求文件的操作的信息,请求体中包含传递给后台的参数。
    • 服务器收到http请求后,后台开始工作,如负载平衡,跨域等,这里就是后端的工作了。
    • 文件处理完毕,生成响应数据包,响应也包含两部分,响应头和相应体,响应体就是我们所请求的文件。
    • 经过网络传输,文件被下载到本地客户端,客户端开始加载。
  3. html页面的解析与渲染

    • 客户端浏览器加载了html文件后,由上到下解析html为DOM树(DOM Tree)。
    • 遇到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树(CSS Rule Tree)。
    • CSSOM树生成后,DOM Tree与CSS Rule Tree结合生成渲染树(Render Tree)。
    • Render Tree会被css文件阻塞,渲染树生成后,先布局,绘制渲染树中节点的属性(位置,宽度,大小等),然后渲染,页面就会呈现信息。
    • 继续边解析边渲染,遇到了另一个js文件,js文件执行后改变了DOM树,渲染树从被改变的dom开始再次渲染。
    • 继续向下渲染,碰到一个img标签,浏览器发起http请求,不会等待img加载完成,继续向下渲染,之后再重新渲染此部分。
    • DOM树遇到html结束标签,停止解析,进而渲染结束。

无效链接

  • 死链接(Dead Links)指的是无效链接,也就是那些不可到达的链接。通俗地理解是以前可以通过点击这个链接到达网站页面,后续可能由于网站迁移、改版或操作不当等原因,使得链接指向的目标页面不存在而无法访问所遗留的链接,即称为死链接。
  • 访问死链接时,一般会出现“抱歉,您所访问的页面不存在”的提示信息或者 404 状态页面。

进程和线程

  • 区别:

    • 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
    • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。
    • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。
    • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
  • 进程与线程的资源

    • 线程共享:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。
    • 线程独有:栈(保存其运行状态和局部自动变量)、程序计数器。
  • 进程与线程的同步

    • 进程:无名管道、有名管道、信号、共享内存、消息队列、信号量
    • 线程:互斥量、读写锁、自旋锁、线程信号、条件变量
  • 僵尸进程

    • 定义:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或者waitpid获取子进程的状态信息,那么子进程的进程描述符等一系列信息还会保存在系统中。这种进程称之为僵死进程。
    • 危害:在Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。
    • 处理方法:
      • 改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。这是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。
      • 把父进程杀掉。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。
  • 孤儿进程

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

Linux命令

  • "|": 管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。
  • grep:-v 不显示匹配上的内容;-n 显示匹配上的内容
    • grep -v down,显示不包含down的内容。
    • grep -n down,显示包含down的内容。
  • du:(disk use)显示每个文件和目录的磁盘使用空间。
  • df:(disk free)显示磁盘分区上可以使用的磁盘空间。

单例模式

  • 什么情况下会用到:假如有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 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放在Request body中。

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

  • 写网页(html,js,css)的,写的很随意,导致chrome渲染的时候出现bug,整个chrome崩掉,我google再nb的程序员也写不出来0 bug的浏览器,单个页面不行就算了,我越界到别人地址上了,大家一块崩溃吧,
  • 插件也是参差不齐,插对了没问题,插错了不但是把自己弄坏,整个进程崩了,其他线程也别活了。
  • 别有用心者,我是黑客要努力的超越漏洞,我从页面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协议

  • 工作过程

    • 第一步:首先,每个主机都会有自己的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模型把网络工作分为七层,彼此不直接打交道,只通过接口(layer interface)。IP地址工作在第三层,MAC地址工作在第二层。当协议在发送数据包时,需要先封装第三层IP地址,第二层MAC地址的报头,但协议只知道目的节点的IP地址,不知道目的节点的MAC地址,又不能跨第二、三层,所以得用ARP协议服务,来帮助获取到目的节点的MAC地址。
  • ARP协议是第几层协议

    • 工作在二层,是三层协议。
  • ARP在生成环境产生的问题及解决办法:

    • ARP病毒,ARP欺骗。
    • 高可用服务器对之间切换时要考虑ARP缓存的问题。
    • 路由器等设备无缝迁移时要考虑ARP缓存的问题,例如:更换办公室的路由器。

关系型数据库与NOSQL

  • 关系型数据库
    • Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL
  • 非关系型数据库 NOSQL(Not Only SQL)
    • 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解析速度。

网页加载慢


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

  • 粒度不同:

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

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

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

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

聊天功能设计测试用例

  • 发送对象(普通用户、公众号、群、其他特殊主体)
  • 衍生功能(转发、语音转文字、删除等)
  • 消息发送---单聊、群聊、语音、文字、图片、表情、链接、字符及长度
  • 消息管理---发布通知、接受通知、发文件、消息提醒、通知提醒、声音、震动、好友请求、请求处理
  • 发送内容(空白、正常文字、超长文字、以前曾经引起过崩溃的特殊内容、特殊字符、表情、图片、多媒体、红包、语音等)
  • 消息推送---在线、离线、收发、时序
  • 权限管理---开放群(任何人入群),半开放群(验证入群),验证加好友,不需验证加好友
  • 隐私管理---黑名单,允许好友查看动态,允许陌生人查看动态,允许通过手机号查找,允许真实姓名查找
  • 成员管理---加人,被加,退出,被动退出,编辑,删除
  • 群组管理---创建群,消息设置,申请入群,扫二维码入群,退群,通知提醒,头像编辑,名称编辑,简介编辑,权限编辑,成员编辑
  • 好友管理---扫二维码加人,加好友,查好友,好友推荐,群组推荐,联系人导入,拉黑名单,解除好友,备注名
  • 动态管理---发动态,发投票,点赞,表情,评论,增加,删除,分享,隐藏,编辑
  • 登录退出---忘记密码,更换账号
  • 文件管理---接收,离线接收,预览,删除,分享,转存,文件格式,大小
  • 语音聊天---接通/挂断、通话质量、耳机插拔、音量调解、话筒/扬声器切换、打开/关闭麦克风、后台挂起
  • 视频聊天---接通/挂点/切换语音、视频质量、耳机插拔、音量调解、话筒/扬声器切换、前置后置摄像头切换、视频框切换、后台挂起

微信红包功能怎么测试

  • 功能
    • 在红包钱数,和红包个数的输入框中只能输入数字
    • 红包里最多和最少可以输入的钱数 200 0.01
    • 拼手气红包最多可以发多少个红包 100、超过最大拼手气红包的个数是否有提醒
    • 当红包钱数超过最大范围是不是有对应的提示
    • 当发送的红包个数超过最大范围是不是有提示
    • 当余额不足时,红包发送失败
    • 在红包描述里是否可以输入汉字,英文,符号,表情,纯数字,汉字英语符号,是否可以输入它们的混合搭配
    • 输入红包钱数是不是只能输入数字
    • 红包描述里许多能有多少个字符 10个
    • 红包描述,金额,红包个数框里是否支持复制粘贴操作
    • 红包描述里的表情可以删除
    • 发送的红包别人是否可以领取、发的红包自己可不可以领取 2人
    • 24小时内没有领取的红包是否可以退回到原来的账户、超过24小时没有领取的红包,是否还可以领取
    • 用户是否可以多次抢一个红包
    • 发红包的人是否还可以抢红包 多人
    • 红包的金额里的小数位数是否有限制
    • 可以按返回键,取消发红包
    • 断网时,无法抢红包
    • 可不可以自己选择支付方式
    • 余额不足时,会不会自动匹配支付方式
    • 在发红包界面能否看到以前的收发红包的记录
    • 红包记录里的信息与实际收发红包记录是否匹配
    • 支付时可以密码支付也可以指纹支付
    • 如果直接输入小数点,那么小数点之前应该有个0
    • 支付成功后,退回聊天界面
    • 发红包金额和收到的红包金额应该匹配
    • 是否可以连续多次发红包
    • 输入钱数为0,"塞钱进红包"置灰
  • 性能
    • 弱网时抢红包,发红包时间
    • 不同网速时抢红包,发红包的时间
    • 发红包和收红包成功后的跳转时间
    • 收发红包的耗电量
    • 退款到账的时间
  • 兼容
    • 苹果,安卓是否都可以发送红包
    • 电脑端可以抢微信红包
  • 界面
    • 发红包界面没有错别字
    • 抢完红包界面没有错别字
    • 发红包和收红包界面排版合理,
    • 发红包和收到红包界面颜色搭配合理
  • 安全
    • 对方微信号异地登录,是否会有提醒 2人
    • 红包被领取以后,发送红包人的金额会减少,收红包金额会增加
    • 发送红包失败,余额和银行卡里的钱数不会少
    • 红包发送成功,是否会收到微信支付的通知
  • 易用性(有点重复)
    • 红包描述,可以通过语音输入
    • 可以指纹支付也可以密码支付

微信朋友圈的点赞功能

  • 是否可以点赞、取消点赞
  • 多次点赞会出现什么情况
  • 多人点赞时的顺序是否按照时间顺序进行排列
  • 点赞是否显示头像和名称
  • 点赞之后能否进行评论
  • 点赞之后退出该页面,再次进入朋友圈点赞消息是否还存在
  • 多用户点赞,再次打开朋友圈是是否可以按照顺序看到是谁谁谁赞了我
  • 弱网络的情况下点赞能否实时更新
  • 点赞时有短信或电话进来,能否显示点赞情况
  • 点赞的人是否在可见分组里
  • 点赞之后共同好友的点赞和评论是否会提醒你

软件测试-微信点赞和APP功能测试用例


基础题

  • Java

    • 重写与重载
    • java集合
    • hashmap和hashtable的区别
    • arraylist和linkedlist的区别
    • map的put方法
    • Java gc机制
    • 垃圾回收算法:复制算法、标记-清除算法、标记-整理算法。
    • 抽象类和接口的区别
    • 线程的实现方式有哪些 extend Thread、implement runnable、implement callable
    • Integer和int的区别
    • String、StringBuilder与StringBuffer
    • 内存溢出和内存泄露
    • protected,private,public
  • 数据库

    • 事务的特性:原子性、一致性、隔离性、持久性。
    • 联合主键:设置多个字段同时为主键(PRIMARY KEY(Name, Age))
    • 复合主键:多个主键联合形成一个主键组合。(成绩表中的学号、课程标号)
    • mysql怎么优化
    • 数据库的备份是如何实现的
    • mysql创建一个学生表,包含id(int)和name(string),主键的创建:CREATE TABLE stu(id INT (5), name VARCHAR (100), PRIMARY KEY (id));
    • mysql建立索引 CREATE INDEX index_name ON table_name (column_list) CREATE INDEX idx_c4 ON t(c4);
    • 数据库查询10-20行内容:select * from stu limit 10, 10;
    • 创建数据库:CREATE DATABASE database_name;
    • 查找135开头的电话:select * from table where tel like '135%';
    • left join, right join和inner join的影响性能的因素。
  • 操作系统

    • 死锁的条件、原因,死锁的必备条件
    • 程序与进程 https://blog.csdn.net/Alexwym/article/details/83146459
    • 进程通信的方式 管道适用什么场景
    • 并发和并行区别
      • 并行(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 网关错误 (Bad gateway)、504 Gateway Time-out。
    • CDN
  • 数据结构

    • 索引提到了B树
    • 数组和链表的区别,树是用什么存储的,可不可以用数组存储
    • 快排的时间复杂度(NlogN)、最坏情况(N^2)
    • 数据结构上的堆和栈有什么区别、底层结构是什么
    • 红黑树
    • 最大的K个数用什么排序算法,复杂度、同样是NlogN, 快排和堆排序有什么区别。
  • python

    • ()代表tuple元祖数据类型,元祖是一种不可变序列。 []代表list列表数据类型,列表是一种可变序列。
    • lamda表达式:a = lambda x,y,z:(x+8)*y-z
    • 闭包

  • Linux
    • VI 显示所有行的行号:vi set number
    • 找到共用80端口的线程
    • linux基本指令 awk、find、grep
    • shell脚本:统计一个文件中重复的行和重复次数
    • linux 如何将文件从一台服务器转移到另一台服务器
    • 如何查找出现频率最高的100个ip地址

测试

  1. 微信发红包测试用例。
  2. 测试一个月饼礼盒。
  3. 测试的维度。
  4. 对收信发信进行测试
  5. 怎么测试微信的搜索功能。
  6. 测试朋友圈发布视频功能
  7. 如果有一部分用户反馈APP的视频加载不出来,你会从哪里方面去定位问题
  8. 在一个产品的周期中,你会怎么安排测试工作
  9. 怎么测试小程序的并发性的
  10. 对页面的测试、对杯子、电梯系统、三角形这些常规的测试用例,总结一下
  11. 对聊天进行测试
  12. 对朋友圈点赞进行测试
  13. 测试微信朋友圈评论功能
  14. 熟悉的软件测试的方法
  15. 电梯的测试用例 https://blog.csdn.net/qq_22795513/article/details/82592415?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  16. 测试商场的支付功能,设计测试用例
  17. 黑盒白盒测试
  18. 项目的测试用例
  19. 游戏的测试维度
  20. varchar(256) 变为 varchar(1024)测试
  21. 对抖音的界面进行测试
  22. 测试微博的刷新功能
  23. 用户登录页面的测试
  24. 抖音页面怎么测试
  25. 微信发红包怎么测试
  26. 登录测试?弱网测试,无网测试怎么做?
  27. 测试一瓶水、测试一个矿泉水瓶
  28. 如何测试用户登录界面
  29. 测试中如何模拟网络环境不好的条件 fiddler
  30. 如何测试一个登陆案例
  31. 设计一个测试方案,生产好的矿泉水瓶要放到流水线上生产的测试方案。
  32. 一个手机小程序,只能输入1-100的数字,还有一个提交按钮,设计测试用例
  33. 为微信的点赞功能设计测试用例,假如点赞了但是点赞数没有加一,可能报错在哪里?网络良好的情况下,发现数据传输过程出现404的情况,你认为是什么问题。
  34. 给抖音的评论功能设计测试用例
  35. 给你一个QQ登录界面 有一个登录按钮一个自动记住密码的复选框 账号密码输入框,你怎么设计测试用例?
  36. 一个发帖功能(可以发文字、图片、定位),你会测试哪些方面 功能测试,网络测试,平台测试
  37. 然后问我如果想要上新一个新尺寸的视频,我会想要测试什么。

问题查找

  1. 让你设计一个俄罗斯方块怎么设计
  2. web页面空白有哪些原因
  3. 测试工具loadrunner,postman,selenium用来测什么
  4. 分析一下少量联通用户反映刷抖音无法显示原因

算法题

  1. 写代码,类似高考成绩,一个表中有很多数据(无序的),给你一个成绩,查出在表中的排名
  2. 找出这两个链表是否有相交的点
  3. 判断链表有没有环,环起点在哪儿。
  4. 手撕topk,时间复杂度是多少。
  5. 写个算法,实现抢红包随机获取金额的过程参考
  6. 链表反转
  7. 两数之和(leetcode第一题~、~)
  8. 判断一个字符串是否为另一个字符串子串(暴力写的)
  9. 股票最大利润
  10. 实现单链表前后交叉排序:1,2,3,4,5,6 变成 1,4,2,5,3,6
  11. 因式分解
  12. 有序二叉树,一种遍历方法使之有序,中序遍历。
  13. 非递归实现先序遍历
  14. 找无序数组中第k个数(一开始说用堆实现、后来我又想着用快排的partation实现)
  15. 算法题:从字符串S变到T,插入消耗2、删除消耗2、替换消耗3、求最小消耗
  16. 算法题:两个栈实现一个队列(实现push、pop、count三个函数)(简单)
  17. strcpy的实现
  18. 给出两个链表,找出相同的链接。a->b->c->d->f、b1->a1->c1->d->f
  19. 二叉树的遍历方式,手写先序遍历(参考代码:https://www.cnblogs.com/anzhengyu/p/11083568.html)
  20. 两个字符串的最长公共子串(参考代码:https://www.cnblogs.com/anzhengyu/p/11166708.html)
  21. 查找二叉树最大深度
  22. 二叉树遍历
  23. 写代码判断IP地址(https://blog.csdn.net/u014259820/article/details/78833196?utm_source=distribute.pc_relevant.none-task)
  24. 在字符串中找出不重复字符的个数
  25. 找出两个只出现一次的数字,其余的数字都出现了两次
  26. 给n元钱,m个人,写个随机分钱的函数
  27. 两个栈实现一个队列
  28. 给个数组求连续子序列最大和
  29. 写一个程序;给一个数组,a【2 -2 3 3 6 -9 7】输出a【2 -2 3 -9 3 6 7】输入正负数都有数组,输出数组正负交替出现,多的那一类都放在后面;
  30. 给定一个数组 输出和为k的两个数的位置 a【2 7 3 5 11】k=9 输出 0 1 https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-2/
  31. 算法题:实现两个String字符串寻找最大公共子字符串
  32. 让写一个洗牌的函数,写完问我为啥那样写、再写一个打印牌的函数,问我洗完牌之后345不连在一起的概率 如何模拟一副扑克牌的洗牌过程
  33. 查找字符串中重复的子串,并输出重复的次数 https://blog.csdn.net/zouheliang/article/details/80649584
  34. 判断是否为平衡二叉树
  35. 找出一个字符串的最长不重复子串(https://www.cnblogs.com/linghu-java/p/9037262.html)

智力题

  1. 10个堆,每堆10个苹果,其中9个堆里苹果是50g/个,一个堆里苹果是40g/个,有一杆秤只能称一次,所称重量为x,求40g苹果所在堆。

    • 将堆编码为1-10;然后每堆拿出k个,最后少了k*10克,则知道是第几堆的苹果。
  2. 5L和6L水桶,得到三升水。

    • 1、6L的水桶装满水,倒满5L的桶。 2、将5L桶里的水倒了,将6L桶里剩余的1L放入5L桶。 3、6L的桶装满水,倒满5L桶里,6L桶里还剩2L(6-4)水。 4、 将5L桶里的水倒了,将6L桶里剩余的2L水放入5L桶里。 5、将6L桶装满水,倒满5L的桶,这时6L的桶里还剩3L水。
  3. 两个一小时蚊香怎么得到15分钟的记时

    • 同时点燃AB两只蚊香,其中A蚊香点燃两头,等A蚊香烧完后(30分钟),点燃B蚊香的另一头。
  4. 4分钟沙漏和7分钟沙漏怎么漏出9分钟

    • 4分钟的和7分钟的同时开始,4分钟的完后又倒过来开始。7分钟的沙漏完后立马倒过来,(4分钟的沙漏还剩1分钟)。等4分钟的沙漏完后,将7分钟的又立马倒过来,等漏完就是9分钟。
  5. 八个球,其中有一个是其余球重量的1.5倍,有什么方案找出来

    • 2次。 第一次左右各三个,如果平衡,第二次把剩下的两个称下可以找出重的那个。如果不平和,第二次把重的那端的三个球任意取两个,不平衡的话重的那头就是要找的,平衡的话则是另外一个。
  6. 桌上100个球,每次可以拿一到五个, 现在我们两个人依次拿球,你先拿,使用怎样的拿球策略,可以使你最终能拿到最后一个球?

    • 第一次拿四个,后来每个你拿球的时候只要保证剩下的球是6的倍数就行了如果他拿n个球 ,你就拿6-n个球。
  7. 有10个石头,每人每次可以拿1-2个,轮流拿,最后一个拿的人算输,有什么必赢的方案。

    • 对方先拿、保证两个人每一轮回拿满3个(对方拿一个,我拿两个、对方拿两个,我拿一个)。
  8. 一亿数据获取前1000个最大值 https://zhuanlan.zhihu.com/p/73233544

    • 把一亿个数字的前100个 首先放入数组。 然后把最小值放在ary[0]。然后再循环100到一亿之间的。 每次循环判断当前数字是否大于ary[0]当大于时,当前数字放入ary[0] 并再次重构数组最小值进入ary[0]以此类推 。当循环完这一亿个数字后。 最大的前100个数字就出来了。
  9. 经典智力题:飞机加油问题


其他

  • 冲突解决办法
  • 如果UI和开发消极怠工,怎么办
  • 如果开发认为测试出来的问题不是他的问题,怎么办
  • leader出错,同伴不配合怎么办
  • 对测开的理解
  • 对测试工作有什么期望
  • 为什么想做测试
  • 你了解的测试有哪些
  • 测试与开发本质区别
  • 测试主要运用哪种语言
  • 对测试开发的理解
  • 你对测试职位的理解
#字节跳动秋招提前批##字节跳动##校招##测试开发工程师##面经#
全部评论
感谢,下午字节跳动测开三面了
3 回复 分享
发布于 2020-03-03 13:02
大佬拿了哪里的offer
2 回复 分享
发布于 2020-03-03 11:02
大佬这是你所有的测试资料嘛?能不能分享个文档给我,我也想找测试岗😂
1 回复 分享
发布于 2020-03-03 12:43
tql
1 回复 分享
发布于 2020-03-03 17:15
1 回复 分享
发布于 2020-03-24 13:36
崇拜!!!
1 回复 分享
发布于 2020-06-17 18:06
好厉害!明天字节测开二面,沾沾喜气
1 回复 分享
发布于 2021-03-30 15:55
很棒
点赞 回复 分享
发布于 2020-03-03 10:33
大佬
点赞 回复 分享
发布于 2020-03-03 10:47
恭喜恭喜
点赞 回复 分享
发布于 2020-03-03 11:22
请问楼主base哪里呀
点赞 回复 分享
发布于 2020-03-03 11:26
text最大长度是不写错了
点赞 回复 分享
发布于 2020-03-03 15:10
SELECT S.name FROM Student S GROUP BY S.name Having MIN(S.score)>=80 and count(*)>=2;这里好像不能用having?
1 回复 分享
发布于 2020-03-03 15:51
tql
点赞 回复 分享
发布于 2020-03-03 16:22
厉害(ง •̀_•́)ง
点赞 回复 分享
发布于 2020-03-03 21:34
大佬大佬
点赞 回复 分享
发布于 2020-03-03 22:36
大佬,这春招面了多少家啊?
点赞 回复 分享
发布于 2020-03-03 23:45
卧槽。大佬,大佬。自己好失败。
点赞 回复 分享
发布于 2020-03-04 00:00
厉害
点赞 回复 分享
发布于 2020-03-04 00:04
给这个详细的面经点赞!!
点赞 回复 分享
发布于 2020-03-04 18:32

相关推荐

10-17 12:16
同济大学 Java
7182oat:快快放弃了然后发给我,然后让我也泡他七天最后再拒掉,狠狠羞辱他一把😋
点赞 评论 收藏
分享
363 2717 评论
分享
牛客网
牛客企业服务