自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 博客系统测试

本项目为 Web 端博客管理系统,支持访客未登录浏览、登录用户发布 / 编辑 / 删除个人博客、查看他人博客等核心业务,包含四大核心页面:登录页面、博客列表主页、博客详情页、博客编辑页。测试覆盖登录权限控制、页面渲染、博客编辑发布、访客拦截等全场景。

2026-07-02 21:59:43 531

原创 问卷系统测试报告

用户账号体系:登录、注册、个人信息 / 密码修改首页数据看板:用户统计、我的考试快捷入口、快速创建试卷我的项目模块:试卷列表、新建问卷 / 考试、题目编辑、批量导入题目我的练习模块:练习记录筛选、题库切换、开始练习作答题库中心:自定义题库、题目管理、笔记记录、题库新增查询模板广场:自定义创建模板、查询已有模板系统管理:组织机构树、岗位管理、字典配置、个人 AI 设置配套能力:页面路由跳转、表单校验、弹窗交互、表格筛选、文件上传。

2026-06-28 21:29:11 296

原创 Reactor反应堆模式

Reactor是事件分发器,基于IO 多路复用(epoll/poll/select) + 事件回调,把IO事件、读写、异常统一监听、分发到对应处理函数,是高性能网络服务经典模型总结来说,

2026-05-27 20:39:22 371 1

原创 【Linux】多路转接之epoll

所以,为了解决上述问题 (阻塞 read 不一定能一下把完整的请求读完),于是就可以使用非阻塞轮询的方式来读缓冲区,保证一定能把完整的请求都读出来如果是 LT 没这个问题,只要缓冲区中的数据没读完,就能够让 epoll_wait 返回文件描述符读就绪。

2026-05-27 14:12:37 404

原创 【Linux】poll改写select代码

poll 是 Linux 中一种多路 IO 复用的系统调用,用于同时监听多个文件描述符(fd)的就绪事件,是对 select 的改进方案。

2026-05-27 13:38:57 399

原创 【Linux】多路转接之select

摘要:select是Linux系统的多路IO复用机制,允许程序同时监控多个文件描述符的状态变化。其核心原理是将IO操作的"等待"和"拷贝"分离:select负责检测数据就绪状态,read/write负责实际数据传输。主要特点包括:使用位图(fd_set)管理文件描述符,默认支持最多4096个fd;需要手动维护fd集合,每次调用需重新设置;存在性能瓶颈,如频繁的用户态/内核态数据拷贝和全量fd遍历。典型应用场景包括网络服务器的并发连接处理,示例代码展示了如何实现基于se

2026-05-27 13:23:09 385

原创 五种IO模型、非阻塞IO

问怎么拿结果→ 同步 / 异步问线程卡不卡→ 阻塞 / 非阻塞提到进程 / 线程同步,和这里调用同步这里的同步 / 异步:面向函数调用、IO、网络通信操作系统里进程 / 线程同步:面向多线程协作、临界资源竞争(配合互斥使用),只是同名概念,语义无关。

2026-05-27 13:07:04 407

原创 【Linux】NAT、代理服务、内网穿透

应用层应用层的作用:满足我们日常需求的网络程序,都是在应用层能够根据自己的需求,设计应用层协议了解 HTTP 协议理解 DNS 的原理和工作流程传输层传输层的作用:负责数据能够从发送端传输接收端理解端口号的概念认识 UDP 协议,了解 UDP 协议的特点认识 TCP 协议,理解 TCP 协议的可靠性。理解 TCP 协议的状态转化掌握 TCP 的连接管理,确认应答,超时重传,滑动窗口,流量控制,拥塞控制,延迟应答,捎带应答特性理解 TCP 面向字节流,理解粘包问题和解决方案。

2026-05-17 16:23:39 398

原创 【Linux】数据链路层

注意到源 MAC 地址、目的 MAC 地址在以太网首部和 ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。ARP 不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议1)

2026-05-16 18:10:56 343

原创 【Linux】网络层(IP协议)

路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表示此条目有效 (可以禁用某些条目),G 标志表示此条目的下一跳地址是某个路由器的地址,没有 G 标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0。

2026-05-15 18:51:16 472

原创 【Linux】传输层协议TCP

TCP既要保证可靠性,同时又尽可能的提高性能校验和序列号 (按序到达)确认应答超时重发连接管理流量控制拥塞控制滑动窗口快速重传延迟应答捎带应答定时器 (超时重传定时器,保活定时器,TIME_WAIT 定时器等)

2026-05-15 15:28:01 437

原创 【Linux】传输层协议UDP

在TCP/IP协议中,用"源IP", "源端口号","目的IP","目的端口号","协议号"这样的五元组来标识一个通信。

2026-05-11 16:06:49 293

原创 【Linux】Cookie+Session

cookie存钥匙(SessionId),session存数据信息但是第一次Set-Cookie同样可以被抓包,HTTP 明文会直接泄露 SessionId只有HTTPS加密传输才能防止抓包窃取,再配合 Secure、HttpOnly 提升安全。

