自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 十大经典排序算法全解析

排序算法总结:本文介绍了常见的排序算法,包括插入排序(直接插入、希尔)、选择排序(简单选择、堆排序)、交换排序(冒泡、快速排序)、归并排序和非比较排序(计数、基数排序)。重点分析了各算法的时间复杂度(冒泡O(n²)、快速排序O(nlogn)等)、空间复杂度以及稳定性(冒泡、插入稳定,选择、快速不稳定)。详细阐述了冒泡、选择、插入、希尔、归并、快速等算法的实现步骤和代码示例,并比较了它们的优缺点。特别说明了计数排序等非比较排序的适用场景。

2025-09-10 12:57:09 886

原创 Protobuf更新规则:前后兼容必知要点

自定义的message类,都是继承⾃Message。Message 最重要的两个接⼝,可以获取该类型对应的Descriptor对象指针 和Reflection对象指针类定义在 google 提供的message.h中Descriptor:是对message类型定义的描述,包括message的名字、所有字段的描述、原始的proto⽂件内容等类定义在 google 提供的中Reflection接⼝类,主要提供了动态读写消息字段的接⼝,对消息对象的⾃动读写主要通过该类完成。

2025-08-16 10:00:00 1068

原创 Protobuf字段规则与类型详解

在单个 .proto 文件中可以定义多个消息体,且支持定义嵌套类型的消息(任意多层)。每个消息体中的字段编号可以重复第一种方法:非嵌套写法//相当于定义了一个Phone类型的数组第二种方法:嵌套写法第三种方法:导入其他文件// 使用 import 将 phone.proto 文件导入进来!!!// 引入的文件声明了package,使用消息时,需要用 ‘命名空间.消息类型’ 格式//如果没有使用命名空间,则可以直接使用。

2025-08-15 10:00:00 753

原创 Protobuf高效序列化解密

Protobuf是一种高效的结构化数据序列化方法,支持跨语言和跨平台使用。它将对象转换为二进制字节序列(序列化)或从字节序列恢复对象(反序列化),适用于数据存储和网络传输场景。相比XML和JSON,Protobuf具有更小、更快的特点,且扩展性好。使用时需先定义.proto文件描述数据结构,通过protoc编译器生成对应语言的代码接口。Protobuf支持多种数据类型,并通过字段编号优化编码效率。序列化结果为二进制格式,提供多种输出方式(流、数组、字符串)。因其高效性和兼容性,Protobuf广泛应用于分布

2025-08-14 10:45:57 771

原创 MySQL用户管理与安全防护指南

MySQL用户管理与安全实践摘要:本文介绍了MySQL用户管理的关键操作,包括用户创建、权限分配和密码修改。通过系统数据库mysql的user表可查看用户信息,其中host字段限制登录来源,authentication_string存储加密密码。创建用户需指定用户名、主机和密码,root用户可修改其他用户密码。权限管理通过grant/revoke命令实现,操作后需flush privileges使变更生效。文章还详细说明了密码策略配置参数和连接池原理,后者通过预先建立连接提高性能。最后简要介绍了MySQL

2025-07-23 10:00:00 720

原创 MySQL事务:ACID特性与隔离级别详解

摘要:事务是数据库操作的逻辑单元,由一组DML语句组成,具有ACID特性(原子性、一致性、隔离性、持久性)。MySQL中的InnoDB引擎支持事务,而MyISAM不支持。事务的隔离级别包括读未提交、读提交、可重复读和串行化,不同级别解决不同的并发问题。MVCC(多版本并发控制)通过版本链和ReadView机制实现读写并行,提高性能。视图是基于查询定义的虚拟表,可以简化复杂查询,但需注意其与基表的数据同步以及使用限制。正确使用事务和视图能有效提升数据库操作的效率与安全性。

2025-07-22 12:11:23 853

原创 揭秘MySQL索引:让查询速度提升千倍的秘密

提高数据库的性能,索引是物美价廉的东西了。这样,我们就可以通过多个Page遍历,Page内部通过目录来快速定位数据,但是在Page之间,也是需要MySQL 遍历的,遍历意味着依旧需要进行大量的IO,将下一个Page加载到内存,进行线性检测,因此,需要给 Page 也带上一个目录。在看书时找到特定的内容既可以一页页向后翻,直到找到内容,也可以直接查目录,直接翻到对应的页,书中的目录通过增加了页数,减少了查找时间,因此是一种空间换时间,因此,针对上面的单页Page,同样可以引入目录。

