自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 MySQL数据库基础

存储数据用文件就可以了,为什么还要弄个数据库?为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

2025-10-08 22:49:51 1031

原创 仿QQ音乐播放器项目测试报告

1)测试目的对仿 QQ 音乐播放器的各项功能进行全面测试,验证其功能是否符合预期,确保播放器在推荐、公共模块、本地下载、“我喜欢”、歌词等模块的功能正常运行,为用户提供稳定、可靠的音乐播放体验。2)测试范围本次测试涵盖仿 QQ 音乐播放器的推荐模块、公共模块(搜索、换肤、最小化、导入音乐、播放控制等功能)、本地下载模块、“我喜欢” 模块以及歌词模块。一)功能测试1.测试用例2.实践执行测试的部分操作步骤/截图1)打开仿QQ音乐播放器系统,检查logo等界面元素是否完整2)测试搜索功能是否正常:输入框可以正常

2025-09-10 13:23:46 368

原创 仿QQ音乐的音乐播放器自动化测

1.测试的背景仿 QQ 音乐播放器作为一款音乐类应用,核心定位是为用户提供音乐播放、资源搜索、歌单管理及社交化交互功能,需对齐 QQ 音乐主流用户场景与体验标准。本次自动化测试聚焦与,覆盖用户从 “进入应用 - 操作核心功能 - 完成退出” 的全流程,不包含底层性能(如音频解码效率)、网络带宽适配、跨终端数据同步等非功能测试范畴。2.测试的模块和目标。

2025-09-10 12:53:58 1307

原创 问卷系统测试报告

用户管理方面,可新建、编辑、删除系统用户,支持批量导入用户,还能对用户所属组织机构、状态等进行设置;可进行问卷与考试项目的新建操作,能对已有项目进行重命名、删除等管理,还可查看项目的状态(如收集中、停止收集)、创建时间、更新时间等信息,方便用户统筹各类问卷与考试相关项目。查看练习的题库,用户也可查看练习进度、练习类型与状态,对于进行中的练习能继续答题,已完成的练习可查看结果,也可生成练习二维码或删除练习记录,助力用户通过练习巩固知识。6)删除项目测试,删除问卷调查测试项目。7)在回收站查看删除的项目。

2025-09-05 18:27:53 802

原创 问卷系统项目自动化测试

1.测试目的通过自动化测试脚本,替代部分重复的手工测试工作,提升问卷考试系统核心功能的测试效率,确保系统在迭代过程中核心模块(如用户登录、项目管理、练习管理等)功能稳定性,减少人工测试遗漏,同时实现关键场景的快速回归测试。2.测试范围本次自动化测试覆盖系统核心功能模块,包括但不限于:用户登录模块(正确登录、错误登录场景)、我的项目模块(新建 / 重命名 / 删除项目)、我的练习模块(练习答题、查看结果)、系统管理模块(用户新增 / 编辑、角色管理)等关键操作场景。3.技术选型。

2025-09-05 18:17:59 752

原创 C++模版初阶

比如:当用double类型使用函数模板时,编译器通过对实参类型的推演,将T确定为double类型,然后产生一份专门处理double类型的代码,对于字符类型也是如此。如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),那将会节省许多头发。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

2025-07-28 00:18:00 642

原创 C++内存管理

new的原理:调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请在申请的空间上执行N次构造函数在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。

2025-07-27 19:59:49 986

原创 数据结构—二叉树(二)

设⼆叉树的根结点所在层数为1,层序遍历就是从所在⼆叉树的根结点出发,⾸先访问第⼀层的树根结点,然后从左到右访问第2层上的结点,接着是第三层的结点,以此类推,自上⽽下,⾃左⾄右逐层访问树的结点的过程就是层序遍历。根结点的左⼦树和右⼦树分别⼜是由⼦树结点、⼦树结点的左⼦树、⼦树结点的右⼦树组成的,因此⼆叉树定义是递归式的,后序链式⼆叉树的操作中基本都是按照该概念实现的。⼆叉树分为空树和⾮空⼆叉树,⾮空⼆叉树由根结点、根结点的左⼦树、根结点的右⼦树组成的。根结点、左⼦树、右⼦树。左⼦树、根结点、右⼦树。

2025-07-09 10:10:02 1022

原创 数据结构—二叉树

