自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux文件系统

但是这是磁盘的物理结构(硬件)那么逻辑结构呢???逻辑结构是通过数组实现的任意一个扇区都有下标每个盘面2w个扇区每个盘面有 50 个磁道每个磁道 400 个扇区那么我们就可以开一个2w空间的数组每400个空间为一个磁道每50个磁道为一个盘面这样我们磁盘的物理结构和逻辑结构实现了映射那么磁盘的空间这么大是怎么管理的呢我们假设这个磁盘有200个g那么怎么管理答案是分治200个g我们可以分别分成50个4个g去管理如果4个g也觉得太大难管理怎么办???

2025-11-21 09:33:40 909

原创 Linux 文件重定向

文件描述符对应的分配规则是什么?从0下标开始,寻找最小的没有没使用的数组位置,它的下标就是新文件的文件描述符比如这个地方我们把原本默认开启下标1 stdout关闭掉因此再创建文件log.txt是从1的位置开始创建因此这个时候write1不再是向stdout写入而是向log.txt这个文件写入当然这种做法太麻烦我还要先关闭于是便有了一个函数也就是dup2。

2025-11-14 15:23:00 348

原创 Linux 文件缓冲区

我们要理解文件缓冲区 我们先来看一段代码。

2025-11-14 15:22:28 1180

原创 Linux 简易shell实现

因此我们不能 putenv(arv[1]);而要用putenv(myenv);我们要注意 我们putenv本质上是把要putenv字符串的地址传过去了。因为你下次输入指令的时候argv的值会变。但是环境变量存的指针还是指向argv。

2025-11-10 20:19:35 208

原创 Linux 文件

我们以一个操作系统的文件函数为例 其它是差不多的open函数const char *pathname(必选)作用:指定要打开 / 创建的文件路径(绝对路径或相对路径)。关键说明: 支持绝对路径(如 /home/user/test.txt)和相对路径(如 test.txt、data/log.csv);若路径是符号链接,默认会跟随链接指向的真实文件(可通过 O_NOFOLLOW 标志禁用此行为);路径长度不能超过系统限制(Linux 中默认最大路径长度为 PATH_MAX,通常是 4096 字节)

2025-11-10 20:19:03 1184

原创 进程的替换

它是指一个正在运行的进程,用新程序的代码段、数据段、堆栈段等替换自身原有内容,但进程 ID(PID)、打开的文件描述符、进程优先级等核心属性保持不变的操作。简单来说,进程替换不是 “创建新进程”,而是 “给现有进程换一套‘执行内容’”—— 就像同一个人(PID 不变)换了一套完全不同的工作任务(程序代码),但身份信息、持有的工具(打开的文件)不变。

2025-10-29 21:28:33 969

原创 Linux 进程退出和进程控制

进程退出大致可以分为三种情况代码运行完毕,结果正确代码运行完毕,结果不正确代码异常终止像我们日常c语言的return 0就属于代码运行完毕 结果正确如果返回的是其他值 那么可能就是代码运行完毕,结果不正确exit _exit 和 return的区别return 在函数内 return后程序继续进行但是exit和_exit在程序结束后就停止进行了exit():是标准库函数(属于 C 标准库),声明在 <stdlib.h> 中。

2025-10-29 21:28:13 957

原创 Linux 进程地址空间

页表会对不同的区域有其权限字段 比如说字符常量区 页表描述权限的字段就没有写的访问权限。这也是为什么上面那个代码运行出来两个id的值不同但是地址相同。当这个进程再跑的时候 这个进程的页表地址覆盖掉cr3的地址。这个属于进程的硬件上下文 进程结束其数据会打包带走的。那么进程如果这个进程重新排队后怎么找到页表呢?我们思考之前没有解答的一个问题的一个问题。有一个cr3的寄存器 存放着页表的地址。包括我们之前看到的很经典的一张图也是。就是为什么id可以是两个值?那么这个地方是什么地址?有什么好处 或者说为什么呢。

2025-10-14 23:13:17 768

原创 Linux 进程概念

