自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JsonRpc:手搓一个高性能Rpc服务(广播篇)

本文介绍了基于订阅-发布模式的广播系统设计。系统分为订阅者、话题和管理器三个核心组件:订阅者结构体维护订阅话题列表和客户端连接;话题结构体管理订阅者集合并提供消息发布功能;TopicManager类负责处理话题创建/删除、订阅/取消订阅等操作请求,并维护订阅者与话题的映射关系。系统采用互斥锁保证线程安全,支持类似B站UP主发布视频的广播机制,当话题更新时自动通知所有订阅者。该设计实现了高效的消息分发和动态订阅管理,适用于需要实时推送的场景。

2025-12-29 21:42:18 700

原创 JsonRpc:手搓一个高性能Rpc服务(应用篇)

本文摘要: 文章介绍了在JsonRpc基础上实现RPC应用功能的通信调度层设计。主要包含两个核心组件:Dispatcher负责根据消息类型分发处理请求,通过模板化的CallbackT类注册不同类型消息的处理函数;Requestor则处理个体消息的分发,支持异步和回调两种响应方式。Dispatcher使用unordered_map存储消息类型与处理函数的映射关系,Requestor通过RequestDescribe结构管理请求状态,提供阻塞和非阻塞两种发送模式。该设计实现了高性能RPC服务的消息调度机制。

2025-12-29 16:37:42 769

原创 JsonRpc:手搓一个高性能Rpc服务(底座篇)

JSON-RPC框架摘要 本文介绍了一个基于C++的JSON-RPC远程调用框架的实现。框架分为多个抽象层: 消息层:定义BaseMessage基类,包含消息ID、类型标识、序列化/反序列化等方法 连接层:BaseConnection类处理底层TCP连接,提供发送、关闭连接等功能 缓冲层:BaseBuffer类封装数据缓冲区操作 协议层:BaseProtocol类解决TCP粘包/半包问题,提供消息处理接口 服务层:包含BaseServer和BaseClient基类,分别实现服务端和客户端功能 框架采用多态设

2025-12-27 22:17:15 651

原创 MySQL:复合查询

本文介绍了SQL多表查询和子查询的基本操作。通过模拟公司场景,演示了内连接(保留两表匹配数据)、左连接(保留左表全部数据)、右连接(保留右表全部数据)的区别。同时讲解了自连接查询(处理层级关系)和子查询的两种类型:标量子查询(配合比较运算符使用)和列子查询(配合IN/NOT IN使用)。文中包含具体SQL示例,帮助理解不同连接方式的适用场景,如查询所有员工(含未分配部门者)需用左连接,查询所有部门(含无人员部门)需用右连接。

2025-12-21 21:14:18 939

原创 MySQL:内置函数

MySQL内置函数是数据库提供的实用工具,主要包括三类:日期函数(如CURRENT_DATE()获取当前日期、DATEDIFF计算日期差)、字符串函数(如CONCAT拼接字符串、SUBSTRING截取子串)和数学函数(如ROUND四舍五入、RAND生成随机数)。这些函数无需了解实现细节,只需调用即可完成日期处理、字符串操作和数学计算等常见任务,能有效简化SQL语句编写。此外还包括USER()查询当前用户、MD5()加密等实用功能,为数据处理提供了便利。

2025-12-20 13:10:13 993

原创 计算机网络:HTTP报文

HTTP报文是客户端与服务器之间传输数据的"包裹",分为请求报文和响应报文两种类型。报文采用四层结构:起始行(包含请求方法或状态码)、首部(描述报文属性)、空行(分隔头部与主体)、主体(实际数据内容)。在传输过程中,HTTP报文会经历层层封装,从应用层结构体依次添加TCP头部、IP头部和MAC头部,形成网络传输的数据包。TCP协议通过序号机制确保数据传输的可靠性,解决网络传输中的丢包、乱序等问题。整个过程体现了HTTP报文作为应用层数据在网络协议栈中的完整生命周期。

2025-12-18 23:43:19 1181 5

原创 C++:jieba库的安装使用保姆级教程

本文介绍了C++版中文分词库Jieba的安装与使用方法。主要内容包括:1)通过git克隆cppjieba项目;2)初始化并下载依赖子模块limonp;3)使用cmake和make编译生成可用库;4)测试验证库功能。最后给出了基础使用示例代码,展示如何加载词典文件并创建Jieba对象进行中文分词。文章针对初学者可能遇到的安装问题提供了详细步骤说明,帮助用户快速搭建中文分词环境。

