- 博客(64)
- 收藏
- 关注
原创 论坛系统测试报告
在Chrome浏览器和edge浏览器下打开论坛系统并没多大差别,只是在edge上打开页面的大小比在Chrome上打开页面的大小大一些。
2025-03-26 13:50:19
786
原创 博客系统性能测试
想要做一个属于自己的来存储私人博客的项目。基于。只要登录就可以查看并修改自己的博客,其他用户的博客只能查看。但是该项目没有实现用户注册的功能,只能通过在数据库中存储的用户数据来进行校验登录并且用户的头像不能自己设定。用户的文章数量以及文章类型也是静态设定好的并不能直接修改。通过使用selenium工具来定位到web中的元素,对获取到的元素进行自动化测试等操作。博客系统实现了发布个人博客并记录博客的标题、内容、发布时间、发布人等详细信息的功能。
2025-03-21 09:27:40
839
原创 C++初阶 -- vector容器的接口详解
译本:1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。
2025-02-03 01:33:34
960
原创 C++初阶 -- 手撕string类(模拟实现string类)
首先得先判断len是否等于缺省值npos或者 len + pos 是否大于等于字符串实际存储有效字符的数量。如果出现以上两种情况直接在字符串中下标为pos的值赋值为'\0',再把pos赋给_size。字符串相较于字符比较难以控制追加的数量,所以得先求出追加字符串的长度,再判断追加字符串的长度 + 当前字符串的长度是否大于当前容器的容量。用strstr函数找到要找字符串的地址,如果strstr函数返回值为空指针就返回npos。大于就扩容,不大于就使用strcpy函数在已重新扩容的字符串中尾插待插入字符串。
2025-02-01 22:48:45
1182
原创 C++初阶 -- 初识STL和string类详细使用接口的教程(万字大章)
STL(standard template libaray-标准模板库:是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
2025-01-31 23:33:21
1439
原创 C++初阶 -- C/C++的内存管理以及new、delete详解
class Apublic:// 单参数构造函数: _a(a)// 析构函数~A()private:int _a;int main()// malloc不方便解决动态申请的自定义类型对象的初始化问题//new的本质:开空间+调用构造函数初始化//想给多个自定义对象开辟空间// 1. 实例化多个对象(有名对象),在为其开辟空间A aa1 = 1;A aa2 = 1;A aa3 = 1;// 2. 匿名对象// 3. 数据的隐式类型转换。
2025-01-29 01:23:44
1113
原创 C++类与对象(三)-- 再谈构造函数(细嗦初始化列表)、static成员
在初始化列表显式地写出来并定义在该类的默认构造函数中给缺省值当发生类型转换时,就会产生一个临时变量来保存隐式转换后的对象。然后用这个临时对象拷贝构造aa。这就是类型转换因为有类的单参数构造函数如果类的单参数构造函数的参数类型为int,那int类型的内置类型变量就可以隐式转换为自定义类型对象如果类的单参数构造函数的参数类型为double,那double类型的内置类型变量就可以隐式转换为自定义类型对象以此类推,类的单参数构造函数的参数类型是哪种,哪种类型的变量就可以隐式转换为自定义类型对象。
2024-12-30 21:09:36
816
原创 算法 -- 二分查找(Binary Search)
1、左区间和右区间:由于查找的区间是不断迭代更新的,所以确定查找的范围十分重要。主要的就是左右区间的开闭问题,开闭不一样,对应的迭代方法也不一样。二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。2、取中间值:因为二分查找每找一次就得更新中间值,那中间值该怎么求呢?当left和right都是接近 2147483647 的数字,我们如果想要做有关二分查找的题,有几个点是需要特别注意的。我们先看下二分查找和暴力遍历查找的示意图。我们就选第二种方法,原因是。,导致溢出,变成负数。
2024-11-27 21:36:57
493
原创 C++类与对象(二)-- 类的六个默认的成员函数【万字大章!!!!】
class Datepublic:/*// 如果用户显式定义了构造函数,编译器将不再生成_day = day;int _month;int _day;int main()// 会报错Date d1;return 0;将Date类中构造函数屏蔽后,代码可以通过编译,因为编译器生成了一个无参的默认构造函数;将Date类中构造函数放开,代码编译失败,因为一旦显式定义任何构造函数,编译器将不再生成;
2024-11-26 22:33:20
1491
原创 C++类与对象(一) -- 类的访问限定符、作用域、实例化、类对象、this指针
/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字ClassName为类的名字{ }中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。int top;int top;
2024-11-20 21:21:34
1085
原创 初始C++(下)-- 引用、内联函数、auto关键字、基于范围的for循环、空指针nullptr
比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。 类型& 引用变量名(对象名) = 引用实体(这里的&就不是取地址的符号'&')注意:引用类型必须和引用实体是同种类型的引用变量和引用的变量共用一块地址空间 注意:如果函数返回时,出了函数作用域,如果返回对象还在(还没还给系统),则可以使用引用返回,如果已经还给系统了,则必须使用传值返回。 传引用返回,引用的对象最好是全局变量,静态变量或者是动态内存开辟,这样才能保证返回值的有效。当使用stati
2024-11-09 11:48:26
869
原创 初识C++(上) -- C++的关键字、命名空间、缺省参数以及函数的重载
定义命名空间,需要使用到namespace关键字后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。//命名空间中可以定义变量/函数/类型int val;ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个// test.hint a;int b;int c;int d;注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。
2024-11-06 21:03:31
745
原创 探索Linux -- 冯诺依曼体系、初始操作系统、初始进程、fork函数
冯·诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。最早的计算机器仅内含固定用途的程序。若想要改变此机器的程序,就必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计成那种可编程化。当时所谓的"重写程序"指的是纸笔设计程序步骤,接着制订工程细节,再施工将机器的电路配线或结构改变。然后储存程序型电脑的概念改变了这一切,通俗的理解冯·诺伊曼结构与储存程序型电脑是互相通用的名词。冯·诺依曼提出抛弃十进制,采用二进制作为数字计算机的数制基础。同时,预先编制计算程
2024-08-09 23:16:36
1286
1
原创 探索Linux世界之Linux环境开发工具的使用
vim 是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说,vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。vim 则可以说是程序开发者的一项很好用的工具。vim编辑器中有着12种编辑模式,但是我们目前只需要掌握好这三种编辑模式(命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode)
2024-08-07 02:22:41
979
原创 转义字符 ‘\‘ 和 百分号 ‘%‘ 的输出
而C 中定义了一些字母前加“\"来表示常见的那些不能显示的 ASCI 字符,如\t, \n 等,就称为。上面的表上也表示两个 ‘\\’ 才是反斜杠 '\'。,所以我们只需要在函数中输入两个'\\'即可输出一个'\'。,因为后面的字符,都不是它本来的 ASCII 字符意思了。转义字符是C语言中的表示字符的一种特殊形式,用反斜线“\”和特定的字母组合表示。在现在的学习过程中,发现对于以前的一些知识点有些遗忘,所以特地写篇文章来记录。但这次我们讨论的重点是如何在printf函数中输出一个反斜杠字符 '\'。
2024-07-27 11:30:21
1407
原创 探索Linux世界 —— shell与权限的相关知识
此时就会有人问,那什么是命令行解释器呢?Linux中的命令行解释器就由这几个部分组成。还有一点需要注意的是‘#’是root在使用,而‘$’是普通用户在使用目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限。
2024-07-18 13:23:13
1062
原创 接着探索Linux的世界 -- 基本指令(文件查看、时间相关、打包压缩等等)
命令输出到某个指定文件中,而不是输出到终端屏幕或终端窗口。我们从键盘输入什么,cat命令就打印什么。命令 + >> + 目标文件名。: 将命令的结果写入目标文件中;这两条指令的作用等价。
2024-07-14 21:53:39
1910
原创 Linux的世界 -- 初次接触和一些常见的基本指令
这就是我们新建的一个文本文档,也可以叫做文件。我们可以看到这个新建的文本文档的大小是0KB,那我们是不是就可以认为这个文本文档不会占用磁盘空间呢?答案是错的,就算我们不在文档里面写入数据,文档也会在磁盘中站有一小部分内存。那为什么大小为空的文件却能占有磁盘的一小部分内存呢?那是因为文件不仅仅只有文件的内容,除了文件的内容,计算机还得记录文件的名字文件的修改时间文件的格式等等。而刚才说的这些内容全部叫做文件的属性文件的属性也是数据,也得被计算机记录下来。
2024-07-13 23:30:33
1186
原创 排序 -- 手撕归并排序(递归和非递归写法)
1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。2. 时间复杂度:O(N*logN)3. 空间复杂度:O(N)4. 稳定性:稳定。
2024-07-07 17:34:18
1023
原创 排序 -- 计数排序以及对排序的总结
计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。时间复杂度:O(MAX(N,范围))空间复杂度:O(范围)稳定性:稳定。
2024-07-07 17:33:24
182
原创 排序 -- 冒泡排序和快速排序
冒泡排序是一种非常容易理解的排序时间复杂度:O(N^2)空间复杂度:O(1)稳定性:稳定快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定。
2024-07-07 08:30:00
973
原创 排序 -- 直接选择排序和堆排序
直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定堆排序使用堆来选数,效率就高了很多。时间复杂度:O(N*logN)空间复杂度:O(1)稳定性:不稳定。
2024-07-06 11:33:39
436
原创 排序 —— 直接插入排序和希尔排序
1:元素集合越接近有序,直接插入排序算法的时间复杂度效率越高2:时间复杂度:O(N^2)3:空间复杂度:O(1)4:稳定性:稳定1、希尔排序是对直接插入排序的优化2、当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比3、希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定3、希尔排序。
2024-07-05 18:04:52
805
原创 每日一题《leetcode--114.二叉树展开为链表》
如果一个节点的左子节点不为空,则该节点的左子树中的最后一个节点被访问之后,该节点的右子节点被访问。该节点的左子树中最后一个被访问的节点是左子树中的最右边的节点,也是该节点的前驱节点。具体做法是,对于当前节点,如果其左子节点不为空,则在其左子树中找到最右边的节点,作为前驱节点,将当前节点的右子节点赋给前驱节点的右子节点,然后将当前节点的左子节点赋给当前节点的右子节点,并将当前节点的左子节点设为空。对当前节点处理结束后,继续处理链表中的下一个节点,直到所有节点都处理结束。
2024-06-05 11:00:00
173
原创 每日一题《leetcode--206.反转链表》
这道题可以定义一个新结点newhead,newhead指向NULL。此时遍历所给链表将遍历的每个结点头插到newhead上。
2024-06-04 10:00:00
443
原创 每日一题《leetcode--LCR 029.循环有序列表的插入》
2、整个列表只有一个结点,需要在头结点后插入新结点,随机把新结点的next指向头结点。3、整个列表的结点 >1 ,在插入新结点后要保证整个列表是循环升序的。1、整个列表是空列表,需要返回插入的结点。
2024-06-03 15:04:30
253
原创 每日一题《leetcode--LCR 022.环形链表||》
我们使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后slow 指针每次向后移动一个位置,而fast 指针向后移动两个位置。如果链表中存在环,则fast 指针最终将再次与slow 指针在环中相遇。
2024-06-01 15:08:49
580
原创 每日一题《leetcode--LCR 021.删除链表的倒数第N个结点》
这道题我们可以设一个哨兵位,然后把要遍历链表的结点指向该哨兵位。最后用for循环将指针指向要删除结点的前一个。
2024-05-31 14:47:01
328
原创 每日一题《leetcode--2058. 找出临界点之间的最小和最大距离》
这道题要求我们求出临界点的最大距离和最小距离。要想求最大和最小距离,首先我们得先求出每个临界点。注意:节点只有在同时存在前一个节点和后一个节点的情况下,才能成为一个。前一个节点和后一个节点,那么这个节点就是一个。前一个节点和后一个节点,那么这个节点就是一个。
2024-05-30 10:07:56
653
原创 每日一题《leetcode--117.填充每个结点的下一个右侧结点指针||》
这道题与我之前发布的题目116是一样的解题过程,只是本题所给的数组大小与116不同,这是需要注意的。
2024-05-29 15:31:21
223
原创 每日一题 <leetcode--2326.螺旋矩阵>
函数中给出的int* returnSize和int** returnColumnSizes是需要我们返回数值的,这点需要注意。其中int** returnColumnSizes 是需要额外开辟一块空间。填充,所以我们使用memset函数来把这个数组的初值给赋值为-1,在随后的操作中会用链表中的值一一覆盖掉数组中原有的值-1。这道题我们首先需要malloc出一快空间来把链表存放在数组中,然后题目中说了如果还存在剩余的空格,则用。其次就是实现螺旋矩阵,这里 我是先填充外层,最后再填充内层。
2024-05-27 18:40:38
379
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人