基本概念课本概念:程序的一个执行实例,正在执行的程序等内核观点:担当分配系统资源(CPU时间,内存)的实体描述进程-PCB进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。课本上称之为PCB),Linux操作系统下的PCB是的一种在Linux中描述进程的结构体叫做。是Linux内核的一种数据结构,它会被装载到RAM(内存里并且包含着进程的信息内容分类标示符描述本进程的唯一标示符,用来区别其他进程。状态任务状态,退出代码,退出信号等。

2025-10-12 20:01:47 928

原创 Linux 进程状态

Linux进程的主要态度分为。

2025-10-10 08:17:10 970

原创 Linux gdb

gdb(GNU Debugger)是一款命令行调试工具,主要用于定位和修复程序中的错误。它支持设置断点、单步执行代码、查看变量值、检查内存状态等功能,能帮助开发者追踪程序执行流程,找到崩溃、逻辑错误等问题,广泛适用于 C、C++ 等语言的程序调试。

2025-10-10 08:16:34 633

原创 MySql 事务(2)

在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多并发问题,如脏读,幻读,不可重复读等,我们上面为了做实验方便,用的就是这个隔离性。:该隔离级别是大多数数据库的默认的隔离级别(不是MySQL默认的)。它满足了隔离的简单定义一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读,即一个事务执行时,如果多次select, 可能得到不同的结果。: 这是MySQL。

2025-10-09 07:49:17 721

原创 MySql 索引(2)

InnoDB 采用聚簇索引(Clustered Index) 作为核心存储结构,所有数据最终都存储在聚簇索引的叶子节点中。其他索引(如单列索引、联合索引)均为非聚簇索引(Secondary Index,二级索引),其叶子节点仅存储 “索引键值” 和 “聚簇索引的主键值”(而非整行数据)。这就导致了常规查询的 “痛点”——回表(Table Lookup): 当查询使用非聚簇索引时,数据库先通过非聚簇索引找到对应的 “主键值”;再用 “主键值” 去聚簇索引中查找完整的行数据(即 “回表”);

2025-10-09 07:48:34 712

原创 MySql 用户管理

于是我们可以通过myself用户查看ly_centos数据库下的EMP这个表了。这个时候我们就发现myself这个账号就无法访问ly_centos这个数据库了。但是如果要查看所有内容,我们需要赋予一些权限(这个后面会有介绍)代表本系统中的所有数据库的所有对象(表,视图,存储过程等)注意:如果发现赋权限后,没有生效,执行如下指令。如果用户存在,赋予权限的同时修改密码。表示这个用户可以从哪个主机登陆,如果是。如果该用户不存在,就是创建用户。中的用户,都存储在系统数据库。创建的用户我们是可以登录的。

2025-10-08 12:30:45 329

原创 MySql 事务(1)

MySQL事务深度解析:从ACID原理到实战应用。文章系统讲解了MySQL事务的ACID特性(原子性、一致性、隔离性、持久性)及其实现机制,重点分析了InnoDB引擎如何通过undolog和redolog保证数据可靠性。通过电商下单案例,展示了事务在实际业务中的应用场景,并演示了手动控制事务的多种方式(begin/commit/rollback/savepoint)。文章还对比了不同隔离级别解决的问题(脏读/不可重复读/幻读),特别指出InnoDB在可重复读级别下通过Next-Key Lock解决幻读的特性

2025-10-08 12:30:07 609

原创 MySql 视图

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

2025-10-07 12:55:30 154

原创 C++ 二分算法(3)

而原长度 len = right - left + 1,显然 right - mid < right - left + 1(因为 right - mid ≤ right - left)。因此: new_len = right - mid ≤ right - left(因为 mid ≥ left → right - mid ≤ right - left)。由于 mid < right(原 right),新长度 mid - left + 1 < right - left + 1(原长度),

2025-10-07 12:52:22 1794

原创 C++ 二分算法(2)

left>right此时 [left,right]这个区间就不存在 所有所有的区间都被遍历了。C++ 二分算法(1)和(2)的两个方法的区别无非就是一个是开区间 一个是闭区间。但是如果是闭区间(left,right) 当left和right什么关系的时候。停止条件 :left>right 区间:[left,right]且left和right的范围始终是target可能的取值范围。且left和right的范围始终是target可能的取值范围。当left 和 right 有一端是mid的情况就可能发生。

2025-10-06 12:56:36 883

原创 C++ 二分算法(1)

mid重新计算即可此时 我们判断。

2025-10-06 12:55:43 1169

原创 MySql 内外连接

内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。语法:备注:前面学习的都是内连接。

2025-09-10 23:24:01 259

原创 MySql索引(1)

MySQL 索引:让数据查询快起来的「快捷方式」大家平时用 MySQL 查数据时,有没有遇到过这种情况:一张表存了几十万条用户数据,想查某个用户的信息,结果等了好几秒才出来?但有时候同样的表,查数据又快得像 “闪电”—— 这背后的关键,很可能就是 “索引” 在起作用。今天就用大白话跟大家聊聊:MySQL 索引到底是啥?它为啥能让查询变快?咱们该怎么用它?

2025-09-10 23:23:18 1069

原创 MySql 复合查询

与 SELECT 结合:表示返回所有符合条件的记录,默认情况下 SELECT 即隐含 ALL 行为(与 SELECT DISTINCT 相对,DISTINCT 会去除重复记录,而 ALL 会保留所有记录,包括重复项)。它只能与单个值进行比较 ,当等号右边是子查询时,子查询必须只返回一行数据,否则会报错。IN:用于判断某个值是否在一个指定的列表或者子查询结果集中,列表或子查询结果可以包含多个值。号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含。的所有员工的工资高的员工的姓名、工资和部门号。

2025-08-24 23:13:45 100

原创 Linux 开发工具 (2)

我们看这些代码可以知道1.make指令正常只能执行一次2.make指令在执行一次之后 改变过依赖文件 可以再执行一遍3.make指令会根据逻辑关系 自行推测执行顺序4.make指令如果不指定确定的 默认是makefile文件的第一个指令make指令一般情况下只能执行一次因为没必要执行两次 两次执行的结果是一样的但是如果执行第一遍之后 依赖文件内容改变了 第二次执行结果不一样 所以此时make指令就可以执行第二次如果我们希望一个指令不管有没有文件更新都可以再次执行就可以加一个.PHONY。

2025-08-21 17:33:47 426

原创 MySql 特殊函数

查看‘2025-8-21’和‘2025-9-4’中间隔了多少天。把‘2021-2-3 12:23:34’这个时刻截断成日期。查看‘2021-2-3 12:23:34’时刻两天后的时间。查看‘2021-2-3 12:23:34’时刻两天前的时间。但是在一些环境下我们希望我们的密码是不能直接显示出来的。我们发现我们插入的代码是可以显示出来的。对12.34和-12.34向上取整。对12.34和-12.34向下取整。当我们查找的时候也不能直接查找。生成一个0到1的的随机浮点数。查看-123的绝对值。

2025-08-21 17:33:19 292

原创 MySql 表的约束

使用 LAST_INSERT_ID() 函数 LAST_INSERT_ID() 函数返回最近生成的自增值,不过它返回的是当前会话中最后插入操作生成的自增值,而不是表的下一个自增值。当为表中的某个列设置了自增长属性后,无需手动为该列赋值,MySQL 会自动为每一条新插入的记录分配一个比上一条记录该列值大 1 的数值。唯一键是 MySQL 中的一种约束机制,用于确保表中指定列(或列组合)的值具有唯一性,即同一列中不会出现重复的值。我们发现当我们一个字段不插入值的时候 其插入的是这个字段的default的值。

2025-08-19 17:07:56 683

原创 MySql基本查询

如果比较的双方都是 NULL,NULL <=> NULL 的结果为 TRUE(1)。如果一方是 NULL,另一方是具体的值,NULL <=> 具体值 的结果为 FALSE(0)当SELECT中只有聚合函数且无GROUP BY时,HAVING可以单独使用(此时默认整个表为一个分组)。_(下划线):是 MySQL 中的单字符通配符,它表示匹配任意一个字符。WHERE在GROUP BY之前执行,先筛选行再分组,是常见用法。我们发现order by后面是可以加取的别名的和where不一样的。

2025-08-19 17:07:05 1152

原创 MySql 表的操作

MySQL 的存储引擎是决定表如何存储和处理数据的底层技术实现,相当于表的 "数据处理器"。我们可以成功看到我们把原本的students2这个表的名字改成了students3了。当然这个地方我们不显示写字符集 排序规则 存储引擎 也会生成环境下默认的。不同存储引擎创建出来的表在linux下的文件个数和数量都不一样。比如这个地方我们就可以查看原先创建的students2这个表。添加新的字段 原先数据的该字段部分为NULL。我们来看看我们插入的结果。我们再来看看下面这些插入。我们来看修改完成后的结果。

2025-08-09 21:38:36 461

原创 MySql 数据类型

我们再来看看decimal和float的区别我们发现这里明明插入的数明明是合法的但是float却出现了精度缺失而decimal却依然准确因此我们可以总结float和decimal的区别了。

2025-08-09 21:37:58 1188

原创 MySql 库的操作

比如: 中文常用的utf8或utf8mb4 英文常用的latin1 它就像一本字典,定义了哪些文字可以被存储,以及每个文字对应的二进制编码。同一个字符集可以有多个排序规则,比如utf8_general_ci(不区分大小写)和utf8_bin(区分大小写,按二进制值比较)。我们可以通过这个文件对数据库进行操作 但是这种做法是危险的 是不推荐的!是在字符集基础上的进一步规则,规定了文字如何比较和排序。我们接下来创建一个我们自己设置字符集和排序规则的数据库。创建出来的字符集和排序规则就是默认的字符集和排序规则。

2025-08-07 18:24:23 398

原创 C++ 智能指针模拟实现(纯代码)

关于这些指针的介绍 详情参考。

2025-07-17 00:11:35 219

原创 C++ 智能指针

摘要:本文深入解析C++四种智能指针的设计理念与应用场景。auto_ptr因静默转移所有权问题已被弃用;unique_ptr严格独占资源,支持移动语义;shared_ptr通过引用计数实现资源共享,但需注意循环引用问题;weak_ptr作为弱引用可解决循环引用问题。文章详细介绍了各指针的创建方式、操作特性及典型使用场景,并特别强调了循环引用的产生原理与解决方案,为合理选择智能指针提供了实践指导。(149字)

2025-07-17 00:11:18 1087

原创 C++ 特殊类设计

如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取。文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。所以这种情况使用懒汉模式(就是说不管你将来用不用,程序启动时就创建一个唯一的。直接把赋值重载和拷贝构造禁调就好了!

2025-07-16 00:08:02 167

原创 C++ 类型转换

C++类型转换安全机制解析 本文对比分析了C语言强制类型转换的潜在风险,重点介绍了C++提供的四种类型转换操作符:1) static_cast用于基本类型转换和安全上行转换;2) dynamic_cast通过运行时检查确保继承体系中的安全转换;3) reinterpret_cast用于底层二进制重解释(高风险);4) const_cast用于修改类型限定符。文章特别强调dynamic_cast的运行时类型检查机制,以及mutable和volatile关键字在特殊场景下的应用。通过具体代码示例,展示了各转换操