2025-10-19 17:03:23 869

原创 MySQL:表的约束

SQL表的约束是保证数据完整性和一致性的重要规则。主要约束包括: 非空约束(NOT NULL)确保字段不为空 唯一约束(UNIQUE)保证字段值不重复 主键约束(PRIMARY KEY)作为唯一标识符,兼具NOT NULL和UNIQUE特性 默认值(DEFAULT)为未指定值的字段提供默认数据 外键(FOREIGN KEY)建立表间关联,确保引用完整性 检查约束(CHECK)在MySQL8.0+中用于验证数据条件 这些约束在创建表时定义或后期添加,能有效防止无效数据进入数据库,维护数据质量。外键约束特别重要

2025-10-05 10:24:23 826

原创 MySQL:CRUD

MySQL表的增删改查(CRUD)操作指南 本文介绍了MySQL数据库中对表进行增删改查的基本操作。主要内容包括: 新增(Create):讲解了单行插入和多行插入语法,以及字符编码问题对插入数据的影响。 查询(Retrieve):详细介绍了: 指定列查询 使用DISTINCT去重 通过ORDER BY进行排序 条件查询(WHERE子句) 分页查询 注意事项:强调了在业务代码中直接查询全表的危险性,以及如何通过条件查询限制结果集。 文章通过大量示例代码和截图演示了各种SQL语句的使用方法,适合MySQL初学者

2025-10-04 15:02:04 806

原创 MySQL:库操作和常用数据类型

本文介绍了MySQL 8.0.33中数据库和数据类型的基本操作。主要内容包括: 数据库操作:展示如何查找、创建、删除和修改数据库; 数据类型详解: 数值类型:TINYINT、INT、BIGINT等及其适用场景; 字符串类型:CHAR、VARCHAR、TEXT等存储文本数据的方法; 日期时间类型:DATE、DATETIME、TIMESTAMP等时间数据的处理方式。 每个操作都配有示例代码和执行结果截图,便于理解。文章适合MySQL初学者快速掌握数据库基础操作和数据类型选择。

2025-09-21 23:39:56 650

原创 计算机网络:HTTPS协议

数据签名:证书的“防伪章”,用哈希(SHA-256)+ 私钥加密,确保证书没被改,像包裹上的封条,浏览器用CA公钥检查。CA 认证:可信机构签发证书,证明网站身份真实,像公安局发的身份证,浏览器用CA公钥验证。HTTPS 里的作用:签名确保证书可信,CA认证确认网站身份,共同建立安全通信。

2025-09-19 21:39:00 1000

原创 计算机网络:守护进程

Linux守护进程简介 守护进程是Linux系统中在后台运行的特殊程序,不直接与用户交互,系统启动时自动运行直至关机。它们脱离终端控制,适合长期运行的服务。 核心概念 会话:一组相关进程的集合,与终端绑定,会话领导者(如bash)负责终端通信 进程组:多个协同工作的进程集合,共享同一个PGID 区别:会话包含多个进程组,进程组包含多个进程 创建方法 setsid():底层系统调用,创建新会话并脱离终端控制 daemon():封装好的库函数,自动完成会话创建、目录切换等操作 守护进程通过脱离终端会话,确保服务

2025-09-16 21:18:09 792 1

原创 计算机网络:序列化和反序列化

摘要 本文通过自行车拆装比喻,生动解释了序列化和反序列化概念。序列化是将内存中的结构化数据(如游戏角色对象)转换为便于传输/存储的字节流(如JSON格式),类似拆卸打包自行车;反序列化则是按相同规则将字节流重建为原始数据结构,如同拆箱组装。文章演示了C++中使用jsoncpp库进行序列化(构建嵌套JSON对象)和反序列化(解析JSON字符串)的具体代码实现,包括数组、嵌套对象处理及错误捕获机制,并强调该过程对网络通信(如socket编程)中数据结构传输的关键作用。

2025-09-15 20:51:51 919

原创 计算机网络:socket编程TCP

