字节跳动抖音 测试工程师 视频面试

字节跳动2021提前批测试开发

---------------------------------------面经1 2020-07-03--------------------------------------

  1. 接口测试中遇到的问题怎么解决
    接口测试:测试系统组件间接口的测试,用于检测外部系统与系统之间以及内部各子系统之间的交互点。重点检查数据的交换,传递和控制管理过程,以及系统间的交互逻辑依赖关系等。
    接口有两种:
    (1)内部接口:方法与方法、模块与模块之间的交互
    (2)调用对外包装的接口:
    接口参数数据类型:数值型,字符串型,数组/链表,结构体
    接口测试常见问题:
    (1)特殊值处理不当导致程序异常退出或崩溃;
    (2)类型边界溢出,导致数据读出和写入不一致;
    (3)取值边界外值未返回正确的错误信息;
    (4)参数为null或空字符串“”等;
    (5)权限未处理,可以访问其他用户的信息;

  2. TCP和UDP的区别及应用场景
    TCP和UDP是传输层的协议
    面向连接 VS 无连接
    TCP建立一个连接需要3次握手IP数据包,断开连接需要4次挥手。而且断开连接时发起方可能进入TIME_WAIT状态长达数分钟,此状态下连接无法被释放;
    UDP不需要建立连接,可以直接发起
    可靠 VS 不可靠
    TCP利用握手,ACK和重传机制,UDP没有
    1)校验和,校验数据是否损坏;
    2)定时器,分组丢失则重传;
    3)序列号,检测丢失的分组和重复的分组;
    4)确认应答ACK,接收方告知发送方正确接收分组以及期望的下一个分组
    5)否定确认,接收方通知发送方未被正确接收的分组;
    6)窗口和流水线,用于增加信道的吞吐量,窗口大小:无需确认应答可以继续发送数据的最大值
    有序性
    TCP利用seq序列号对包进行排序,UDP没有
    面向字节流 VS 面向报文
    1)面向字节流:应用程序和TCP的交互是一次一个数据块,TCP把应用程序看成一连串的无结构字节流;
    2)面向报文:应用层交给UDP多长的报文,UDP就照样发送,一次发送一个报文
    TCP有流量控制,UDP没有
    TCP头部有20字节,UDP有8字节
    应用场景
    1)TCP:效率要求相对低,但准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等:文件传输、接收邮件、远程登录
    2)UDP:效率要求相对高,对准确性要求相对低的场景:QQ聊天、在线视频、网络语音电话等即时通讯、广播通信

  3. 进程和线程的区别
    进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位
    线程:是进程的一个执行单位,是进程内的调度实体,比进程更小的独立运行的基本单位,线程也称轻量级进程。一个程序至少一个进程,一个进程至少一个线程
    区别:
    1)地址空间:同一进程的线程共享本进程的地址空间,而进程之间是独立的地址空间
    2)资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、CPU等,但进程之间的资源是独立的
    3)独立执行:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口,但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
    4)线程是处理器调度的基本单位,但进程不是
    5)两者均可并发执行

  4. 了解哪些数据结构?数组与链表的区别
    数据结构:相互之间存在一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成的。数据结构包括数据的逻辑结构(反应数据元素之间的逻辑关系)、存储结构(数据的逻辑结构在计算机存储空间中的存放形式)和运算结构。
    线性表:顺序表、链表、栈、队列
    树结构:普通树、二叉树、线索二叉树
    图结构数据
    数组与链表的区别:
    1)存储区间连续 VS 不连续
    2)存储数据 VS 存储数据的数据域和指向下一个节点地址的指针域
    3)随机访问性强O(1) VS 查找效率低O(n)
    4)插入删除效率低O(n) VS 插入删除效率高O(1)
    5)数组空间从栈分配 VS 链表空间从堆分配

  5. 进程的死锁、进程的状态有哪些?
    死锁:指多个进程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞的现象(相互挂起等待),若无外力作用,它们都将无法推进下去,称产生了死锁
    死锁产生的原因:
    1)系统的资源不足
    2)进程(线程)推进的顺序不对
    3)资源的分配不当
    死锁产生的四个必要条件
    1)互斥条件:进程申请的资源在一段时间中只能被一个进程使用;
    2)请求与等待条件:进程已经拥有了一个资源,但是又申请新的资源,拥有的资源保持不变
    3)不可剥夺条件:在一个进程没有用完,主动释放资源的时候,不能被抢占
    4)循环等待条件:多个进程之间存在资源循环链
    处理死锁的方法:
    1)预防死锁:破坏死锁产生的四个条件之一,互斥条件不能破坏
    2)避免死锁:合理分配资源
    3)检查死锁:利用专门的死锁机构检查死锁的发生,采取相应方法
    4)解除死锁:一般是强行剥夺资源
    进程的状态:一个进程的生命周期可以划分为一组状态
    1)就绪状态:进程已经具备运行条件,但是CPU还没有分配过来
    2)运行状态:进程占用CPU,并在CPU上运行
    3)阻塞状态:进程因等待某件事发生而暂时不能运行
    状态装换:
    1)运行–>就绪:1. 系统分配给进程占用CPU的时间片完成;2. 抢先式优先级调度算法的系统中,有更高优先级的进程要运行,进程被迫让出CPU,转为就绪状态;
    2)就绪–>运行:运行的进程的时间片用完,调度到就绪队列中选择合适的进程分配CPU
    3)运行–>阻塞:正在执行的进程因发生某等待事件而无法执行,转为阻塞状态,如I/O请求
    4)阻塞–>就绪:进程所等待的事情已经发生,进入就绪队列

  6. 断点续传
    从文件上次中断的地方开始重新下载或上传。实现断点续传需要客户端记录下当前的下载或上传进度,并在需要续传的时候通知服务器本次需要下载或上传的内容片断。否则每次出现异常或用户主动的暂停,都要重头下载,浪费时间

  7. 数据库的索引
    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息
    索引包括:1)主键索引:特殊的唯一索引,不允许有空值;2)普通索引:最基本的索引,没有任何限制;3)唯一索引:索引值必须唯一,允许有空值;4)复合索引:多个字段上建立索引

  8. 表A插入表B的语句
    若两表字段一致:INSERT INTO TB SELECT * FROM TA
    若只导入指定字段:INSERT INTO TB(WORD1, WORD2) SELECT WORD1, WORD2 FROM TA 字段顺序必须一致

  9. HTTP请求过程
    HTTP:HyperText Tansfer Protocol,超文本传输协议,基于TCP的关于数据如何在万维网中通信的协议
    1)对网址www.baidu.com进行DNS域名解析,得到对应的IP地址
    2)根据IP找到对应的服务器,发起TCP三次握手
    3)建立TCP连接后发起HTTP请求
    4)服务器响应HTTP请求,浏览器得到HTML代码
    5)浏览器解析HTML代码,请求HTML代码中的资源(如图片、CSS等)
    6)浏览器对页面进行渲染呈现给用户
    7)服务器关闭TCP连接
    DNS如何找到域名:递归查询方式,先找DNS缓存->找根域名服务器->根域名再找下一级
    为什么HTTP协议基于TCP实现连接:TCP是端到端可靠的面向连接的协议,HTTP基于传输层TCP协议不用担心数据传输不准确等问题
    发起HTTP请求:HTTP请求报文由三部分组成:1)请求行:描述客户端的请求方式(GET/POST等),请求的资源名称(URL,统一资源定位符)以及使用的HTTP协议版本号;2)请求头:描述客户端请求哪台主机及其端口;3)空行;4)请求正文:使用POST方法时,需要客户端向服务器传递数据,数据存储在请求正文中(GET方式保存在URL地址后,不放在这里)
    HTTP的请求方法:GET和POST的区别
    1)GET从服务器上获取数据,POST向服务器传送数据。它们都是传递数据的方式,本质上都是发送请求和接收结果,只是组织格式和数据量上有差别;
    2)GET和POST都是TCP连接,GET产生一个数据包,POST产生两个TCP数据包;
    3)GET把HTTP HEADER和DATA一并发送过去,服务器响应200(返回数据),而POST方式下,浏览器先发送HEADER,服务器响应100 continue,浏览器再发送DATA,服务器响应200 OK(返回数据)

  10. 如果和伙伴的观点有冲突怎么办?
    1)缓和气氛,先自我检讨责任是否在自己一方,如果是的话就要承认错误并承担责任;
    2)如果是对方的观点有误,应该及时沟通,采集多方意见。大家都是一个团队一个部门的,我们的目的都是要为公司效力,谁的观点对集体最有益,就应该选择谁的观点,一致朝着同一方向去努力。

  11. 如果伙伴到deadline还没有完成任务怎么办?
    首先我和伙伴做的工作是一个团队工作,他没有完成相等于我也没有完成,一个团队工作不能独立划分成个人的工作。如果伙伴到deadline还没有完成,我也要承认自己没有完成,然后尽量deadline前一起完成一个雏形

  12. 为什么选测开?测开人员要具备什么样特质?
    1)因为我听说测试开发岗位比较适合女生,不会太累,而我自己也希望将来进入社会能够尽力平衡好生活和工作两个方面,这样我觉得自己才能一直对工作保持着一定的热情和动力;
    2)还有测试的话就相等于是跟开发的代码呈现一个对立面,比如说我希望一个产品质量要很好,那我就要尽可能想出他可能会出问题的地方,尽力地补充、完善,后续才不会出大问题。测试是对产品有个质量保障的第一关吧。
    3)学习能力,积极乐观的态度,较强的逻辑思维
    什么是软件测试:软件测试是检查实际结果与预期结果是否匹配并确保软件系统无缺陷的活动。软件测试还有助于识别产品与实际需求不符或是缺失项。测试活动既可以手动完成,也可以使用自动化工具完成。有些人更喜欢将软件测试称为白盒和黑盒测试
    软件测试的目标:在给定的产品中尽可能多地发现错误(或bug);演示一个给定的软件产品与它的需求规格匹配;使用最小的成本和努力来验证软件的质量;生成高质量的测试用例,执行有效的测试,并发布正确和有用的问题报告
    为什么软件测试很重要:测试很重要,因为软件错误可能很昂贵甚至很危险,一个bug越长越不被发现,它就可能带来更大的隐患。此外,如果测试团队错过了准确详尽地捕捉或识别风险和软件问题,会导致一些灾难发生
    软件测试开发人员应该具备什么特质:
    1)细心;2)耐心;3)沟通能力,语言表达能力:与客户,开发,产品等方面保持密切关系;4)理解能力:对需求的准确理解;5)责任感;6)学习能力:测试需要不断接触新功能、新理论、新技术

  13. 代码题:输出一个数组的所有子集
    递归法

  14. 对上面编写的代码做单元测试,怎么测试?
    单元测试是对软件中的最小可测试单元进行检查和验证,一般指一个函数,一个类等,是认为规定的最小被测试功能模块
    单元测试的好处:1)不需要每次都对完整的程序进行运行、测试;2)可以测试某个方法的耗时和性能

  15. 了解测试用例嘛?情景题:对即将上线的哇哈哈矿泉水进行测试用例的设计
    测试用例:是一份测试文档,目的是确定系统的某个特性是否正常工作
    为什么要写测试用例:科学有效地对测试步骤进行组织规划,方便管理,记录
    从什么方面设计产品的测试用例:功能、性能、兼容性、用户体验、稳定性、安全性、可靠性
    娃哈哈矿泉水测试用例:
    1)功能:考虑正常情形和异常状况。水瓶的材料,溶剂,瓶身厚度,瓶盖大小,瓶盖开启方式,瓶盖密封程度,瓶子颜色和透明度,承受最高温;
    2)性能:验证功能实现的效率高低,水瓶出水的流畅度,倾斜多少角度开始出水;
    3)稳定性:测试功能能不能break,时刻保持工作;比如在不同的环境温度下,瓶盖是否能咬合紧密,瓶身能否保持原先的韧性,瓶子跌落多次后瓶身是否会变形等;(稳定性要求功能实现一千一万次也能持续产生输出)
    4)可靠性:测试功能能不能出错,保持“正确地”工作;反复打开关闭瓶盖,在合理次数范围内,瓶盖是否依然可以正常扭紧,不漏水(可靠性不仅要求产生输出,而且要产生正确的输出)
    5)安全性:测试产品自身的安全以及使用产品的“用户”的安全:水瓶的材料是否安全,是否会渗透对人体有害的元素;加入开水是否容易烫伤用户
    6)兼容性:确保产品有良好的适配性和可移植性;除了装水,可否装入其他的液体,水瓶体积和外形能否放在车内空间里

  16. 反问环节
    1)贵公司对员工有什么职业发展方面的培训?
    2)想问公司里的团队里的氛围怎么样,自己希望能在一个团结、上进的团队中学习、工作。因为我觉得自己蛮有责任心的,很有团队意识,不论做什么都会尽到自己的责任。

