【测试面试】测试开发面试算法高频题,这些题你会多少?

news/2024/5/2 20:59:34/文章来源:https://blog.csdn.net/shuang_waiwai/article/details/128133250

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

测试开发是近几年行业中一个流行词,既然是测试开发工程师,那么代码开发能力是最基本的要求,所以面试时必然少不了一些算法题考验你的编程功底。

斐波那契数列?
青蛙爬楼梯就是斐波那契数列的演化,解题思路一样。

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。
斐波那契数列的定义如下:

F(0) = 0,   F(1) = 1 
F(N) = F(N - 1) + F(N - 2), 其中 N > 1

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

方法一:递归

import functools 
class Solution: @functools.lru_cache(maxsize=None) def fib(self, n: int) -> int: if n < 2: return n return self.fib(n-1) + self.fib(n-2) 

直接使用递归的话,容易造成超时。一个为函数提供缓存功能的装饰器,缓存 maxsize 组传入参数,在下次以相同参数调用时直接返回上一次的结果,避免传入相同的参数时重复计算。用以节约高开销或I/O函数的调用时间。

方法二:动态规划

class Solution: def fib(self, n: int) -> int: if n < 2: return n else: dp = {} dp[0] = 0 dp[1] = 1 for i in range(2,n+1): dp[i] = dp[i-1] + dp[i-2] return dp[n] 

状态定义: 设 dp 为一维数组,其中 dp[i] 的值代表 斐波那契数列第 i 个数字
转移方程:dp[i + 1] = dp[i] + dp[i - 1] ,即对应数列定义 f(n + 1) = f(n) + f(n - 1)
初始状态:dp[0]=0, dp[1]=1 ,即初始化前两个数字
返回值:dp[n] ,即斐波那契数列的第 n 个数字

方法三:动态规划优化

class Solution: def fib(self, n: int) -> int: if n==0 or n==1: return n a, b, temp = 0, 1, 0 for i in range(2,n+1): temp = a + b a = b b = temp return temp 

若新建长度为 n 的 dp 列表,则空间复杂度为 O(N) 。由于 dp 列表第 i 项只与第 i-1 和第 i-2 项有关,因此只需要初始化三个整形变量 temp, a, b ,利用辅助变量 temp 使 a, b 两数字交替前进 。节省了 dp 列表空间,因此空间复杂度降至 O(1) 。

链表中倒数第k个节点?
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。

给定一个链表: 1->2->3->4->5, 和 k = 2
返回链表 4->5

方法一:双指针
第一时间想到的解法:

先遍历统计链表长度,记为 n ;设置一个指针走 (n-k) 步,即可找到链表倒数第 k 个节点。

使用双指针则可以不用统计链表长度。

算法流程:
初始化:前指针 fast 、后指针 slow ,双指针都指向头节点 head 。
构建双指针距离:前指针 fast 先向前走 k 步(结束后,双指针 fast 和 slow 间相距 k 步)。
双指针共同移动:循环中,双指针 fast 和 slow 每轮都向前走一步,直至fast走过链表尾节点时跳出(跳出后,slow与尾节点距离为 k-1,即slow指向倒数第 k 个节点)。
返回值:返回 slow 即可。
复杂度分析:
时间复杂度 O(N):N 为链表长度;总体看,fast 走了 N 步, slow 走了 (N-k) 步。
空间复杂度 O(1):双指针 fast , slow 使用常数大小的额外空间。
注:如果k大于链表长度,会发生越界问题

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:fast = headslow = headfor i in range(k):if not fast: # 考虑 k大于链表长度的情况 return fast = fast.nextwhile fast:fast = fast.nextslow = slow.nextreturn slow

连续子数组的最大和?

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为6

方法一:动态规划

class Solution:def maxSubArray(self, nums: List[int]) -> int:for i in range(1,len(nums)):nums[i] = nums[i] + max(nums[i-1],0)return max(nums)

状态定义: 设动态规划列表 dp ,dp[i] 代表以元素 nums[i] 为结尾的连续子数组最大和。
转移方程:若 dp[i-1] ≤ 0 ,说明 dp[i - 1]对 dp[i] 产生负贡献,即 dp[i-1] + nums[i]还不如 nums[i] 本身大。
初始状态:dp[0]=nums[0],即以 nums[0] 结尾的连续子数组最大和为 nums[0]。
返回值: 返回 dp 列表中的最大值,代表全局最大值。

空间复杂度降低:

由于 dp[i] 只与 dp[i-1] 和 nums[i] 有关系,因此可以将原数组 nums 用作 dp 列表,即直接在 nums 上修改即可。由于省去dp 列表使用的额外空间,因此空间复杂度从 O(N) 降至 O(1) 。

复杂度分析:
时间复杂度 O(N):线性遍历数组nums 即可获得结果,使用 O(N) 时间。
空间复杂度 O(1) :使用常数大小的额外空间。