本文介绍了TCP通信的基本流程,包括服务器端和客户端的实现步骤。服务器端通过socket创建套接字、绑定IP和端口、监听连接请求、接收连接并进行数据收发,最后关闭连接。客户端同样创建套接字后,指定服务器地址和端口,连接服务器并发送消息。文中详细说明了关键系统调用的作用,如listen()、accept()、connect()等,并解释了TCP三次握手和四次挥手的过程。示例代码展示了完整的TCP通信实现,突出了服务器和客户端各自的核心操作流程。

2025-09-15 10:52:19 699

原创 计算机网络:socket编程UDP

Socket编程核心要点 Socket是操作系统提供的网络通信机制,本质是特殊的文件描述符,用于进程间数据交换。 服务端流程:创建socket→绑定IP/端口→接收数据→回复→关闭。关键函数:socket()、bind()、recvfrom()/sendto()。 客户端关键:通过目标IP(如127.0.0.1)和端口号(如12345)定位服务端,使用相同协议族(如AF_INET)进行通信。 注意事项:需处理字节序转换(htons)、地址结构体(sockaddr_in),及时关闭socket避免资源泄漏。

2025-09-14 15:02:29 938

原创 Linux系统:线程池

线程池就像一个“工人队伍”,提前雇好几个工人(线程),让他们随时待命。每个任务来时,不用临时招人(创建新线程),直接让闲着的工人去干活复用线程。干完后,工人不走,继续等下一个任务。线程池的应用场景线程池最适合那些需要“同时干多件事,但任务短小精悍”的地方。简单说,它像一个“待命工人队”,帮你高效处理并发任务。Web服务器处理请求:比如网站收到很多用户访问(如淘宝浏览商品),每个请求是短任务,用线程池分配“工人”快速响应,避免服务器卡顿。文件上传/下载。

2025-09-14 12:13:12 779 2

原创 Linux系统:日志系统

本文介绍了一个基于C++的线程安全日志系统,采用策略模式支持终端和文件两种日志输出方式。系统自动记录时间戳、日志等级、进程号、源文件及行号等信息,用户只需通过LOG(level) << "消息"格式即可记录日志。关键实现包括:1) 定义LogStrategy抽象基类,派生出终端输出(ConsoleLogStrategy)和文件输出(FileLogStrategy)子类;2) 建立日志等级枚举类型(DEBUG/INFO/WARNING等)及转换函数;3) 实现时间戳获取功能。系

2025-09-13 11:31:06 679 1

原创 计算机网络:基于OS网络基础架构

本文介绍了计算机网络的基础概念,包括局域网(LAN)和广域网(WAN)的区别与联系,OSI七层模型及其与操作系统的关系,以及TCP/IP协议、MAC地址等核心知识点。文章还详细讲解了Linux系统中ifconfig命令的使用方法,帮助读者理解网络接口配置和状态信息。通过理论结合实践的方式,帮助开发者掌握网络通信的基本原理,为开发联网应用奠定基础。

2025-09-10 11:37:01 969

原创 Linux系统:线程同步与生产消费模型

文章摘要: 线程同步通过互斥锁和条件变量实现多线程环境下的有序协作。条件变量(pthread_cond_t)与互斥锁配合,解决线程等待特定条件的场景(如生产者-消费者模型)。生产者线程在缓冲区满时等待,消费者线程在空时等待,通过pthread_cond_signal唤醒对方。初始化条件变量可采用静态(PTHREAD_COND_INITIALIZER)或动态(pthread_cond_init)方式。生产者-消费者模型通过缓冲区解耦生产与消费,利用互斥锁保证操作原子性,条件变量实现同步,从而解决速度不匹配问题

2025-09-08 23:49:57 690

原创 Linux系统:线程的互斥和安全

摘要: 本文探讨了线程互斥在多线程编程中的重要性。通过模拟多线程抢票案例,展示了共享资源(全局变量)因线程竞争导致的错误结果(如票数为负)。问题根源在于if判断和--操作的非原子性,导致线程切换时数据不一致。解决方案是引入互斥锁(pthread_mutex_t),确保临界区代码(操作共享资源的部分)仅由一个线程执行。示例代码演示了静态初始化的全局锁如何保证数据正确性,并对比了无锁与加锁情况下的输出差异。此外,还简要介绍了互斥锁的静态初始化和动态初始化两种方式及其适用场景。互斥机制有效避免了竞态条件,确保多线

2025-09-08 22:03:05 1435