---------------------------------------面经2 2020-07-03--------------------------------------
字节跳动2021提前批测试开发面经_2
2020-07-04

  1. C和C++的区别
    C语言:面向过程语言,分析出解决问题的步骤,把这些步骤一步一步地实现,使用的时候再一次调用。性能高,不易维护、复用和扩展
    C++语言:面向对象编程语言,把问题分解成各个对象,描述某个事物在整个解决问题的步骤中的行为。性能低,对象实例化开销大,易维护,易复用、易扩展

  2. 虚函数和纯虚函数的区别
    虚函数既有定义,又有实现
    纯虚函数是只有定义,没有实现代码的函数

  3. C++的三个特性和解释
    封装:突破了C语言函数的概念,可以隐藏实现细节,使代码模块化。封装是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
    继承:扩展已存在的代码模式(类)。封装和继承的目的是:代码重用。指一个对象从另一个对象获得功能的过程,提供明确表述共性的方法,不断向上抽取的过程
    多态:使用未来,即当前框架不需改变也可以使用后来的代码,目的是:接口重用
    1)多态的体现:父类引用指向自己的子类对象;父类引用接收自己的子类对象
    2)多态的前提:类与类之间存在关系
    3)多态的实现方式:
    函数重载:必须在同一个类中进行,子类无法重载父类的函数,父类同名函数被名称覆盖。重载是在编译期间根据参数类型和个数决定函数调用
    函数重写:必须发生在父类与子类之间,父类与子类中的函数必须有完全相同的原型,使用virtual声明后能产生多态,是在运行期间根据具体对象的类型决定函数调用

  4. 构造函数和析构函数
    构造函数:与类同名,在创建对象时自动调用,用于构造对象。如果没有显示编写构造函数,C++会自动提供
    析构函数:与类同名,前面加波浪号。当删除所创建的对象时执行,有助于在跳出程序前释放资源

  5. 状态码,域名解析的步骤
    状态码:浏览器访问网页时,浏览器向网页所在服务器发出请求,当浏览器接收并显示网页前,网页服务器会返回一个包含HTTP状态码的信息头(server header)来响应浏览器的请求
    200 - 请求成功
    301 - 资源被永久转移大其他URL
    404 - 请求的资源不存在
    500 - 内部服务器错误

  6. 抖音同城的测试
    能否准确定位,试试更新定位,定位多大范围内为同城,搜索同城用户

