- 博客(80)
- 收藏
- 关注
原创 从概念到实战:手把手带你吃透 MySQL 事务核心原理
那么在讲解完了上面的知识后,我们来总结一番:1.其中隔离级别越严格,安全性越高,数据库的并发性能也就越低,往往需要在两者之间找一个平衡点(可重复读就是)。2.不可重复读的重点是修改和删除:同样的条件,你读取过的数据,再次读取出来发现值不一样了;幻读的重点在于新增:同样的条件,第1次和第2次读出来的记录数不一样。3.说明:MySQL默认的隔离级别是可重复读,一般情况下不要修改。下面我们用一张图来看看各种隔离级别:上图就列举出了我们上面讲过的各个隔离级别它们会导致的问题。
2026-04-19 14:05:09
1505
58
原创 把查字典的智慧搬进数据库:零基础秒懂MySQL索引底层逻辑
在上一篇中我们着重讲了MySQL复合查询相关的知识,了解了一个复杂的sql语句该如何进行编写,那么今天这篇文章我们就要进入MySQL的一个核心模块:索引,通过索引大大提高了MySQL查询数据的效率。那么我们今天就来了解一下索引相关的知识,下面就跟我来一起看看吧。
2026-04-12 10:49:35
919
50
原创 从入门到进阶必修课:解锁 MySQL 复合查询的“超能力”
在上一篇文章中我们认识了MySQL中常用内置函数,并且之前我们之前的查询都是比较简单的一些查询,而在实际应用中查询肯定不会那么简单,所以今天我们就来讲解一下复合查询的相关知识,让大家对于MySQL查询的理解更上一层楼,下面我们一起来看看吧。
2026-04-06 13:48:58
573
72
原创 数据小白福音:一文吃透MySQL必备的常用内置函数
在上一篇文章中我们详细讲解了MySQL的基本查询相关的操作,内容还是挺多的,不过今天这篇文章我们就会轻松一点,在今天这篇文章中我们主要了解一下MySQL中常见的一些内置函数,看看它们都有什么作用,那么下面就跟我一起来看看吧。
2026-03-29 13:24:01
674
85
原创 告别小白!吃透 MySQL 基本查询,看这一篇就够了
在上一篇文章中,我们讲解了表的约束的相关知识,那么今天这篇文章我们就来详细讲解一下MySQL的基本查询方面的知识,深入探讨一下MySQL是如何通过语句来对数据进行查询的,下面我们一起来看看吧。其实MySQL的基本查询本质就是对表的增删查改,而对于这部分其实我们在前面的文章中就提京简单介绍过了,不过今天这篇文章我们是来详细讲解这部分的知识。而表的增删查改我们可以将其分为:Create(创建),Retrieve(读取),Update(更新),Delete(删除)这四个方面。
2026-03-16 13:33:42
803
60
原创 给数据“立规矩” —— MySQL 新手必学的表约束全指南
在上一篇文章中我们讲解了MySQL中的各种数据类型,那么正是因为有了各种数据类型,才会有今天我们要讲的表的约束相关知识,那么这中间到底是怎么回事呢?下面我们就一起来看看吧。
2026-03-08 11:02:18
680
86
原创 一文通关 MySQL 数据类型,打好高性能数据库的第一战!
在上一篇文章中,我们学习了库和表的相关操作,而在我们上一篇的讲解中,我们提到了在列名后面跟的是数据类型,但是对于MySQL中的数据类型我们现在还一知半解,那么今天这篇文章我们就来详细谈一谈MySQL中的数据类型。那么在详细讲解每种数据类型之前,我们先来看一下MySQL中都有哪些数据类型:上面这幅图中就展示了MySQL中常见的数据类型,可以看到MySQL中对于数据类型是由不同的分类的,那么下面我们就详细讲解上面的各种数据类型。
2026-03-02 13:09:43
1055
52
原创 从零敲开 MySQL 的大门:库与表的基础操作实战(保姆级入门指南)
那么今天这篇文章呢我们就要进入新的领域了,那就是:MySQL,俗话说" 万丈高楼平地起 ",想要玩转 MySQL,第一步当然是得给咱们的数据建个踏实的" 家 "。那么这篇文章我们就从零开始动手一起把 MySQL 最核心的底盘手艺——
2026-02-25 10:53:18
969
46
原创 IP 协议到底在干嘛?——从通信本质理解网络世界的运行逻辑
那么下面我们就来介绍一下:什么是分片?分片简单来讲就是将原IP报文的有效载荷分为多个部分,并且这里我们就要输出第二个结论:分片不是简单的对IP报文进行分片,而是要对每一片都添加IP报头。
2026-02-11 13:22:13
1797
87
原创 一文看懂 TCP 滑动窗口与拥塞控制的底层逻辑:数据如何在复杂网络中稳定传输
在上一篇文章中,我们已经对 TCP 协议有了一个初步认识,知道它是如何通过序号、确认应答以及重传机制来保证数据可靠传输的。不过,当真正开始思考 TCP 的工作过程时,一个问题很快就会浮现出来:既然数据一定要发,那到底该发多快呢?发得太慢,网络资源被白白浪费;发得太快,又可能瞬间把网络压垮。正是为了在这两者之间找到一个平衡点,TCP 设计了动态窗口和拥塞控制机制。它们并不会一开始就“全速前进”,而是通过不断试探和调整,逐步找到当前网络环境下最合适的发送节奏。
2026-02-02 10:11:15
1462
61
原创 初识 TCP 协议:从“听说过”到“真正认识它”,新手也能看懂的入门笔记
在我们的前面两篇文章中,我们从初识到深入的了解了应用层协议HTTP,那么我们在学习计算机网络的时候经常会听到TCP协议,而我们对 TCP 协议的印象一直停留在" 听说过 "的阶段:知道它很重要,也知道它和网络通信有关,但具体在做什么、为什么存在,却始终说不清楚。所以今天这篇文章就来带领大家重新认识TCP这个支撑互联网运行的重要协议。
2026-01-26 10:05:57
1615
98
原创 从初识到深入:一次完整的 HTTP 协议系统性理解之旅
在上一篇文章《初识 HTTP 协议》中,我们从整体视角认识了 HTTP 的基本概念、请求与响应的宏观结构,对浏览器与服务器之间的通信过程有了初步印象。然而,“知道它是什么”并不等同于“真正理解它是如何工作的”。本文将在此基础上进一步深入,从 HTTP 报文结构、请求方法、状态码、头字段以及通信细节等方面展开分析,逐步拆解一次 HTTP 请求在网络中的完整生命周期。希望通过系统性的梳理,将零散的知识点串联起来,帮助你从“初识 HTTP”走向“理解 HTTP”。
2026-01-20 10:08:25
1852
90
原创 写给初学者的 HTTP 协议入门指南:从原理到实践的全面认识
在网络通信的众多协议中,HTTP 是最常被接触、却又最容易被忽略的一个。我们每天通过浏览器、客户端或各类应用程序不断地向服务器发起 HTTP 请求,并接收对应的响应结果,但对这一过程的具体细节却往往缺乏系统性的认识。当一次 HTTP 请求被发出时,请求报文是如何组织的?服务器又是依据什么规则返回响应?连接在其中承担了怎样的角色?本文将从最基础的概念入手,围绕 HTTP 协议的核心组成和工作方式进行介绍,帮助大家建立对 HTTP 协议的初步理解,为后续深入学习相关内容奠定基础,下面跟我一起来看看吧。
2026-01-16 10:15:30
1575
59
原创 揭秘互联网的“第一道门”:初识 Socket 编程,亲手推开网络通信的奇妙世界
🔥❄️✨博主简介:前言:在上一篇文章中,我们沿着网络发展的长河,俯瞰了宏观的网络架构。然而,,掌握了地图并不等于真正开启了航行。今天,我们将正式踏入网络编程的实战疆域。作为开发者,我们要推开的第一扇大门,便是连接应用与网络的灵魂之桥——。接下来,请随我一起拨开云雾,深入探寻 Socket 的奥秘,听我慢慢道来。
2026-01-02 12:59:02
1041
91
原创 万物互联的起点:走进 Linux 网络的心脏,开启一场从零开始的底层探索之旅
在上面我们说协议就是一个"约定",但毕竟这种说法还是太笼统了,而要弄清楚到底什么是协议这个问题的答案,我们就要达成两个共识,前面是第一个共识,下面我们还要达成一个共识:一个问题:OS系统一般是用什么语言来写的呢?答案很明显,是用C语言写的,而这就是我们要达成的第二个共识。而有了上面的两个共识之后我们再来思考一个问题:协议可不只有我们上面介绍的TCP/IP这两种的,是有很多种的,那么OS要不要管理这些协议呢?
2025-12-28 11:21:03
2394
75
原创 手撕 Linux 信号量:从古老的 PV 原语到现代内核,极致简洁的同步美学
在前面,我们讲解了线程互斥和线程同步的相关内容,但是既然谈到了线程的互斥与同步,就不得不提信号量了,这也是线程的互斥和同步这部分内容中不可忽视的一部分,那么今天我们就来深入探讨一下信号量,下面我们来一起看看吧。
2025-12-22 11:39:30
963
37
原创 一文读懂 Linux 线程同步:了解同步原语的设计哲学与实现
我们可以想一下在生活中,有哪些场景是符合生产和消费的场景?例如:网上购物,去超市购物,在游戏中买皮肤等等,这些都是具有生产者和消费者的场景,那么下面我就用超市来举例。我们首先先思考一个问题:超市是生产者吗?我们经常会去超市购物,所以我们都知道超市并不是生产者,而是起到一个商品汇聚,商品派发,是一个中间场所。而真正的生产者我们想必也都能想到,那就是超市这些商品的供应商,所以:所以完整的生产者和消费者就如上图所示,
2025-12-22 11:39:28
912
66
原创 一文读懂 Linux 互斥锁:小白也能看懂的临界区保护指南,手把手教你彻底告别多线程数据“打架”
在前面的章节中,我们了解了什么是线程,以及如何通过pthread库所提供的函数来对线程进行操作,但是我们要了解的不止有这些,我们创建多线程是为了让它们协作帮助我们去完成任务。而今天及后面的章节我们就将目光聚焦在线程之间协作的方面,了解线程之间协作时会出现什么样的问题以及如何解决,下面就开始我们今天的内容。
2025-12-17 10:48:52
1404
63
原创 Linux 线程控制的内功心法:详解 pthread 库函数背后的底层逻辑,手把手教你掌握线程生命周期的“生杀大权”
通过上一篇的初识线程的相关内容,我们此时对于线程已经有了大致的了解,而我们今天这篇就要深入线程,了解关于线程控制的相关知识,在今天这篇中我们会看到很多进程身上的影子,那么下面就跟我来看看吧!!!
2025-12-15 11:06:33
1452
59
原创 告别进程的单打独斗,迈入线程的高效协同:一文带你推开Linux线程世界的大门
在上一篇中我们结束了Linux信号章节的全部内容,下面我们将进入新的篇章:Linux线程而今天的这篇文章的主要内容是初识线程,帮助我们来迈进线程的大门,对Linux中的线程有个大概的了解,便于我们对后续内容的讲解。
2025-12-07 10:45:13
995
69
原创 Linux信号捕捉全解析:深入原理与实战,掌控进程的生命节拍
🔥海棠蚀omo:个人主页 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》 ✨追光的人,终会光芒万丈博主简介:目录一.信号捕捉的流程二.周边知识2.1硬件中断2.2时钟中断2.3软中断2.3.1从内核角度见一见系统调用2.3.2系统调用号 + 虚拟地址空间 + 软中断2.4写时拷贝??缺页中断??2.5 Sigaction函数在讲解下面的知识前,想必大家心中有疑惑:为什么同样都是信号处理,怎么不
2025-12-03 13:43:33
1327
68
原创 Linux信号保存的核心:未决信号集与阻塞信号集——探秘内核如何实现信号的阻塞、暂存与派发
我们前面在讲解信号产生的时候,说到进程在收到信号时可能并不会立即处理,既然不会处理那就要将信号保存起来,我们当时只简单讲解了在进程的PCB中会有一个位图来保存信号。而我们今天就来详细探讨一下关于信号保存方面更为详细的知识。
2025-11-29 10:47:00
1472
51
原创 解读Linux进程的“摩尔斯电码”:信号产生的原理与实践,掌控进程的生死时速
🔥海棠蚀omo:个人主页 ❄️个人专栏:《初识数据结构》,《C++:从入门到实践》,《Linux:从零基础到实践》 ✨追光的人,终会光芒万丈博主简介:目录一.现实--信号概念1.1信号是什么?1.2为什么会有信号?二.将信号从现实映射到计算机中三.部分Linux系统中产生信号的方式四.对信号本质的朴素认识四.Linux中其他产生信号的方式4.1系统调用4.1.1 kill
2025-11-26 12:46:06
961
64
原创 解剖System V共享内存:一段共享内存的“生命轨迹”与每一字节的归宿
🔥海棠蚀omo❄️个人专栏✨追光的人,终会光芒万丈博主简介:上一篇我们讲了第一种进程间通信的方式:管道,而今天我们来讲第二种通信方式:System V,而在System V中,我们最需要掌握的就是其中共享内存的相关知识,下面跟着我来看看吧。
2025-11-22 09:30:00
3167
76
原创 管道如何连接进程?从基础原理到高级应用,构建你的进程通信全景视野
进程间通信,简称IPC,是指两个或多个进程之间进行数据交换信息传递或同步操作的机制。人与人之间交流沟通是在干什么?将进程间通信转换到人与人之间,换个问法相信大家就好理解多了,其实也就跟人与人之间交流沟通是很相似的。数据传输:⼀个进程需要将它的数据发送给另⼀个进程资源共享:多个进程之间共享同样的资源。通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进程终⽌时要通知⽗进程)。
2025-11-19 17:13:48
2673
53
原创 从ELF的沉默到进程的喧嚣:解读Linux中动态链接如何激活一个可执行文件的完整生命
通过这张图我们就与前面讲的内容给串联起来,在这幅图中左边就是虚拟地址空间,中间就是我们前面讲过的文件系统,大家要弄清楚这之间的各种关系。
2025-11-15 13:57:06
1876
61
原创 当你说“运行程序”时,操作系统到底看到了什么?——ELF文件结构深度解析
🔥海棠蚀omo❄️个人专栏✨追光的人,终会光芒万丈博主简介:我们在上一篇中详细讲了动静态库从制作到使用的各种细节,但是和动静态库相关联的不仅是上一篇的知识,还有动静态链接,而要说到动静态链接,就不得不了解一下ELF文件,所以我们今天就来好好聊聊ELF文件的各种细节。
2025-11-13 11:18:57
3057
58
原创 庖丁解牛:深入拆解Linux静态库与动态库——从制作到使用的核心技巧讲解
在讲解后面的知识前我们先要弄明白到底什么是库?简而言之,库是写好的现有的,成熟的,可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个⼈的代码都从零开始,因此库的存在意义⾮同寻常。在我们日常写C语言代码时,所包含的<stdio.h>,<string.h>等,其实就是库,或者严格来说是库的一部分,而为什么要有库的存在呢?
2025-11-11 13:13:17
1992
56
原创 深入理解Ext2:Linux文件系统的基石与它的设计哲学
这里我们随便创建一个文件,通过ls -li来查看文件的inode,可以看到我们新创建的文件inode非常小,通过比较可以看到在vda3分区中的inode和我们自己创建的分区中的inode还是有比较大的差异的,毕竟这些文件属于不同的分区。这个位图的道理和上面是一样的,同样将Inode Table中的每一个块都当作一个比特位,比特位的位置就是inode的位置,比特位的内容【0,1】,就表示对应的inode是否被占用,0就表示未被占用,1就表示被占用了。这样不就造成了很大的损失吗?
2025-11-08 11:19:43
2918
56
原创 Linux文件系统-从“物理盘片”到“逻辑结构”:文件系统如何为硬盘注入灵魂?
🔥海棠蚀omo❄️个人专栏✨追光的人,终会光芒万丈博主简介:从最初讲解文件到现在,我们谈论的都是我们在最初提到文件时,说到文件分为打开的文件和未打开的文件,而未打开的文件我们当时说它们在硬盘中,那么既然我们要讲解未打开的文件,就有必要先了解一下硬盘的相关知识,这样我们才能更好的去理解何为文件系统。
2025-11-05 13:07:02
1370
59
原创 Linux基础I/O-缓冲区:系统大厨的“万能传菜员”与它的效率魔法
缓冲区是内存空间的⼀部分。也就是说,在内存空间中预留了⼀定的存储空间,这些存储空间⽤来缓冲输⼊或输出的数据,这部分预留的空间就叫做缓冲区。缓冲区根据其对应的是输⼊设备还是输出设备,分为输⼊缓冲区和输出缓冲区。直接说缓冲区的概念比较晦涩,不太好理解,下面我们从另一个角度来理解缓冲区。二.为什么要有缓冲区?
2025-11-03 12:50:36
1829
55
原创 Linux基础I/O-打开新世界的大门:文件描述符的“分身术”与高级重定向
也就是"hello world",但是是真的向文件内核缓冲区中写入内容吗?答案不是的,这里write函数真正做的是将用户定义的缓冲区内部保存的数据。
2025-11-01 12:01:49
1462
35
原创 Linux基础I/O:C语言文件操作“黑话”指南:读懂文件描述符的摩斯电码
我们在背景知识中说过要想对文件的内容进行操作,那么首先要做的就是打开文件,所以说上面的“ > ”在底层实现中同样也是和上面的w一样,清空文件,在将内容写入到文件中,他们的底层实现都是通过系统调用实现的,这点下面我们就会讲到。当然呢,关于文件的操作不止有w和a,除了这俩还有上面的一些,这里我没有讲r,因为r就是读文件,没什么可讲的,并且它也不是我们讲的重点,而剩下的后面有+号的都是既可以读又可以写的方式,为什么这些我没有讲呢?但是当我们再次执行后查看文件中的内容,发现我们新增的内容没有了,这是怎么回事呢?
2025-10-30 11:44:38
1906
49
原创 Linux操作系统-进程的“夺舍”:程序替换如何清空内存、注入新魂?
这里我们要用到main函数的参数argv,也就是我们之前讲过的命令行参数,我们让arg指针指向argv的第二个数据,因为第一个数据是我们要执行的文件,后面才是要怎么执行,并将argv的第一个数据传给execv的第一个参数,之后将arg指向的从下标为1开始的数组传给第二个参数。这里我以execvpe为例,我们这次让子进程来执行我们自己写的程序,程序的内容就是打印出命令行参数和环境变量,程序的结果我们也看到了命令行参数和环境变量的内容,其中环境变量就是我们所传进去的,并且命令行参数正是arg数组中的内容。
2025-10-27 15:14:15
1636
55
原创 Linux操作系统-父进程的等待:一个关于回收与终结的故事
我们在学习C语言的时候相比都接触过位运算,我们这里将status右移8位,就可以将后8位移到前8位,这样对应退出码的1就落在了最低位,并将右移的结果和0xFF进行按位与,0xFF我们应该也都认识,就是每个比特位都是1的数,经过上面的计算我们就能得到我们想要的推出码了。我们上面说了int* status指向了一个int类型的数据,int类型的大小是4个字节,也就是32个比特位,我们不关心前16个比特位,只看后16个比特位,而在后16个比特位中,后8位表示退出状态,也就是退出码。
2025-10-23 12:38:50
1535
68
原创 Linux操作系统-深入fork与进程终止:揭秘进程的优雅终局
相信我们在日常写代码时也会设置不同退出码,0表示成功就不说了,有时我们程序运行失败了会用1,会用2等退出码,而这些原因我们可以自己去制定,就比如某个值在运行过程中经过判断==0,我们此时就return 1,那么失败的原因就是这个数==0,不是我们想要的结果,我就让它结束了。这种现象相信我们在日常写代码中是遇到过的,因为我们的误操作,导致某个指针变成了野指针,并且我们还去访问这个野指针中的内容,那么此时启动程序后,程序直接就崩了,那就是操作系统终止了进程,这种情况和上面的类似。
2025-10-20 16:28:31
1684
55
原创 Linux操作系统-教你如何正确认识:命令行参数及环境变量
答案就在上面,像上面的./mycmd,which等命令后面跟的一些选项,它们本质是字符串,可以以一定的方式传递给which等内部的“ main ”函数,在which内部实现的时候,就可以根据不同的选项进行判定,而判定的大概逻辑就和上面差不多,从而实现类似的功能,输出你想要的内容。在Linux中大部分命令是可执行程序,需要通过创建子进程来执行,但是有一部分命令,执行的时候,没有风险,就如上面的echo命令,就只是把内容打印出来而已,没什么风险,这类命令就需要bash自己执行,我们就把这类命令叫做内建命令!
2025-10-15 22:10:50
3211
59
原创 Linux操作系统-内核中的“权力游戏”:谁决定了哪个进程坐上CPU铁王座?
而上面的完整过程就叫做linux的O(1)调度队列,有了上面所有内容的铺垫,相信大家就能理解linux中进程调度的过程:通过active指针访问queue数组来调用进程,并且将调用过的进程链接到过期队列中,在活跃队列调用完后,交换活跃队列和过期队列的内容,接着重复上面的过程。的思想,5个整数160个比特位,前面140个对应的就是queue数组中的下标,而我们要想判断queue数组的某个位置是否为空,直接判断对应的比特位是0还是1即可,0代表当前位置为空,1表示不为空,这样就能提高一定的效率。
2025-10-13 21:22:58
1655
60
原创 Linux操作系统-教科书不会讲的细节:Linux进程状态的“深度表情”
那么此时就会拿运行状态的进程开刀,虽然进程处于运行状态,但是我们都知道,除去当前在cpu上运行的,其他的进程本质还是在后面等着的,那么就和上面的阻塞状态是一样的,所以同样会把处于运行状态的进程的代码和数据交换到swap分区中来腾出空间,此时的状态就称为。是不是一下感觉问题就严重了,当然一些无关紧要的数据丢了就丢了,但是那些很重要的数据一旦丢了后果是很严重的,造成的损失是很大的,我们总不能去赌这部分数据不重要吧,并且在这个过程中系统,进程,硬盘都没有做错,做的都是份内工作。
2025-10-01 21:32:02
1618
52
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