自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 15. sscanf 函数详解

优点:一行代码拆分请求行3个字段。没有长度限制,超长输入会内存越界;没有判断返回值,无法识别非法请求;只能分割空格分隔的3段,不能解析请求头多行数据。

2026-10-07 16:10:04 332

原创 5. 前端基础

直接写<script>标签,标签内部写 JS 代码。

2026-09-28 01:35:37 143

原创 4. MYSQL数据库基础

2026-09-27 23:53:01 15

原创 15. c++基础知识回顾(4)

函数模板是通用函数蓝图,不绑定固定数据类型,使用模板参数代表任意类型;编译器会根据你传入的实参类型,自动生成对应版本的重载函数,实现代码复用。解决的痛点:相同逻辑、不同数据类型,不用重复写多份函数。:固定开头,必须写 / :两种写法完全等价,T是类型占位符T可以是int、double、string、自定义类等任意类型三、最简示例:通用求最大值底层行为编译阶段,编译器检测到,自动生成一份;检测到,自动生成一份,这个过程叫模板实例化。传入实参,编译器自动推导出T的类型,不用手动指定:2.

2026-06-22 22:59:05 475

原创 14. c++基础知识回顾(3)

最优标准方案:中间子类B、C使用虚继承公共基类A;解决效果:只保留一份A成员,消除二义性、节省内存;构造规则:虚基类A由最末端派生类D直接初始化,中间类B/C的A构造会被忽略;不推荐仅显式指定类域访问,治标不治本,无法解决内存冗余。判定规则一样:同名、参数不同才算重载;使用场景不一样普通重载:全局函数;面向对象重载:类内成员、构造、运算符、const重载,存在继承隐藏规则;不能完全等同,类内成员重载有全局函数没有的特殊语法与限制。

2026-06-22 14:18:41 216

原创 16. Ubuntu 安装与使用 SQLite 完整教程

【代码】16. Ubuntu 安装与使用 SQLite 完整教程。

2026-06-21 18:46:32 361

原创 15. SQLite数据库

规定查询结果处理函数的固定格式,每一行数据触发一次;:万能执行函数,所有SQL都靠它跑;增/删/改/建表:回调填NULL;SELECT查询:必须传入回调函数接收查到的数据;errmsg是输出型参数,用来拿报错文字,用完要释放内存;返回0代表执行成功,非0代表SQL出错。

2026-06-21 16:49:22 255

原创 13. c++基础知识回顾(2)

拷贝构造函数是特殊的构造函数,用于用一个已存在的同类型对象,去创建一个全新对象,完成对象成员的复制。// 1. 分配和原对象等长堆空间// 2. 拷贝内容,不共用内存此时s1和s2拥有两块独立堆内存,析构互不干扰,不会崩溃。拷贝构造函数参数必须是同类const &不用引用、值传递会无限递归;不加const无法接收临时对象,场景受限;用指针的话编译器不认为它是拷贝构造,不会自动调用;所以标准写法强制要求const 类名&。场景是否允许核心原因static 修饰构造/析构禁止。

2026-06-20 22:38:13 256

原创 12. c++基础知识回顾(1)

维度引用作函数参数引用作函数返回值核心作用减少拷贝、修改外部变量支持左值赋值、链式调用、减少返回拷贝生命周期风险无风险(外部变量一定存活)高风险,严禁返回局部栈变量const修饰作用允许传入临时常量,禁止修改禁止外部通过返回值修改对象经典案例交换函数赋值运算符重载、数组下标[]表达式的值类别├─ 左值 lvalue└─ 右值 rvalue├─ 纯右值 prvalue(字面量、普通函数返回值)└─ 将亡值 xvalue(move转换、T&&返回)

2026-06-16 22:34:42 279

原创 1. 数据结构简单复习回顾(线性结构)

获取第一个学生id定义;初始化并添加学生,确保st.n >= 1;通过访问学号,访问前必须判断学生数量,避免越界。我帮你把课后任务的所有函数(创建、判满、尾插、输出)完整实现了,同时写好了main函数的测试用例,直接可编译运行。

2026-06-14 15:25:34 202

原创 15. Miniconda 安装后(D盘环境迁移+OpenCV安装)完整配置指南