---------------------------------------面经3 2020-07-05--------------------------------------
字节跳动2021提前批测试开发面经_3
2020-07-05

  1. 给一个数组,里面有一些数字, 把这些数字排序,使得拼出来的数字最大

  2. 如何测试发送图片的功能,视频加载失败如何测试
    测试发送图片:
    1)0k大小的图片发送;2)不同格式(png, jpg, gif, bmp)的图片发送;3)大于1M的图片发送;4)不选择图片直接上传;5)上传代特殊符号的名字的图片;6)查看上传的图片是否正常显示;7)发送的图片能否正常删除;8)测试多张图片同时发送;
    视频加载失败测试
    1)测试网络连接是否正常、通畅
    2)测试小视频的加载
    3)Adobe Flash Player下载

  3. GET和POST的区别,安全性
    GET和POST都是TCP连接,本质上都是发送请求和接收结果,在组织格式和数据量上有差别;
    GET产生一个数据包,POST产生两个数据包
    GET把HTTP HEADER和DATA一并发送过去,数据存储在URL地址后面,数据有长度限制。服务器响应200返回数据
    POST产生两个数据包,数据存储在请求正文中,数据量没有限制。POST先发送HEADER,服务器响应100continue,然后再发送DATA,服务器响应200返回数据
    POST的安全性更高,因为GET的URL会被log记录下来,如果数据中有敏感字符或特殊字符不适合用GET请求

  4. TCP三次握手
    客户端向服务器发送一段TCP报文,其中:
    1)标记号为SYN,表示“请求建立新连接”
    2)序号Seq=x(一般为1)
    客户端进入SYN-SENT阶段
    服务器收到来自客户端的TCP报文后,结束LISTEN阶段,并返回一段TCP报文:
    1)标志位为SYN+ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”
    2)序号为Seq=y
    3)确认号ACK=x+1,表示收到客户端的序号Seq并在其值加1作为自己确认号ACK的值;服务器进入SYN-RCVD阶段
    客户端接收到来自服务器的确认后,结束SYN-SENT阶段,再发送一段TCP报文:
    1)标志位为ACK,表示“确认收到服务端同意连接的信号”
    2)序号Seq=x+1,表示收到服务器端的确认号ACK,并将其值作为自己的序号值
    3)确认号ACK=y+1,表示收到服务器端序号Seq,将其值加1作为自己的确认号ACK
    4)客户端进入ESTABLISHED阶段

