- 博客(47)
- 收藏
- 关注
原创 Linux线程概念与控制
在一个程序里的执行路线就是线程,线程是“一个进程的内部序列”。一切进程至少有一个线程线程在进程的内部运行,本质是在进程地址空间运行每一个线程都是一个执行流,都是共享内存地址,每一个执行流都对应一个函数,它们都各自独立但是又各自共享,在Pthread动态库中又会有各自的栈空间。
2026-10-21 23:16:02
152
原创 Linux进程的信号
软中断是内核实现的一种软件级别的中断机制,属于中断下半部机制。硬件中断是硬件触发;软中断是内核代码主动标记、软件触发。目的:把硬件中断上半部里非紧急、耗时一点的工作剥离出来,延后执行,缩短硬件中断关闭的时间。硬件中断:外设→CPU,异步硬件事件,上半部softirq:内核软件标记,软件触发,属于中断下半部时钟中断是一种硬件中断。主板上的硬件定时器(PIT / HPET / APIC Timer),到设定时间就向 CPU 发送硬件中断请求,CPU 收到中断,进入内核的中断上下文执行时钟中断处理函数。
2026-10-15 22:49:36
118
原创 进程间的通信
预先创建若干个子进程,放在池中,重复复用,用来处理任务;不用每次来任务都fork创建进程、任务结束再wait销毁。fork开销大,频繁创建销毁进程耗 CPU;进程池提前建好,循环复用,降低开销。mkfifo:创建 FIFO 管道文件open:打开管道(具有阻塞特性):读写数据,行为和匿名管道一致close:关闭 fdunlink:删除磁盘上的管道文件对比匿名管道 pipe:匿名管道只需要pipe()一次拿到两个 fd,没有 mkfifo、open、unlink。
2026-10-07 16:22:58
252
原创 Linux中动静态库的理解
a(Linux),本质是一堆.o目标文件的归档包(ar打包)。编译链接阶段,静态库里面的代码会直接复制拷贝到你的可执行程序中。程序运行时不再依赖静态库文件。优点:运行独立,不需要外部库;部署简单。缺点:可执行文件体积大;多个程序同时使用会有多份代码副本,浪费内存;库更新后程序必须重新编译。.so(Linux)。链接阶段只记录符号信息,不拷贝代码;等到程序运行的时候,操作系统才把动态库加载进内存,多个进程可以共享同一份库代码。优点:程序体积小;内存节省;库升级替换,程序不用重新编译。
2026-09-25 22:23:22
418
原创 Linux中文件系统
扇区:硬件最小单元(磁盘硬件)块:文件系统分配单元(Linux 格式化后)inode:文件信息索引,不存文件内容磁盘→分区→ext2 文件系统→多个块组,是层层包含的关系。目录是特殊文件:目录的 inode 指向 Data Block,数据块里面存目录项(文件名 + inode 号)。查找文件路径时:先在目录的数据块通过文件名拿到 inode 号,再去 inode 表读取 inode,再用 inode 的 pointer 找到文件数据块。文件名存在目录的数据块,inode 里面没有文件名。
2026-09-14 22:56:25
184
原创 Linux中基础IO和文件认识
带 f 是 C 标准库封装,有缓冲、区分文本二进制、跨平台,操作 FILE*;不带 f 是操作系统原生系统调用,操作文件描述符 fd,无库缓冲,Unix/Linux 专用。fprintf:格式化后直接输出到 FILE * 文件流;做格式化 + IOsnprintf:格式化输出到内存字符串,只做字符串拼装,完全不做 IO;可以搭配 fwrite/fputs,也可以搭配底层 write 系统调用。内核没有格式化能力,格式化逻辑全部在 C 标准库。
2026-08-31 23:09:47
242
原创 进程的控制
使用fork()创建的子进程执行和父进程相同的程序,如果想和父进程执行的程序不相同,子进程就调用exec函数可以执行另外程序,当进程执行exec调用另外一个程序,那么该进程的用户地址空间和代码数据就会被替换,从新程序启动进程,调用exec函数的程序并不会创建进程,所以进程的pid是不变的。进程终止就是释放系统资源,就是释放进程申请的相关内核数据结构和对应的数据和代码。• 否则,操作系统会根据该参数,将⼦进程的退出信息反馈给⽗进程。证明了没有创建新的进程,俩个文件的进程pid始终是相同的。
2026-08-30 15:23:04
189
原创 进程的初步认识
操作系统是管理电脑 / 手机所有硬件、软件的系统级基础软件,是硬件和各类应用软件之间的桥梁。没有操作系统,CPU、内存、硬盘、屏幕、键盘这些硬件无法协同工作,微信、浏览器、游戏等软件也没法运行。计算机管理硬件1. 描述起来,⽤struct结构体2. 组织起来,⽤链表或其他⾼效的数据结fork()是 Linux C 语言创建子进程的核心系统调用,头文件<unistd.h>。作用:调用一次,返回两次。操作系统以调用进程(父进程)为模板,完整复制出一个全新子进程。
2026-08-08 21:53:57
204
原创 计算机网络基础
1. TCP(传输控制协议)面向连接、可靠传输协议,通信前建立专属连接,传输全程校验、重传、保序,保证数据完整无差错送达。2. UDP(用户数据报协议)无连接、不可靠传输协议,不用提前建立连接,直接发数据包,无校验重传机制,速度快但可能丢包、乱序。对比维度TCPUDP连接特性面向连接(通信前握手,结束挥手)无连接,发完即走,不维持会话可靠性可靠:不丢包、不乱序、无重复不可靠:可能丢包、乱序、重复到达流量 / 拥塞控制有滑动窗口、拥塞避免机制无,发送方想发多快就发多快差错处理。
2026-07-19 17:19:54
360
原创 MySQL中的复合查询和索引
不同的Page,在 MySQL 中,都是 16KB ,使用 因为有主键的问题, prev 和 next 构成双向链表 MySQL 会默认按照主键给我们的数据进行排序,从上面的Page内数据记录可以看 出,数据是有序且彼此关联的。内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连 接,也是在开发过程中使用的最多的连接查询。目录页的本质也是页,普通页中存的数据是用户数据,而目录页中存的数据是普通页的地址。显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。
2026-05-15 15:29:00
393
原创 MySQL中的函数
在 date 中添加日期或时间<br>interval 后的数值单位可以是:year minute second day。在 date 中减去日期或时间<br>interval 后的数值单位可以是:year minute second day。ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值。conv(number,进制数1,进制数2)把数据Number从进制数1转换成进制数2。返回 substring 在 string 中出现的位置,没有返回 0。
2026-05-10 15:08:54
357
原创 MySQL表的约束
真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。
2026-04-29 22:21:44
758
原创 MySQL数据类型
而且出于效率考 虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535 个;而且出于效率 考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占 用3个字节],如果超出(4,2)范围,可能不能插入,也有的按照四舍五入的显示数据,不指明类型就是有符号。
2026-04-28 22:27:57
394
原创 MySQL的基础认识
mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径。DDL【data definition language】数据定义语言,用来维护存储数据的结构。character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准。collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。DML中又单独分了一个DQL,数据查询语言,代表指令: select。(查看库中表的个数),本质上是一个有组织的、可共享的数据集合。
2026-04-27 16:05:02
335
原创 Shop商城系统的测试报告
本项目是基于 ShopXO 开源商城系统 进行二次开发的 B2C 电商平台后台管理系统,旨在为平台运营人员提供稳定、易用的后台管理能力,支撑商品、用户、订单等核心业务的日常运营与维护工作。系统采用 PHP + MySQL + Nginx 的经典架构,前端基于轻量模板引擎实现,具备模块化、可扩展的特点。后台管理模块提供了完整的权限控制体系,支持多角色、多用户操作,确保不同岗位的运营人员仅能访问其职责范围内的功能。
2026-04-24 22:37:31
448
原创 性能测试的认识
当性能测试环境确定以后,通常选取业务模型中的重要业务做基准测试,对 被测系统施加⼀定压⼒,从⽽获取被测系统在单⽤⼾运⾏情况下的各项性能指标,为多⽤⼾并发 测试和混合场景测试等提供参考依据。⼀般在真实环境、特定负载条件下,通过⼯具模拟实际软件系统的运⾏及其操作,同时监控性能各项 指标,最后对测试结果进⾏分析来确定系统的性能情况。随着系统并发⽤ ⼾增加,系统吞吐量开始呈线性增⻓,系统性能进⼊了线性增⻓区间。当并发⽤⼾较少,系统吞吐量低,系统响应时间较短,我们认为系统处于空闲区间。
2026-04-24 16:48:29
366
原创 博客系统测试报告
本项目为一款Web业务管理系统项目业务包括:登录系统:保障用户在使用正常的账号和密码时能够正常登录,用户信息的验证,登录完成后查找用户的信息是否正确。博客首页:检查博客菜单模块,以便更快的了解和使用该系统进行内容的存储,以及在提交内容之后的列表页,能够快速查询以往提交的信息内容,方便以后的使用和提取信息。编辑博客:正常的输入内容查看是否能够正确提交信息,在输入内容的过程中防止提交失败,或者,内容书写错误,以及内容信息查找不到。
2026-04-23 22:43:27
390
原创 自动化测试的实施
(1):登录状态下:编辑博客页面正常打开、正常填写博客能提交成功、异常填写提交失败。(2)、异常登录:账号为空/密码为空、不为空:账号错误/密码错误。(1)、正常登录:账号:zhangsan,密码:123456。driver.find_element():查找元素。(2):未登录状态下-弹窗提示登录-进入登录页面。(2):未登录状态:弹窗提示登录-进入登录页面。(1):个人信息模块、菜单模块、博客列表模块。driver.get():是可以打开网页。模块:登录、博客详情页、编辑博客。click():点击。
2026-04-12 22:10:26
253
原创 对软件测试进行分类
软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度 加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试⼯作进⾏更好的执⾏和管理测试 的分类⽅法。
2026-04-06 11:24:16
373
原创 测试用例的认识
测试⼈员接到需求之后,要对需求进⾏分析和验证,从合理的需求中进⼀步分析细化需求,从细化的 需求中找出测试点,根据这些测试点再去设计测试⽤例。2.检查程序是否“未做其应该做的”仅是成功的⼀半,测试的另⼀半是检查程序是否“做了其不应该 做的”。进行测试,用较少的用例覆盖最大的因素组合空间。概念:测试用例是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境,操作步骤,测试数据,预期结果。基于需求的设计⽅法也是总的设计测试⽤例的⽅法,在⼯作中,我们需要参考需求⽂档/产品规格说明 书来设计测试⽤例。
2026-04-01 15:36:45
540
原创 测试中BUG的认识
bug概念:定义:⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障 (fault),这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错 误。准确的来说:1. 当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误。2. 当需求规格说明书没有提到的功能,判断标准以最终⽤⼾为准:当程序没有实现其最终⽤⼾合理 预期的功能要求时,就是软件错误。
2026-03-30 21:22:49
763
原创 测试的理论和认识
在企业中经常会有两种需求:一种是用户需求,一种是软件需求用户需求:可以简单理解为甲⽅提出的需求,如果没有甲⽅,那么就是终端⽤⼾使⽤产品时必须要完成的任务。软件需求:该需求会详细描述开发⼈员必须实现的软件功能。软件需求是测试⼈员进⾏测试⼯ 作的基本依据。
2026-03-26 22:13:12
335
原创 Linux的权限
在最前面的十个字符中,第一个字符是文件类型,其余就是按三个分隔开,前三个是文件拥有者权限,中间三个是所属组的权限,后面三个是other的权限。◦ 写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;◦ 读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;◦ 执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;• 超级⽤⼾的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”。• ⽂件和⽂件⽬录的所有者所在的组的⽤⼾:g---Group。• ⽂件和⽂件⽬录的所有者:u---User。
2026-03-10 21:25:29
356
原创 Linux指令认识
•-F在每个⽂件名后附上⼀个字符以说明该⽂件的类型,“*”表⽰可执⾏的普通⽂件;“@”表⽰符号链接;功能:less与more类似,但使⽤less可以随意浏览⽂件,⽽more仅能向前移动,却不能向后移动,⽽ 且less在查看之前不会加载整个⽂件。使用ls -al列出所有目录和文件的详细信息,其中以‘.’开头的文件是隐藏文件,开头以'd'开头的是目录,以'-'开头的是文件。功能:对于目录,该命令列出该目录下所有的文件和目录,对于文件,将列出文件名以及其他信息。•-d将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。
2026-03-08 22:02:19
418
原创 动态内存管理
当原来指针指向的地址块后面的地址已经被分配,或者后面空闲地址的大小不够时,会重新开辟新的地址,将原地址块中的数据复制到新地址块中,然后会自动释放。3.柔性数组成员的结构体可以用malloc函数进行内存的动态分配,并且分配的内存应该大于结构体的大小,以适应柔性数组的大小。2:若原内存空间不够大,就在堆空间上另找一个合适大小的空间重新开辟,这样函数返回的就是一块新的内存地址。返回值为调整之后的内存起始地址,该函数会在调整原内存空间大小的基础上,会将原来的数据移到新的内存空间。
2026-03-08 20:59:11
194
原创 红黑树的理解
分析:因为p,u都是红色,g是黑色,把p,u变黑,左子树各增加一个黑色节点,g再变红,相当于保持g所在子树路径的黑色节点数量不变,同时解决了c,p连续红节点的问题,需要继续往上更新,因为g是红色如果g的父亲还是红色,那么还需要继续处理,如果g的父亲是黑色,则结束,如果g的父亲为空节点,那么就让g变黑。c为红,p为红,g为⿊,u不存在或者u存在且为⿊,u不存在,则c⼀定是新增结点,u存在且为⿊,则 c⼀定不是新增,c之前是⿊⾊的,是在c的⼦树中插⼊,符合情况1,变⾊将c从⿊⾊变成红⾊,更新来的。
2026-03-08 11:35:34
488
原创 AVL树的理解
旋转核⼼步骤,因为10<b子树的值<15,将b变成10的右子树,10变成15的左子树,15变成这棵树的根,符合搜索树的规则,也同时控制了平衡,同时这棵树的高度恢复到了插入之前的h+2,符合旋转的原则,如果插入之前10整棵树的局部子树,旋转后不会再影响上一层,插入结束。AVL树是最先发明的平衡查找二叉树,AVL是一棵空树,或者具备下列性质的二叉搜索树,它的左右子树都是AVL树,且左右子树的高度差不超过1,AVL树是一颗高度平衡的二叉搜索树,通过控制高度差控制平衡。1:更新后parent的平衡因子==0。
2026-01-02 15:52:50
597
原创 set和map容器的使用
注意:不会告诉你“到底有没有插入”,需要后续手动比较 size 或 count。multiset和set的使用完全类似,只不过multiset支持数据冗余。在C++中容器被分为序列式容器和关联式容器两大类,它们的核心区别在于。若键已存在,不会覆盖旧值,也不会报错,只是告诉你“没插进去”。其中如果find相同的值就会返回二叉搜索树第一个插入的值。如果等价键已存在,指向已存在的那个元素。传迭代器 → 删指定位置,返回下一位置;传键值 → 删等价元素,返回 0/1;传区间 → 批量删除,返回下一位置。
2025-12-23 14:05:01
393
原创 二叉搜素树的理解
用 BST 实现有序的哈希表替代品,支持按 key 范围遍历、前缀查找等(Java 的 TreeMap、C++ 的 map 就是红黑树实现的 key/value 结构)。只关心某个变量名是否已声明,不需要存类型信息时,用 key-only BST 即可。输入英文后一次性拿到翻译。2. 把N结点的⽗亲对应孩⼦指针指向N的右孩⼦,直接删除N结点。3. 把N结点的⽗亲对应孩⼦指针指向N的左孩⼦,直接删除N结点。1.把N节点的父亲对应孩子指针指向空节点,直接删除N。,因为这两个结点中任意⼀个,放到N的 位置,都。
2025-12-09 21:43:27
896
原创 STL的理解
string类中的函数体系string的初始化和构造string的遍历字符串和打印函数sort的使用string的插入和删除string 的扩容分割字符串string 的直接给值vector的实现
2025-11-17 17:02:32
195
原创 内存对象管理和模板
1. 调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对 象空间的申请 2. 在申请的空间上执行N次构造函数 delete[]的原理 1. 在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理 2. 调用operator delete[]释放空间,实际在operator delete[]中调用operator delete来释 放空间。函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。
2025-11-03 21:46:13
698
原创 类和对象的理解
class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或 者成员函数。public:void Init(int n=4)//初始化函数");exit(1);capacity=n;top=0;void push(int m)//插入函数x[top++]=m;void Top()//取栈顶元素private:int main()
2025-09-15 22:03:52
777
原创 树的理解和创作
结构:树都有一个特殊节点(根节点),根节点没有前驱节点,除根节点之外,其他n-1个节点被分成M个互不相交的集合,都由根节点连接出去形成子树,每个子树都有前驱节点和后继节点。大堆:最上层的那个节点永远比其他子节点的数大,而且由最上层所分下来的子树的根永远比叶子的数值要大,父亲节点永远大于儿子节点。双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;如上图:A是B的父节点。孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;兄弟节点:具有相同父节点的节点互称为兄弟节点;
2025-09-15 22:03:16
634
原创 数据结构的理解
链表的结构就像火车一样,每一个车厢都是一块独立的空间可以用来存储数据,在链表中称之为节点,不像顺序表一样是申请一块连续的空间,链表的每个节点都是单独申请的一块空间,可以任意的增加和删除。函数运行时所需要的栈空间(存储参数,局部变量,寄存器信息)在编译期间都是已经确定好的,因此空间复杂度主要通过函数在运行时显示申请的额外空间确定的。栈:栈是一种特殊的线性表,其只允许在固定的一段进行插入或删除,先插入进去的数据是栈底,后进入的数据是栈顶,栈中的数据遵循。函数调用了N次开辟了N个栈帧的空间,空间复杂度为O(N)
2025-06-05 14:16:24
700
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1