- 博客(136)
- 收藏
- 关注
原创 MySQL初阶
本文主要介绍了MySQL数据库中的存储过程、变量类型和日志系统,重点阐述了数据库备份恢复机制和主从复制架构。存储过程是一组SQL语句集合,支持变量定义和流程控制。MySQL日志系统包括binlog(逻辑日志)、redolog(物理日志)等,其中binlog用于数据恢复。数据库备份分为逻辑备份(SQL语句)和物理备份(文件复制)。主从复制通过binlog同步实现数据一致性,支持读写分离、负载均衡和高可用性。文章还讨论了分库分表策略和CAP理论,指出分布式数据库需要在一致性、可用性和分区容错性之间权衡取舍,根据
2026-01-18 00:28:13
588
原创 Linux操作系统
本文摘要:文章系统讲解了操作系统进程管理的核心概念和技术。主要内容包括:1.进程本质是运行中的程序,包含PCB和资源;详细解析了fork/vfork创建进程的写时拷贝机制。2.进程终止的三种状态和exit/_exit的区别。3.进程等待的必要性(防止僵尸进程)及wait/waitpid方法。4.孤儿进程、守护进程等特殊进程的特性。5.进程替换(exec)原理。6.文件系统概念,包括文件描述符、重定向和"一切皆文件"设计思想。7.缓冲区的作用与实现。8.静态/动态链接库的区别及ELF文件格
2025-11-03 23:52:15
3809
原创 MySQL基础
本文介绍了MySQL数据库的基本概念与操作。首先说明了为什么需要数据库替代文件存储,包括安全性、查询效率、数据约束和原子性操作等优势。接着讲解了MySQL的基本操作流程:创建数据库(create database)、选择数据库(use)、创建表(create table)和数据操作(insert/select)等。文章还分类了SQL语句:DDL(结构操作)、DML(内容操作)和DCL(权限控制)。最后简要介绍了存储引擎的概念,指出InnoDB是MySQL最常用的存储引擎。全文以简明的方式呈现了MySQL的核
2025-10-29 14:20:29
965
原创 MySQL的开始,MySQL的安装
这篇博客介绍了MySQL数据库的安装和基本操作。主要内容包括:1.如何查看系统版本并安装MySQL(Ubuntu系统为例);2.启动MySQL服务和安全配置;3.数据库基础概念讲解(库和表的关系);4.常用MySQL命令如show databases、use database等;5.创建库和表的基本语法。文章还比较了MySQL变量声明与C/C++的区别,适合MySQL初学者快速入门。
2025-10-28 20:21:48
589
原创 C++复习
命名空间的代码实现,命名空间的用处(主要用来定义一个新的作用域,延伸记忆,using namespoce std;这个代码)嵌套命名空间,同一工程允许有相同的命名空间,编译器最后会进行合并usingnamespace可以把这个命名空间展开,但是作用域有相同的变量会出现冲突。2.缺省参数。
2025-10-21 23:24:08
1503
原创 操作系统问题总结
操作系统核心概念摘要 用户态与内核态:用户态权限有限,内核态可访问所有资源,类比银行取钱需通过接口而非直接进金库。 进程与线程: 进程是资源分配单位(PCB、内存管理、文件描述符表) 线程是CPU调度单位(共享进程资源,开销小) 进程切换需切换页表、CPU缓存,开销大;线程只需切换堆栈和寄存器 崩溃影响:进程独立,崩溃不影响其他进程;线程共享资源,一个线程崩溃会导致整个进程终止 多线程优势:实现并发执行,共享资源协同工作;劣势是需要加锁保证安全,创建开销较大 进程通信:管道(匿名/命名)、消息队列、共享内存
2025-10-12 22:34:51
923
原创 TCP协议的可靠性保障
摘要:TCP协议通过重传机制、滑动窗口和拥塞控制确保可靠传输。重传包括超时重传和快速重传;滑动窗口允许连续发送多个报文而不必等待单个确认,其大小由接收方缓冲区决定;拥塞控制通过慢启动、拥塞避免和快恢复算法动态调整发送速率,防止网络过载。这些机制共同保证了TCP在复杂网络环境下的可靠性和高效性。(149字)
2025-10-10 22:40:00
997
原创 网络TCP解析
本文主要介绍了TCP协议的关键特性及其通信机制。文章从宏观角度阐述了网络通信分层模型,重点分析了传输层的TCP和UDP协议。详细讲解了TCP如何通过序号、确认序号、超时重传等机制保证可靠性,深入解析了三次握手和四次挥手的过程及其丢包处理机制。同时介绍了socket编程中服务端和客户端的连接建立流程,以及连接关闭时的状态变化。文章最后指出TCP还涉及滑动窗口、流量控制等更多机制,为后续内容做铺垫。全文通过理论分析与实际编程相结合的方式,系统性地阐述了TCP协议的核心工作原理。
2025-10-09 23:48:36
1256
3
原创 C++知识汇总(6)
我们的C++学习完之后,想把以前的博客汇总成一篇,方便以后复习查看,所以写了这篇博客。在这其中,我们以后系统中学习的先描述在组织以及在我们的代码解耦和中常用的把我们的方法当做参数传递给一个类都让我们理解到了只是串联性,描述用结构体来,组织选用合适的结构体来,我们的学习都是贯穿始终,在学中用,用中学。实践与理论的结合让我们更好的理解知识!!!学完了继承多态,二叉搜索树,map和set,AVL树,红黑树,红黑树的封装,哈希表的底层,C++11新特性,异常,现在我们也迎来了C++的学习的一个尾声智能指针。
2025-10-04 21:39:46
459
原创 操作系统复习第二篇
本文概述了进程间通信方式(管道、消息队列、共享内存等)和线程同步机制。重点分析了不同锁的特性:互斥锁通过内核调度实现线程阻塞,适合长临界区;自旋锁在用户态自旋等待,适合短操作;读写锁区分读/写模式,提高读多写少场景性能;悲观锁先加锁再操作,乐观锁先操作后验证。同时讨论了生产者-消费者模型、死锁条件及避免方法,强调锁的选择需结合具体场景,平衡性能与正确性。代码示例展示了条件变量与互斥锁的配合使用。
2025-10-04 21:38:56
810
原创 操作系统复习问题总结
为了同时运行多个程序,就不能让软件直接去访问物理内存,防止数据覆盖,使每个进程都有自己的虚拟内存,每个进程都以为自己拥有整个内存,通过OS对进程的管理,让多个进程具有独立性,可以在同一机器上同时运行多个CPU。进程通过CPU的MMU内存管理单元实现从虚拟到物理的映射。操作系统通过内存分段和内存分页来管理,分段机制下,虚拟地址有段选择因子和段内偏移量组成重点介绍一下分页,操作系统把内存切分成4KB的页来进行管理,当进程通过MMU去查页表的时候没查到就会触发缺页中断,进入内核,分配物理内存,更新页表,恢复进程的
2025-10-01 15:31:06
656
原创 定长内存池
经过一年的学习,了解到操作系统是软件和硬件的管理者,用户访问的都是虚拟内存,不能直接去访问物理内存,申请内存需要向操作系统申请,操作系统不信任人类,所以它会有一些列系统调用的接口来让用户去申请内存,操作系统去管理,所以如果每次创建一个Int都是调系统调用申请内存,系统调用本身也是有消耗的,会消耗资源,为了快速的申请,减少消耗,malloc会提前申请一大块内存,以后再申请小块的内存空间,直接从这个大块内存中去申请,如果不够再去malloc,减少系统调用的次数。这样我们的定长内存池就设计完成了。
2025-09-17 15:32:47
1082
原创 2025年度总结
本文回顾了2023-2024年在计算机领域的学习历程,从C语言入门到Linux系统和网络协议的学习,总结了操作系统核心思想和网络协议要点。同时反思了个人成长中的不足,特别是读书习惯的缺失。作者提出未来将坚持每天阅读1小时,广泛涉猎各类书籍以提升认知,并强调要慎重交友、保持积极心态。在职业规划上,主张以市场需求为导向,通过项目实践提升技能。最后表达了用文字和影像记录生活、珍惜时光的人生态度,反复强调"读书"对个人成长的重要性。
2025-09-10 14:54:34
702
原创 多路转接介绍及代码实现
多路转接技术是为解决传统IO串行等待效率低下的问题而提出的。该技术通过操作系统提供的系统调用同时监控多个文件描述符,显著减少了等待时间。文章详细介绍了三种主要实现方案:select通过位图结构管理文件描述符,但存在文件数量限制和拷贝开销;poll采用结构体数组分离输入输出参数,解决了文件描述符管理问题;epoll通过红黑树和就绪队列机制,进一步优化了性能和可扩展性。这三种方案的核心思想都是通过减少等待时间来提高IO效率,其中epoll因其高效的回调机制和底层优化成为最优选择。文章还通过代码示例展示了非阻塞I
2025-09-05 23:05:44
1613
原创 网络通信IP细节
本文摘要: NAT技术通过将私有IP转换为公网IP解决IPv4不足问题,利用NAPT表实现内网与公网的通信。代理服务器分为正向代理(客户端请求统一转发)和反向代理(服务器响应统一调配),具有缓存、过滤和负载均衡功能。内网穿透使公网能访问内网端口,内网打洞则利用NAT特性实现直接通信。访问受限网站时,可通过加密报文经中间节点转发实现。
2025-09-02 23:24:48
1153
原创 网络层和数据链路层
我们知道的IP报文会进行转发,我的问题是,当我们到达我们的子网路由器入口的时候,我的IP报文里面有源IP和目的IP,但是我们如果要进行转发还需要知道我们的目的MAC地址,就比如下面这个IP报文,它的目的IP是IPX,它的源IP是我们的IPE,而我们的路由器则是R,我们已经到了子网的入口,下一步我要将我的IP报文交给我们的数据链路层。下面来说我们的32位IP地址,和我们的学号一样,学号是经过精心设计的,拿这你的学号就可以知道你是哪个专业,哪个院,哪个班,,就可以找到你这个人,身份证不也是一样吗?
2025-09-01 22:01:36
1454
原创 C++知识汇总(5)
我们的C++学习完之后,想把以前的博客汇总成一篇,方便以后复习查看,所以写了这篇博客。在这其中,我们以后系统中学习的先描述在组织以及在我们的代码解耦和中常用的把我们的方法当做参数传递给一个类都让我们理解到了只是串联性,描述用结构体来,组织选用合适的结构体来,我们的学习都是贯穿始终,在学中用,用中学。实践与理论的结合让我们更好的理解知识!!!右值:一般快要嘎了的值或被move的左值。(注:move类似于强转把左值强转为右值,但是这样做有风险,强转之后就要做好左值资源被拿走的准备)。
2025-08-29 15:39:30
830
原创 C++知识点汇总(3)
本文主要介绍了C++中的多态概念及其实现方式,以及二叉搜索树的相关知识。在多态部分,详细讲解了虚函数、虚函数重写、协变、析构函数重写等核心概念,并分析了多态的实现原理(虚表和虚函数指针)。在二叉搜索树部分,介绍了其基本概念、性能特点和实现方法,包括插入、查找、删除等操作的具体实现。最后还探讨了二叉搜索树在map和set等关联容器中的应用,通过实际代码示例展示了如何使用这些容器进行数据统计和查找。全文结合理论讲解和代码实践,帮助读者深入理解C++多态和二叉搜索树的实现原理与应用场景。
2025-08-28 22:13:14
882
原创 C++知识点汇总(2)
本文系统总结了C++中继承、容器实现和仿函数等核心概念。首先详细讲解了继承的定义、方式和派生类成员函数实现要点,包括多继承问题和虚继承解决方案。其次重点分析了vector和list容器的底层实现差异,通过模拟实现stack、queue和priority_queue展示了容器适配器的设计思路。最后介绍了仿函数的特化机制及其在优先级队列中的应用,并对比了vector和list在访问效率、插入删除性能等方面的优缺点。文章强调实践与理论结合的学习方法,通过代码示例帮助理解C++面向对象编程的关键技术。
2025-08-28 22:12:20
590
原创 C++知识点汇总(1)
本文总结了C++核心概念,包括类和对象、内存管理、STL等。重点介绍了构造函数、析构函数、拷贝构造等默认成员函数的特点和使用场景;讲解了运算符重载、友元、static修饰符等语法特性;分析了new/delete与malloc/free的区别及底层原理;最后演示了string和vector的常用接口实现,包括构造、迭代器、扩容等操作。文章通过实例代码展示了C++面向对象编程的核心思想,强调了编译器优化、内存管理、异常处理等关键知识点,为C++学习者提供了系统的知识框架和实践指导。
2025-08-27 13:50:20
902
原创 序列化和反序列化,守护进程的理解
本文介绍了网络通信中的序列化和反序列化概念,以及如何实现一个解耦的分布式计算系统。主要内容包括:1. 序列化/反序列化机制解决不同主机间的数据传输问题,通过约定好的协议格式实现;2. 采用OSI七层模型设计系统架构,包括应用层(计算模块)、表示层(协议解析)和会话层(网络通信);3. 实现TCP字节流传输中的完整报文判断,通过长度协议进行报文解析;4. 守护进程的概念,通过创建独立会话使服务器进程不受用户登录状态影响。系统采用模块化设计,各层通过回调函数实现解耦,展示了如何构建一个优雅可靠的分布式系统架构。
2025-08-27 13:47:11
1584
原创 Linux下TCPT通信
本文对比介绍了UDP和TCP通信的特性与实现方式。UDP是面向数据报、快速但不保证安全的通信协议,通过创建套接字实现全双工通信。TCP则是面向字节流的可靠传输协议,需经过套接字创建、绑定、监听和建立连接等步骤。TCP通过缓冲区实现全双工通信,由协议自行控制数据传输。文章还指出应用层数据传输需进行序列化和反序列化,以解决跨平台兼容性问题,同时保持协议的可扩展性。通过类比餐馆服务形象说明了TCP的服务端监听与连接建立机制。
2025-08-26 14:32:47
1158
原创 Linux网络套接字
摘要: 网络通信本质是进程间通信,通过IP+端口锁定目标进程。UDP协议实现简单,无需连接保障,只需创建套接字、绑定端口、收发数据。服务端需绑定固定端口(不绑定IP以支持多IP访问),客户端由系统隐式分配端口。代码示例展示了UDP服务端与客户端的实现:服务端初始化套接字并循环读取客户端消息后响应,客户端发送消息并接收服务端回显。通信时需注意网络字节序(大端)及地址结构体(如sockaddr_in)的填充,其设计类似多态,通过前16位区分类型。Linux"一切皆文件"的理念贯穿网络通信,套
2025-08-25 22:22:07
1107
原创 Linux网络启程
文章摘要:本文介绍了网络编程的基础知识和计算机网络的发展背景。从局域网到广域网的演进,阐述了数据传输过程中面临的距离、寻址、可靠性等问题,进而引出分层协议的必要性。重点讲解了OSI七层协议的分层设计思想,包括数据链路层的碰撞检测、网络层的寻址功能、传输层的可靠性保障以及应用层的数据应用。同时解释了TCP/IP协议栈的命名由来,分析了IP地址和MAC地址在数据传输中的作用差异,以及路由器转发数据包的工作原理。全文揭示了网络通信的本质是协议栈支撑下的进程间通信,通过分层协议实现了不同系统间的互联互通。
2025-08-24 22:08:35
1061
原创 Linux中断
本文主要探讨Linux系统中的中断机制及其与操作系统内核运作的关系。首先解释了信号处理的时机是在内核态返回用户态时,通过中断向量表进行硬件中断处理。详细分析了硬件中断和时钟中断的工作原理,指出操作系统本质上是基于中断运行的软件,通过时钟中断定期执行内核代码。重点阐述了进程时间片的工作原理,即每次时钟中断触发时减少时间片计数,归零时切换进程。最后总结操作系统作为软硬件管理者,其代码执行依赖于CPU的中断机制,从而实现了进程调度等核心功能。全文揭示了中断机制在操作系统运行中的基础性作用。
2025-08-21 19:45:44
891
原创 TCP网络IO的代码实现
摘要:本文介绍了TCP网络通信的实现方法,重点讲解了服务端和客户端的编程要点。服务端需要创建套接字、绑定IP和端口、开启监听,并实现InetAddr类进行地址转换;客户端则需创建套接字并连接服务器。文章还指出了常见错误,如未释放连接导致泄漏,以及单线程实现的局限性,为后续改进为多线程实现提供了思路。
2025-08-19 22:27:41
311
原创 Linux一些代码解析
本文通过代码解析介绍了线程、线程池和网络通信的实现原理。首先构建了一个面向对象的线程类,通过解耦创建和运行过程降低代码耦合性。然后基于线程类实现了线程池,采用任务队列和条件变量实现线程调度,并运用单例模式确保唯一实例。在网络通信部分,展示了TCP服务端的实现流程,包括套接字创建、绑定和监听。最后通过内部类技巧解决了静态函数访问成员函数的问题。这些代码实现加深了对多线程编程和网络通信本质的理解,体现了"先描述再组织"的编程思想。
2025-08-18 22:59:19
903
原创 Linux信号保存
Linux信号机制解析:从产生到处理的完整过程 信号产生本质由操作系统实现,通过硬件中断(如除零错误、野指针)或外设输入(如键盘)触发。信号处理分为递达(执行处理动作)、未决(产生到递达间的状态)和阻塞(主动屏蔽信号)。内核通过task_struct中的三张位图(block、pending、handler)管理信号状态,分别记录阻塞状态、是否产生信号及处理方法。关键点在于:1)所有信号操作必须通过操作系统修改内核数据;2)阻塞与忽略不同,前者阻止递达,后者是处理方式;3)core终止会生成调试文件,term
2025-08-15 20:14:24
1036
原创 Linux信号产生
本文摘要:文章围绕Linux进程通信和信号处理展开讨论。首先回顾了进程间通信机制,包括共享内存、消息队列等,强调其高效性和生命周期特性。重点分析了临界资源的保护方式,如互斥和同步机制,以及信号量的原子操作原理。随后详细介绍了Linux信号处理机制,涵盖信号产生方式(键盘、系统调用、软件条件等)、不可屏蔽信号的作用,以及alarm系统调用的实现原理。特别讲解了硬件异常导致进程崩溃的机制,包括CPU寄存器溢出标志位检测和操作系统对异常进程的处理流程。文章通过多态设计思想类比了内核维护IPC资源的实现方式,体现了
2025-08-14 19:33:14
821
原创 Linux信号量和信号
本文介绍了进程间通信的共享内存机制、并发编程中的临界资源保护以及信号量与信号的相关概念。共享内存作为高效的IPC方式,其生命周期随内核,但需手动保证同步互斥。并发编程中,临界资源的保护通过互斥和同步实现,确保数据安全。信号量作为资源计数器,通过预定机制控制执行流对共享资源的访问,其中二元信号量实现互斥,多元信号量实现同步。信号则是进程间通信的另一种机制,与信号量无关,涉及信号产生、保存和处理三个阶段,信号处理可由操作系统或用户自定义。文章还讨论了信号的本质,即通过位图在进程的task_struct中记录信号
2025-08-13 23:44:54
979
原创 Linux下命名管道和共享内存
本文介绍了三种进程间通信方式:匿名管道、命名管道和共享内存。匿名管道适用于有血缘关系的进程通信,通过继承文件描述符实现内存数据传递;命名管道通过创建特殊文件使无血缘关系进程通信,其特性与匿名管道类似。共享内存通过页表映射让不同进程访问同一物理内存区域,需注意内存泄漏问题。文章还提供了命名管道的客户端和服务端代码示例,并详细说明了相关系统调用接口的使用方法,如shmget、shmat等。三种方式各有特点,但都遵循"让不同进程看到同一份资源"的通信本质。
2025-08-12 23:16:19
1409
原创 Linux下管道的实现
在上一篇博客我们知道了动态库是怎么样进行链接的,我们知道我们的.o文件,可执行文件都是我们的ELF格式的文件,是ELF文件,里面就有ELF header,程序头表,节,还有节头表,我们链接器编译的时候需要合并节,节头表告诉编译器怎么合并,当加载进内存的时候又会根据程序头表,程序头表告诉节怎么合并成我们的段,我们ELF header里面有我们程序的入口,但是不和我们想象中的先程序我们的main函数,而是先去执行我们的_start,它里面会为我们实现动态库的地址重定向。
2025-08-09 23:52:53
548
原创 Linux下动态库链接的详细过程
本文介绍了ELF文件的结构和动态链接机制。ELF文件包含四个部分:ELF头、程序头表、节和节头表,在链接和加载过程中会进行节合并。静态库在链接时合并到可执行文件中,而动态库需要加载到内存共享区并通过页表映射。动态库采用平坦编址模式,通过全局偏移变量表(GOT)实现函数调用。进程执行时,动态链接器负责解析和加载依赖库。此外,文章还简要提及了进程间通信的几种方式,包括匿名管道、命名管道和共享内存,这些方法都旨在让不同进程访问同一份资源。
2025-08-07 23:25:57
989
原创 Linux下ELF文件的介绍
本文介绍了ELF文件的结构与加载过程。ELF文件由ELF头、程序头表、节头表和节四部分组成,其中ELF头用于定位文件各部分。在编译链接过程中,.o文件通过合并和地址重定位形成可执行文件,静态链接将函数地址填充完整。ELF文件在磁盘中已具有逻辑地址,加载到内存时通过程序头表将段映射到虚拟地址空间,建立页表映射关系,但实际物理内存分配需在调用时完成。整个过程体现了从源代码到可执行程序的完整转换机制。
2025-08-06 17:39:58
1112
原创 Linux动静态库的理解
本文回顾了文件系统的基本概念,包括磁盘分区、块组结构、inode管理等内容。重点介绍了两种库(静态库和动态库)的创建与使用:静态库(.a)将代码直接合并到可执行程序中,而动态库(.so)在运行时加载。创建库需要将源文件编译为.o目标文件,再用不同工具打包。使用时需指定库路径(-L)和库名(-l),头文件通过-I指定路径。动态库需安装到系统默认路径(如/lib64)才能被正确加载,静态库则无需此步骤。文中通过add函数的示例演示了库的创建和链接过程,强调了动态库需要生成位置无关码的特点。
2025-08-05 18:27:54
886
原创 Linux文件系统
本文主要探讨了文件系统的磁盘管理机制,分为三部分内容:首先回顾了文件系统的基本概念,包括磁盘分区、格式化和挂载的必要性;其次详细解析了挂载的底层原理,从文件系统独立性、统一访问模型等技术视角阐述其不可替代性;最后对比了软硬链接的特性与使用场景。文章通过类比和实例说明操作系统如何通过分区、格式化、挂载三个步骤将物理存储转化为可用空间,并强调了挂载在连接文件系统和目录树中的关键作用。同时指出软硬链接的差异及应用限制,如硬链接引用计数机制和目录硬链接的环路风险。全文揭示了操作系统管理磁盘和文件的底层逻辑与技术实现
2025-08-04 10:54:07
1181
原创 Linux文件系统
摘要:本文介绍了磁盘管理和文件系统的基本原理。磁盘以512字节的扇区为单位,通过磁头寻址实现数据访问。文件系统将磁盘分区管理,采用属性和内容分离存储的方式,其中文件属性存储在inode中。磁盘被格式化为块组结构,包含超级块、块组描述符、位图、inode表和数据块等关键部分。文件操作通过路径解析实现,操作系统生成目录树优化访问效率。删除文件时仅标记块位图而非实际擦除数据,便于恢复。目录本质也是文件,存储文件名与inode的映射关系。整个系统通过层次化结构实现对磁盘空间的高效管理。
2025-08-03 21:32:15
971
原创 Linux文件以及缓冲区的了解
摘要: 本文探讨了Linux系统中"一切皆文件"的设计哲学及其实现机制。通过将硬件设备抽象为文件,Linux使用统一的文件接口(如read/write)管理各类硬件,简化操作并提高效率。文章详细解析了FILE结构体中的函数指针机制,说明如何通过统一接口实现不同硬件的差异化操作。同时深入分析了缓冲区的设计原理,包括全缓冲、行缓冲和无缓冲三种模式,并通过代码示例演示了缓冲区刷新策略对文件写入的影响。此外,还比较了语言级缓冲区(如C语言的FILE)与内核缓冲区的区别,解释了为何需要双重缓冲机制
2025-08-02 00:28:08
737
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