---------------------------------------面经4 2020-07-05--------------------------------------
字节跳动2021提前批测试开发面经_4
2020-07-05

  1. HTTP和HTTPS的区别
    HTTP:超文本传输协议,是一种发布和接收HTML页面的方法,以明文方式发送信息
    1)客户端浏览器要先与服务器建立TCP连接,端口号是80。客户端建立连接后发送HTTP请求;
    2)服务器接到HTTP请求后给予相应的响应信息
    HTTPS:以安全为目标的HTTP通道,是HTTP的安全版,安全基础为SSL。SSL位于TCP/IP与各种应用层协议之间,为数据通讯提供安全支持。SSL分两层:
    1)SSL记录协议:建立在TCP之上,为高层协议提供数据封装、压缩、加密等基本功能的支持
    2)SSL握手协议:建立在SSL记录协议之上,在实际的数据传输之前通讯双方进行身份认证、协商加密算法等
    HTTP和HTTPS区别:
    1)HTTPS协议需要CA申请证书
    2)HTTP是超文本传输协议,信息是明文传输,HTTPS是具有安全性的SSL加密传输协议
    3)HTTP的端口号是80,HTTPS端口号是443
    4)HTTP连接简单,无状态;HTTPS是由HTTP+SSL构建的可加密传输、身份认证的网络协议,比HTTP安全

  2. linux命令,找出关键字出现的次数
    查找单个关键字:grep -o ‘objStr’ filename|wc -l
    grep匹配关键字 objStr:目标关键字 filename文件名 |wc -l查有多少个

  3. 数据库,查找一个学生两门功课都大于80分的姓名
    SELECT name FROM tableA GROUP BY name HAVING COUNT(SELECT DISTINCT COURSE FROM tableA WHERE score > 80) =2

  4. 浏览器中输入一个地址,按下回车后发生了什么
    浏览器对网址进行DNS域名解析,得到IP地址
    根据IP地址找到对应服务器,建立TCP连接
    浏览器发送HTTP请求
    服务器响应请求后返回HTML代码
    浏览器解析HTML代码,获得资源名称
    对页面进行渲染呈现给用户
    关闭TCP连接

  5. TCP三次握手四次挥手
    三次握手
    客户端向服务器发送一段TCP报文,其中:
    1)标记号为SYN,表示“请求建立新连接”
    2)序号Seq=x(一般为1)
    客户端进入SYN-SENT阶段
    服务器收到来自客户端的TCP报文后,结束LISTEN阶段,并返回一段TCP报文:
    1)标志位为SYN+ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”
    2)序号为Seq=y
    3)确认号ACK=x+1,表示收到客户端的序号Seq并在其值加1作为自己确认号ACK的值;服务器进入SYN-RCVD阶段
    客户端接收到来自服务器的确认后,结束SYN-SENT阶段,再发送一段TCP报文:
    1)标志位为ACK,表示“确认收到服务端同意连接的信号”
    2)序号Seq=x+1,表示收到服务器端的确认号ACK,并将其值作为自己的序号值
    3)确认号ACK=y+1,表示收到服务器端序号Seq,将其值加1作为自己的确认号ACK
    4)客户端进入ESTABLISHED阶段
    四次挥手
    客户端发出连接释放报文,标志号为FIN=1,Seq=u,等于前面传送过的序号+1,客户端进入FIN-WAIT1(终止等待1)状态。FIN不携带数据也要消耗一个序号
    服务器返回确认报文,标志号ACK=1,ack=u+1,Seq=v,服务器进入CLOSE-WAIT(关闭等待状态)
    客户端收到服务器的确认请求后,进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文
    服务器向客户端发送连接释放报文,FIN=1,ack=u+1, 若此前有发送数据则Seq=w,服务器进入LAST-ACK(最后确认)状态,等待客户端的确认
    客户端收到连接释放报文后发出确认,ACK=1, ack = w+1, seq=u+1,客户端进入TIME-WAIT(时间等待)状态。经过2**MSL(最长报文段寿命)时间后,客户端撤销相应的TCB,才进入CLOSED状态