2025-07-20 10:00:00 1049

原创 SQL查询技巧大揭秘

多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句。查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J。查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的。显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号。查找每个部门工资最高的人的姓名、工资、部门、最高工资。

2025-07-19 10:00:00 863

原创 MySQL日期与字符串函数全解析

函数,MySQL数据库使用该函数对用户加密,在MySQL 5.7.6开始,PASSWORD函数就被弃用了。如果val1为null,返回val2,否则返回val1的值。查询两分钟以内发送的数据。获取某一个表中项的字符集。在日期的基础上加上日期。查询当前所在的数据库。

2025-07-18 10:00:00 362

原创 CRUD操作全解析:从增删改查到实战技巧

CRUD:Create(创建), Retrieve(读取),Update(更新),Delete(删除)

2025-07-17 10:00:00 882

原创 数据库约束:保障数据完整性的关键

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的,从业务逻辑角度约束本质是,凡是插入的数据都是符合数据约束的:保证数据的完整性和可预期性。

2025-07-16 10:00:00 557

原创 MySQL数据类型精要:数值与字符类型详解

数值类型分类:在 mysql 中如果向特定类型中插入不合法的数据,Mysql 就会直接拦截,不让继续进行操作,反过来说,如果已经成功插入了数据,那么一定是合法的数据数据类型本身也是一种约束,倒逼程序员进行正确的插入。

2025-07-15 10:00:00 1034

原创 揭秘IO通信:进程间数据交互的本质