2026-05-10 17:20:18 186

原创 【Linux】应用层协议HTTP

HTTP(超文本传输协议)是现成一些好用协议其中之一。在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如HTML文档)HTTP协议是客户端与服务器之间通信的基础。客户端通过HTTP协议向服务器发送请求,服务器收到请求后处理并返回响应。HTTP协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接, 且服务器不会保存客户端的状态信息。

2026-05-10 15:50:02 403

原创 【Linux】进程间关系与守护进程

用户登录用的终端 / 伪终端,就是 Shell 进程的控制终端打开的命令行窗口、SSH 登录,都是控制终端它是进程和用户交互的入口:键盘输入、屏幕输出终端信息存在进程 PCB 里,子进程会继承父进程的控制终端在 Shell 里输入的一整条命令,就是一个作业一个作业 = 一个进程组一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,Shell可以同时运行一个前台作业和任意多个后台作业,这称为作业控制。

2026-04-24 22:00:02 457

原创 【Linux】序列化与反序列化

协议是一种"约定",Socket API 本身,在读写数据时,都是按 "字符串" 的方式来发送接收的,但 Socket 只能发字符串,怎么办?协议就是双方约定好的结构化的数据。

2026-04-23 21:23:00 388

原创 【Linux】Socket编程TCP

Command.hpp:命令类,⽤来执行命令,并获取结果。引入系统部分的线程池,进行简单的业务处理。

2026-04-20 22:06:46 448

原创 【Linux】Socket编程UDP

简单的回显服务器和客户端代码。

2026-04-19 21:33:50 230

原创 【Linux】网络基础概念

TCP/IP协议的本质是一种解决方案TCP/IP协议能分层,前提是因为问题们本身能分层端口号属于传输层协议内容;大小为2 字节、16 位整数;作用:标识主机内进程,让系统区分数据交由哪个程序处理;IP 地址 + 端口号:可唯一确定网络中一台主机的某个进程;同一时刻,一个端口号仅能被一个进程占用选 TCP:数据完整性 > 速度。适合文件、网页、邮件等不能出错的场景。选 UDP:速度 / 实时性 > 完整性。适合视频、语音、游戏等可容忍少量丢包的场景。

2026-04-19 20:37:06 417

原创 【Linux】线程互斥与同步

为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和 内存单元的数据相交换,由于只有一条指令,保证了原子性,即使是多处理器平台,访问内存的总线周 期也有先后,一个处理器上的交换指令执行时另一个处理器的交换指令只能等待总线周期。条件等待是线程间同步的一种手段,如果只有一个线程,条件不满足,一直等下去都不会满足, 所以必须要有一个线程通过某些操作,改变共享变量,使原先不满足的条件变得满足,并且友好 的通知等待在条件变量上的线程。但是后续再次调用,就没有问题了。

2026-04-04 16:22:58 393

原创 【Linux】线程概念

真正理解线程,就必须搞清楚,内核是如何进行资源划分的,根据代码理解。

2026-04-04 16:21:37 510

原创 【Linux】进程信号

捕捉信号信号处理的时间?进程从内核态返回用户态的时候,进行信号检查捕捉过程中如果需要使用自定义函数,OS要做身份切换。

2026-04-04 16:19:26 438

原创 【Linux】进程间通信

信号量的本质是一个计数器,用来描述临界资源中,资源数量的多少对资源的预定信号量本身就是共享资源,所以申请资源,计数器--,P操作。释放资源,计数器++,V操作。通过PV操作来完成对资源的预定机制二元信号量只有1或者0两态,就是互斥8. 内核是如何组织管理IPC资源的内核里有3 个全局的结构体数组共享内存shm_ids消息队列msg_ids信号量sem_ids所有IPC 都共用一个ipc_perm结构体,存放权限信息key_t key;// 用户指定的键值uid_t uid;// 属主 UID。

2026-03-14 20:58:40 409

原创 【Linux】库原理

静态链接就是把库中的.o进行合并,和上述过程⼀样所以链接其实就是将编译之后的所有目标文件连用到的一些静态库运行时库组合,拼装成⼀个独立的可执行文化。其中就包括地址修正,当所有模块组合在一起之后,链接器会根据 .o 文件或者静态库中的重定位表找到那些需要被重定位的函数全局变量,从而修正它们的地址。这其实就是静态链接的过程静态重定位 = 链接器给程序里的函数 / 变量 “分配最终的虚拟地址”,并把所有调用处的地址改成这个固定值静态链接的出现,提高了程序的模块化水平。

2026-02-25 15:03:20 931

原创 Linux文件系统

本文摘要: 本文系统介绍了磁盘存储结构与文件系统原理。首先阐述了磁盘物理结构,包括CHS三维寻址方式和LBA线性寻址方式及其转换方法。其次分析了文件系统的基本概念,重点说明"块"作为最小存取单位(通常4KB)、分区以柱面为单位划分、以及inode存储文件属性的机制。最后详细解析了ext2文件系统的结构,包括超级块、块组描述符、位图、inode表和数据块等功能模块,以及目录通过"文件名-inode号"映射实现文件访问的原理。文章通过对比物理寻址与逻辑寻址方式,揭示了操作