【问题1】为什么连接的时候是三次握手,关闭的时候却是四次挥手?
因为服务器接收到客户的SYN是,可以直接返回SYN+ACK报文,ACK用来应答,SYN用来同步;但是关闭连接时服务器收到FIN报文,不会立即关闭SOCKET,所以只能回复一个ACK报文,表示正常接收客户的FIN报文,等服务器所有的报文发送完毕,才发送FIN报文,因此需要四步。

  1. TCP拥塞控制
    拥塞控制原理:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能会变坏,叫做网络拥塞。既往中数位链路容量(带宽),交换结点中的缓存和处理及等都是网络的资源。若不进行拥塞控制,网络的吞吐量将随输入负荷的增大而下降。
    拥塞窗口cwnd状态变量,取决于网络的拥塞程度,并且动态变化。网络不拥塞,cwnd增大;网络拥塞,cwnd减少
    TCP的四种拥塞控制算法:
    1)慢开始:发送方cwnd=1, 发送窗口swnd=cwnd,只能发送一个数据报文段。接收方收到报文段后返回确认报文段,发送方cwnd=2,4,8,…按指数增长。当cwnd等于慢开始门限值ssthreshold,改用拥塞避免算法
    2)拥塞避免:拥塞窗口cwnd只能线性+1。若发生超时重传,网络可能出现拥塞:ssthreshold = cwnd/2, cwnd = 1,重新开始慢开始算法
    3)快重传:使发送方尽快进行重传,而不是等超时重传计时器超时再重传。接收方要立即发送确认,即使受到了失序的报文段也要立即发出对已收到的报文段的重复确认。发送方受到3个连续的重复确认,就将相应的报文段立即重传,不等超时重传计时器超时再重传
    4)快恢复:发送方一旦收到3个重复确认,就不启动慢开始算法,而执行快恢复算法。将慢开始门限ssthreshold和cwnd调整为当前窗口的一半,执行拥塞避免算法。

  2. 微信发红包测试用例
    功能:
    红包钱数、红包个数框只能输入数字
    红包钱数最大值和最小值限制,超过范围有提示
    红包个数超过范围有提示
    红包描述中输入汉字,表情,符号等
    红包描述超出最大字符数范围
    可否领取自己发出的红包
    可否多次抢红包
    自行选择红包支付方式
    性能:
    网弱时抢红包、发红包的时间
    发红包和收红包成功后的跳转时间
    收发红包的耗电量
    退款到账的时间
    兼容性
    苹果、安卓系统可否发送红包
    电脑端、手机端抢微信红包
    安全性
    对方微信号异地登录,是否有提醒
    发送红包失败后,余额和银行卡的钱数不会少
    红包发送成功,是否收到微信支付的通知

  3. 代码题:类似高考成绩,一个表中有很多数据(无序的),给你一个成绩,查出在表中的排名

  4. 算法,两个链表,找出这两个链表是否有相交的点

---------------------------------------面经5 2020-07-05--------------------------------------
面经_5
2020-07-05

  1. 数据结构的定义
    相互之间存在一种或多种特定关系的数据元素的集合

  2. 排序算法有哪些,时间复杂度和空间复杂度分别是多少
    排序算法 最坏时间复杂度 平均时间复杂度 稳定度 空间复杂度
    冒泡 O(n^2) O(n^2) √ O(1)
    插入 O(n^2) O(n^2) √ O(1)
    选择 O(n^2) O(n^2) √ O(1)
    快速 O(n^2) O(nlogn) × O(n)
    堆排 O(nlogn) O(nlogn) × O(1)
    归并 O(nlogn) O(nlogn) √ O(n)
    基数 O(d(r+n)) O(d(r+n) √ O(rd+n)

  3. 二叉树有哪些排序方式,如何实现
    中序遍历、前序遍历、后序遍历、递归实现

  4. 测试用例:今日头条推送文章,每天早上9点向当地30岁以上的人群推送当地的房地产信息
    用户年龄筛选,30岁以上
    早上九点定时发送
    推送文章筛选:房地产消息
    定位信息获取
    推文题目字数限制
    推文内容字数限制,正文内容允许插入图片,视频等
    推文允许用户评论、点赞、收藏
    发送推文时间

---------------------------------------面经6 2020-07-06--------------------------------------
面经_6
2020-07-06

  1. HTTP和HTTPS之间的区别

  2. 测试用例:抖音刷轮船
    连续点击刷出多个轮船
    点击后界面快速显示轮船
    刷出轮船同时扣除银行卡余额
    刷出轮船同时主播金钱到账
    余额不足提示刷礼物失败
    网查的情况下能否快速刷礼物

  3. 同样场景如果主播没收到轮船,怎么测试和定位
    重新进入直播刷轮船,测试观众的网络,检测观众的银行卡余额是否充足
    主播刷新界面查看是否收到来自其他观众的礼物
    主播方检测自己的网络是否通畅

  4. 对测试的了解
    软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,鉴定产品的正确性、完整性、安全性和质量的过程
    测试无处不在,平时在做实验写代码的时候,都会对代码/模块进行简单的测试
    测试和研发的区别:二者在工作职责、难易程度、技能要求等方面不同。测试的职责是找出程序中出现的问题,相对来说广度大专业度低,技能要求广泛,对测试工具使用,业务和架构分析以及用户需求等方面都要有所掌握。研发的职责是实现产品的功能,广度低,专业度高,专业技能要求高
    测试和测开的区别:功能性测试主要是手工地去执行写好的测试用例,验证实际输出和预期结果是否一致;测试开发是要把手工测试用例编写成自动化测试脚本,代替手工测试的过程。

  5. 进程和线程的区别

  6. 堆和栈的区别
    堆和栈指的是内存中的“堆区”和“栈区”。C语言的内存分为5个区:栈区、堆区、静态区、常量区、代码区:
    1)栈区:存放函数的参数值、局部变量等,由编译器自动分配和释放,在函数执行完后就释放
    2)堆区:通过new、malloc、realloc分配的内存块,编译器不负责他们的释放工作,由程序区释放
    3)静态区:全局变量和静态变量的存储,程序结束后由系统释放
    4)常量区,存储常量,不允许修改
    5)代码区:存放函数体的二进制代码

  7. TCP和UDP的区别

  8. 测试和测开的区别

  9. HTTP的请求方式有哪些

  10. 代码题:求两个数的公倍数

  11. 职业规划

