1、自我介绍
2、为什么投了字节?
公司声誉:字节跳动是一家知名的科技公司,在互联网行业享有很高的声誉。
发展前景:字节跳动的业务涵盖了多个领域,包括短视频、资讯、教育等。这意味着您将有机会接触到不同的产品和技术,拓宽自己的技能和视野。
团队氛围:字节跳动的团队通常以年轻、活力和创新著称。在这样的环境中工作,将有机会与志同道合的同事共事,共同追求卓越。
学习机会:作为一家快速发展的公司,字节跳动为员工提供了丰富的学习和发展机会。
3、说一下对于测开岗位的理解
测试开发工程师是一种融合了开发角色和质量意识的岗位,要求测试人员兼具开发人员的技能和测试人员的思维。总的来说,测试开发工程师的定位就是保障产品的质量和提高测试效率。
测试开发工程师需要具备以下技能:
熟悉编程语言,如Java、Python、C++等;
熟悉自动化测试框架,如Selenium、Appium等;
熟悉数据库操作,如MySQL、Oracle等;
熟悉网络协议,如HTTP、TCP/IP等;
熟悉Linux操作系统。
4、介绍一下实习的项目
5、对于该项目的质量建设,你做了哪些工作?
明确质量标准:在项目开始阶段,与团队成员讨论并确定项目的质量标准和期望。这有助于确保所有人都对项目的质量要求有共同的理解。
制定质量管理计划:根据项目需求和质量标准,制定详细的质量管理计划。这应包括质量控制、质量保证和质量改进的策略和方法。
实施质量控制:通过定期检查和测试,确保项目产出符合预期的质量标准。这可能包括代码审查、单元测试、集成测试和系统测试等。
建立质量保证机制:为团队提供培训和支持,以确保他们具备足够的技能和知识来保证项目的高质量。这可能包括技术培训、最佳实践分享和持续的沟通。
监控项目进度和结果:定期评估项目的进度和结果,以确保项目按照计划进行并达到预期的质量目标。如果发现问题或偏离计划,及时采取措施进行调整。
持续改进:通过收集反馈和经验教训,不断优化项目管理过程和工具,以提高项目的整体质量和效率。
总之,在项目质量建设过程中,关键是确保所有团队成员都了解并遵循既定的质量标准和策略。通过有效的沟通、培训和支持,可以确保项目的成功交付。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036
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+树吧
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后端问题、1、接口返回成功前端没展示2、接口请求失败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)。
最后: 可以在我的VX公众号:【自动化测试老司机】免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!