这份文档按顺序整理了从安装后修改虚拟环境位置,到创建环境、安装OpenCV的完整流程,你可以跟着一步步操作。

2026-06-11 20:38:37 205

原创 13. 网络中基本协议

各层对应的协议。

2026-06-11 20:13:50 45

原创 12. UDP协议概述

/ 源端口号// 目的端口号// UDP长度(首部+数据)// UDP检验和结构体的每个成员正好对应图中的4个字段,总大小固定为8字节,和UDP首部的设计完全一致。

2026-06-11 19:32:39 190

原创 11. WireShark通过HTTP来抓三次握手包

2026-06-11 16:41:04 31

原创 10. 在实际网络编程中 tcp协议必须搭配应用层协议才能进行数据传输吗

标准公有应用层协议(大家统一遵守):HTTP、HTTPS、FTP、SSH、Telnet、MySQL、Redis 协议等,全世界格式统一;自定义私有应用层协议(自己团队约定):内网服务、游戏、物联网、工业设备、后台服务最常用,格式由开发者自己定。只要两端约定了数据格式、消息边界、交互逻辑,就属于「应用层协议」。为了解决粘包、拆包、指令识别,开发者自己定一套简单规则,这就是自定义应用协议(跑在 TCP 之上)。这类协议不属于 HTTP 等标准协议,但它就是应用层协议,也是实际工作中最常见的形态。

2026-06-11 13:30:50 567

原创 9. TCP协议之三次握手和四次挥手

客户说:“我要连你,我的号是x”(第一次)服务器说:“收到,同意连你,我的号是y,等你x+1”(第二次)客户说:“收到你的回复,等你y+1,连接成了”(第三次)别慌!我用和之前「打电话」完全一致的比喻,把四次挥手讲得明明白白,每一步都对应图里的箭头、状态和你之前学过的seq/ackFIN/ACK规则,保证你看完就懂。MSL= 报文最大生存时间,简单说就是「一个IP包在网络里最多能活多久」,一般是2分钟左右。2MSL就是两倍的这个时间,比如4分钟。客户端:「我说完了,请求关闭」(FIN)

2026-06-11 00:39:11 388

原创 8. TCP 协议概述

→ 就是我们说的seq,这个包的第一个字节编号是1000Length: 8→ 这个包带了8个字节的数据→ 这个包覆盖的字节编号是1000~1007,下一个包的seq应该是1008→ 对方回复的ack,意思是“我已经收到了2000之前的所有字节,下一个想要2001号的”你看,完全和我们讲的逻辑一致,Wireshark里的这些字段,就是TCP“面向字节流+seq标记起始编号”的直接体现。TCP把所有数据当成一串编了号的字节流,每个字节都有唯一的编号。

2026-06-10 23:34:52 323

原创 7. WireShark分析IP数据包格式

图里的“行”,不是逻辑上的“分层”,而是物理上的32比特数据块,是设备处理IP包的基本单位。每一行里,被划分成了多个不同长度的字段,每个字段负责一个特定的功能,凑起来刚好32位。这种设计是为了高效、标准化,让所有设备都能快速、统一地解析IP包。

2026-06-10 22:47:00 586

原创 6. TCP_IP协议通信模型

2026-06-10 22:08:29 31

原创 5. 网络体系架构与WireShark简单使用

启动软件,找到波动的网络,双击启动WireShark。

2026-06-10 21:58:01 65

原创 4. 家庭网络结构之局域网通信、外网通信

为什么要“IP+端口”?IP可以重复(内网IP都一样),但「IP+端口」的组合,在同一时间是唯一的,就像“门牌号+房间号”,保证能精准找到你。NAT的作用是什么?就是把内网的地址,转换成公网唯一的地址,解决IP不够用的问题,同时隐藏你的真实内网IP。动态端口映射是什么?运营商不会给你固定的端口,每次上网请求,都会随机分配一个新的端口号,这就是“动态端口映射”。

2026-06-10 13:28:12 195

原创 3.网络基础之子网计算

2026-06-10 09:58:35 26

原创 2. 网络基础之IP地址、网关,子网掩码,DNS服务器

2026-06-10 01:48:24 22

原创 1. 网络历史概述

2026-06-09 20:49:02 32

原创 9. 进程间通信(1)无名管道与有名管道