---------------------------------------面经7 2020-07-06--------------------------------------

面经_7
2020-07-06

  1. 代码题:实现X!

  2. 数据库左连接、右连接

  3. 链表

  4. 进程和线程的区别

  5. 反问

  6. 618购买手机,怎么快速知道手机没有问题
    检查手机外观
    启动手机,是否正常启动
    连接网络是否正常
    打开软件/浏览器检查网络流畅度
    体验使用的使用程度,界面是否流畅、美观、不卡壳
    能否正常充电
    电量消耗是否正常

---------------------------------------面经8 2020-07-06--------------------------------------
面经_8
2020-07-06

  1. GET和POST的区别

  2. 代码题:一个数组怎么调顺序合起来最大

  3. HTTP和HTTPS的区别

  4. JAVA垃圾回收机制
    在程序创建对象、数组等引用类型实体时,系统会在堆内存中为之分配一块内存区,对象就保存在内存区中,当内存不再被任何引用变量引用时,这块内存就变成了垃圾,等待垃圾回收机制去进行回收。垃圾回收机制只负责回收堆内存中的对象,不回收任务物理资源。

  5. 内存泄漏和内存溢出
    内存溢出:out of memory,指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。也就是说要求分配的内存超出了系统能给你的,无法满足需求,产生溢出
    内存泄漏:memory leak,指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏危害可以忽略,但内存泄漏堆积后果很严重,无论多少内存,迟早会被占光。例如系统申请分配内存进行使用(new),使用完后却不归回(delete)

  6. 江浙沪一带抖音用户出现问题,什么原因?
    江浙沪区域的网络有问题
    用户数量太多,出现拥挤

  7. 手机APP使用未响应,什么原因?
    确认其他APP是否无响应
    若其他软件响应速度正常,则该软件运行程序有问题
    中了木马类病毒,找相关杀毒软件来清除

  8. 智力题:8个球其中一个轻球,分几次称找出来
    2次。前去六个球,每边放三个:
    若平衡,则称剩下的两个球,较轻的球就是;
    若不平衡,从较轻的三个球中取两个来称:平衡则第三个是,不平衡则较轻球是

  9. TCP连接

  10. 地址栏输入网址按回车的过程

  11. 对一个矿泉水瓶编写测试用例

  12. 网页状态码有哪些
    HTTP状态码:当浏览者访问一个网页时,浏览器想网页所在的服务器发出请求,浏览器接收并显示网页前,此网页所在的服务器返回一个包含HTTP状态码的信息头(server header),响应浏览器的请求
    100 Continue继续
    200 请求成功
    301 资源被永久转移到其他URL
    404 请求的资源不存在
    500 内部服务器出现错误