网络间通信本质上就是进程间通信,而进程间通信本质上就是 IO,发送方将数据写入,接收方将数据取出从进程间通信的角度: IO 就是 read/write/send/recv+拷贝操作从进程角度:IO 就是数据在进程中的进出从内存的角度:将数据从外设读入/读出数据由于最终进程都要加载到内存,因此 IO 本质上就是数据在内存和外设之间的交互任何IO 过程中,都包含两个步骤,第一是等待(

2025-07-14 12:18:50 710

原创 网络通信核心技术解析:从NAT到CDN的完整指南

通常情况下,用户访问的是本地的 CDN 服务器,在命中缓存的情况下,CDN 服务器会直接向用户返回所请求的资源,如果没有命中缓存,CDN 会向离自己最近的 CDN 边缘节点请求资源,在极端情况下才会向源站请求资源,并且 CDN 和源站之间也会有专用的链路进行连接,加快了访问速度,并且更加稳定。反向代理服务器是一种网络架构模式,其作为Web 服务器的前置服务器,接收来自客户端的请求,并将这些请求转发给后端服务器,然后将后端服务器的响应返回给客户端。这可以大大减少后端服务器的负载,提升网站的响应速度。

2025-07-08 10:00:00 1283

原创 揭秘IP数据报:网络通信的核心奥秘

本文主要介绍网络层IP协议的核心概念与工作原理。IP地址由网络号和主机号组成,通过子网掩码或CIDR方式进行划分。IP数据报包含版本、首部长度、生存时间等关键字段,其中首部长度可变,最大60字节。数据报可能因MTU限制而分片传输,通过标识、标志和片偏移字段进行分片控制与重组。路由转发采用"跳数"机制,TTL防止数据报无限循环,NAT技术实现内外网地址转换。文章还阐述了IP数据报首部校验、五元组标识通信、私有/公网IP划分等内容,完整呈现了IP协议在网络通信中的基础功能和实现机制。

2025-07-07 10:00:00 939

原创 揭秘TCP与UDP:传输层的核心差异

摘要:本文详细介绍了传输层协议UDP和TCP的工作原理及特性。UDP是无连接、不可靠的协议,通过端口号绑定进程实现数据传输,具有简单快速的优点但缺乏可靠性保障。TCP则是面向连接、可靠的协议,通过三次握手建立连接,使用确认应答、超时重传、流量控制、拥塞控制等机制确保数据传输的可靠性。文章还对比了TCP和UDP的差异,分析了TCP的全连接队列机制,并介绍了tcpdump抓包工具的使用方法。

2025-07-06 10:00:00 708

原创 HTTP协议:互联网通信的基石

HTTP协议是超文本传输的基础协议,用于客户端与服务器之间的通信。其特点包括无连接、无状态,通过URL定位资源。请求与响应格式包含首行、Header和Body三部分,常见Header有Content-Type、Cookie等。Cookie用于会话管理,Session则提供更安全的用户状态跟踪。HTTPS在HTTP基础上加入加密层,采用非对称加密交换密钥和对称加密传输数据,CA证书验证公钥真实性。状态码如301/302用于重定向,GET/POST是主要请求方法。Connection字段管理持久连接提升效率。该

2025-07-05 10:00:00 1199

原创 数据库表的操作

【代码】数据库表的操作。

2025-07-04 10:00:00 193

原创 数据库操作

如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source 来还原。由于创建数据库时使用的时默认的校验规则,也就是utf8_ general_ ci,因此查找时不区分大小写。虽然可以直接通过将数据库的文件夹打包来进行备份,但是不推荐,因为这样一旦跨版本,就会出问题。创建数据库时,若用户未指定使用的字符集和校验规则,则使用默认的,否则使用用户指定的。对数据库的修改主要指的是修改数据库的字符集,校验规则。COLLATE: 指定数据库字符集的校验规则。

2025-07-03 10:00:00 455

原创 数据库基础

数据库一般指的是在磁盘或者内存中存储特定结构组织的数据,也就是在磁盘上存储的一套数据库方案一般文件确实提供了数据的存储能力,但是文件对于用户来说并没有提供很好的数据管理能力数据库本质是对数据内容存储的一套解决方案,用户提供字段或者要求,数据库返回结果。

2025-07-02 10:00:00 450

原创 序列化与反序列化:数据交互的核心技术

摘要 序列化与反序列化协议是网络通信中结构化数据转换的关键机制。Jsoncpp库提供了三种JSON序列化方式:toStyledString(格式化输出)、StreamWriter(可定制格式)和FastWriter(高效无格式)。反序列化主要通过Json::Reader实现。TCP协议的全双工特性源于其独立的发送和接收缓冲区,而IO函数的阻塞是为了维护同步关系。文章还展示了如何实现自定义的序列化协议,通过条件编译在JSON和自定义格式间切换,并提供了Request/Response类的具体实现示例,包括数据

2025-07-01 10:00:00 390

原创 connect断线重连

摘要:该代码实现了一个具有自动重连功能的TCP客户端程序。通过ClientConnection类封装了socket连接、断开和重连逻辑,使用状态枚举(Status)跟踪连接状态。当连接断开时,程序会尝试自动重连最多5次,每次间隔1秒。TcpClient类协调整个连接过程,根据当前状态执行相应操作(连接、通信或重连)。程序需要传入服务器IP和端口参数,用户输入的消息会发送到服务器并显示响应。该实现包含了基本的错误处理和资源管理,确保在连接失败时能够正确释放资源。

2025-06-30 10:00:00 210

原创 windows 作为client 访问Linux

摘要:该代码展示了一个Windows平台的网络通信客户端程序,支持TCP和UDP两种协议。程序通过Winsock库初始化网络连接,建立与指定服务器IP和端口(8888)的通信。主要功能包括:创建套接字、连接服务器、发送用户输入信息、接收服务器响应并输出。代码同时演示了TCP(使用connect/send/recv)和UDP(使用sendto/recvfrom)两种实现方式,最后关闭套接字并清理资源。程序采用循环结构持续处理用户输入和服务器响应。

2025-06-29 10:00:00 177

原创 深入解析Socket通信与IP地址机制

本文摘要: Socket通信的核心概念包括IP地址(标识主机唯一性)、端口号(标识进程唯一性)和网络字节序处理。IP+Port组合称为套接字(Socket),它是网络通信的基础。文章详细介绍了Socket API,如socket()、bind()、connect()等函数的使用,以及sockaddr_in结构体的组成。特别强调了网络字节序转换的必要性和相关函数(htonl/ntohl等)。对于TCP通信,重点描述了listen()、accept()、connect()的三次握手过程,并提供了多进程处理连接的

2025-06-28 10:00:00 666

原创 揭秘OSI七层与TCP/IP五层模型的本质区别

文章摘要:OSI七层模型是网络通信的理论框架,将网络分为7层,每层对应特定设备和协议,实现不同系统间的可靠通信。TCP/IP协议采用5层结构,包含物理层、数据链路层、网络层、传输层和应用层,是实际的网络通信解决方案。MAC地址用于设备识别,IP地址标识主机位置。数据在传输过程中经历封装和分用,每层添加/去除报头。跨网络通信需路由器转发,IP地址保持稳定而MAC地址动态变化。IP网络层的作用是创建统一的网络虚拟层,屏蔽底层差异。

2025-06-27 10:00:00 753

原创 进程关系与守护进程全解析

进程组是包含一个或多个进程的集合,每个进程组有唯一的进程组ID(PGID),由组长进程(其PID=PGID)管理。进程组生命周期持续到最后一个进程退出。会话是一个或多个进程组的集合,包含前台进程组(接收终端输入)和后台进程组,由会话首进程控制。通过setsid()创建新会话时需避免进程已是组长。守护进程的实现需要fork子进程、setsid创建新会话、关闭/重定向文件描述符等步骤。作业控制允许Shell管理前后台作业,通过fg/bg命令切换作业状态。守护进程化服务程序时,通常需处理信号、改变工作目录

2025-06-26 10:45:25 865

原创 环形队列与线程安全:高效并发技巧

本文摘要: 本文主要讨论了环形队列的实现原理、线程安全与可重入概念、单例模式实现方式,以及各种同步机制的设计与应用。内容涵盖:1)环形队列通过计数器和标记位解决空满判断问题;2)多线程环境下生产者-消费者模型的操作互斥要求;3)线程安全日志系统的实现方法;4)单例模式的饿汉与懒汉实现及其线程安全优化;5)可重入函数与线程安全的关系分析;6)死锁的四个必要条件与避免策略;7)STL容器和智能指针的线程安全性;8)读写锁和自旋锁的原理及适用场景。全文着重阐述了多线程编程中的关键技术和常见问题的解决方案。