字符串的排列?
跟判断回文和汉诺塔一样,很经典的递归问题

输入一个字符串,打印出该字符串中字符的所有排列。

你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。

输入:s = "abc" 
输出:["abc","acb","bac","bca","cab","cba"]

方法一:递归
排列方案数量:对于一个长度为 n 的字符串(假设字符互不重复),其排列共有 n! 种方案。

排列方案的生成方法:根据字符串排列的特点,考虑深度优先搜索所有排列方案。即通过字符交换,先固定第 1 位字符( n 种情况)、再固定第 2 位字符( n-1 种情况)、… 、最后固定第 n 位字符( 1 种情况)。

class Solution: def permutation(self, s: str) -> List[str]: if len(s) <= 1: return list(s) else: result = [] for i in range(len(s)): ch = s[i] rest = s[0:i] + s[i+1:len(s)] for j in self.permutation(rest): result.append(ch+j) return list(set(result)) 

合并两个排序的链表?

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

输入:1->2->4, 1->3->4 
输出:1->1->2->3->4->4 

方法一:递归
返回 l1指向的结点和 l2指向的结点中,值较小的结点;
并将从下级函数获得的返回值,链接到当前结点尾部。
终止条件:至少有一个为空,返回剩下的那个。

# Definition for singly-linked list. 
# class ListNode: 
#     def __init__(self, x): 
#         self.val = x 
#         self.next = None 
class Solution: def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:if not l1: return l2 if not l2: return l1 if l1.val < l2.val: l1.next = self.mergeTwoLists(l1.next, l2) return l1 l2.next = self.mergeTwoLists(l1, l2.next) return l2
下面是我整理的2022年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

如果青春是醺人欲醉的海风,那么自信就是这和风前行的路标;如果青春是巍峨入云的高耸,那么拼搏就是这山脉层层拔高的动力;如果青春是高歌奋进的谱曲,那么坚强就是这旋律奏响的最强音!

在人生中,有时最好走的路不一定是大路,而是小路;在现实中,有时最便捷的路不一定是直路,而是折路。

每一天的努力,只是为了让远方变得更近一些。再苦再累,只要坚持往前走,属于你的风景终会出现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_228554.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

您的推特营销选对群控了吗

作为跨境电商从业者&#xff0c;我们都知道&#xff0c;如果平台检测到违规&#xff0c;最多的是多账号关联。平台怎么判定我们的账号是否关联呢&#xff1f;一个重要的依据是浏览器的指纹信息。 一、进行站外引流的困难有哪些&#xff1a; 国内用户在推广海外社交媒体时&…

02【SpringMVC的工作流程】

文章目录二、SpringMVC的工作流程2.1 SpringMVC的三大组件2.1.1 HandlerMapping&#xff1a;2.1.2 HandlerAdapter&#xff1a;2.1.3 ViewResolver&#xff1a;2.2 SpringMVC源码分析2.2.1 准备工作2.2.2 查看DispatcherServlet的继承体系&#xff1a;2.2.3 通过映射器获取执行…

Apifox很难不爱

一、背景 项目开发我们都知道在一个项目团队中是由很多角色组成&#xff0c;最常见团队的就是前端开发工程师、客户端开发工程师、服务端开发工程师组成一个团队&#xff0c;团队之间进行合作&#xff0c;一般我们都离不开API接口管理和测试&#xff0c;API接口管理可以理解为前…

高等数学基础概念的Python开发实现

一般的数学算式math函数库就可以解决了&#xff0c;如果是涉及到高等数学极限&#xff0c;微积分等知识&#xff0c;就需要用到sympy科学计算库&#xff0c;它是专门用来解决数学的运算问题的。 Sympy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统&…

基于非支配排序遗传算法的多目标水光互补优化调度附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

产品经理必备的能力有哪些?

从一名普通的产品经理到一名优秀的产品经理要经历什么&#xff1f;哪些又是产品经理必备的能力&#xff1f;产品经理对能力的需求也不尽相同&#xff0c;在不同的团队合作模式下&#xff0c;还必须懂得各种能力。 一、业务分析能力 数据分析能力该是什么样的呢 1、有数据意识…

SCP命令在不同远程服务器之间发送文件(指定端口)

最近想把数据集放在另一个服务器上&#xff0c;但是如果先下载到本地然后再上传过去&#xff0c;则需要浪费好久时间。 特总结下如何快捷的通过命令完成不同远程服务器之间的文件传输&#xff0c;以及遇到的问题。 SCP命令 Linux scp 命令用于 Linux 之间复制文件和目录。1 s…

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 前言 在之前的文章中,由于忘记介绍使用的rtp推流方式都是TS流方式,RTP方式推流没讲,本章作为之前文章(JavaCV音视频开发宝典:rtsp拉流并使用转码方式转推到rtp)的补充。 注意:本文不需要…