对于深度为 K 的,有 n 个结点的⼆叉树,当且仅当其每⼀个结点都与深度为K的满⼆叉树中编号从 1 ⾄ n 的结点⼀⼀对应时称之为完全⼆叉树。要注意的是满⼆叉树是⼀种特殊的完全⼆叉树。现实中我们通常把堆(⼀种⼆叉树)使⽤顺序结构的数组来存储,需要注意的是这⾥的堆和操作系统虚拟进程地址空间中的堆是两回事,⼀个是数据结构,⼀个是操作系统中管理内存的⼀块区域分段。在树形结构中,我们最常⽤的就是⼆叉树,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。

2025-07-05 10:48:32 675

原创 数据结构初阶 —— 栈和队列

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。实际中还有⼀种特殊的队列叫循环队列,环形队列⾸尾相连成环,环形队列可以使⽤数组实现,也可以使⽤循环链表实现。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表。3.入数据,入到不为空的队列,出数据,借助空队列倒数据即可。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。

2025-07-03 14:39:28 418

原创 OJ题(复杂度+链表)

分析:fast进环,过一会,slow也进环,假设这时fast和slow之间的距离是N,每追击一次,他们之间距离缩小2步,这个时候需要讨论N,假设N为偶数,则可以追上;假设N为奇数,fast会越过slow,但是因为在环里面,相当于进入新一轮追击,他们之间的距离变成了C-1(假设环的长度为C),如果C-1为偶数,那么下一轮就追上了;思路一:A链表的每个节点依次跟B链表的节点进行比较,如果有相等就是相交,第一个相等就是交点(要比较节点的指针,不能比较节点的值)复杂度时间:O(n^2)/O(m*n)

2025-06-30 00:08:35 528

原创 C++初阶—类和对象(下)

内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

2025-05-07 17:01:44 615

原创 测试——自动化测试常用函数

优点:显示等待是智能等待,可以自定义显示等待的条件,操作灵活,同时显示等待可以等待隐式等待无法处理的问题,例如:隐式等待无法等待弹窗,因为弹窗不是页面的元素,无法通过元素来定位到弹窗。我们的自动化脚本⼀般部署在机器上自动的去运行,当自动化运行报错时,仅仅通过终端的错误提示给到的有用信息是有限的,若能将当时的页面变化截图拍下来,能更好的定位问题并解决问题~selenium⽆法识别非web的控件,上传文件窗口为系统自带,⽆法识别窗⼝元素但是可以使用sendkeys来上传指定路径的文件,达到的效果是⼀样的。

2025-05-06 08:33:06 787

原创 测试——测试分类篇

安全性测试的方法有代码评审,渗透测试,安全运维等,常用的静态安全测试⼯具有,Coverity,IBM Appscan Source,HPFortify,常用的动态安全测试有OWASP的ZAP,HP WebInspect等。界面如同⼈的面孔,具有吸引用户的直接优势,设计合理的界面能给用户带来轻松愉悦的感受。软件测试是软件生命周期中的⼀个重要环节,具有较高的复杂性,对于软件测试,可以从不同的⻆度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进行更好的执行和管理测试的分类方法。

2025-05-03 15:19:28 990

原创 测试——用例篇

正交试验设计(Orthogonal experimentaldesign)是研究多因素多水平的⼀种设计方法,它是根据正交性,由试验因素的全部水平组合中挑选出部分有代表性的点进行试验,通过对这部分试验结果的分析了 解全面试验的情况,找出最优的水平组合。读完上面的概念是不是⼀脸懵,场景法就是⼀个常规的流程中,某些阶段可能会出现⼀些意想不到的情况,常规流程是基本流,从阶段中分析出来的不同情况被称之为备选流,场景法比较考验同学们的发散思维。可以看出,用例的设计最重要的⼀点是保证功能是正确的。

2025-05-02 20:49:07 1020

原创 测试——BUG篇

⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault),这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错误。

2025-04-29 09:47:22 1484

原创 测试—概念篇

在多数软件公司,会有两部分需求,⼀部分是用户需求,⼀部分是软件需求。你以为的模型实际的模型:随着软件工程学科的发展,⼈们对计算机软件的认识逐渐深⼊。软件⼯作的范围不仅仅局限在程序编写,而是扩展到了整个软件⽣命周期,如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运⾏维护,直到软件被更新和替换新的版本。软件⼯程还包括很多技术性的管理⼯作,例如过程管理、产品管理、资源管理和质量管理,在这些方面也逐步地建立起了标准或规范。

2025-04-28 23:13:04 769

原创 认识——测试

软件测试就是验证软件产品特性是否满足用户的需求。

