自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(856)
  • 问答 (2)
  • 收藏
  • 关注

原创 Redis之分布式 Session问题

平常做的项目都是在一台应用系统,并且所有的操作都在一台 Tomcat 服务器上,并不会引发 Session共享 的问题,所以并不会对系统产生影响,但是当部署多个微服务的时候,再搭配。里还没有用户信息,于是就是出现让用户重新登录的情况,在微服务分布式项目中,不同的功能模块必然会被分列成各自的微服务,假设访问一个功能都需要重新登录一次,用户的体验必然会大幅度下降。进行负载均衡时,如果不处理分布式 Session 问题,那么在系统中访问不同功能时就会频繁出现用户登录的操作。上登录成功之后,用户的信息放在。

2026-10-22 18:29:34 88

原创 Rust高级之异步async/await讲解

异步编程是一种在Rust中处理非阻塞操作的方式,允许程序在执行长时间的 I/O 操作时不被阻塞,而是在等待的同时可以执行其他任务。Rust 提供了多种工具和库来实现异步编程,包括async和await关键字、futures和异步运行时(如 tokio、async-std 等),以及其他辅助工具。FutureFuture是 Rust 中表示异步操作的抽象。它是一个可能还没有完成的计算,将来某个时刻会返回一个值或一个错误。async关键字用于定义一个异步函数,它返回一个Future。await。

2026-08-01 14:17:25 218

原创 Rust高级之并发和智能指针

智能指针()是一种在Rust中常见的数据结构,它们提供了额外的功能和安全性保证,以帮助管理内存和数据。在 Rust 中,智能指针是一种封装了对动态分配内存的所有权和生命周期管理的数据类型,智能指针通常封装了一个原始指针,并提供了一些额外的功能,比如引用计数、所有权转移、生命周期管理等。普通引用智能指针所有权借用,不拥有拥有数据指针本身的位置通常在栈上也在栈上(它只是个局部变量)指向数据的位置不一定:可在栈上、堆上或静态区通常在堆上(Box::new总是堆分配)自动释放。

2026-08-01 14:15:16 248

原创 Rust高级之宏讲解