2025-06-26 10:00:00 609

原创 揭秘线程地址空间:高效内存管理的核心

在进行运算时,会先将数据移动进 CPU 的寄存器中,然后进行逻辑判断,最后将寄存器中的结果输出,CPU 中寄存器只有一套,但是寄存器中的数据可以有多套,看起来是放在了公共的寄存器中,但是这些数据属于线程私有的,当线程被切换时,要带走自己的数据,回来的时候会将数据恢复,线程运行过程中,可能刚进入判断逻辑,但是并没有执行操作,CPU 就转向下一个进程了,此时就会出现多个进程同时进入判断逻辑,这就会导致出现意料之外的情况。未使用的区域不分配下级页表,页表所在的物理页必须常驻内存,不可被换出到磁盘。

2025-06-25 10:58:42 733

原创 Linux信号机制:进程异步通信的秘密

用户进程不能直接进入内核空间中,因此需要特定条件下才能跳转过去,在 CPU 中有一个 code segment 寄存器,这个寄存器中保存着代码段的范围,这个寄存器的低两位保存着当前是用户态还是内核态,00 表示内核态,11 表示用户态,当需要执行内核空间中的代码时,CPU 先检查当前是用户态还是内核态,如果是用户态则转换为内核态,寄存器就保存内核空间中相应的代码段,开始执行对应的系统调用,同理,需要执行用户空间的代码时,则转换为用户态,寄存器就保存内核空间中相应的代码段,继续执行用户空间的相应代码。

2025-06-15 17:22:03 964

原创 深入解析SystemV IPC:消息队列与信号量机制

msgget 用来获取信号量,key 可以使用 ftok 进行获取,flag 使用 IPC_CREAT 表示当key所命名的消息队列不存在时创建一个消息队列,如果key所命名的消息队列存在时,IPC_CREAT标志会被忽略,而只返回一个标识符。来存储消息,第二个参数需要传入的即为这个结构体,第三个参数传入的是结构体的大小,最后一个传入标志位,0 即可,其中,如果当前空间不足,msgsnd 就会阻塞,直到有足够的空间,但是如果标志位是 IPC_NOWAIT,则就会直接报错。

2025-06-07 12:33:04 1054

原创 进程通信利器:高效共享内存揭秘

在操作系统中,进程之间通常是相互独立的,每个进程都有自己独立的内存空间。。就好像在不同的房子(进程)之间开辟了一个公共的储物室(共享内存区域),这些房子里的人(进程中的线程)都可以到这个公共储物室存取东西。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是当使用共享内存时,操作系统会。

2025-06-05 22:20:36 1288

