字节测开实习面经分享

1、自我介绍

2、为什么投了字节?

  • 公司声誉:字节跳动是一家知名的科技公司,在互联网行业享有很高的声誉。
  • 发展前景:字节跳动的业务涵盖了多个领域,包括短视频、资讯、教育等。这意味着您将有机会接触到不同的产品和技术,拓宽自己的技能和视野。
  • 团队氛围:字节跳动的团队通常以年轻、活力和创新著称。在这样的环境中工作,将有机会与志同道合的同事共事,共同追求卓越。
  • 学习机会:作为一家快速发展的公司,字节跳动为员工提供了丰富的学习和发展机会。

字节测开实习面经分享

3、说一下对于测开岗位的理解

测试开发工程师是一种融合了开发角色和质量意识的岗位,要求测试人员兼具开发人员的技能和测试人员的思维。总的来说,测试开发工程师的定位就是保障产品的质量和提高测试效率。

测试开发工程师需要具备以下技能:

  • 熟悉编程语言,如Java、Python、C++等;
  • 熟悉自动化测试框架,如Selenium、Appium等;
  • 熟悉数据库操作,如MySQL、Oracle等;
  • 熟悉网络协议,如HTTP、TCP/IP等;
  • 熟悉Linux操作系统。

4、介绍一下实习的项目

5、对于该项目的质量建设,你做了哪些工作?

  • 明确质量标准:在项目开始阶段,与团队成员讨论并确定项目的质量标准和期望。这有助于确保所有人都对项目的质量要求有共同的理解。
  • 制定质量管理计划:根据项目需求和质量标准,制定详细的质量管理计划。这应包括质量控制、质量保证和质量改进的策略和方法。
  • 实施质量控制:通过定期检查和测试,确保项目产出符合预期的质量标准。这可能包括代码审查、单元测试、集成测试和系统测试等。
  • 建立质量保证机制:为团队提供培训和支持,以确保他们具备足够的技能和知识来保证项目的高质量。这可能包括技术培训、最佳实践分享和持续的沟通。
  • 监控项目进度和结果:定期评估项目的进度和结果,以确保项目按照计划进行并达到预期的质量目标。如果发现问题或偏离计划,及时采取措施进行调整。
  • 持续改进:通过收集反馈和经验教训,不断优化项目管理过程和工具,以提高项目的整体质量和效率。

总之,在项目质量建设过程中,关键是确保所有团队成员都了解并遵循既定的质量标准和策略。通过有效的沟通、培训和支持,可以确保项目的成功交付。

6、MySQL和Redis的使用场景?区别?

MySQL和Redis都是数据库,但是它们的本质区别在于MySQL是关系型数据库,而Redis是NoSQL数据库。MySQL适用于大规模数据存储和复杂查询场景,例如电商、金融、物流等领域。而Redis适用于缓存、消息队列、计数器等场景。

MySQL和Redis的区别主要有以下几点:

  • 数据类型:MySQL支持多种数据类型,而Redis只支持字符串、列表、集合和有序集合等基本数据类型。
  • 本质区别:MySQL是关系型数据库,而Redis是NoSQL数据库。
  • 事务处理:MySQL支持事务处理,而Redis不支持事务处理。

7、MySQL慢查询排查(面试官好喜欢问这个,被问到好多次了)

MySQL慢查询排查的方法有很多,以下是一些常用的方法:

  • 开启慢查询日志:通过开启慢查询日志,可以记录下执行时间超过阈值的SQL语句,从而找到需要优化的SQL语句。
  • 分析查询语句和执行计划:通过分析查询语句和执行计划,可以找到SQL语句的瓶颈,从而进行优化。
  • 优化查询语句和表结构:通过优化查询语句和表结构,可以减少SQL语句的执行时间,从而提高MySQL的性能。
  • 使用缓存:通过使用缓存,可以将经常访问的数据存储在内存中,从而减少磁盘I/O操作,提高MySQL的性能。
  • 调整MySQL参数:通过调整MySQL参数,可以根据具体情况优化MySQL的性能。

8、索引类型?你们项目中用的什么索引?

在数据库中,索引是一种数据结构,用于提高查询效率。常见的索引类型包括:B树索引、哈希索引、位图索引等。