Java+JSP+MySQL基于SSM的在线投票系统-计算机毕业设计

项目介绍 随着社会的发展&#xff0c;人们在处理一些问题的时候不同意见越来越多&#xff0c;这源于人们对思想的解放和对社会的认识。所以在处理同一问题上&#xff0c;为了征求不同人的意见在线投票系统诞生了。 基于SSM的在线投票系统以钦州学院为背景&#xff0c;运用在校…

论文投稿指南——中文核心期刊推荐(计算机技术)

>>>深度学习Tricks&#xff0c;第一时间送达<<< &#x1f680; 写在前面 &#x1f431;‍&#x1f3cd; 本期开始&#xff0c;小海带会定期推荐各专业领域的中文核心期刊及论文投稿网址&#xff0c;供大家参考交流 ~ 《中文核心期刊要目总览》是学术界对某…

微信开发者工具 / 反编译工具CrackMinApp 下载安装

微信开发者工具 / 反编译工具CrackMinApp 下载安装 文章目录微信开发者工具 / 反编译工具CrackMinApp 下载安装前言一、微信开发者工具下载安装二、反编译工具CrackMinApp安装三、导入反编译后的文件四、友情提示总结前言 微信开发者工具介绍&#xff1a;微信提供的微信小程序…

一篇个人陈述应该包括这三个内容

大家好呀&#xff0c;申请季正如火如荼地进行着&#xff0c;不知道大家都忙碌得怎么样了呢&#xff1f;今天我们来聊聊个人陈述Personal statement,的撰写&#xff0c;包括一篇个人陈述应该包括哪些部分。 申请时&#xff0c;除了学习成绩等“硬背景”&#xff0c;个人陈述(PS…

[SpringMVC]第三篇:作用域传参

四大域: PageContext对象(不常用) 作用域范围:当前jsp页面内有效 request对象(经常用) 作用域范围:一次请求内。 作用: 解决了一次请求内的资源的数据共享问题 session对象(登录,会话时会用) 作用域范围:一次会话内有效。 说明:浏览器不关闭,并且后台的session不失效&#xff…

内容、文档和流程数字化如何支持精益原则

内容、文档和流程数字化如何支持精益原则 无论您身处哪个行业&#xff0c;想要在业务中取得真正的成功就必须把客户放在所有决策的中心位置&#xff0c;以便您能够给客户提供最佳服务。同时公司以最高效的方式向前发展也很重要。幸运的是&#xff0c;有一种方法可以确保两者兼而…

Java企业微信对接

最近项目中要对接企业微信&#xff0c;实现通讯录数据同步&#xff0c;即在企业端添加编辑删除用户&#xff0c;部门数据要同步到微信端&#xff0c;同时微信端添加编辑删除用户&#xff0c;部门数据要同步到企业端&#xff0c;实现数据同步功能&#xff0c;需要调用企业微信AP…

五款朴实无华却又能极大提升办公效率的软件

最近后台收到好多小伙伴的私信&#xff0c;今天继续推荐五款小工具&#xff0c;都是免费使用的&#xff0c;大家可以去试试看。 1.光追动画制作——Luxion KeyShot Luxion KeyShot是一款互动性的光线追踪与全域光渲染3D渲染与动画制作软件&#xff0c;内置丰富多样的材质&…

mybatis实战:三、mybatis多表查询的映射

依照上一期的继续 1.UserMapper.xml 除了直接对应基本数据类类型、表的实体类&#xff0c;还可能用到多表查询。 <select id"selectRolesByUserId" resultType"tk.mybatis.simple.model.SysRole">select r.id, r.role_name roleName, r.enabled, r…

Typora导出Word

1.Typora导出Word配置 1.访问GitHub&#xff1a; https://github.com/jgm/pandoc/releases/tag/2.11.3.2https://github.com/jgm/pandoc/releases/tag/2.11.3.2 2.下载对应的文件 3.到本地安装Typora目录下解压 4.配置环境变量 我的电脑–属性–高级系统设置–高级–环境变量…

Linux零基础入门(二)Linux基础命令

Linux零基础入门&#xff08;二&#xff09;Linux基础命令前言Linux基础命令一 Linux的目录结构1 Linux路径的描述方式二 Linux命令入门1 Linux命令基础格式2 ls命令3 HOME目录和工作目录4 ls命令的参数ls 命令的 -a选项ls命令的 -l选项ls命令选项的组合使用ls选项和参数的组合…

搭建Docker+SRS服务器实现推流拉流的效果

最初的一个想法&#xff0c;是针对当前的网络电视去的&#xff0c;很多网络电视买回家&#xff0c;还要充很多会员&#xff0c;甚至跌入连环坑。我想给妈妈买一台电视&#xff0c;想把我自己收集的电影电视剧做成一个影视库&#xff0c;通过搭建家庭影院服务器&#xff0c;然后…