Linux内核定义好的管道就是进程之间传数据的“临时通道”一端进水(写数据),一端出水(读数据)数据先进先出,先写进去的,先读出来匿名管道:只能给有亲缘关系的进程用(父子进程、兄弟进程),没有文件名字,文件系统里看不到。有名管道(FIFO):就是你现在学的,下面逐条解释。

2026-06-07 15:58:01 362

原创 3. ARM寄存器组织

BL 函数= 自动保存返回地址到LR + 跳转到函数mov pc, lr= 跳转到LR里保存的返回地址整个过程完全由CPU硬件自动完成,不需要你手动计算地址这就是所有高级语言里“函数调用”功能在CPU层面的本质实现这是32位ARM架构(ARMv7及更早)的CPSR(当前程序状态寄存器)详解图,它是ARM CPU最核心的寄存器,相当于CPU的"状态总控制台",所有运算结果、中断开关、指令集类型和运行模式都由它控制。

2026-06-06 15:53:33 245

原创 11.进程间通信(3) 信号机制

有时候不希望在接到信号时就立即停止当前执行,去处理信号,同时也不希望忽略该信号,而是延时一段时间去调用信号处理函数。SIG_IGN 代表忽略信号;sa_sigaction: 另一个信号处理函数,它有三个参数,可以获得关于信号的更详细的信息。信号抵达(Delivery ):实际信号执行的处理过程(3种状态:忽略,执行默认动作,捕获)信号的阻塞概念:信号的”阻塞“是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。

2026-06-05 21:15:58 199

原创 10. 进程间通信(2)内存映射与共享内存

flags:由以下几个常值指定:MAP_SHARED(共享的) MAP_PRIVATE(私有的), MAP_FIXED(表示必须使用 start 参数作为开始地址,如果失败不进行修正),其中,MAP_SHARED , MAP_PRIVATE必选其一,而 MAP_FIXED 则不推荐使用。(4) 用于映射的文件大小必须>0,当映射文件大小为0时,指定非0大小创建映射区,访问映射地址会报总线错误,指定0大小创建映射区,报非法参数错误(Invalid argument)fd:表示要映射的文件句柄。

2026-06-05 14:28:10 247

原创 2. ARM处理器概论

内存格子编号=地址(0x2004、0x2008……),格子里装的才是指令/数据(值),只有0x2004、0x2008能存ARM指令,硬件自动兜底修正地址。0x2005/0x2006/0x2007 这3个地址:ARM模式下。,2005/2006/2007是空房间,门卫(硬件)直接把门牌改成。,低位bit[1:0]=00,硬件不修改,正常跳转。PC永远存格子编号(地址),不存格子里的内容。,CPU去2004房间拿指令。取指令 → 代码就给PC赋值。

2026-06-04 23:37:50 261

原创 52 .线程池恶心案例讲解

demo场景:直接创建线程更简单生产场景:线程池更简单、更稳定、更高效你觉得线程池复杂,是因为你还没遇到它解决的那些问题。线程池才是最简单的解决方案。一堆预创建的线程一个任务队列一把互斥锁一个条件变量剩下的所有复杂功能,都是在这4个核心组件的基础上增加的。// ========== 头文件说明 ==========#include <pthread.h> // POSIX线程库:线程、互斥锁、条件变量#include <stdio.h> // 标准输入输出:printf。

2026-05-25 00:23:34 389

原创 8.条件变量和线程池

线程的互斥和同步临界资源概念:不能同时访问的资源,比如写文件,只能由一个线程写,同时写会写乱。比如外设打印机,打印的时候只能由一个程序使用。外设基本上都是不能共享的资源。生活中比如卫生间,同一时间只能由一个人使用。

2026-05-24 18:55:51 403

原创 49. 多线程编程入门:出租车调度系统

🚕 出租车线程(生产者):每隔1秒"生成"一辆出租车,放入等待队列👤 乘客线程(消费者):3个乘客同时等车,有车就坐,没车就等🔐 同步机制:用"锁"和"条件变量"保证安全、有序的调度📦 进程 = 一个正在运行的程序(如:微信)🧵 线程 = 进程内部的"执行单元"(如:微信的聊天线程+下载线程)✅ 同一个进程的线程共享内存,通信方便✅ 线程比进程更轻量,创建/切换更快🚪 比喻:厕所的门锁❌ 没有锁:两个人同时进厕所 → 冲突!✅ 有锁:一个人进去后锁门,其他人等待 → 安全!