不同的数据库管理系统(DBMS)支持的索引类型也不同。例如,MySQL支持B树索引、哈希索引和全文索引;Oracle数据库支持B树索引、位图索引和函数索引等。我们项目用的B+树索引居多

9、索引底层原理?介绍下B+树吧

Mysql相关面试题 

10、Redis数据类型及常见使用场景

11、接口自动化做到什么粒度?接口自动化执行通过率?

一般来说,接口自动化可以做到以下粒度:

  • 单元测试:针对单个接口进行测试,验证其返回结果是否符合预期。
  • 集成测试:针对多个接口进行测试,验证它们之间的交互是否符合预期。
  • 系统测试:针对整个系统进行测试,验证所有接口是否能协同工作,是否能够满足业务需求。

通过率99%

12、http&https&Rps区别?

HTTP、HTTPS和RPC都是计算机网络中的协议。其中,HTTP是一种明文传输协议,而HTTPS则是一种加密传输协议。RPC是一种远程过程调用协议,它可以在客户端和服务器之间进行通信,使得开发者可以像调用本地函数一样调用远程函数。

HTTP和HTTPS的区别在于安全性。HTTPS使用SSL/TLS协议对数据进行加密,可以保护数据的安全性和完整性。而HTTP则不具备这种加密机制,数据传输过程中容易被窃听和篡改。

13、你理解接口自动化的出发点?为什么要耗费人力做自动化

接口自动化的出发点是为了节省人力成本,把测试从枯燥的重复劳动的人工测试中解放出来。这样可以减轻测试人员的工作量,提高测试效率,同时也可以保证测试质量。

此外,接口自动化还可以提高测试覆盖率,减少人为错误,提高软件的稳定性和可靠性。

14、http和Rpc使用上的区别?

RPC和HTTP使用上的区别主要有以下几点:

  • 传输协议:RPC可以使用自定义的TCP协议,也可以使用HTTP协议,而HTTP只能使用HTTP协议。
  • 传输效率:RPC使用自定义的TCP协议,可以让请求报文体积更小,或者使用HTTP2协议,也可以很好的减少报文的体积,提高传输效率。
  • 数据传输方式:RPC是一种远程过程调用协议,它可以直接将数据打包成二进制流进行传输,而HTTP则是一种基于文本的协议,需要将数据转换成字符串进行传输。
  • 应用场景:RPC一般用于大型企业之间的通信,而HTTP则适用于中小型企业之间的通信。

15、Redis 的key大小设置多少合理?

Redis的key大小设置应该根据实际需求来定。一般来说,建议使用有意义及统一格式的key,而不是过长的key,因为过长的key会影响内存占用及数据查性能。

16、URL请求到响应的流程

一次性补全网络基础知识。

17、栈和队列的区别?举一个只能使用队列不能使用栈的业务场景

栈和队列是两种常见的数据结构,它们的区别如下:

栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构,即最后放入栈中的元素会最先被弹出;而队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,即最先放入队列中的元素会最先被取出。

栈只能从表尾插入和删除元素,而队列只能在表头插入和在表尾删除元素。

一个只能使用队列不能使用栈的业务场景是:假设你有一个火车站,你需要让乘客上车。你可以使用队列来实现这个场景。首先,你需要在车站入口处放置一个队列。然后,每当有新的乘客到来时,他们必须站在队列的末尾。当火车到达时,车站工作人员会从队列的头部移除第一个乘客并将其带上火车。这样,我们就可以确保每个乘客都能够按照他们到达的顺序上车。

18、线性表和链表区别

线性表和链表是两种常见的数据结构。线性表是一种具有相同数据类型的n (n>0)个数据元素的有限序列,它的顺序存储结构就是顺序表,链式存储结构就是链表。链表又包括单向链表、双向链表、循环链表、静态链表等。顺序表可以实现随机访问,随机存取,占用连续的存储空间,空间利用率较高,但是顺序表的插删,需要移动多个元素。而链表则可以实现任意插入和删除操作,不需要移动元素,但是只能从头节点开始遍历,访问某个节点时需要从头节点开始遍历整个链表  。

19、JAVA线程安全