---------------------------------------面经9 2020-07-06--------------------------------------
面经_9
2020-07-06

  1. OSI七层协议
    物理层:机械、电子、定时接口通信信道上的原始比特流传输。集线器、中继器
    数据链路层:物理寻址,同时将原始比特流转变为逻辑传输线路。ARP地址解析协议,RARP逆向地址解析协议。网桥,交换机
    网络层:控制字网的运行,如逻辑编制、分组传输、路由选择。ICMP互联网控制信息协议。路由器
    传输层:接受上一层的数据,在必要是对数据进行分割,并把这些数据交给网络层,保证数据段有效到达对端。TCP传输控制协议,UDP用户数据报协议。网关
    会话层:不同机器上的用户之间建立及管理会话。SSL安全套接字层协议
    表示层:信息的语法语义以及他们的关联,如加密解密、转换翻译、压缩解压缩
    应用层:各种程序协议,如HTTP, FTP, SMTP, POP3

  2. TCP特点,自动重传机制,tcp断开连接方式,为什么四次挥手
    TCP特点:面向连接、面向字节流、可靠的传输控制协议、面向字节流
    自动重传机制:当接收到失序报文段时,TCP需要立即生成确认信息(重复ACK),发送方重传可能丢失的数据分组,而不必等到重传计时器超时
    TCP断开连接方式:四次挥手:1)客户端FIN=1, Seq=u,客户端进入FIN-WAIT-1终止等待;2)服务器返回ACK=1,Seq=v, ack=u+1,服务器进入CLOSED-WAIT关闭等待;3)服务器返回FIN=1,ack=u+1,进入LAST-ACK最后确认状态;4)客户端发送ACK=1,Seq=u+1, ack = w+1,经过2**MSL时间后,CLOSED状态
    为什么四次挥手
    因为服务器收到客户端的FIN后不会立即关闭SOCKET,只能回复一个ACK,表示正常接收关闭连接的报文,等服务器所有的报文发送完毕后才发送FIN报文。而建立连接发送SYN后,服务器可以直接返回SYN+ACK报文。因此有四次挥手

  3. Cookie
    Cookie是存储在用户计算机上的小文件,旨在保存特定于客户端和网站的适量数据,并由Web服务器或客户端浏览器访问。帮助网站跟踪用户的访问和活动

  4. HTTP协议
    超文本传输协议HTTP是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础

  5. 什么是线程,线程的状态有哪些
    线程是操作系统能进行运算调度的最小单位,被包含在进程中,是进程的实际运作单位。
    线程的状态:
    1)新建状态:用new操作符创建一个线程
    2)就绪状态:调用start()方法启动线程,创建线程运行的系统资源
    3)运作状态:线程获得CPU时间后,执行run()方法,开始执行
    4)阻塞状态:正在运行的线程没有运行结束,暂时让出CPU。调用sleep()方法进入睡眠状态;调用一个在I/O上被阻塞的操作,在输入输出完成前不会返回到它的调用者;线程试图得到一个锁,而锁正被其他线程持有;在等待某个触发条件
    5)死亡状态:run()方法正常退出而线程自然死亡;一个未捕获的异常终止了run()方法

  6. 数据结构有什么常用结构,栈和队列区别,如何用两个栈实现一个队列
    栈和队列的联系:
    都是控制访问点的线性表
    允许在端点处进行数据的插入和删除的数据结构
    栈和队列的区别:
    栈遵循“后进先出LIFO”,只能在线性表的一头进行插入和删除。栈适合用顺序表
    队列遵循“先进先出FIFO”,在尾部插入元素,在头部删除元素,用链表实现比较好

  7. 二叉树是什么,树的遍历方式,图的遍历方式
    二叉树:特殊的树,每个节点最多有两个节点;满二叉树:所有叶子结点都在最底层,除了叶子结点每个节点都有两个子节点;完全二叉树:从上到下,从左到右的节点都是连续的
    树的遍历方式:前、中、后序遍历,层次遍历
    图遍历方式:深度优先遍历(类似于数的前序遍历),广度优先遍历(类似于树的层次遍历)

  8. 有哪些排序方法?说一下快速排序的思路,以及时间复杂度。贪心算法是什么
    贪心算法:在对问题求解时,总是做出在当前看来是最好的选择,即不从集体最优上加以考虑,只考虑局部最优解
    动态规划:将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解

  9. 软件测试方法有哪些?白盒测试的动态测试有哪些?
    按是否查看程序内部结构:黑盒测试:只关心输入和输出;白盒测试:考虑内部结构
    按是否运行程序:静态测试:不实际运行软件,静态检查程序代码、界面或文档可能存在的错误;动态测试:实际运行程序,输入相应的测试数据,检查输出结果和预期结果是否相符
    按阶段划分:单元测试:对最小可测试单元进行检查验证;集成测试:测试单元模块组成的子系统,测试不同模块的接口部门;系统测试:将整个软件系统看作一个整体进行测试;验收测试:以用户测试为主,有测试人员共同参与的测试,分为alpha测试和beta测试
    动态测试:采用逻辑覆盖,包括路径覆盖,语句覆盖,分支覆盖,条件覆盖,分支-条件覆盖

  10. 什么是测试用例,编写测试用例的方法,假如刷今日头条时候,发现白屏,可能是什么原因?怎么测试?
    测试用例:一组由前提条件、输入、执行条件、预期结果等组成,以完成对某个特定需求或者目标测试的数据,体现测试方案、方法、技术和策略的文档
    为什么写测试用例:科学有效的对测试步骤进行组织规划,方便管理,记录
    编写测试用例的方法:等价类划分,边界值,因果图,错误猜测法
    今日头条时候,发现白屏:原因可能是网络不稳定,加载缓慢;内部服务器出错,显示500状态码;测试方法:检查网络稳定,反馈客服,删除缓存和数据库等

---------------------------------------面经10 2020-07-06--------------------------------------
面经_10
一面
主要还是计算机网络和数据结构的问题

1、网络的分层 每层的功能

2、tcp协议和udp协议的差别

3、三次握手、原因

4、计算机的组成、输入程序到exe执行输出编译过程

5、post输入后到打开页面经历的过程

6、堆栈的差别、编译过程中程序、临时变量的存储

7、stp了解吗?这个我不知道

8、测试:抖音上下滑动

9、dns、从url得到Ip的过程、以及问了一下防火墙原理了解吗?

10、网页状态码,重定向

11、代码题:一开始是一个数组求最大子集,我说了暴力解法 双指针,然后他就说别写这个了、改成写两个数组求交集的代码,要求用map

12、对于上述程序写测试用例

13、http和https的差别

