- 博客(108)
- 收藏
- 关注
原创 微服务即时通讯系统(服务端)——网关服务设计与实现(7)
单一入口:所有请求都走网关,好管理、好监控职责分离:HTTP管请求,WebSocket管推送,各干各的无状态:网关自己不存用户数据,全放Redis只转发不处理:业务逻辑交给专门的服务实时感知:谁在线、谁断线,心里有数。
2025-12-04 22:16:23
739
原创 微服务即时通讯系统——好友子服务设计与实现(7)
/好友列表获取// 请求标识ID// 当前请求的发起者用户ID//登录会话ID--用于网关进行身份识别--其他子服务用不到//要返回的用户信息//好友删除//当前用户ID//要删除的好友ID//添加好友--发送好友申请//申请人id//被申请人id//通知事件id//好友申请的处理//通知事件id//是否同意好友申请//申请人的用户id// 被申请人。
2025-11-26 21:14:04
750
原创 深入理解最长递增子序列的计数问题:从思路到推导实现
我们需要定义两个长度为n的数组(n为numsdp[i]:以nums[i]为结尾的最长递增子序列的长度;count[i]:以nums[i]为结尾的最长递增子序列的个数。
2025-11-22 19:54:33
668
原创 微服务即时通讯系统——消息管理子服务设计与实现(6)
我们有两个核心的 Protobuf 文件,分别定义了消息管理的 RPC 服务接口以及相关的数据结构。1.:定义 RPC 服务接口这个文件主要包含了三个 RPC 方法,分别用于获取历史消息、获取最近消息和搜索消息。// 引入基础数据结构定义// 获取历史消息请求// 请求ID,用于追踪请求// 聊天会话ID// 开始时间戳// 结束时间戳// 用户ID(可选,用于权限验证等)// 会话ID(可选,可能用于标识客户端会话)// 获取历史消息响应// 对应请求的ID// 请求是否成功。
2025-11-21 16:32:05
832
3
原创 微服务即时通讯系统(服务端)——消息转发微服务设计与实现详解(5)
基于C++的分布式即时通讯系统中的消息转发微服务,负责处理用户消息的转发逻辑。该服务使用brpc框架构建RPC服务,通过etcd实现服务注册与发现,MySQL存储聊天会话成员信息,RabbitMQ进行消息发布。gittee完整项目代码。
2025-11-15 14:21:40
1019
1
原创 从正向困境到反向破局:详解地下城游戏的动态规划解法
重新设计dp[i][j]从房间 (i,j) 走到终点 (m-1,n-1),骑士需要的最低健康点数(进入 (i,j) 时的健康值至少为多少,才能存活到终点)。状态仅依赖于后续路径(下方和右方的房间),而后续路径的状态是确定的(因为我们从终点倒推)。「地下城游戏」的解法关键在于扭转思考方向:当正向路径的状态依赖未来信息时,反向推导能将 “未来信息” 转化为 “已知条件”,从而让状态转移变得明确。正向 DP 的困境:状态依赖未来路径,无法独立确定。
2025-11-14 10:49:44
916
原创 微服务即时通讯系统(服务端)——用户子服务实现逻辑全解析(4)
职责单一:专注用户身份与信息管理,不耦合其他业务逻辑;分层存储:MySQL 存储核心数据、Redis 存储高频临时数据、ES 支撑搜索,各取所长;高扩展性:通过 etcd 实现服务发现,支持多节点部署与动态扩容;安全性强:完善的参数校验、登录态管理、验证码机制,保障系统安全;跨服务兼容:基于 brpc 构建标准化 RPC 接口,便于与其他微服务集成。该实现方案可直接支撑即时通讯系统的核心用户管理需求,同时预留了扩展空间(如第三方登录、用户标签管理等),具备较强的实用性与可扩展性。
2025-11-12 20:23:47
880
原创 算法:动态规划——解码方法问题
条件(当前字符s[i]细分条件递推公式示例非 ‘0’前一个是 ‘0’"105"→非 ‘0’前一个非 0,s[i-1..i]合法,i>=2"123"→非 ‘0’前一个非 0,s[i-1..i]不合法"135"→非 ‘0’i=1s[0..1]合法dp[i] = 2"12"→dp[1] = 2‘0’s[i-1..i]合法i>=2)或 1(i=1"120"→;"10"→dp[1] = 1‘0’s[i-1..i]不合法返回 0"30"→直接返回 0本题解的核心思路是“先特殊后一般”
2025-11-10 11:48:27
1011
原创 从海洋逆向探索:417. 太平洋大西洋水流问题深度解析
解决「太平洋大西洋水流问题」的关键在于逆向思维,利用水流的可逆性将「判断单元格流向海洋」转化为「判断海洋能否反向到达单元格」,从而将时间复杂度从 O ((mn)²) 优化为 O (mn)。反向标记:从两大洋边界出发,用 DFS/BFS 标记各自的可达区域。求交集:两个可达区域的重叠部分即为答案。这种「逆向遍历 + 边界出发」的思路,在处理「可达性问题」(尤其是边界明确的场景)时具有广泛应用,例如「岛屿问题」「水流问题」等,可大幅提升算法效率。
2025-11-08 17:45:54
1426
原创 图解 LCR 084. 全排列 II:决策树剪枝实战,攻克重复排列难题
解决含重复元素的全排列问题,关键在于「识别并剪枝决策树中的重复分支排序预处理:让重复元素相邻,为剪枝提供判断依据;同一层剪枝:通过used[i-1]过滤同一层的重复选择;路径去重:通过used数组过滤同一路径的重复选择。回溯算法的本质是「穷举 + 剪枝」,而本题的核心价值在于教会我们:如何通过预处理(排序)和精准的剪枝条件,将「可能产生重复结果」的穷举,优化为「无重复结果」的高效搜索。
2025-11-06 15:34:05
1019
原创 微服务即时通讯系统(服务端)——文件存储模块全链路设计与实现(3)
首先通过 Protobuf 定义服务接口与数据结构,明确客户端与服务端的通信契约,这是微服务解耦的基础。set(target "fileServer") # 服务端程序目标名set(test_client "testClient") # 测试程序目标名# 生成服务端程序:依赖业务源码和proto生成的代码# 生成测试程序:依赖测试源码和proto生成的代码核心:将手动编写的src_files和自动生成的proto_srcs关联到目标,确保编译时能找到所有代码。
2025-11-03 16:03:32
951
原创 算法:从特殊到一般——拆解两两交换链表节点的递归解法
cur:当前链表的第一个节点(需要被交换到第二个位置);next:当前链表的第二个节点(需要被交换到第一个位置,成为新头节点);tail:剩余节点的头(即next->next,需要递归处理的部分,需要考虑为空的特殊情况)。// 第一个节点// 第二个节点// 剩余节点的头两两交换链表节点的递归解法,本质是将大问题拆成 “前 2 个节点” 和 “剩余节点” 两个子问题前 2 个节点:直接交换指针,完成局部处理;剩余节点:通过递归复用相同的处理逻辑,得到已交换的子链表;
2025-11-03 11:37:03
1241
原创 算法: 从特殊到一般——彻底弄懂汉诺塔问题的递归解法
很多人学递归时会陷入 “逐行跟踪每一步” 的误区,导致越看越乱。其实通过汉诺塔问题我们能发现:递归的本质是 “信任”—— 当我们写_hanota(A, C, B, n-1)时,不需要关心这 n-1 个圆盘具体怎么移,只需要相信 “这个函数能正确地把 n-1 个圆盘从 A 移到 B(借助 C)”。而这种 “信任” 的基础,正是我们从特殊情况(n=1、n=2、n=3)中验证过的规律:终止条件(n=1)是确定可行的;分治逻辑(n→n-1)是正确的,能把大问题拆成小问题,直到触发终止条件。
2025-11-02 17:29:41
1194
原创 微服务即时通讯系统(服务端)——Speech 语音模块开发(2)
首先通过//请求ID//语音数据//用户ID//登录会话ID -- 网关进行身份鉴权//请求ID//请求处理结果标志//失败原因//识别后的文字数据//语音识别Rpc服务及接口的定义通过 protoc 编译生成与,作为 RPC 接口的基础代码。低耦合:工具类(ASRTool、EtcdTool)与业务逻辑分离,便于替换第三方 API 或服务发现组件。高可用:etcd 租约与实时监听确保服务上下线感知,轮询策略实现负载均衡。易扩展。
2025-10-26 16:56:33
1159
原创 微服务即时通讯系统——整体架构和组件(1)
高扩展性:各服务可独立扩容(如消息服务压力大时单独增加实例)高可用性:单个服务故障不影响整体系统(如文件服务故障时,文本消息仍可发送)开发效率提升:团队可按服务分工,并行开发,接口定义清晰后互不干扰技术适配灵活:不同服务选择最适合的技术栈(如消息服务用 Elasticsearch,用户服务用 MySQL)
2025-10-22 21:02:50
1038
原创 调用百度云语音识别服务——实现c++接口识别语音
client是语音识别的C++客户端,为使用语音识别的开发人员提供了一系列的交互方法。百度云语音识别 API 提供了稳定、高效的语音转文字能力,本文将以。是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的。建议使用简单的SDK调用,再百度云官方下载即可。为例,手把手教你用 C++ 实现调用,从前期准备到代码落地,每一步都清晰可操作。在写代码前,我们需要完成百度云账号配置和开发环境准备,这是调用 API 的基础。在百度云控制台中创建,常量。
2025-10-22 21:02:17
1063
原创 字符串相乘:从暴力算法到规律优化
效率极高:避免了所有字符串插入操作和中间结果的字符串存储逻辑清晰:直接模拟了乘法的数学本质内存友好:使用数组存储中间结果,内存开销稳定。
2025-10-21 14:29:10
1192
原创 最长回文子串:从暴力破解到动态规划再到中心扩展
回文子串:连续的字符序列,正读与反读相同(如 “bb”“aba”,区别于 “abcba” 这种回文串,子串要求连续)。最长:需在所有回文子串中找到长度最大的,若有多个长度相同的,返回任意一个即可。如何高效遍历所有可能的子串,避免遗漏;如何快速判断一个子串是否为回文,减少冗余计算;如何优化时间复杂度,避免暴力算法的低效问题。解决 “最长回文子串” 的优化路径,本质是减少冗余计算暴力算法的冗余在于 “重复判断回文”,动态规划通过预存状态消除了这一冗余;
2025-10-19 17:03:01
732
原创 算法——字母异位词分组:从基础判断到高效分组的解题推导
若两个字符串中,每个字符出现的次数完全相同(不考虑顺序),则称它们为字母异位词。例如 “eat” 和 “tea”:两者都包含 1 个 ‘a’、1 个 ‘e’、1 个 ‘t’,属于异位词;而 “eat” 和 “tan” 因字符种类不同(前者有 ‘e’,后者有 ‘n’),不属于异位词。解决 “分组异位词” 问题的关键,本质是找到一种“哈希键”—— 让所有异位词对应同一个键,非异位词对应不同的键,再用哈希表(如)按键分组。解决 “字母异位词分组” 问题的核心是“找到异位词的统一标识”
2025-10-19 15:45:16
759
原创 RabbitMQ 入门:基于 AMQP-CPP 的 C++ 实践指南与二次封装
RabbitMQ 作为主流的消息中间件,凭借高可靠性、灵活的路由策略和跨语言支持,广泛应用于分布式系统解耦、异步通信场景。本文将以 C++ 的 AMQP-CPP 库为核心,从通信模式到核心接口,带你快速上手 RabbitMQ 的开发。AMQP-CPP 是 RabbitMQ 的 C++ 客户端库,提供两种网络通信模式,可根据项目的事件循环依赖灵活选择。TCP 模式需手动实现网络层逻辑,核心是继承类并完成关键函数重写,适合需要深度定制事件循环(如用 select/epoll)的场景。2. 扩展模式:借助第三方
2025-10-19 13:06:25
1296
原创 Ubuntu 系统 RabbitMQ 安装指南与使用(含 C++ 客户端与 SSL 错误解决)
本文从 RabbitMQ 服务端安装、用户配置、Web 管理界面启用,到 C/C++ 客户端库部署,再到 SSL 错误解决,覆盖了 Ubuntu 系统下 RabbitMQ 开发的完整流程。服务端需注意用户权限配置和端口开放,确保远程访问正常;客户端依赖libev和openssl,需提前安装;SSL 版本冲突是常见坑,通过强制卸载 + 重新安装可解决;安装后通过简单代码验证,确保库文件链接正常。
2025-10-19 13:00:44
1247
原创 从合并两个链表到 K 个链表:分治思想的递进与堆优化
基础是关键:合并 K 个链表的所有解法都依赖于 “合并两个链表” 的基础逻辑,掌握基础才能进阶。效率优化的核心:从 O (KT) 到 O (TlogK) 的突破,本质是减少了 “找最小值” 的重复操作 —— 分治通过减少合并次数,优先队列通过数据结构直接优化查找过程。算法选择:实际应用中,分治和优先队列都是高效解法,可根据场景选择(如递归深度限制、内存限制等)。优先队列是一种特殊的队列结构,它打破了普通队列 “先进先出(FIFO)” 的规则,而是按照元素的优先级。
2025-10-17 11:49:56
1369
原创 从规律到代码:单链表重排(L0→Ln→L1→Ln-1…)的实现解析
解决链表重排问题的关键,是先通过对比 “原链表” 和 “目标链表”,发现 “顺序前半段 + 倒序后半段” 的核心规律,再将规律拆成 “拆分→反转→合并” 三个基础步骤。每个步骤都用成熟的链表操作(快慢指针找中点、迭代反转、临时指针合并)实现,既降低了思维难度,也保证了代码的可读性和效率。
2025-10-17 10:36:30
943
原创 ODB-Mysql API接口(常用类与函数)
在使用 ODB(如 CodeSynthesis ODB)与 MySQL 数据库映射时,C++ 数据类型与 MySQL 字段类型的映射遵循一定规则。以下是常见的 C++ 类型到 MySQL 类型的映射表,包含默认映射及可自定义的选项:在 ODB(Object-Database Binding,如 CodeSynthesis ODB)中,预处理器指令 是核心元数据载体,用于向 ODB 代码生成器传递 C++ 类型与数据库模式(表、列、关系等)的映射规则。这些 指令不影响 C++ 编译器的正常编译(编译器会忽
2025-10-16 22:13:45
413
原创 基于 build2 安装 ODB 完整流程(含版本适配与问题解决)
本文详细介绍了在Ubuntu系统中通过build2工具安装ODB编译器、运行时库及MySQL驱动的完整流程。主要内容包括:1. build2工具的安装与配置;2. ODB编译器的安装及GCC插件依赖处理;3. ODB运行时库和MySQL驱动的构建;4. MySQL数据库的安装配置。文中特别强调了版本适配问题(如GCC版本匹配)、网络超时解决方案以及常见错误的排查方法,适用于Ubuntu 22.04/24.04等不同版本环境。安装过程耗时较长,需要耐心等待各步骤完成。
2025-10-15 13:36:13
1101
原创 归并排序思路解决逆序对问题
为什么需要排序?排序能让子区间保持有序,使跨区逆序对的统计从「逐个比较」变为「批量计算」,将时间复杂度从 O (n²) 降至 O (n log n)。排序的作用过程?拆分时:递归计算子区间逆序对,同时将子区间排序。合并时:利用子区间的有序性,通过双指针一次遍历完成跨区逆序对统计,并合并为更大的有序区间,为上层计算提供基础。核心思想:分治思想将问题拆解为「子区间内部逆序对」和「跨区间逆序对」,排序则为跨区间统计提供了高效手段,最终实现整体的高效求解。
2025-10-12 10:47:35
1341
原创 websocketpp框架入门
是一个基于 C++ 的开源库,用于实现 WebSocket 协议的客户端和服务器。它封装了 WebSocket 协议的底层细节(如握手、帧解析、连接管理等),提供了简洁的 API 供开发者使用。与 WebSocket 协议的关系:WebSocket 是一种全双工通信协议(基于 TCP),允许客户端和服务器在单个连接上双向实时通信;WebSocket++ 是该协议的C++ 实现库,开发者无需手动处理协议细节,直接调用库接口即可实现 WebSocket 通信。
2025-10-11 08:00:00
751
原创 cpp-httplb库使用手册
cpphttplib是一个轻量级C++ HTTP库,提供Server和Client两个核心类实现HTTP服务功能。Server类支持监听端口、处理GET/POST请求、设置静态文件服务和连接管理;Client类可实现GET/POST请求、文件上传和超时设置等功能。库中Request类封装请求信息,Response类处理响应数据,使用时需注意线程安全和编译选项配置。该库适合快速构建简单的HTTP服务应用。
2025-10-10 16:09:58
1484
原创 用elasticlient封装Elasticsearch C++ 客户端封装库
这是一个基于 C++ 的 Elasticsearch 客户端封装库,通过封装elasticlient库提供了简洁易用的 API 来操作 Elasticsearch 索引、文档的增删查等核心功能。库采用模块化设计,包含索引管理、文档插入、搜索查询和删除操作等组件。
2025-10-10 15:26:44
533
原创 应用于ElasticSearch的C++ API——elasticlient
类别说明类名功能封装 HTTP 请求的响应数据命名空间cpr头文件。
2025-10-09 19:20:24
1098
原创 ElasticSearch与Kibana 入门指南(7.x版本)
查询场景推荐查询类型核心特点所有数据match_all返回全部文档名字精确匹配term针对keyword类型年龄精确 / 范围匹配termrange针对数值类型多条件组合boolmust等)组合多个查询条件描述全文检索match分词后匹配,适合模糊查询描述精确短语匹配匹配连续的短语,顺序相关需求场景操作方式关键点删除单条已知 ID 的文档DELETE /索引/_doc/ID精准删除,影响范围小删除符合条件的多条文档POST /索引/_delete_by_query。
2025-10-09 19:13:40
1113
原创 【新版】Elasticsearch 8.15.2 完整安装流程(Linux国内镜像提速版)
IK 官方仓库最新 Releases 信息可知,IK 已不再在 GitHub Releases 直接提供预编译包,而是通过。命令,可直接从官方链接下载并安装 IK 插件,自动适配版本,避免手动下载和解压的权限 / 路径问题。以下是针对 ES 8.15.2(或选择的 8.x 版本)的。,快速安装 Elasticsearch 8.15.2。(至少 8 位,包含大小写字母、数字和特殊字符,例如。
2025-10-05 19:09:46
2336
原创 C++基于 brpc 的 Channel 管理封装
include "LogTool.hpp" // 日志工具// 定义channel智能指针类型,简化书写并自动管理内存。
2025-10-05 14:04:47
1062
1
原创 C++——brpc框架入门
RPC(Remote Procedure Call,远程过程调用)是一种进程间通信(IPC)技术,允许程序像调用本地函数一样调用另一台计算机(或同一台计算机的不同进程)中的函数,无需手动处理网络通信细节(如 socket 连接、数据序列化 / 反序列化)。BRPC是百度开源的高性能 C++ RPC 框架(全称:Baidu RPC),基于 Protobuf 接口定义,支持多种通信协议(如baidu_std、HTTP、gRPC),提供负载均衡、超时控制、重试机制等工业级特性。.proto。
2025-10-05 13:54:29
1101
原创 ProtoBuf使用手册(入门)
/ 字段名 = 字段编号(1-15 占1字节,建议常用字段用)// 字段类型 + 名称 + 编号// repeated 表示可重复(类似数组)
2025-10-01 13:15:44
1269
原创 【最新版】ProtoBuffer安装教程
若无法访问 GitHub,可通过 Gitee 的镜像仓库下载 Protocol Buffers(protobuf),以下是针对不同操作系统的完整下载与安装方案,包含源码编译和二进制包两种方式,并提供校验与排错指南。:检查安装路径是否在 PATH 中,Linux/macOS 可执行sudo ln -s /usr/local/bin/protoc /usr/bin/protoc创建软链接。仓库地址:https://gitee.com/mimo431/protobuf.git。
2025-10-01 09:55:07
982
原创 LinuxC++——etcd分布式键值存储系统API(libetcd-cpp-api3)下载与二次封装
etcd-cpp-apiv3 是一个 C++ 语言编写的 etcd 客户端库,用于与 etcd 分布式键值存储系统进行交互。特性说明项目简介基于 C++ 的 etcd v3 API 客户端库核心功能分布式键值存储、配置管理、服务发现、分布式锁主要依赖官方仓库github下载地址通信协议通过 gRPC 与 etcd 服务器通信 (HTTP2 + protobuf)
2025-09-30 11:51:50
616
1
原创 LinuxC++——etcd-cpp-api精简源代码函数参数查询参考
构造函数的核心作用是建立与 etcd 集群的连接,支持普通连接、认证(用户名密码)、SSL 加密、自定义 gRPC 参数等场景,同时提供静态工厂方法(当你为键绑定租约后,需要定期向 etcd 发送续期请求才能维持租约有效,是 etcd 的 “监听器”,用于实时监控键的变化,当键被新增、修改或删除时,会通过回调函数通知你。etcd 租约用于管理键的生命周期:租约过期后,所有绑定该租约的键自动删除。监听键或目录的变化(新增、更新、删除),异步获取变化事件。会自动完成这个过程,避免键被自动删除。
2025-09-30 11:49:55
1293
原创 LinuxC++——etcd分布式键值存储系统入门
在Linux Ubuntu中,etcd是一个高可用、强一致性的分布式键值存储系统 ,它常被用作服务发现、配置共享和协调分布式服务的核心组件。etcd 在微服务和容器编排领域应用广泛,Kubernetes 就使用 etcd 作为其存储后端,用于存储所有集群数据。安装后,etcd 服务通常会自动启动,你可以使用 sudo systemctl status etcd 来查看服务状态。:访问 etcd 的 GitHub 发布页面,获取最新稳定版本的压缩包。:基于Raft算法实现分布式系统数据的可用性和一致性。
2025-09-30 11:36:04
860
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