Java中的线程安全是指在多线程环境下,保证程序的正确性。Java语言中各种操作共享的数据有5种类型:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。其中,不可变的对象一定是线程安全的,不需要再采取任何的线程安全保障措施。只要能正确构建一个不可变对象,该对象永远不会在多个线程之间出现不一致的状态。

如果您想要确保Java程序是线程安全的,可以考虑以下几个方面:使用synchronized关键字、ReentrantLock类、Semaphore类等同步机制;使用volatile关键字;使用原子类;使用ThreadLocal类等 。

20、锁的类型,你用过哪些锁?

锁的类型有很多种,其中包括公平锁和非公平锁。Java ReetrantLock中的公平锁和非公平锁可以通过构造函数指定。此外,还有乐观锁和悲观锁等类型。

21、乐观锁和悲观锁

乐观锁和悲观锁是两种思想,用于解决并发场景下的数据竞争问题。乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作。悲观锁在操作数据时比较悲观,认为别人会同时修改数据。因此操作数据时直接把数据锁住,直到操作完成后才会释放锁;上锁期间其他人不能修改数据 。

22、git常见命令?合分支、回滚版本

以下是一些常用的git命令:
git init:初始化一个新的git仓库。
git clone:克隆一个已有的git仓库。
git add:将文件添加到暂存区。
git commit:提交暂存区中的文件到本地仓库。
git status:查看当前仓库的状态。
git diff:查看工作区与暂存区之间的差异。
git log:查看提交历史记录。
git branch:创建、列出、删除分支。
git checkout:切换分支或恢复工作区文件。
git merge:合并分支。
git rebase:变基操作,将一个分支的修改应用到另一个分支上。
git reset:重置当前分支到指定状态。

23、淘宝买东西页面白屏?说一下你的排查思路?

首先可以抓包看前端or后端问题:

  • 接口返回成功前端没展示;
  • 接口请求失败or受阻【这里比较暴力的办法是可以开启远程debug端口,打断点执行即可】。

24、出现过的线上问题?排查思路?

线上问题的排查思路因问题而异,但是一般可以从以下几个方面入手:

  • 确认问题的范围和影响;
  • 收集相关信息,如日志、监控数据等;
  • 分析问题的原因,如程序错误、硬件故障等;
  • 制定解决方案并验证。

25、扫码支付case

以下是扫码支付测试用例的设计:

  • 测试正常扫码支付流程,包括输入金额、选择支付方式、确认支付等步骤。
  • 测试扫码支付过程中可能出现的异常情况,如网络连接中断、支付失败等。
  • 测试扫码支付的安全性,包括防止恶意攻击、保护用户隐私等方面。
  • 测试扫码支付的速度和稳定性,包括响应时间、并发处理能力等方面。
  • 测试扫码支付在不同设备上的兼容性,包括不同操作系统、不同浏览器等方面。

26、性能测试指标?常用性能测试工具?

性能测试指标包括:

  • 响应时间:即请求从发送到接收到响应的时间;
  • 吞吐量:即单位时间内系统处理的请求数;
  • 并发用户数:即同时访问系统的用户数;
  • 资源利用率:即系统在处理请求时所占用的资源比例。

常用的性能测试工具有:

  • JMeter:Apache JMeter是一个开源的Java应用程序,用于测试Web应用程序的性能和负载能力;
  • LoadRunner:LoadRunner是一种商业性能测试工具,用于模拟负载和性能测试;
  • Gatling:Gatling是一个快速的开源负载测试工具。

27、算法题:求最长公共子串(写的有点问题,面试官说不用写了┭┮﹏┭┮)

def longest_common_substring(s1, s2):

    m = len(s1)
    n = len(s2)
    # 初始化二维数组
    dp = [[0] * (n + 1) for i in range(m + 1)]
    max_len = 0
    end = 0

    # 动态规划求解
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if s1[i - 1] == s2[j - 1]:
                dp[i][j] = dp[i - 1][j - 1] + 1
                if dp[i][j] > max_len:
                    max_len = dp[i][j]
                    end = i

    return s1[end - max_len:end]

其中,s1和s2为两个字符串,返回它们的最长公共子串。该算法的时间复杂度为O(mn),空间复杂度为O(mn)。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!!

猜你喜欢

转载自blog.csdn.net/Liuyanan990830/article/details/132839916