2025-07-16 00:07:34 859

原创 C++ 11 (1)

我们在书写代码的时候可以通过{}进行初始化我们发现无论是自定义类型还是内置类型都可以通过{}初始化 但是要注意本质上{}是多参数的隐式类型转换会产生临时变量 临时变量具有常性 用普通对象接受会发生权限放大不合法也会自动调用自定义类型的构造函数我们也可以不用写= 但是最好还是写着 这样可读性高。

2025-07-14 11:00:00 866

原创 C++ 11(2)

在 C++ 泛型编程中,“处理任意数量、任意类型的参数” 是一个常见需求。传统模板只能固定参数数量和类型,面对可变场景时往往需要大量重载,代码冗余且扩展性差。而 C++11 引入的可变模板参数(Variadic Templates) 彻底解决了这一问题,它允许模板接受 “任意数量、任意类型” 的参数,为泛型编程提供了极大的灵活性。一、什么是可变模板参数?

2025-07-14 10:00:00 807

原创 Linux 开发工具(1)

g++ -c 是编译 C++ 程序时的常用命令组合,主要用于将源代码转换为目标文件(object file)也就是机器能识别的二进制编码,但不进行链接操作。像这样 我们不仅可以查看我们自己生成的a.out文件所依赖的动态库 同时也可以查看 一些指令所依赖的动态库 毕竟linux里面一切皆文件嘛!我们发现 无论是cpp文件还是说cpp预处理后的文件还是说编译后的文件 我们都可以用-c。如果是动态库 就是我们把我们要printf的内容去到这个动态库里面处理。我们的机器上一般会默认安装动态库 不会安装静态库。