原创 揭秘进程间通信:管道技术全解析

此时若父进程关闭写入,由于写入没有全部关闭,因此若此时直接等待就会发送阻塞,所以读端什么也读不到若依次遍历,将所有管道都关闭一次,此时最后一个创建的管道将会被回收,该进程也会被等待成功,因此也会被回收,然后该进程的上一个进程的管道由于没有写端,因此也会被回收,依次递归最终整个进程被成功回收。

2025-06-03 20:15:09 2011

原创 动态库和静态库

程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库:程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。

2025-05-29 13:44:40 1052

原创 Linux中的文件系统和软硬连接

当要修改文件时,首先会找到 inode,然后将 inode 和 task_struct 关联起来,然后获取文件的块号,从指定的分区分组中拿到数据块,将其加载到文件的内核缓冲区中,这样通过内核的方式将文件拷贝到用户缓冲区要修改文件时,将写入的数据写入语言的缓冲区,然后通过文件描述符将内容写入文件的内核缓冲区,最终将修改的内容写回 inode,如果内容少了,则释放空间,否则申请空间。代表当前目录,使用的 inode 和当前目录相同,因此目录会有两个硬链接数,当在该目录中创建一个新的目录时,新创建的目录中。

2025-05-25 10:35:16 2131

原创 Linux中的文件描述符

struct_file 中存放着 read 和 write 方法,分别指向各自文件自己提供的 read 和 write 方法,当进程调用 write和 read 时,通过传入文件 fd 找到对应的 struct_file,然后 struct_file 调用自己的 read 和 write,read 和 write 再指向驱动程序的 read 和 write,由于 Linux 中一切皆文件,因此可以通过驱动程序操作设备,实现对所有设备和其他文件的操作。

2025-05-24 14:55:28 1082

原创 Linux中的进程

作用:进程一旦调用了wait,就会立刻阻塞自己,由wait分析当前进程中的某个子进程是否已经退出了,如果让它找到这样一个已经变成僵尸进程的子进程,wait会收集这个子进程的信息,并将它彻底销毁后返回;子进程执行 exec 时,由于进程具有独立性,因此会将原来父进程的数据和代码重新拷贝一份,然后在新拷贝的地方进行替换代码,这样就不会影响父进程,此时的父子进程就在数据结构和代码层面上彻底的分离了。子进程退出后,若父进程不进行任何操作,将会产生僵尸进程,造成内存泄漏,一旦进程变成僵尸进程,将会无法被杀死。

2025-05-17 21:25:37 2326

原创 【C++】C++11新特性(二)

Args是一个模板参数包,args是一个函数形参参数包在函数定义时,可以使用(...)来表示可变参数是模板参数包,表示可以接受任意数量(包括 0 个)的类型参数。而是函数参数包,用于接收与模板参数类型对应的实际参数Args...是类型参数包(代表 0 个或多个类型)args...是函数参数包(代表 0 个或多个实参)

2025-04-29 15:13:09 918

原创 【C++】C++11新特性(一)

自定义类型,返回类型为对象右值引用的表达式为将亡值,右值类对象的成员为将亡值,右值数组的成员为将亡值,标识一个具名对象,但该对象即将被销毁(如通过 std::move 转换)。它允许安全地移动资源,而非拷贝。,只有右值本身处理成左值,才能实现移动构造,因此右值引用的函数要将接收到的右值传给下一个函数时,要进行 move,才能调用下一个函数的 move 形式。在移动语义的场景下,右值引用用于引用那些即将被移动资源的对象,当一个对象要将自己的资源(如动态分配的内存)转移给另一个对象时,会使用右值引用。

2025-04-27 21:37:37 843

原创 【C++】多态

必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写(三同:函数名,参数,返回值)隐藏和重写的语义有重叠,当只有函数名相同时,构成隐藏,而在构成隐藏的条件下,满足三同(函数名、参数、返回值相同)和虚函数,则就构成重写。

2025-04-12 15:06:54 822

原创 【C++】继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类在公有继承的条件下子类对象可以直接赋值给父类对象。子类对象可以直接初始化父类对象。父类指针可以直接指向子类对象。父类引用可以直接引用子类对象。继承中的对象模型基类private成员在派生类中无论以什么方式继承都是不可见的。

2025-04-11 09:02:19 1316

空空如也

空空如也

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

TA关注的人

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