某公司自动化测试3面

1|0某公司自动化测试3面

仅供参阅,并不提供参考答案,上课的时候多数讲解过
算法题给了你一个参考,都是力扣上的

1|1一面

1. 自我介绍 2. 关于自动化:怎么做的,目前的进展,效果如何,遇到的困难 3. 你的框架搭建,最初是考虑了哪些因素去设计的 4. 如何维护自动化case? 5. 有没有用mock去解决问题? 6. 说说你工作以来做过的这些业务,你觉得在保证质量工作中,存在的差异性 7. 你在工作中发现的问题,自己做了什么事情去推动 8. 沟通下来,觉得你们流程问题还是比较多的,纯靠手工去保证么? 9. 开发冒烟执行后,测试如何判断是否通过 10. 算法题:判断15张扑克牌,随机5张,大小王任意配,是否是顺子 11. 看你用python多,聊聊python的一些数据结构,常用方法等等,都可以说 12. python中浅拷贝、深拷贝 13. 测试的接口都是什么协议的,对http协议有进一步了解么 14. 问代码是怎么学的?

1|2二面

1. 自我介绍 2. 平时如何做测试工作的 3. 流程,规范相关 4. 推进遇到的难点,分析,解决 5. 聊聊最近印象深刻的项目或者bug 6. 聊聊自动化如何实施的,使用场景。针对你回答,抓细节点深问 7. 关于QA如何验证开发冒烟测试通过的方式 8. 问了数据库,索引。 优点缺点、常见索引类型、索引最左前缀原理 9. Redis缓存击穿,雪崩 10. 问了java相关基础,多线程 11. sql题:数据库单表查询,主要考察group by用法 12. 算法题:合并有序数组 13. 反问环节

1|3三面

1. 自我介绍 2. 算法题:给定一个数组,判断是否有重复数据,最少3种方法实现。 3. 聊平常的工作内容,具体哪些业务,系统架构,如何交互 4. 用到消息队列,跟接口交互有什么区别,优缺点 5. 抓住简历上的项目,和你回答的内容,继续深问 6. 问你之前XX项目的测试重点是什么 7. 涉及到性能测试的,如何进行测试,关注哪些点,指标 8. 用例设计题:一个新客、老客、转新购买活动商品减优惠的需求 9. 聊做了哪些工具,怎么做的,前后端用到了什么 10. 自动化 怎么做的,做了哪些,测试数据是放在哪里。 11. 多接口串联的场景,自动化要怎么做?

2|0算法题

2|1LeetCode 217存在重复元素

  • 题目

    给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true 提示: 1 <= nums.length <= 105 -109 <= nums[i] <= 109
    • 这道题有个变种,有的会让你返回重复的那个数的值,若存在多个,随便返回一个即可
  • 思路

    • 方案1:排重后看列表长度是否有变化

    • 方案2:哈希表,一个个放入,直到有重复

    • 方案3:排序后遍历,比较nums[n]和nums[n+1]

  • 题解1

    class Solution: def containsDuplicate(self, nums: List[int]) -> bool: return len(nums)!=len(set(nums))
  • 题解2

    class Solution: def containsDuplicate(self, nums: List[int]) -> bool: s = set() for num in nums: if num not in s: s.add(num) else: return True return False
  • 题解3

    class Solution: def containsDuplicate(self, nums: List[int]) -> bool: nums.sort() length = len(nums) for i in range(length-1): if nums[i]==nums[i+1]: return True else: return False