2025-04-28 00:25:58 1113

原创 C++初阶——类与对象(中)

内置类型就是语言提供的数据类型,如:int/char.../指针,自定义类型就是我们使用class/struct/union等自己定义的类型;编译器自动生成的构造函数,对于内置类型不做处理!对于自定义类型成员变量才会调用他的无参构造函数;看看下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。

2025-04-24 16:07:28 701

原创 算法基础—二分算法

⼆分算法的原理以及模板其实是很简单的,主要的难点在于问题中的各种各样的细节问题。因此,⼤多数情况下,只是背会⼆分模板并不能解决题目,还要去处理各种乱七⼋糟的边界问题。题⽬来源: ⼒扣题⽬链接:难度系数: ★★给你⼀个按照⾮递减顺序排列的整数数组 nums ,和⼀个⽬标值 target。请你找出给定⽬标值在数组中的开始位置和结束位置。如果数组中不存在⽬标值 target ,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题【解法】

2025-04-09 19:52:06 761

原创 算法基础—双指针

双指针算法有时候也叫或者,是⼀种注意:希望⼤家在学习该算法的时候,不要只是去记忆模板,⼀定要学会如何。不然往后遇到类似题目,你可能压根都想不到用双指针去解决。

2025-04-08 09:41:22 704

原创 算法基础-差分

前缀和与差分的核⼼思想是预处理,可以在暴⼒枚举的过程中,快速给出查询的结果,从⽽优化时间复杂度。是经典的⽤空间替换时间的做法。学完差分之后,会发现,前缀和与差分是⼀对互逆的运算。

2025-04-07 20:07:24 682

原创 算法基础—前缀和

前缀和与差分的核⼼思想是预处理,可以在暴⼒枚举的过程中,快速给出查询的结果,从⽽优化时间复杂度。是经典的⽤空间替换时间的做法。

2025-04-06 14:46:32 506

原创 算法基础-枚举

顾名思义,就是,然后。因此,枚举是⼀种的算法。⼀般情况下,。此时要(比如⼆分,双指针,前缀和与差分等)。使用枚举策略时,重点思考枚举的对象(枚举什么),枚举的顺序(正序还是逆序),以及枚举的⽅式(普通枚举?递归枚举?⼆进制枚举)。(在这篇博客里的枚举题目都是不会超时的,注要是让大家了解枚举,后续的算法基础会跟深层次的学习枚举。

2025-04-06 08:07:32 1073

原创 算法基础——高精度

高精度算法本质上还是模拟算法,用代码模拟小学列竖式计算加减乘除的过程。

2025-03-27 23:48:41 363

原创 算法基础——模拟

模拟,顾名思义,就是题⽬让你做什么你就做什么,考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单,属于竞赛⾥⾯的签到题(但是,万事⽆绝对,也有可能会出现让人非常难受的模拟题),但是在学习语法阶段接触的题,大多数都属于模拟题。

2025-03-27 22:20:35 1713

原创 linux权限的理解

litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件rm:是否删除有写保护的普通空文件 "/home/root.c"?换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限.-rw-r--r--. 1 root root 0 9月 19 15:59 root.c。-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c。功能说明:辨识文件类型。

2025-03-24 21:56:26 938

原创 C++初阶——类与对象(上)

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。类的两种定义方式:1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2025-02-27 18:58:06 705

原创 C++初阶——入门

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// oh是命名空间的名字,一般开发中是用项目名字做命名空间名。// 大家可以用自己名字缩写或者自己的喜好,如张三:zs// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;

2025-02-26 22:08:17 1074

原创 数据结构初阶5 - 栈和队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。

2025-02-25 01:35:58 343

原创 贪吃蛇小游戏的实践

本次实现贪吃蛇会使用到的⼀些Win32 API知识。

2025-02-22 11:09:16 689

原创 数据结构初阶4 - 双向链表专题

注意:这里的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严谨,但是为了同学们更好的理解就直接称为单链表的头节点。带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨的”“哨兵位”存在的意义:遍历循环链表避免死循环。

2025-02-17 23:50:45 399

原创 数据结构初阶3 - 单链表专题

与顺序表不同的是,链表里的每节"车厢"都是独立申请下来的空间,我们称之为“结点/节点” 节点的组成主要有两个部分:当前节点要保存的数据和保存下⼀个节点的地址(指针变量)。当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数据,也需要保存下⼀个节点的地址(当下⼀个节点为空时保存的地址为空)。当我们想要从第⼀个节点⾛到最后⼀个节点时,只需要在前⼀个节点拿上下⼀个节点的地址(下⼀个节点的钥匙)就可以了。,如哈希表、图的邻接表等等。给定的链表结构中,如何实现节点从头到尾的打印?

2025-02-15 21:17:17 803

原创 数据结构初阶2 - 顺序表的应用(通讯录项目)

3. 增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插⼊了5个数据,后⾯没有数据插⼊了,那么就浪费了95个数据空间。链表可以解决以上问题,大家可以看下一篇关于链表的博客,看看链表如何解决以上的问题。2. 增容需要申请新空间,拷⻉数据,释放旧空间。C语⾔基础要求:结构体、动态内存管理、顺序表、⽂件操作。1)中间/头部的插入删除,可以一步到位,不需要挪动数据。2)能够保存⽤⼾信息:名字、性别、年龄、电话、地址等。1)⾄少能够存储100个⼈的通讯信息。