2025-05-29 21:21:34 719

原创 C++ RB_Tree

这种平衡策略被称为 "弱平衡",相较于严格平衡的 AVL 树,它允许节点间的高度差不超过两倍,从而减少了旋转操作的频率,提升了动态数据操作的效率。这个 "黑色高度" 的一致性,保证了树的最长路径不超过最短路径的 2 倍(因为红色节点不能连续出现,最长路径 = 黑色高度 + 红色节点数,而红色节点数≤黑色高度)。任何红色节点的左右子节点必须为黑色,防止出现 "红 - 红" 相邻的情况,这是维持平衡的关键约束。这里的叶子节点指的是 NIL 空节点(外部节点),所有真实节点的叶子都指向这些黑色哨兵节点。

2025-05-29 21:21:02 438

原创 Linux 工具

我们平时下载软件基本都是到应用下载 那么应用商店里面本质上存放的是什么?本质上存放的是都是每个软件的下载链接那么同样我们linux里面也可以下载软件那么我们首先要下载软件 我们要检查网络是否连接。

2025-05-06 14:27:18 848

原创 C++ Avl_Tree

AVL树本质上是在搜索二叉树的情况下改造的搜索二叉树的缺点是 最坏的时候效率太低容易演变成链表AVL树对搜索二叉树的这个痛点进行了改造解决方案就是旋转通过旋转AVL树可以做到左右每个子树高度可以不超过1要了解旋转 我们首先要了解平衡因子。