2|2剑指 Offer 61. 扑克牌中的顺子

  • 题目

    从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。210为数字本身,A1J11Q12K13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14 示例 1: 输入: [1,2,3,4,5] 输出: True 示例 2: 输入: [0,0,1,2,5] 输出: True 限制: 数组长度为 5 数组的数取值为 [0, 13]
  • 思路

    • 仔细读题(做了半天这里还有一个隐含条件,题目没有讲清楚),5张牌中不应该出现超过2个大小王。

    • 所以无非是三种情况

      • 无大小王: 12345
      • 1个大小王,连续的4个数字+0或者跳开1个数字
      • 2个大小王,最复杂连续的3个+00,跳开1个数字+0,跳开2个数字+0 ......
    • 这样想的确容易被绕进去,组合非常多,而且没有太大的规律,难道要用递归?

    • 换个角度,有一种约束可以这样表达

      • 不应该出现重复的数字,除了0

      • 如果不重复,那除了0之外的,最大值和最小值的差<5

        01234 01235 00135 00123 00124
    • 题解

      class Solution: def isStraight(self,nums) -> bool: while True: try: nums.remove(0) except: break # 移除0 当然方法很多 if len(nums) == len(set(nums)): # 看余下数字是否有重复,没有的话(长度不变) return max(nums) - min(nums) < 5 # 那最大值-最小值应该<5 else: return False

2|388. 合并两个有序数组

  • 题目

    给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。 示例 1 输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3 输出:[1,2,2,3,5,6] 解释:需要合并 [1,2,3] 和 [2,5,6] 。 合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。 示例 2 输入:nums1 = [1], m = 1, nums2 = [], n = 0 输出:[1] 解释:需要合并 [1] 和 [] 。 合并结果是 [1] 。 示例 3 输入:nums1 = [0], m = 0, nums2 = [1], n = 1 输出:[1] 解释:需要合并的数组是 [] 和 [1] 。 合并结果是 [1] 。 注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。 提示: nums1.length == m + n nums2.length == n 0 <= m, n <= 200 1 <= m + n <= 200 -109 <= nums1[i], nums2[j] <= 109 进阶:你可以设计实现一个时间复杂度为 O(m + n) 的算法解决此问题吗?
  • 思路

    • 暴力的做法很简单,合并2个数组(注意nums1只需取前面m个数)
    • 然后对合并后的数组排序即可
  • 题解1

    class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ # nums1 = nums1[:m]+nums2 nums1[m:] = nums2 nums1.sort()
  • 题解2

    • 如果两个数组从开头向结尾(数字从小到大)进行比较,那么每次把比较之后的数字放置到 nums1 中的前面,则需要把 nums1 中后面的元素向后移动。移动次数比较多。

    • 如果两个数组从结尾向开头(数字从大到小)进行比较,那么每次把比较之后的数字放置到 nums1 中的后面,由于后面的数字本身就是提供出来的多余的位置,都是 0,因此不需要对 nums1 进行移动。

    • 如果nums1[m-1]比nums2[n-1]大,那么nums1[m+n-1]换为nums1[m-1],m左移

      nums1 1,2,3,0,0,0 m=3 nums2 2,5,6 n=3 R1 比较 3(nums1[3-1]) 和 6 , 6 大 所以 nums1[5] = nums2[2] m-- (此时m=2,n=3) R2 比较 355 大 , 所以 nums1[4] = nums2[1] m-- (此时m=1,n=3) R3 比较 323 大, 所以 nums1[3] = nums1[2] n-- (此时m=1,n=2)
    • 如果nums1[m-1]比nums2[n-1]小,那么nums1[m+n-1]换为nums2[n-1],n左移

    • 当m或n为0的时候,循环就退出了,但要想清楚m为0的时候说明n可能不为0,说明nums2还有数据都小,那nums1还有n个位置,要用nums2[:n]来替换

    • 但当n为0的时候nums1余下的数不需要做任何处理的

    class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None: """ Do not return anything, modify nums1 in-place instead. """ # nums1 = nums1[:m]+nums2 while m >0 and n > 0: if nums1[m-1]>nums2[n-1]: nums1[m+n-1] = nums1[m-1] m = m-1 else: nums1[m+n-1] = nums2[n-1] n = n-1 if m == 0: nums1[:n]=nums2[:n]

__EOF__

本文作者博客已废弃
本文链接https://www.cnblogs.com/wuxianfeng023/p/17463065.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   博客已废弃  阅读(198)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示