2025-02-12 13:34:07 283

原创 数据结构初阶 - 顺序表专题

数据结构是由“数据”和“结构”两词组合⽽来。什么是数据?常⻅的数值1、2、3、4.....、教务系统⾥保存的⽤⼾信息(姓名、性别、年龄、学历等等)、⽹⻚⾥⾁眼可以看到的信息(⽂字、图⽚、视频等等),这些都是数据。什么是结构?当我们想要使用大量同⼀类型的数据时,通过⼿动定义大量的独立的变量对于程序来说可读性非常差,我们可以借助数组这样的数据结构将⼤量的数据组织在⼀起,结构也可以理解为组织数据的方式。想要找到草原上名叫“咩咩”的羊很难,但是从羊圈里找到1号羊就很简单,羊圈这样的结构有效将羊群组织起来。

2025-02-10 15:04:24 453

原创 C语言入门7(详细)—— 编译和链接

前⾯我们⾮常简洁的讲解了⼀个C的程序是如何编译和链接,到最终⽣成可执⾏程序的过程,其实很多内部的细节⽆法展开讲解。⽐如:⽬标⽂件的格式elf,链接底层实现中的空间与地址分配,符号解析和重定位等,如果你有兴趣,可以看《程序的⾃我修养》⼀书来详细了解。静态语义分析通常包括声明和类型的匹配,类型的转换等。链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。将源代码程序被输⼊扫描器,扫描器的任务就是简单的进⾏词法分析,把代码中的字符分割成⼀系列的记号(关键字、标识符、字面量、特殊字符等)。

2025-02-09 18:13:32 778

原创 C语言入门6(详细)—— 文件操作

磁盘(硬盘)上的文件是文件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类的)。函数名功能适⽤于fgetc字符输⼊函数所有输⼊流(stdin,stdout...)fputc字符输出函数所有输出流fgets⽂本⾏输⼊函数所有输⼊流fputs⽂本⾏输出函数所有输出流fscanf格式化输⼊函数所有输⼊流fprintf格式化输出函数所有输出流fread⼆进制输⼊⽂件fwrite⼆进制输出⽂件。

2025-02-09 09:55:30 914

原创 C语言入门5(详细)—— 动态内存管理(malloc\calloc\realloc\free)

1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很⾼,但是分配的内存容量有限。栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。2. 堆区(heap):⼀般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。分配⽅式类似于链表。3. 数据段(静态区)(static)存放全局变量、静态数据。程序结束后由系统释放。

2025-02-08 20:54:41 1271

原创 C语言入门4(详细)—— 自定义类型:联合和枚举

代码1输出的三个地址⼀模⼀样,代码2的输出,我们发现将i的第4个字节的内容修改为55了。所以我们就可以把公共属性单独写出来,剩余属于各种商品本⾝的属性使⽤联合体起来,这样就可以介绍所需的内存空间,⼀定程度上节省了内存。联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的大小,至少是最⼤成员的大小(因为联合⾄少得有能力保存最⼤的那个成员)。在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

2025-02-08 00:45:08 730

原创 C语言入门4(详细)—— 自定义类型:结构体

位端的声明和结构是类似的,但有两个不同:1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以选择其他类型。2. 位段的成员名后边有⼀个冒号和⼀个数字。int _b:5;int _c:10;int _d:30;A就是⼀个位段类型。那位段A所占内存的⼤⼩是多少?2bit + 5bit + 10bit + 30bit = 47bit 一个整型不够需要2个整型 就是个8字节。

2025-02-07 22:48:30 808

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除