- 博客(226)
- 收藏
- 关注
原创 【软件测试】论坛系统项目测试报告
本论坛系统是一个基于Spring Boot技术栈开发的现代化在线技术交流平台,采用前后端分离架构,后端使用Java开发,数据库采用MySQL 8.0+,支持高并发访问。系统集成了用户管理、多级版块、帖子发布、评论互动等核心功能,并采用Spring Security实现安全认证,JWT进行身份验证,确保系统安全可靠。项目采用模块化设计,便于功能扩展和二次开发,适用于技术社区、企业内网论坛、教育机构等多种场景,为用户提供专业、高效的技术交流环境。
2025-07-09 13:43:37
302
原创 【软件测试】4.自动化测试常见函数(4)
默认情况下等待所有的资源加载完成之后才能继续往下执行,但是实际上主页面加载完成之后我们就可以继续执行自动化,若一直等待的话可能会造成页面超时、元素找不到等问题…selenium无法识别非web的控件,上传文件窗口为系统自带,无法识别窗口元素。但是可以使用sendkeys来上传指定路径的文件,达到的效果是一样的。无头模式:无头模式:程序在后端运行,界面看不到页面的表现。点击文件上传的场景下会弹窗系统窗口,进行文件的选择。文件上传的html:upload.html。这个弹窗不是控件,无法识别窗口元素。
2025-07-09 13:42:17
223
原创 【软件测试】3.自动化测试常见函数(3)
实际在工作中,业务场景比较复杂时,要添加的自动化脚本非常多,通常来说自动化测试脚本数量可达到上百200个脚本,每个脚本添加若干个等待时间,假设平均等待时间为6秒。通常代码执行的速度比页面渲染的速度要快,如果避免因为渲染过慢出现的自动化误报的问题呢?隐式等待是一种智能等待,他可以规定在查找元素时,在指定时间内不断查找元素。无法等待弹窗,因为弹窗不是页面的元素,无法通过页面元素来定位到弹窗。优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活。显示等待可以等待隐式等待无法处理的问题。
2025-07-09 13:40:59
324
原创 【软件测试】2.自动化测试常见函数(2)
当自动化运行报错时,仅仅通过终端的错误提示给到的有用信息是一定的,若能将当时的页面变化截图拍下来,能更好的定位问题并解决问题”。通常情况下一般会打开两个标签页,实现标签页的切换测试,更多时候,直接输入对应页面的链接在当前标签页下进行测试。我们的自动化脚本一般部署在机器上自动的去运行,如果出现了报错,我们是不知道的,可以通过抓拍来记录当时的错误场景。由于图片给定的名称是固定的,当我们多次运行自动化脚本时,历史的图片将被覆盖。点击图片后出现的是一个新的标签页,自然获取不到新标签页的元素了。
2025-07-09 13:40:02
462
原创 【软件测试】1.自动化测试常见函数(1)
注意:文本和属性值不要混淆了。问题:是否可以通过 text 获取到“百度一下按钮”上的文字“百度一下”呢?如果判断获取到的元素对应的文本是否符合预期呢?获取元素对应的文本并打印一下~~适用场景:页面元素可点击跳转的情况下,用来检测跳转的结果是否是正确的。会将多次输入的内容拼接在一起,若想重新输入,需要使用清除方法。输入文本后又想换一个新的关键词,这里就需要用到 clear()这里的text为空,没有打印任何信息。点击元素Ctrl+f,出现下面的框框。获取文本信息: text。特殊情况:元素属性值。
2025-07-09 13:38:51
449
原创 【C++算法】70.队列+宽搜_N 叉树的层序遍历
然后出根节点1,入孩子节点2,3,4,然后统计根节点的孩子节点有3个。然后出2,入2的孩子节点5,6…直到3个孩子都出来。此时剩下来的4个元素就是最后一层节点。使用队列层序遍历就可以了。
2025-05-20 19:53:43
405
原创 【C++算法】68.栈_字符串解码
拿出来,就变成空串了,所以有个细节就是字符串的栈里面要先放入一个空串。,就直接放到栈顶元素的后面,因为没有右括号就不需要重复。然后就遇到第一个右括号了,把两个栈的栈顶拿出来,接着把bcbc放到原来栈顶元素的后面。两个栈,一个放字符串一个放数字。
2025-05-20 19:51:52
250
原创 【Linux】49.高级IO(3)
如果服务端写的代码是阻塞式的read, 并且一次只 read 1k 数据的话(read不能保证一次就把所有的数据都读出来,参考 man 手册的说明, 可能被信号打断), 剩下的9k数据就会待在缓冲区中.这种说法是不准确的. 我们定义的struct epoll_event是我们在用户空间中分配好的内存. 势必还是需要将内核的数据拷贝到这个用户空间的内存中的.epoll的高性能, 是有一定的特定场景的. 如果场景选择的不适宜, epoll的性能可能适得其反.另一方面, ET 的代码复杂程度更高了.
2025-05-20 19:47:09
1015
原创 【Linux】48.高级IO(2)
它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux kernel 2.5.44)fdset的方式,poll使用一个pollfd不同与 的指针实现 select.使用三个位图来表示三个。它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路。按照man手册的说法: 是为处理大批量句柄而作了改进的poll.收集在epoll监控的事件中已经发送的事件.创建一个epoll的句柄.epoll的事件注册函数.
2025-05-20 19:45:26
1373
原创 【Linux】47.高级IO(1)
理解select模型的关键在于理解fd_set,为说明方便,取fd_set长度为1字节,fd_set中的每一bit可以对应一个文件描述符fd。任何IO过程中, 都包含两个步骤. 第一是等待, 第二是拷贝. 而且在实际的应用场景中, 等待消耗的时间往往都远远高于拷贝的时间. 让IO更高效, 最核心的办法就是让等待的时间尽量少。另外, 我们回忆在讲多进程多线程的时候, 也提到同步和互斥. 这里的同步通信和进程之间的同步是完全不想干的概念.(4)执行select(6,&set,0,0,0)阻塞等待。
2025-04-22 19:19:03
1036
原创 【Linux】46.网络基础(3.3)
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.域名使用 . 连接com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.baidu: 二级域名, 公司名.www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于这样的格式, 来表示主机支持的协议.数据链路层数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据以太网是一种技术标准;
2025-04-22 19:18:00
1108
原创 【Linux】45.网络基础(3.2)
虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.对比理解 “数据链路层” 和 “网络层”还是 [唐僧例子之白龙马]MSS和MTU的关系。
2025-04-21 19:10:08
1162
原创 【Linux】44.网络基础(3.1)
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要;我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.节点: 主机和路由器的统称;
2025-04-21 19:09:07
885
原创 【Linux】43.网络基础(2.5)
客户端状态正常, 但是服务器端出现了 SYN_RECV 状态, 而不是 ESTABLISHED 状态。此时启动 3 个客户端同时连接服务器, 用 netstat 查看服务器状态, 一切正常.全连接队列满了的时候, 就无法继续让当前连接的状态进入 established 状态了.对于服务器, listen 的第二个参数设置为 2, 并且不调用 accept。这个队列的长度通过上述实验可知, 是 listen 的第二个参数 + 1.但是启动第四个客户端时, 发现服务器对于第四个连接的状态存在问题了。
2025-04-19 15:20:17
835
原创 【C++算法】65.栈_删除字符中的所有相邻重复项
元素依次进栈,当进栈元素和栈顶元素一样的时候,就弹出栈顶字符,然后元素继续往后处理。利用string模拟栈。
2025-04-19 15:16:45
173
原创 【C++算法】64.字符串_字符串相乘
现在tmp数组包含了所有位相乘的结果(未处理进位):[15, 22, 13, 4]两个数字的乘积最多有m+n位,但由于未处理进位,所以是m+n-1位。解法二:对解法一的优化:无进位相乘然后相加,最后处理进位。所以 123 × 45 = 5535,这是正确的结果。此时ret = “5355”,表示计算结果的反向存储。解法一:模拟列竖式运算。例如:123x456。
2025-04-19 15:15:51
749
原创 【C++算法】61.字符串_最长公共前缀
先算前两个字符串的最长公共前缀,然后拿这个最长公共前缀和后面一个来比较,得到最长公共前缀。直到比到最后一个字符串。先比较第一列,然后比较第2列,直到有字符串越界,或者有字符不一样,停止。
2025-04-16 19:22:09
470
原创 【C++算法】59.哈希表_存在重复元素 II
处理 nums[0] = 1。处理 nums[1] = 0。处理 nums[2] = 1。处理 nums[3] = 1。
2025-04-15 14:08:38
494
原创 【Linux】42.网络基础(2.4)
在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的. 意味着客户端给服务器说了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”;因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵. 在不清楚当前网络状态下, 贸然发送大量的数据,是很有可能引起雪上加霜的.TCP引入 慢启动 机制, 先发少量的数据, 探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度传输数据;大量的丢包, 我们就认为网络拥塞;
2025-04-14 21:16:49
1077
原创 【Linux】41.网络基础(2.3)
MSL是TCP报文的最大生存时间, 因此TIME_WAIT持续存在2MSL的话就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失(否则服务器立刻重启, 可能会收到来自上一个进程的迟到的数据, 但是这种数据很可能是错误的);接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送,就会造成丢包, 继而引起丢包重传等等一系列连锁反应.刚才我们讨论了确认应答策略, 对每一个发送的数据段, 都要给一个ACK确认应答. 收到ACK后再发送下一个数据段。
2025-04-14 21:15:23
1172
原创 【C++算法】57.哈希表_判断是否互为字符重排
找出字符串的全排序,然后比较是否相同(指数级别的,太恐怖了)统计每个字符出现的次数。次数相同就是字符重排。这里是用数组模拟哈希表,用容器的话会麻烦一点。
2025-04-13 13:23:40
294
原创 【C++算法】56.哈希表_两数之和
哈希表是什么?存储数据的容器有啥用?“快速”查找某个元素。O(1)什么时候用?频繁的查找某一个数的时候怎么用?容器(哈希表)用数组模拟简易哈希表字符串中的字符数据范围很小的时候(int:1~107)但是出现(-103~103)就不建议用了。
2025-04-12 15:17:14
437
原创 【C++算法】54.链表_合并 K 个升序链表
先把其中的两个链表有序合并,然后把合并后的链表和后面一个链表有序合并,每次合并两个直到结束。节点,哪一个链表的指针取走了就让那个链表指针的后一个位置放进小根堆,直到所有链表指针都指向。个指针,然后把每个链表的第一个指针放入小根堆里面,取走堆顶元素放入。每个链表的平均长度为n,有k个链表,时间复杂度。解法二:利用优先级队列做优化。解法三:归并排序,递归。解法三(递归/分治)
2025-04-10 23:30:53
376
原创 【Linux】40.网络基础(2.2)
如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个字节;在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首部)下一次你从哪里开始发。应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;
2025-04-09 20:59:17
1899
原创 【Linux】39.一个基础的HTTP Web服务器
提供Web服务,响应客户端(浏览器)的HTTP请求。网页服务器(HttpServer.hpp)服务器启动器(HttpServer.cc)支持静态文件服务(如HTML、图片等)网络通信器(Socket.hpp)日志记录器(Log.hpp)
2025-04-09 20:57:57
942
3
原创 【C++算法】51.链表_两数相加
画图 --> 直观,形象,便于理解引入虚拟头节点便于处理边界情况方便我们对链表进行操作不要吝啬空间,大胆去定义变量快慢双指针判断链表中是否有环链表中环的入口找链表中倒数第n个结点。
2025-04-08 21:59:14
316
原创 【C++算法】49.分治_归并_计算右侧小于当前元素的个数
6.处理剩余元素while(cur2 <= right)当前元素的后面,有多少个比我小。(结果数组,初始全为0)这些是单个元素,不再划分。这些是单个元素,不再划分。
2025-04-07 21:48:43
424
原创 【Linux】38.网络基础(2.1)
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)协议是一种 “约定”。无论我们采用方案一, 还是方案二, 还是其他的方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的。但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。虽然我们说, 应用层协议是我们程序猿自己定的。
2025-03-10 19:40:18
1109
原创 【Linux】37.网络版本计算器
主要的时序特点是采用了经典的多进程并发服务器模型,每个客户端连接由独立的子进程处理,保证了请求处理的隔离性和可靠性。定义客户端服务器间通信协议,处理消息的序列化和反序列化。封装底层Socket网络通信功能。实现服务器程序,处理客户端请求。将进程转换为守护进程的工具类。实现客户端程序,发送计算请求。实现服务器端的核心计算逻辑。实现TCP服务器的主框架。
2025-03-10 19:38:34
408
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人