2026-05-24 17:37:04 259

原创 7. 线程编程(线程概念和创建)

自动释放线程资源,无需join目的:避免资源泄漏、解除线程耦合规则:分离线程不能join,二选一场景:后台无交互的辅助线程首选分离// 子线程函数while(1){sleep(5);// 这是一个「取消点」// 这行永远不会执行void *retv;int i;// 创建子线程sleep(5);// 主线程等 5 秒,让子线程先运行// 发送取消请求给子线程// 等待子线程结束,并获取退出状态// 打印子线程的返回值while(1){// 主线程死循环,保持程序运行。

2026-05-22 22:39:51 413

原创 6. exec函数族和守护进程

exec 函数族背景:fork创建进程之后,子进程和父进程执行相同的代码,但是在实际开发当中,我们希望父子进程执行不同的代码。作用:执行指定的程序成功时执行指定的程序;失败时返回EOFpath 执行的程序名称,包含路径arg… 传递给执行的程序的参数列表file 执行的程序的名称,在PATH中查找注意:两个函数区别execlp不需要写文件名全路径,在PATH查找最后一个参数必须用空指针(NULL)作结束进程当前内容被指定的程序替换,但进程号不变。

2026-04-19 18:49:52 224

原创 12. Linux grep 命令

传统的[0-9][a-z]在非英文locale下可能失效,推荐使用POSIX预定义字符类,兼容性更强,必须放在[]预定义类等价含义功能说明[:alnum:]匹配任意字母和数字[:alpha:][a-zA-Z]匹配任意字母[:digit:][0-9]匹配任意数字[:lower:][a-z]匹配任意小写字母[:upper:][A-Z]匹配任意大写字母[:space:]匹配任意空白字符(空格、制表符、换行符等)[:blank:][ \t]匹配空格和制表符[:punct:]匹配任意标点符号。

2026-03-22 00:33:45 702

原创 11. Linux ps命令

ps是的缩写,用于查看系统中当前时刻的进程快照,它会在执行瞬间捕获系统的进程状态,与tophtop这类实时刷新的工具不同,ps适合获取静态的进程信息,常用于脚本和自动化任务中。使用-o(System V 风格)或o# 示例:显示进程ID、父进程ID、用户、CPU使用率、内存使用率、命令,并按CPU使用率降序排序字段名含义pid进程 IDppid父进程 IDuseruid进程所属用户%cpuCPU 使用率百分比%mem内存使用率百分比vsz虚拟内存大小(KB)rss物理内存大小(KB)tty。

2026-03-08 02:15:53 446

原创 13. WSL1 升级到 WSL2

必须开启「适用于Linux的Windows子系统」和「虚拟机平台」两个功能,缺一不可。绝大多数笔记本默认关闭该选项,需重启电脑进BIOS开启,保存重启后生效。再次打开管理员终端,执行以下升级命令,<发行版名称>,让功能生效,否则后续升级会报错。回车,即可看到系统版本号。

2026-03-01 23:32:02 2041

原创 14. WSL Ubuntu 22.04 国内镜像源设置教程(适配ARM开发)

如果想手动修改,用新手友好的nano执行命令打开源配置文件:打开后,按Ctrl+K清空所有原有内容(也可以在每一行开头加注释掉),然后复制下面对应镜像源的完整内容,右键粘贴到终端里。

2026-03-01 16:25:19 1444

原创 12. VMware Workstation提示“另一个程序已锁定文件的一部分,进程无法访问”

这是 VMware Workstation 中常见的虚拟机磁盘锁定问题,提示“另一个程序已锁定文件的一部分,进程无法访问”,通常是因为虚拟机未正常关闭或其他进程占用了磁盘文件。

2026-02-24 21:35:19 728

原创 11. MathType卸载后PowerPoint启动时无显示法加载MathType公式编辑器加载项

【代码】11. MathType卸载后PowerPoint启动时无显示法加载MathType公式编辑器加载项。

2026-02-24 21:29:34 613

空空如也

空空如也

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

TA关注的人

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