原创 Linux系统:线程的概念和控制

本文主要介绍了线程的概念、优缺点及其控制方法。线程作为进程内部的执行单元,允许多个任务并发执行,共享同一进程的内存和资源,具有轻量级、高效的优势。相比进程,线程更节省系统资源,能更好利用多核CPU,但同时也存在稳定性、访问控制和编程复杂度等挑战。文章详细讲解了POSIX线程库的使用,包括线程创建、线程ID类型及线程终止方法,并通过C语言代码示例演示了线程的基本操作。掌握线程技术有助于提升程序性能和响应速度,为并发编程和服务器开发奠定基础。

2025-09-05 00:15:00 846 4

原创 Linux系统:进程信号的处理

本文深入讲解了Linux进程信号处理机制,重点分析了信号在task_struct中的存储结构(pending、block和handler表)。信号处理流程涉及三个关键数据结构:Handler表(存储信号处理动作)、Block位图(标识阻塞信号)和Pending位图(暂存待处理信号)。文章详细介绍了sigset_t类型及其操作函数(sigemptyset/sigfillset等),并通过sigprocmask函数演示了如何修改信号屏蔽字。示例代码展示了阻塞SIGINT信号的效果,验证了信号

2025-09-02 23:44:40 830

原创 Linux系统:进程信号的产生

本文介绍了Linux进程信号的基本概念和作用。信号是软件层面的中断机制,用于进程间异步通信和控制,包括终止进程(Ctrl+C)、事件通知和错误处理等。文章详细讲解了信号的定义、分类(标准信号1-31和实时信号34-64)、产生方式(键盘输入和kill命令),并通过代码示例展示了如何使用signal函数自定义信号处理函数。信号机制使程序能够响应外部事件,是编写健壮系统程序的重要基础。

2025-08-28 11:49:26 756

原创 Linux系统:管道通信

Linux系统中的管道(pipe)是一种基础进程间通信方式,分为匿名管道和命名管道。匿名管道通过pipe()创建,仅限有亲缘关系的进程使用,采用半双工单向通信,默认阻塞读写。命名管道(FIFO)通过mkfifo创建文件系统路径,允许无关进程通信,遵循与匿名管道类似的读写规则。两者核心区别在于创建方式,但均依赖内核协调数据传输,具有生产者-消费者模型特性,适用于不同场景的进程协作需求。

2025-08-20 17:09:06 696

原创 Linux系统:库的制作

Linux库是预先编写好的可复用代码集合,分为静态库(.a)和动态库(.so)。静态库在编译时直接打包进可执行文件,而动态库在运行时加载。常见库如libc(标准C库)和libstdc++(C++标准库)分别提供基础功能。文章通过示例展示了如何制作简单的静态库:编写头文件(.h)声明函数,源文件(.c)实现功能,使用ar命令将目标文件(.o)打包为.a文件。库的开发能提高代码复用性,减少程序体积,加快编译速度,是Linux程序开发的重要基础。

2025-08-13 13:43:20 848

原创 Linux系统:Ext系列文件系统(软件篇)

摘要 本文深入解析了ext2文件系统的核心结构与工作原理。ext2将硬盘分区划分为多个块组(Block Group),每个块组包含超级块、组描述符表、块位图、inode位图、inode表和数据块等关键组件。超级块记录文件系统全局信息并在各块组备份以提高容错性;块组描述符表管理块组属性;位图系统跟踪资源使用状态;inode表存储文件元数据并通过多级索引实现数据块映射。文件创建过程需分配inode和数据块,并更新相应位图结构。这种设计既保证了文件系统的可靠性,又实现了高效的文件管理能力。

2025-08-08 17:20:38 1081

原创 Linux系统:Ext系列文件系统(硬件篇)

本文介绍了Linux系统中Ext文件系统的硬件基础——磁盘的物理与逻辑结构。主要内容包括: 硬件层级关系:磁盘作为服务器的一部分,服务器置于机柜中,多个机柜组成机房。 磁盘的物理结构:包括盘片、主轴、磁头、永磁铁和磁头臂等核心组件,通过磁化原理存储数据。 存储结构:详细说明扇区、磁道、柱面等概念,以及传统的CHS寻址方式及其容量限制(约8.4GB)。 逻辑结构:将磁盘抽象为线性结构,引入LBA(逻辑块地址)作为现代寻址方式,替代了CHS的限制。 地址转换:解释了CHS到LBA的转换公式,实现物理到逻辑地址的

