punkginger's personal blog
性能测试之前大概了解了测试的概念与单元测试的方法,现在我已经能实现在写出一个系统后测试它的每一个单元和整体的功能是否完备可用了,就可以关注下一步性能测试了虽说结合多线程与unittest也能实现小规模的并发测试,但是想要实现更大强度的测试则需要使用到更专业的工具,这里我选择了基于python编写的locust需要注意的是,要实现超大规模的并发测试等压测,还是需要分布式部署测试脚本来实现,locust的优势在于其摒弃了进程和线程,完全基于事件驱动,使用gevent提供的非阻塞IO和coroutine(协程)来实现网络层的并发请求性能测试简介类型压力测试:大数据、高并发的情况下测试系统的瓶颈并发测试: 高并发的情况下发现并发读写、线程控制、资源争抢等问题耐久度测试:高负载情况下长时间运行以发现内存泄漏、数据库连接池不释放、资源不回收等问题如何计算压测指标压测我们需要有目的性的压测,可以通过以下计算方法来进行计算:压测原则:每天80%的访问量集中在20%的时间里,这20%的时间就叫做峰值公式: ( 总PV数80% ) / ( 每天的秒数20% ) = 峰值时间每秒钟请求数(QPS)机器: 峰
测试开发基础知识与unittest使用测试流程分析需求制定测试计划设计测试用例测试方向具体设计黑白盒测试手工和自动测试冒烟测试: 测试前先验证基本功能是否能实现,是否具有可测性执行测试: 搭建环境、冒烟测试、正式测试测试评估测试方向功能测试: 各个功能是否正常,输入是否有限制易用性测试: 是否有各种提示界面测试: ui界面是否有错,风格是否统一性能测试: 加载时间,高并发下性能,弱网环境下,耗电量安全测试: 敏感内容处理,多用户单设备,单用户多设备兼容性测试: 设备、语言、系统等黑盒白盒白盒测试(White Box Testing):定义:白盒测试是一种测试方法,它基于对软件内部结构、设计和代码的理解来进行测试。特点:测试人员需要访问源代码和系统内部结构,以设计测试用例和确定测试覆盖范围。目的:主要测试逻辑路径、控制流、数据流和代码覆盖率,以发现潜在的错误和漏洞。黑盒测试(Black Box Testing):定义:黑盒测试是一种测试方法,它不考虑程序的内部逻辑和结构,而是通过测试软件的功能和输入/输出来评估系统的正确性。特点:测试人员只需关注软件的外
24/3/25腾讯后台开发一面凉经经过19:30开始面的用的是腾讯会议,ide是txmeeting的一个插件(最无语的是对js有高亮支持,py没有,其他没试过)几乎没有补全,没有自动缩进,我直接蒙圈,平时leetcode模式题目写太多,今次连函数参数格式都不会写了自我介绍看了下项目,大概问了一下这部分我感觉自己答得很烂,主要是填了三个项目脑子一抽说了写的最烂而且还没实现的那个项目TCP和UDP的区别?应用场景?UDP如何保证可靠QUIC特点四道题目215. 数组中的第K个最大元素 我思路是排序然后返回nums[-k] 但是卡壳了,没错,板子都没记熟,真该死啊,快排和merge都卡住了,相当尴尬,而且是基本上都写完了卡住了146. LRU 缓存 这题更是重量级,上午才看的,上一篇博客第一题就是这位,面试官看我排序卡了没让我写这题,说了下思路,肯定了是正确的,但是被拷打了 “感觉你准备不充分,写代码没那么熟” (还真是)一道概率题,贝叶斯公式,哈哈,概率论老师我对不起您一道“智力题” 完全不会反问什么事业部后续技术栈发展推荐?技术栈不重要,学生还是要打好基础,加油给我唐完了,不出意外的直接
面向腾子的leetcode刷题临阵磨枪说是NO.146 LRU缓存https://leetcode.cn/problems/lru-cache/solutions/259678/lruhuan-cun-ji-zhi-by-leetcode-solution/题目提到键值对,想到构建hash表,涉及到出入顺序,想到栈、队列和链表,由于要实现顺序更新,使用双向链表hash表键自设,值为指向链表元素的引用 双向链表键与hash表键一致,值为实际存储值class DLinkedNode: def __init__(self, key=0, value=0): self.key = key self.value = value self.prev = None self.next = None class LRUCache: def __init__(self, capacity: int): self.cache = dict() # 使用伪头部和伪尾部节点
面试小抄马上面了,光速打点小抄背背数据结构与算法排序快速排序确定基准值:随机一点x调整区间:使得x左边的数<=x x右边的数>=x递归def quick_sort(nums): # 定义递归的终止条件:如果列表为空或只包含一个元素,直接返回 if len(nums) <= 1: return nums # 选择基准值(可以选择任何元素,这里选择中间元素) pivot = nums[len(nums) // 2] # 初始化左右子数组 left = [x for x in nums if x < pivot] # 小于基准值的元素放入左子数组 middle = [x for x in nums if x == pivot] # 等于基准值的元素放入中间子数组 right = [x for x in nums if x > pivot] # 大于基准值的元素放入右子数组 # 递归调用快速排序,并拼接左子数组、中间子数组和右子数
punkginger
本质酒鬼