- 博客(66)
- 收藏
- 关注
原创 Linux网络--8、NAT,代理,网络穿透
(3)缓存加速:反向代理服务器可以缓存后端Web服务器的响应内容,对于重复的请求,它可以直接从缓存中返回响应,⽽⽆需再次向后端服务器发起请求。(1)从应⽤上讲, NAT设备是⽹络基础设备之⼀, 解决的是IP不⾜的问题. 代理服务器则是更贴近具体应⽤, ⽐如通过代理服务器进⾏翻墙, 另外像迅游这样的加速器, 也是使⽤代理服务器。反向代理服务器是⼀种⽹络架构模式,其作为Web服务器的前置服务器,接收来⾃客⼾端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客⼾端。
2025-11-02 11:38:27
981
原创 Linux网络--7、数据链路层
前面我们已经认识到用户间的数据由网络转发时,会在应用层进行序列化包装,再经由传输层进行流量控制,拥塞控制包装给网络层,网络层确定目标主机ip和port包装好就可以在网络中传输了。那么数据报具体是怎么在路由器间转发的?为什么网络层有切片和报文大小限制这一切的源头--数据链路层MAC帧!
2025-11-01 13:43:47
816
原创 Linux网络--6、网络层
基础概念中我们提到IP地址分为两个部分:网络号和主机号•⽹络号: 保证相互连接的两个⽹段具有不同的标识;•主机号: 同⼀⽹段内, 主机之间具有相同的⽹络号, 但是必须有不同的主机号;通过合理设置主机号和⽹络号, 就可以保证在相互连接的⽹络中, 每台主机的IP地址都不相同.•有⼀种技术叫做DHCP, 能够⾃动的给⼦⽹内新增主机节点分配IP地址, 避免了⼿动管理IP的不便.•⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.
2025-10-18 14:18:19
949
原创 Linux网络--5、传输层协议
之前我们介绍了UDP和TCP的代码使用和部分特性,今天我们正式从理论学习传输层这两个关键的协议。当我们在应用层完成对data的包装协议化,报文就进入到传输层进行传输,如何保证报文传输的稳定,安全,高效?
2025-10-06 14:14:29
661
原创 Linux网络--4、应用层协议Http
在浏览器上对于一个网站的访问我们可以看到这样一个格式的网址请求URL(网址定位符),今天我们就了解其中的应用层协议http。
2025-10-01 00:00:00
615
原创 Docker--架构篇
应用服务和数据库服务共用一台服务器2.2原因出现在互联网早期,访问量比较小,单机足以满足需求2.3原理图应用服务和数据库分离引入负载均衡,应用服务以集群方式运行将数据库读写操作分散到不同节点,数据库服务器搭建主从集群,一主一从,多主多从,主机负责写,从机负责读引入缓存服务器,实行冷热数据分离,将热点数据缓存在缓存服务器中,每次访问先从缓存中寻找,从而达到快速响应拆分数据库数据,数据库数据分布式存储、处理和查询,分布式数据库架构按照业务来划分应用服务,使单个应用职责更清晰相互之间可以独立迭代。
2025-09-04 00:00:00
1233
原创 CMake命令篇--1、简单基本代码运行(hello world)
一个写好的代码运行需要通过配置文件进行编译链接形成可执行程序,这些工作开始由我们自己手动配置,但当项目工程数量增加时,手写就显得不方便,而且兼容性很差CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
2025-09-03 12:00:13
421
原创 Mysql系列--11、使用c/c++访问mysql服务
前面我们已经学习并练习了本地命令行形式的sql语句的使用,可在以后开发中我们一般不会直接命令行操作数据库,今天我们认识如何在自己的代码中调用指令对数据库进CURD操作。
2025-08-29 19:57:26
1371
原创 Mysql系列--9、事务
事务是一组DML语句组成,本质为多个sql语句组合成一个集合,这些语句逻辑上相关,执行时要么全部成功要么全部失败,是一个整体。事务主要用来处理操作量大,复杂度高的数据mysql中仅Innode存储引擎支持,Myisam等不支持。
2025-08-29 11:33:11
1174
原创 Mysql系列--10、用户管理
我们可以看出其实对用户的操作,本质也是在user表中进行增删改查,所以本质也是对表的操作,所以以上命令也可以使用sql语句(insert,drop,update)进行修改,但操作麻烦不如上面的指令。
2025-08-29 07:30:00
329
原创 Protocol Buffer(Protobuf)
依赖⽣成的接⼝,将编译⽣成的头⽂件包含进我们的代码中,实现对 .proto ⽂件中定义的字段进⾏设置set和获取get(一般省略get,直接写字段名),和对 message 对象进⾏序列化和反序列化。你可以定义数据的结构,然后使⽤特殊⽣成的源代码轻松的在各种数据流中使⽤各种语⾔进⾏编写和读取结构数据。你甚⾄可以更新数据结构,⽽不破坏由旧数据结构编译的已部署程序。Protocol Buffers 是 Google 的⼀种语⾔⽆关、平台⽆关、可扩展的序列化结构数据的⽅法,它可⽤于(数据)通信协议、数据存储等。
2025-08-26 10:38:57
1121
原创 Linux网络--3、序列化
协议是⼀种 "约定". socket api的接⼝, 在读写数据时, 都是按 "字符串" 的⽅式来发送接收的. 如果我们要传输⼀些 "结构化的数据" 怎么办呢?我们可以通过定制结构化的类对象或者结构体,在传输时利用序列化传输到网络,在另一台主机按照相同的约定反序列化出数据,完成结构化数据传输!
2025-08-26 03:00:00
355
原创 Mysql系列--8、索引
1.叶子节点全部用链表连接的原因:(1)B+树的特点(2)我们希望进行范围查找2.矮胖型的树状结构,使找到目标数据只需要更少的Page,IO次数更少!3.其他数据结构为什么不是最优的优化结构?(1)链表--线性遍历,O(n)(2)二叉搜索树--退化问题,可能退化成为线性结构(3)AVL&&红黑树--虽然是平衡或者近似平衡,但是毕竟是二叉结构,相比较多阶B+,意味着树整体过高,大家都是自顶向下找,层高越低,意味着系统与硬盘更少的IO Page交互(4)Hash--
2025-08-25 18:54:15
931
原创 Mysql系列--7、表的内外连接
利用where子句对两种表形成的笛卡尔积进行筛选,称为。若设计多张表的联合查询,将左侧表的数据完全显示,称为。若设计多张表的联合查询,将左侧表的数据完全显示,称为。
2025-08-25 16:24:36
248
原创 Mysql系列--5、复合查询练习
使用上文引进的oracl 9i经典表个scott作为练习对象。今天我们使用前面的查询方式综合练习复杂查询的流程。介绍三个关键字 ,in,all,any。二、总结(本文重点没有之一)的上级领导的编号和姓名(
2025-08-17 17:54:55
485
原创 Linux网络--2.2、TCP接口
本文介绍了TCP服务器端的封装实现过程,包括创建服务器类、建立socket连接、绑定IP与端口、监听请求以及处理客户端连接等关键步骤。文章详细说明了TCP与UDP的差异,重点讲解了accept接口的工作原理和多版本服务端实现方案:单进程测试版、多进程版(通过fork创建子进程处理请求)、多线程版(使用结构体传递参数)以及线程池版(适合短任务处理)。同时提供了客户端实现示例,展示了TCP通信的基本流程。通过对比不同版本的服务端实现,帮助读者理解TCP服务器在不同场景下的优化策略。
2025-08-12 12:31:48
1052
原创 Mysql系列--5、表的基本查询(上)
前面我们已经成功创建了带有约束的表结构,那么本文我们就Create(创建), Retrieve(读取),Update(更新),Delete(删除)2.以及在一些特定情况下使用3.注意指令中的[ ]表示该块内容可以省略,mysql忽略大小写。
2025-08-10 22:03:01
871
原创 Linux网络--2.1、UDP接口
该接口的第一个参数表示网络协议家族,可以选择的选择选项有很多,其中包括AF_UNIX和AF_INET,因为本次是网络通信,所以该参数选择AF_INET,第二个参数表示协议类型,在网络通信部分分为两种:TCP和UDP,对应的值分别为SOCK_STREAM和SOCK_DGRAM,因为本次是UDP,所以选择SOCK_DGRM。启动服务器就需要用到一个变量标记当前服务器是否已经启动,所以需要一个成员_isRunning,该变量初始化为false,如果当前服务器并没有启动,就可以启动服务器,否则就不需要启动。
2025-08-09 03:00:00
736
原创 Mysql系列--4、表的约束
注:建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值。mysql中null和' '是两个不同的概念,前者表示空属性,后者表示空内容。注:只有设置了default的列,才可以在插入值的时候,对列进行省略。给字段默认的值,数据在插入的时候不给该字段赋值,就使用默认值。为保证除主键外的其他字段的唯一性,主键不能为空,唯一键可以。
2025-07-22 00:43:54
1046
原创 Mysql系列--3、数据类型
在Mysql中数据类型本身就相当于一种约束,拦截不合法的数据,保证库中的数据均按用户要求存储。set用数字做下标对应选项时从1开始,但为位图上一个比特位对应,如3其实对应选项1和选项2。若小数位数超过显示长度,mysql会四舍五入,但若四舍五入时超过限制时会拦截数据存储。MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。char是要多少直接给多少,varchar根据填入的数据给相应的空间。注:enum用数字做下标对应选项时从1开始,且为整数对应。下,与其如此,还不如设计时,将。
2025-07-19 11:32:19
336
原创 Mysql系列--2.表的相关操作
上文我们谈及了Mysql的库的相关操作,如今我们已经存在了库我们就可以建立表来格式化存储数据了。建表的操作与建库基本一致。
2025-07-19 02:15:00
401
原创 Linux线程--2.理解分页式存储管理
由于磁盘,物理内存均按4KB设计那么我们就可以将物理内存按0到全F平坦编址,当磁盘文件加载到物理内存中,在page中设置一个类似数组用于保留代码和数据所在的页框起始地址(看作下标),方便寻址,以及使物理内存抽象的看成连续的。因为每⼀个程序的代码、数据⻓度都是不⼀样的,按照这样的映射⽅式,物理内存将会被分割成各种离散的、⼤⼩不同的块。虚拟内存看上去被虚线“分割”成⼀个个单元,其实并不是真的分割,虚拟内存仍然是连续的这个虚线的单元仅仅表⽰它与⻚表中每⼀个表项的映射关系,并最终映射到相同⼤⼩的⼀个物理内存⻚上。
2025-07-18 15:04:16
1315
原创 Linux线程--1.初始线程
在⼀个程序⾥的⼀个执⾏路线就叫做线程(thread)。更准确的定义是:线程是“⼀个进程内部的控制序列”;(1)进程是承担分配系统资源的基本实体(2)线程是OS调度的基本单位,是一种执行流,是进程内部的一个执行分支。
2025-07-18 13:58:27
1044
原创 Mysql系列--1、库的相关操作
本文介绍了MySQL数据库的基本终端操作,包括创建数据库(CREATE DATABASE)、字符集和校验规则设置(utf8_general_ci不区分大小写,utf8_bin区分大小写),以及查看系统默认编码(SHOW VARIABLES)。详细说明了数据库的增删改查操作:显示数据库(SHOW DATABASES)、修改编码(ALTER DATABASE)、删除数据库(DROP DATABASE),并演示了数据库备份(mysqldump)与恢复(source)方法。最后补充了查看当前数据库(SELECT D
2025-07-16 17:19:21
836
原创 Mysql系列--0、数据库基础
这篇文章概要介绍了MySQL数据库的相关知识。主要内容包括:数据库的概念及其优势,MySQL作为客户端-服务器网络服务的本质;MySQL的架构特点及其跨平台性;SQL语言的分类(DDL、DML/DQL、DCL);以及存储引擎的概念、查看方法和对比。文章还介绍了MySQL的登录方式,并阐述了数据库与MySQL服务的关系。整体内容涵盖了MySQL的基础架构、操作语言和核心技术特点,为读者提供了对MySQL数据库系统的入门级理解。
2025-07-16 17:19:11
587
原创 Linux进程信号--3、信号处理
在信号序章中我们收到信号时不会立即处理,而是在合适的时间处理,该合适的时间就是进程从内核态返回到用户态的时候。
2025-07-15 15:14:24
739
原创 Linux进程信号--2、信号保存
在序章中我们提到了信号在到来时由于某些原因无法及时取到,但我们要知道信号来过,要保存信号后续处理,那么我们如何保存信号?
2025-07-15 15:14:14
817
原创 Linux进程信号--1、信号产生
例如当前 进程执⾏了除以0的指令, CPU的运算单元会产⽣异常, 内核将这个异常解释为SIGFPE信号发送给进 程。再⽐如当前进程访问了⾮法内存地址, MMU会产⽣异常,内核将这个异常解释为SIGSEGV信号发送 给进程。键盘组合键(快捷键)按下被OS识别,在PCB中修改位图结构(前32个信号)(后面的信号为实时信号用不到)由0->1->0,根据比特位上的位置从对应的执行方法结构体函数指针数组上获得信号对应方法并执行。硬件异常被硬件以某种⽅式被硬件检测到并通知内核,然后内核向当前进程发送适当的信号。
2025-07-15 15:13:57
665
原创 Linux进程信号--0、序章
std::cout << "我是: " << getpid() << ", 我获得了⼀个信号: " << signum << std::endl;exit(0);// {// }
2025-07-15 15:13:04
1053
原创 mmap映射文件
在上文进程间通信一文最后我们提到了c结构上的多态是结构体套结构体,其中对于共享内存来说其结构体struct shm中含有一个struct *file的成员,表明共享内存本质上是个文件,那么它就含有inode和block指向它的缓冲区进行IPC,但它并没有文件fd进行文件操作,这就要提到文件映射了。
2025-07-14 00:00:00
580
原创 进程间通信--2.System V相关通信方式
System V的背景:System V是UNIX操作系统的一个重要分支(由贝尔实验室开发和发布),它是商业化的UNIX版本之一,与BSD等其他UNIX分支并列System V引入了许多现代操作系统的特性,包括:System V IPC(进程间通信机制):包括共享内存、消息队列和信号量,这些IPC机制是由操作系统内核提供的,但他们的接口和设计是由System V标准化的。因此,当我们提到"System V IPC"时,通常指的是这些机制的标准实现;
2025-07-13 12:29:35
890
原创 进程间通信--1.管道与模拟进程池实现
通过对程序命名,编译器,编译方式的包装,实现面向对象,减少出现自定义的程序命名。但我们的管道是进程间通信所以我们需要实现类似一个纯内存级的文件及内核缓冲区!(1)父进程要先打开文件形成管道(以读写方式,子进程在拷贝时也会拷到读写)父进程预先准备好多个管道和子进程,进行任务的分配实现通信,叫做进程池。(2)父进程创建子进程,子进程拷贝fd表,然后看到同一资源。(1)通信的前提:OS为不同进程提供同一份资源。(2)主要用来进行具有血缘关系的进程的通信。(2)对于本地通信OS提供的通信标准分类。
2025-07-13 11:05:11
779
原创 动静态库加载
a.将静态库建立好后拷贝至系统目录中(eg:user/bin/lib/),然后使用gcc/g++编译,但我们是第三方库,则在编译时要使用新的命令(gcc xxx -l 库名)将磁盘上的库加载到内存中经过页表映射在需要该库的文件的PCB中的struct files_struct中的堆栈间的共享区。a.软连接--独立的文件,有自己的inode,保存的是目标文件的路径,相当于创建了一个文件的快捷方式。ar -rc libxxx.a{(.版本)(.o文件)(...)}(xxx库名)
2025-07-13 10:57:30
338
原创 解析磁盘文件系统
(3)我们对于文件的增删查改就可以在map上进行0/1交换,而且对于OS来说,在内存上有专门的结构体struct_sb/gdt将一个分区中的super_block(sb)与GDT读取,进而将每个组的文件信息像链表一样链接起来,这样就变成了链表的增删查改。(1)首先我们会去其inodebitmap上找一个位用来记录刚文件已存在,然后在GDT上查找每个组的起始inode,然后将自己的位数和初始inode相加后得到的值在去Inode Table上的对应位置储存文件属性。inode结构体主要的信息就是上图。
2025-07-13 10:55:39
575
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