2025-08-08 17:18:30 1066

原创 Linux系统:基础I/O

学习Linux的基础I/O可以让我们理解文件本质,提高系统操作能力, 写出高质量的 C/C++ 系统程序,理解命令工具背后的机制,系统调优 & 性能优化,开发脚本、工具、守护进程的基础能力,为后续高级知识打基础,Linux 的基础 I/O 是“系统之眼”,是你进入操作系统底层世界的钥匙。pathname:要打开或创建的目标文件路径flags:文件打开方式,可以使用以下常量之一或多个进行按位“或”运算()组合:O_RDONLY:只读方式打开文件O_WRONLY:只写方式打开文件O_RDWR。

2025-08-05 21:44:27 988

原创 Vue3:路由基础

我们来看一个网易云的页面在这里有两个关键,一个是切换页面的按钮,还有一个是网页的地址当我们在发现音乐和我的音乐和关注,之间互相切换的时候,观察网页地址的变化当我们点击按钮改变页面的时候,并不会直接换一个HTML页面,而是在HTML页面中更换组件,下面的页面内容都对应一个Vue组件,每次切换都会更换Vue组件那为什么不直接用v-if呢URL 不变,用户无法分享链接浏览器后退/前进按钮失效代码难维护和扩展。

2025-07-10 19:13:56 579

原创 Vue3常用指令

Vue 3 中的指令是带有v-前缀的特殊属性,用于在 DOM 元素上应用特殊的响应式行为。指令的主要作用是当其表达式的值改变时,将某些行为响应式地应用到 DOM 上。

2025-07-09 18:35:17 863 1

原创 Javascript:WebAPI

<style></style></head><body></body><script></script></html>演示结果这就是我们创建的节点但是网页并不会输出什么将节点存放在一个容器中再输出到网页<head><style></style>

2025-05-18 00:04:29 929

原创 Vue3:脚手架

这里我已经安装过了,只需要打开链接直接下载nodejs,安装直接一直下一步下一步安装完成之后我们来使用电脑的命令行窗口检查一下版本查看npm源这里npm源的地址是淘宝的源,不是官方源,因为我之前已经改了,当我们获取源数据时会从外国的源里面获取,这里我们更换一下获取源的位置这里我们将获取源数据的位置更改了比如yarn和pnpm检测是否安装成功。

2025-05-16 21:16:17 2751 1

原创 Vue3:声明式渲染

我们来用Vue的方式实现一个Hello,World其中的mount是挂载,将渲染数据挂载到某个容器中setup函数是Vue3的入口,后续的Vue3的代码都会在这里编写插值是{{message}}表示将数据在此标签中的渲染效果表示出来。

2025-05-16 11:19:02 316

原创 Vue3:基础知识

await必须要放在async里面使用演示代码NUM1(NUM)},TIME)})log()演示结果每秒打印一个数字。

2025-05-15 15:42:00 877

原创 Javascript:数组和函数

这里JS的数组里面的元素属性可以各不相同演示代码演示结果此时我们创建了一个数组,但是。

2025-05-11 22:38:52 1012

原创 Javascript基础语法

let a=15;let b=3.14;let d=true;</script>在控制台中查询演示结果这里分别对应这五种变量的属性当变量设置了但是没有定义,那么它的类型就是undefined演示代码<script>let a;!!");

2025-05-11 14:54:22 1068

原创 CSS:弹性布局

弹性布局是CSS3中一种现代的布局模式,专门用于设计一维布局(行或列)。它提供了更有效的方式来分配容器内项目的空间和对齐方式,即使项目的大小未知或动态变化。

2025-05-10 13:41:29 539

原创 CSS:盒子模型

使用格式。

2025-05-09 16:23:10 2237

原创 CSS:元素显示模式与背景

元素显示模式是指元素在浏览器页面中显示的模式,比如<div></div>是独占一行的块级元素,<span></span>是行内元素。

2025-05-08 23:54:23 961 1

原创 CSS:字体和文本样式

在CSS中我们常使用font-size来定义字体大小字体大小的单位为px代码演示演示结果。

2025-05-08 13:35:18 1048

空空如也

空空如也

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

TA关注的人

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