宏(Macros)是一种在编译时生成代码的强大工具,它允许在编写代码时创建自定义语法扩展。宏(Macro)是一种在代码中进行元编程()的技术,允许在编译时生成代码,宏可以帮助简化代码,提高代码的可读性和可维护性,同时允许开发者在编译时执行一些代码生成的操作。宏在 Rust 中有两种类型:声明式宏()和过程宏(在 Rust 中,使用关键字来定义声明式宏。my_macro {($arg:expr) => {// 模式匹配和展开// 生成的代码// 使用 $arg 来代替匹配到的表达式声明式宏使用。

2026-08-01 14:08:24 394

原创 Rust对象之结构体,枚举,特性

Rust中的结构体(Struct)与元组(Tuple)都可以将若干个类型不一定相同的数据捆绑在一起形成整体,但结构体的每个成员和其本身都有一个名字,这样访问它成员的时候就不用记住下标了。元组常用于非定义的多值传递,而结构体用于规范常用的数据结构。结构体的每个成员叫做"字段"。结构体定义,注意:结尾不需要;符号,而且每个字段定义之后用分隔found: u32Rust 枚举的每个变体(variant无数据元组式数据结构体式数据。三种可以在同一个枚举里混用。Quit, // 无数据(类似单元结构体)

2026-08-01 14:03:08 226

原创 Rust核心之所有权和生命周期

所有权对大多数开发者而言是一个新颖的概念,它是Rust为高效使用内存而设计的语法机制。所有权概念是为了让Rust在编译阶段更有效地分析内存资源的有用性以实现内存管理而诞生的概念。Rust中的每个值都有一个变量,称为其所有者一次只能有一个所有者当所有者不在程序运行范围时,该值将被删除// 在声明以前,变量 s 无效// 这里是变量 s 的可用范围// 变量范围已经结束,变量 s 无效变量范围是变量的一个属性,其代表变量的可行域,默认从声明变量开始有效直到变量所在域结束。Rust。

2026-08-01 13:58:13 310

原创 Rust基础之函数和错误

闭包是一种匿名函数,它可以捕获并存储其所在环境中的变量,并把这些变量“带”到它被调用的地方去使用。闭包被广泛应用于函数式编程、并发编程和事件驱动编程等领域。let closure_name = |参数列表| 表达式或语句块;闭包和普通函数都能封装一段逻辑,但闭包可以捕获外部环境中的变量特性闭包函数匿名性没有名称,通常赋值给变量有固定的 fn 名称环境捕获可以捕获外部变量不能捕获外部变量定义方式|参数| 表达式fn 名称(参数)类型推导参数和返回值类型通常可以省略。

2026-08-01 13:52:17 423

原创 Rust基础之变量和组织管理

Rust是强类型语言,具有自动判断变量类型的能力,声明变量需要使用let关键字,Rust中的变量是不可变的,除非使用mut关键字声明为可变变量,// 不可变变量// 可变变量b = 345;// b 重新赋值Rust的迭代器是惰性求值的,这意味着迭代器本身不会立即执行操作,而是在需要时才会产生值。迭代器允许以一种声明式的方式来遍历序列,如数组、切片、链表等集合类型的元素。迭代器背后的核心思想是将数据处理过程与数据本身分离,使代码更清晰、更易读、更易维护。在Rust中,迭代器通过实现来定义。

2026-08-01 13:46:59 315

原创 Rust基础之环境搭建

Rust是由 Mozilla 主导开发的高性能编译型编程语言,遵循"安全、并发、实用"的设计原则,首次发布于 2010 年。Rust支持多种编程范式,包括函数式、并发式、过程式和面向对象风格。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,可以在嵌入式设备上运行,还能轻松和其他语言集成。

2026-07-16 11:56:15 612

原创 Kafka集群之抛弃 Zookeeper

以前查一个 topic 创建失败,可能要看:AdminClient 日志,Broker 日志,Controller 日志,Zookeeper 日志,网络连接,ZK session。那时候要解决的核心问题是高吞吐日志流,不想把一致性、选举、元数据管理都塞进自己身体里,拆出去,活能跑起来。这不是 send 写错了,也不是序列化错了,是集群控制面在抖。通知慢一点,线上看到的现象就不是“创建 topic 慢”,而是一堆看起来没那么直接的异常。这种东西,别为了架构洁癖动它,能稳跑的老集群,不是今天看到。

2026-06-11 18:17:08 788

原创 SpringCloud之负载均衡 Ribbon和LoadBalancer讲解

Ribbon是Netflix开源的客户端负载均衡组件,是Spring官方推出的替代方案。替换的根本原因是Ribbon已进入维护模式(Maintenance Mode),不再积极更新。客户端负载均衡和服务端负载均衡有什么区别?客户端负载均衡():由调用方自己选择服务实例,不需要中间代理。服务端负载均衡(Nginx / F5):由代理服务器选择后端实例,前者性能更好(少一跳),后者与语言无关。

2026-06-11 17:11:43 571

原创 AI基础之RAG讲解

RAG,检索增强生成)核心思路就一句话:让大模型在回答问题之前,先去外部知识库里检索相关资料,然后基于这些资料来生成回答。打个比方,大模型就像一个学生参加开卷考试——与其死记硬背所有知识(预训练),不如带着参考书进场,需要的时候翻一翻。RAG就是给大模型配的这本 “参考书”。

2026-06-06 16:48:43 546

原创 Spring中用到的设计模式

Spring设计模式Spring 中的典型应用一句话说明工厂模式把对象的创建过程封装起来单例模式Bean的默认作用域整个容器中只有一个实例代理模式AOP(JDK 动态代理 / CGLIB)不改源码就能增强功能模板方法模式固定骨架,可变步骤留给子类观察者模式事件机制一处发布,多处监听适配器模式让不兼容的接口能协同工作策略模式Resource接口、同一接口,不同实现策略责任链模式Filter链、链请求沿着链条依次处理装饰器模式动态增强对象功能。

2026-06-02 16:48:41 544

原创 FastUtil高性能集合

FastUtil是由意大利计算机科学家 Sebastiano Vigna 维护的开源库,它为Java原始类型()提供了类型特化的集合实现,性能通常比 JDK 集合快 2~5 倍,内存占用降低40%~70%。在高性能后端、游戏服务器、大数据处理、量化交易等场景中,几乎是标配。

2026-04-26 21:18:19 661

原创 MySQL优化之系统表分析SQL

写个 shell 脚本把这 10 条 SQL 串起来,每天凌晨跑一遍,结果发到告警群线上出性能问题时,先跑一遍这个脚本,用输出数据倒推是哪个环节出了问题的统计是累计值,排查之前先,这样就能只看最近这段时间的数据,不被历史污染如果没有权限,或者不想冒险直接操作,可以使用MySQL官方提供的sys Schema存储过程,这是更安全、便捷的做法:-- 会截断 performance_schema 下所有的 summary 和 history 表。

2026-04-20 15:34:26 540

原创 Redis 8 新特性

所有模块的功能,全部内置到核心包中。不需要模块,不需要对齐版本,不需要担心兼容性。如果还在用Redis 6还是Redis 7,升级到Redis 8,不是选择题,是必答题。从Redis 7.4、Redis Stack 7.2/7.4,直接升级到Redis 8。,不是简单的版本迭代,是一次底层重构,是一次性能飞跃,更是一次对未来的重新定义。,吞吐量翻倍,复制速度加快18%,查询处理能力提升16倍。每个模块都要单独装,版本还要对齐,升级还要操心兼容性。的性能提升,不是吹出来的,是测出来的。

2026-04-20 14:15:09 881

原创 AI使用之节省token方法

让AI自己总结记忆,这个方案的想法很巧妙:不保留原始对话,而是定期让大模型把旧对话“压缩”成一段摘要,只保留关键信息。// 历史摘要// 未压缩的新消息// 触发压缩的token阈值// 大模型客户端// 估算当前token数,超过阈值则触发压缩compress();// 构建待压缩的内容:旧摘要 + 新消息请将以下对话历史压缩成一段简洁的摘要,保留:1. 用户的关键信息(姓名、偏好、身份、已做出的决定)2. 重要的任务状态和上下文3. 任何后续对话可能需要的事实。

2026-04-20 12:01:38 1018

原创 高并发之双写一致性

在使用定时任务的方案中,需要在业务代码中增加额外逻辑,如果删除缓存失败,需要将数据写入重试表,而使用mq的方案中,如果删除缓存失败了,需要在业务代码中发送mq消息到mq服务器。其实先写数据库,再删缓存的方案,跟缓存双删的方案一样,有一个共同的风险点,即:如果缓存删除失败了,也会导致缓存和数据库的数据不一致。在接口中如果更新了数据库成功了,但更新缓存失败了,可以立刻重试3次。,即在写数据库之前删除一次,写完数据库后,再删除一次,该方案有个非常关键的地方是:第二次删除缓存,并非立马就删,而是要在一定的。

2026-04-20 10:26:04 477

原创 PostgreSQL基础之安装

修改完密码记得把数据目录data下的。设置密码,账号默认为postgres。数据库服务监听端口号,默认端口号即可。系统语言/地区, 建议选择默认。数据库相关数据默认存放在这里。启动 PostgreSQL。

2026-03-13 11:49:56 5802

原创 SpringBoot整合MongoDB讲解

时必须把 每个节点 IP/域名、端口、副本集名字、authSource 全写在 URI 里,加 +srv 后,可以不用写详细uri了。mongo 是springboot 整合的,直接使用springboot中集成的版本了。,但是没有使用,则需要排序mongo的配置不然没有配置uri,项目启动有问题。记录,自动拿到副本集所有节点地址 + 鉴权数据库、参数,再真正连接。对象,并没有有类的概念。方法,可以返回对象所属的类。字段,用来存储Java类的全限定名。对象来实现这一目标。需要知道每个文档所属的Java类。

2026-01-13 11:16:29 1558

原创 Ollama讲解与使用

Ollama是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计,支持多种操作系统,包括 macOS、Windows、Linux 以及通过Docker容器运行。Ollama的特点在于它不仅仅提供了现成的模型和工具集,还提供了方便的界面和API,使得从文本生成、对话系统到语义分析等任务都能快速实现。与其他 NLP 框架不同,Ollama旨在简化用户的工作流程,Ollama。

2025-12-27 19:46:37 1639

原创 Spring WebFlux与SpringMVC 对比讲解

从早期的Struts到统治多年的Spring MVC,见证了整个 Java Web 开发框架的演进。所以今天深入聊聊 Spring 5 带来的这个“新成员”——WebFlux。有些小伙伴在工作中可能听说过它,知道它性能高异步非阻塞,但真要上手,心里却直打鼓:这和Spring MVC到底有啥不同?项目真的需要它吗?

2025-12-27 17:42:40 1412

原创 网络传输架构之gRPC讲解

有些小伙伴在工作中构建微服务架构时,可能会遇到服务间通信性能瓶颈。gRPC正是为了解决高性能分布式系统通信而设计的。双向流:支持客户端流、服务器流和双向流流量控制:基于HTTP/2的流控制多路复用:单个连接上并行多个请求头部压缩:减少传输开销优点:高性能,二进制编码支持双向流式通信强类型接口定义多语言支持内置认证、负载均衡等缺点:浏览器支持有限(需要gRPC-Web)可读性差,需要工具调试学习曲线较陡生态系统相对较小。

2025-11-24 17:43:14 1426

原创 网络传输架构之GraphQL讲解

有些小伙伴在工作中可能遇到过这样的场景:移动端只需要用户的姓名和邮箱,但REST API返回了用户的所有信息,造成数据传输浪费。GraphQL正是为了解决这个问题而生的。Schema定义:强类型系统描述API能力查询语言:客户端精确请求需要的数据执行引擎:解析查询并返回结果GraphQL的优缺点分析优点:精确的数据获取,避免过度获取单一端点,减少HTTP连接开销强类型系统,自动生成文档前端主导数据需求缺点:查询复杂度控制困难缓存实现复杂(HTTP缓存失效)

2025-11-24 17:39:58 1255

原创 MyBatis Flex 讲解使用

是一个在MyBatis基础上深度增强的框架,专为解决Java开发中数据库操作的复杂性而设计。它不仅保留了MyBatis原生的灵活性,可以自由编写SQL语句,同时又引入了一系列强大的特性,大大简化了开发流程。MyBatis-Flex 官网与其他ORM框架相比,具有显著的优势。它非常轻量,除了MyBatis之外,没有任何第三方依赖,这不仅减少了项目的依赖复杂度,还提高了系统的稳定性和自主性。在性能方面,表现卓越,其独特的架构设计,在SQL执行过程中没有任何SQL。

2025-11-22 18:57:58 1163

原创 Maven插件核心原理讲解

确切的说,我们日常提及的Maven实际上只是Maven插件集合的核心框架。创建jar文件创建war文件编译代码单元测试代码创建项目文档等等。几乎所有能想到的在项目中执行的操作都是通过Maven插件实现的。而我们安装的maven仅仅是为插件的运行提供一个管理框架我们在打开一个maven管理的工程时,通常能在其POM文件中看到这样的内容。

2025-11-19 14:54:31 934

原创 Go日志之日志库讲解

,可以用于记录简单的日志信息,如时间、级别、消息等。但是,如果需要更多的功能和灵活性,例如结构化日志、日志旋转、日志钩子、日志格式化等,那么可能需要使用第三方的日志库。是一种高性能、简洁、并发友好的编程语言,广泛用于开发各种应用程序,如网络服务、微服务、云计算、区块链等。是一个结构化、分级、可扩展和兼容标准库log包的日志库,由Sirupsen开发和维护。只支持结构化的日志记录,但是具有更高的性能和更低的内存分配。语言中最流行和最优秀的日志库,并给出每个库的使用示例代码。

2025-11-15 10:27:17 1198

原创 ThreadLocal与ScopedValue对比讲解

*** Web应用ScopedValue定义*/// 用户上下文// 请求信息// 数据库连接(可选)// 追踪ID/*** 用户上下文详细信息*///省去get 全参/*** 请求信息*///省去get 全参。

2025-11-06 11:20:30 899

原创 RocketMQ之原生方式操作

可以提供对 RocketMQ 的完全控制,可以精确配置各种参数(如 sendMsgTimeout、retryTimesWhenSendFailed 等),还可以直接访问所有 RocketMQ 特性。:是指客户端处理网络回调(包括消息拉取结果、心跳响应、offset 更新、发送确认等)时的线程池大小。客户端网络 I/O 层(Netty 客户端) 的回调处理线程数,主要负责执行客户端与。Push 模式特点 和 Pull方式(手动拉取)比较。核心类:DefaultMQPullConsumer。

2025-10-24 09:20:43 986

原创 FFmpeg和ZLMediaKit 实现本地视频推流

是一套强大的开源音视频处理工具,能够对本地视频进行解码、转码和推流。 则是一个轻量级、高效的流媒体服务器,负责接收并分发视频流。两者结合时,通常由将处理后的视频流,以或等协议推送至服务器,再由实现多终端、多协议的实时直播分发。 音视频编码、转换、处理的瑞士军刀,是一套可以记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案主要网址:特点:核心工具:主要包含三个强大的命令行工具::运营级流媒体服务器与服务框架,基于的高性能运营级流媒体服务框架主要网址:

2025-10-01 20:04:41 3310

原创 Win环境下包管理工具

Scoop和winget两个Windows下常见的包管理器Scoop:类Unix风格、以用户目录安装、无需管理员权限、适合把程序装在自定义位置,版本要求:Windows 7 或更高版本;winget:微软官方的Windows包管理器,集成Microsoft存储库和社区清单,适合统一安装/升级系统级软件(有时需要管理员权限),但不保证能把所有程序装到自定义盘(安装路径由各包的安装器决定)或更高版本 / Windows 11作为微软官方工具,winget的目标是成为Windows上统一的软件包管理标准。

2025-10-01 14:57:53 3399

原创 数据库之Doris DB详细讲解

在大数据时代,企业亟需能够同时应对海量数据和实时分析挑战的引擎。(原 Palo) 应运而生,它是一个现代化、高性能的 (大规模并行处理) 核心目标是为用户提供对超大规模数据集的毫秒级交互式查询体验。简单来说,它主要用于的快速分析和报表查询,而不是处理日常的事务(比如银行转账、电商下单等)。它最初由百度开发,后来贡献给了 Apache 基金会,现在是一个顶级的开源项目,全称是 Apache Doris主要应用场景:相较于同类产品(如 ClickHouse、StarRocks、Hadoop生态组件),Dor

2025-08-25 11:05:20 2263

原创 AI框架之LangChain4j讲解

是LangChainPython) 的 Java 移植版,遵循其原设计理念,灵活、模块化、非侵入式,是通用性很强的工具包。虽然是的 Java 实现,但并非简单移植,而是融合了 LangChain、Haystack、LlamaIndex 等框架的理念,专为 Java 开发者优化。以LLM为中心,注重模块化和灵活性,提供了统一的 API 来适配多种 LLM 和向量存储,适合需要高度定制化的场景。更灵活,模块化设计让开发者可以自由组合功能,适合构建复杂、定制化的 AI 工作流。

2025-08-20 10:18:06 3835 1

原创 SpringBoot打包运行原理和加载机制原理

java -jar启动过程中,会首先Paths类找到对应的启动jar的位置信息。读取文件里面的Main-class,启动使用类加载器,完成对当前类依赖的加载,如果当前类不存在,则去super(打破了双亲委派)。类加载器通过使用解决嵌套 JAR 的加载问题加载主类,并且执行main方法。这种设计使得Spring Boot应用可以像普通可执行文件一样运行,简化了部署和分发过程。

2025-06-14 20:36:35 1473 1

原创 Spring Integration之消息传递讲解

是Spring框架的一个重要扩展,其核心目标在于极大地简化企业集成模式的开发过程。它构建了一种基于消息的编程模型,让分布式系统中的系统集成变得更加轻松便捷。消息:在的体系中,消息是信息传递的关键载体。它就像一个装满各种信息的“包裹”,不仅可以包含业务数据,还能携带头部信息、消息标签等内容。消息会沿着特定的通道(Channel)在系统中有序传递。通道(Channel):通道就像是消息在系统中流动的“高速公路”。提供了多种不同类型的通道,直接通道(),它就像一条直达专线,能让消息快速高效地传递;

2025-05-06 14:50:57 1540

原创 MySQL数据同步之Canal讲解

Canal是阿里巴巴开源的一个用于高效抓取MySQL数据库增量变更日志(binlog)并进行处理的中间件。它可以将MySQL的binlog解析为结构化的JSON格式,并提供多种方式将这些数据推送到下游系统。

2025-05-01 09:37:25 2880 1

原创 日志之ClickHouse部署及替换ELK中的Elasticsearch

ClickHouse 官方 RPM 包通常针对 x86_64 架构编译,并依赖 SSE 4.2 指令集,检查当前CPU是否支持SSE 4.2,如果不支持,需要通过源代码编译构建。FileBeat 配置文件说明,坑点 1(需设置 keys_under_root: true)。复制 default.bi_inner_log_local 的列定义(列名、类型等),但不复制数据。修改监听地址(允许远程访问): 默认只监听本地(127.0.0.1)。的 DDL 语法,用于在集群的所有节点上同步执行 DDL 语句。

2025-05-01 09:36:05 1624

转载 动态脚本引擎之QLExpress讲解

是阿里巴巴开源的一门动态脚本引擎解析工具,是一个轻量级、高性能的 Java 规则引擎 和 动态脚本执行框架,起源于阿里巴巴的电商业务,旨在解决业务规则、表达式、数学计算等动态脚本的解析问题。它类似于Groovy或JavaScript引擎,但更专注于规则解析和执行效率线程安全QLExpress被设计为线程安全的动态脚本引擎,它使用类型的临时变量,确保在引擎运算过程中的并发场景下的线程安全性。高效执行: 为了提高执行效率,QLExpress在编译过程中可以将比较耗时的脚本编译结果缓存到本地机器。

2025-04-11 09:51:14 2054

原创 Model Context Protocol (MCP) 协议讲解

是OpenAI提出的一个用于多模型系统之间共享上下文和状态的协议,主要目标是在不同的AI 模型之间建立统一的上下文语言,以便它们能够更好地协同工作。简单来说,MCP是用来让多个模型在同一个脑子里工作的协议,它建立了共享上下文的通用格式。MCP 就像一个统一的翻译官,让AI只需学一种"语言"就能和所有服务交流。这样开发者不用为每个服务单独开发连接方式,AI也能更容易获取它需要的信息。gRPC通过标准化的通信方式可以实现不同语言开发的服务之间进行通信,那么MCP专门为AI模型设计的翻译官和接口管理器。

2025-04-08 10:35:48 2070

转载 使用 Ollama 本地化部署 deepseek

Ollama是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。​Ollama本地运行:​支持在本地环境中部署和运行大型语言模型,确保数据隐私和安全。​简化部署:​通过简单的安装和配置,即可快速启动模型,降低了技术门槛。​多模型支持:​兼容多种预训练模型,满足不同的应用需求。​硬件友好:​支持纯 CPU 推理,适用于各种硬件环境。​。

2025-03-26 13:42:38 452

空空如也

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

TA关注的人

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