2026-01-25 18:21:55 663

原创 【Linux】基础IO

5 pathname: 要打开或创建的⽬标⽂件6 flags: 打开⽂件时,可以传⼊多个参数选项,⽤下⾯的⼀个或者多个常量进⾏“或”运算,构成flags。7 参数:8 O_RDONLY: 只读打开9 O_WRONLY: 只写打开10 O_RDWR : 读,写打开11 (这三个常量,必须指定⼀个且只能指定⼀个12 O_CREAT : 若⽂件不存在,则创建它。需要使⽤mode选项,来指明新⽂件的访问权限13 O_APPEND: 追加写14 返回值:15 成功:新打开的⽂件描述符。

2026-01-20 23:41:05 721

原创 MySQL用户管理

MySQL中的用户,都存储在系统数据库mysql的user表中。

2026-01-10 22:56:16 179

原创 MySQL索引

Page分为目录页和数据页。目录页只放各个下级Page的最小键值查找的时候,自定向下找,只需要加载部分目录页到内存,即可完成算法的整个查找过程,大大减少了IO次数。

2026-01-10 18:20:45 847

原创 MySQL视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。

2026-01-10 12:15:59 247

原创 MySQL事务管理

其中隔离级别越严格,安全性越高,但数据库的并发性能也就越低,往往需要在两者之间找一个平 衡点不可重复读的重点是修改和删除:同样的条件, 你读取过的数据,再次读取出来发现值不一样了幻读的重点在于新增:同样的条件, 第1次和第2次读出来的记录数不一样说明: mysql 默认的隔离级别是可重复读,一般情况下不要修改上面的例子可以看出,事务也有长短事务这样的概念。事务间互相影响,指的是事务在并行执行的 时候,即都没有commit的时候,影响会比较大。

2025-12-21 11:45:36 996

原创 MySQL内连和外连

外连接分为左外连接和右外连接。备注:前面学习的都是内连接。

2025-12-17 20:53:25 257

原创 MySQL复合查询(重要)

多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。返回多行记录的子查询。

2025-12-17 18:22:46 710

原创 MySQL内置函数

length函数返回字符串长度,以字节为单位。如果是多字节字符则计算多个字节数;如果是单字节字符则算作一个字节。比如:字母,数字算作一个字节,中文表示多个字节数 (utf-8中文算三个字节)

2025-12-14 11:56:11 787

原创 MySQL表的增删改查

用于筛选 “分组级数据”(比如:筛选平均工资 > 2000 的部门)。在select中使用group by 子句可以对指定列进行分组查询。:用于筛选 “行级数据”(比如:筛选工资 > 2000 的员工)。注:WHERE 条件中使用表达式 --(也可以用原始列,但通常配合聚合函数)。因为是先筛选出数据然后再排序。对应的值已经存在而导致插入失败。,只保留符合条件的行参与分组。_ 匹配严格的一个任意字符。,只保留符合条件的分组。

2025-12-13 17:30:39 981

原创 MySQL表的约束

可以看到a的值由原来的1变成00001,这就是zerofill属性的作用,如果宽度小于设定的宽度,自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。:当对应的字段不给值,自动的被系统触发,系统会从当前字段中已经有的最大值 +1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。默认值的生效:数据在插入的时候不给该字段赋值,就使用默认值。

2025-12-11 17:03:39 912

原创 MySQL数据类型

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的。该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些。:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节。字符串,L是可以存储的长度,单位为字符,最大长度值可以为255。: M指定显示长度,d指定小数位数,占用空间4个字节。

2025-12-09 21:12:12 1015

原创 MySQL表的操作

说明: 不同的存储引擎,创建表的文件不一样。

2025-12-08 20:40:56 248

原创 MySQL数据库操作

查看当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。说明: 对数据库的修改主要指的是修改数据库的字符集,校验规则。创建一个数据库,校验规则使用。创建一个数据库,校验规则使用。

2025-12-08 17:01:33 944

原创 【Linux】进程控制

/ 执行 sh -c "echo $MY_ENV":通过Shell解析环境变量// 自动从PATH找sh程序。

2025-12-06 19:52:12 821

原创 【Linux】进程概念(二)

由于每个不同质的虚 拟内存区域功能和内部机制都不同,因此一个进程使用多个vm_area_struct结构来分别表示不同类型的虚拟内存区域。每个进程只有一个mm_struct结构,在每个进程的task_struct结构中,有一个指向该进程的结构。每一个进程都会有自己独立的mm_struct,这样每一个进程都会有自己独立的地址空间才能互不干扰。这张图就显示了,当堆在添加数据扩展时因为堆是向上增长的,地址空间起始都被存在vm里,就不会发混乱。描述linux下进程的地址空间的所有的信息的结构体是。

2025-11-02 18:36:29 778 1

空空如也

空空如也

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

TA关注的人

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