14、最后问了未来的职业规划,以及有什么问题要问他的

二面

1、还是自我介绍和项目

2、问了数组和链表的差别 各个操作的时间复杂度 空间复杂度

3、http和https,端口、get和post差别

4、栈 队列

5、然后就很猝不及防地问平时用哪些数据结构比较多

我说栈 容器 数组 字符串,

二叉树了解吗?把中序遍历写出来吧

要求10?还是15min写完,我说可以用栈和递归,两个本来都要写,写完栈的然后讲了一下思路,把递归的思路讲了就没写了

6、后续都是测试相关的问题,购物车做测试etc

7、然后问了很多未来职业规划、如果测试和研发的想法冲突怎么办?如果个人想做的和leader要求的任务不一样怎么办?

8、对于字节的了解,有没有去其他公司的想法?对于上班时间,可能加班的想法?

9、为什么选择做测试?未来做测试开发选哪个?如果通过能不能来实习?

10、有什么其他问题要问的?

---------------------------------------面经11 2020-07-06--------------------------------------
面经_11

1.自我介绍
2.项目中的分布式数据库和传统关系型数据库的区别?
3.项目细节
4.项目中遇到的困难?怎么解决的?
5.你的实现怎么保证项目质量?
6.进程和线程的不同点与相同点?
7.进程间的通信方式?
8.死锁的四个必要条件?
9.堆和栈的区别
10.网络OSI模型
11.应用层有哪些协议
12.HTTP用到的方法有哪些?get和post的区别?
13.路由器工作在哪一层?
14.三次握手和四次挥手
15.冒泡的时间复杂度、快排的时间复杂度、快排最差时间复杂度
16.快排是稳定排序吗?什么是稳定排序?
17.c++面向对象的特性
18.c++的重载和重写
19.测试观点:微博评论
20.评论中图片不显示的原因?
21.输入url到网页显示经历的过程
22.有哪些提高系统性能的方法
23.代码:假设有n个人,每次数第k个出列,出列后接着下一个人重新数,最后出列的那个人的序号
24.为什么想做测试开发
25.你认为做测试开发需要具备些什么?
26.反问

---------------------------------------面经12 2020-07-06--------------------------------------
一面
1.自我介绍
2.项目介绍
3.(数据库,计网,JVM相关没有问)问了HashMap的Java底层实现原理,扩容机制,2的n次幂,怎么扩容怎么解决冲突,扩容之后地址值是否改变。
4.就HashMap面试官深挖了很多,LZ看书喜欢自己理解记忆,所以感觉答得都是按照自己想的来的,没有像书本一样很规范,下来查了下也有一个说错了,崩溃.jpeg。
5.两道算法题,LZ平时刷题太少,只说了思路,代码熟悉度不够,后面得加紧练习。
6.微信文字框输入到发送接收这个过程测试用例的设计。
7.小哥哥最后问还有什么想了解的?

二面
1.自我介绍(问了为什么要做测试,测试和开发相比有什么区别和岗位定性,目前以自己的能力和想法觉得测试更适合我,并不是人人都适合做算法,有个工作开开心心的干,开开心心的赚钱就行)
2.项目介绍
3.HTTP相关,有哪些方法,说了常用的post,get,put,并让比较区别,安全性,以及常用场景用到的是哪个,提到了HTTP是TCP面向连接可靠传输,于是下面开始TCP、UDP的询问
4.TCP可靠传输,三次握手,四次挥手
5.应用层有哪些协议,我记得不是很多,但是这些协议都是按照TCP可靠交付和UDP不可靠但高效交付分类的,说了HTTP,FTP,邮件等相关协议,应用UDP的协议是比较注重高效和实时传输对差错容忍率小的一些场景
6.输入网址到按回车发生了什么?
7.数据库相关,LZ表明只了解基础,问了 内连接,左连接,右连接,我描述答得让人难以理解,可能就我自己理解,于是小哥哥举例让我做出了回答,很nice呀
8.往数据库插入100万条数据怎么插?一般for循环,慢?批量传,面试官在引导,我完全没接触过这个,按照自己理解答了答案,后期想一想不应该是这样不对,然后断电了,于是下去做了功课,类似于深度学习的batch输入
9.然后问了JVM相关回收算法,LZ也是刚刚理解着看得ing
10.java语言相关,问了多态,重写,重载,深拷贝,浅拷贝(没有答上来)
11.微信点赞功能测试用例设计,我考虑还是不太全面,最后问到弱网模拟,觉得思维定势让人变傻,我想太多了。
12.智力题,那会智力突然低下,没答出来,下来想想就是2的n次幂,找对应关系,用二进制位移,心理在高压情况下还是不行
13.一道字符串相关的编程题,题不难,可是我写了一半,只有思路,(恨自己为什么不多刷刷题,提高代码熟悉度)
14.感恩小哥哥最后给了一些面试建议,明确我身上存在的问题,抗压力以及面试技巧方面,还有字节挺注重编码能力的

---------------------------------------面经13 2020-07-06--------------------------------------
面经_13
1.自我介绍
2.项目
3.七层网络及协议
4.TCP,UDP不同,为什么三握四挥
5.http方式及状态码
6.http header
7.进程和线程
8.测试朋友圈点赞(功能、兼容性)
9.app加载慢为什么(从七层网络角度)
10.各种测试类型
11.判断旋转字符串

  • 28
    点赞
  • 288
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值