2025-05-06 14:26:46 846

原创 C++ 蓄水池抽样算法

概率都是最后代码奉上。

2025-04-22 16:38:18 629

算法领域蓄水池抽样算法解析:数据流随机采样方法及其概率计算详解

内容概要:蓄水池抽样算法是一种用于从大量数据流中随机抽取固定数量样本的有效算法。该算法的核心思想是:当遇到第i个元素时,以一定的概率决定是否用该元素替换当前样本集中的某个元素。具体来说,在遍历数据流的过程中,前 samp 个元素直接进入样本集,之后对于每个新元素,以 samp/i 的概率替换样本集中已有元素。随着 i 的增加,元素被保留的概率逐渐减小,但所有元素最终出现在样本集中的概率相等。; 适合人群:对算法设计与分析有一定了解,尤其是对概率算法感兴趣的计算机科学专业学生或工程师。; 使用场景及目标:①需要从海量数据中随机抽取固定数量样本的场景;②确保每个元素被选中的概率相同,以保证样本的代表性和随机性;③适用于数据流处理、大数据分析等领域。; 阅读建议:由于蓄水池抽样算法涉及概率计算和动态更新样本集,建议读者在理解基本概念的基础上,结合实例进行模拟练习,加深对算法机制的理解。同时,可以研究不同变种的蓄水池抽样算法,以应对更复杂的实际问题。

2025-05-29

.菱形继承(虚继承)可视化

.菱形继承(虚继承)可视化

2025-05-29

【数据结构与算法】红黑树变色与旋转

内容概要:本文档简要介绍了红黑树(RB_Tree)中叔节点(uncle)的不同情况及其对树结构操作的影响。红黑树是一种自平衡二叉查找树,它通过特定的着色规则(节点颜色为红色或黑色)来确保树的高度接近对数级别,从而保证插入、删除和查找操作的时间复杂度。文档指出当叔节点为红色时,它会影响树的重新着色和旋转策略;当叔节点为黑色并且是空值(NULL),这里的NULL仅用于验证节点是否属于红黑树,而不实际参与到旋转操作中;当叔节点为黑色且不是空值时,则需要根据具体情况进行不同的调整操作以维持红黑树性质。; 适合人群:计算机科学专业学生、数据结构与算法爱好者以及从事软件开发并对高效数据存储结构有兴趣的人士。; 使用场景及目标:①理解红黑树中不同情况下叔节点的角色和作用;②掌握红黑树维护平衡性的基本方法,如着色和旋转规则;③能够正确处理NULL节点在红黑树算法实现中的特殊意义。; 阅读建议:在学习过程中应结合具体的例子进行理解,可以尝试手动模拟红黑树的插入、删除操作,注意观察不同情况下叔节点的变化及其对整个树结构的影响。同时,对于NULL节点的理解不要局限于一般意义上的空指针,而要认识到它在红黑树算法中的独特含义。

2025-05-29

.AVLTree可视化

.AVLTree可视化

2025-05-29

.单继承和多继承可视化

.单继承和多继承可视化

2025-05-29

.菱形继承(非虚继承)

.菱形继承(非虚继承)

2025-05-29

空空如也

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

TA关注的人

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