- 博客(839)
- 问答 (2)
- 收藏
- 关注
原创 PostgreSQL基础之安装
修改完密码记得把数据目录data下的。设置密码,账号默认为postgres。数据库服务监听端口号,默认端口号即可。系统语言/地区, 建议选择默认。数据库相关数据默认存放在这里。启动 PostgreSQL。
2026-03-13 11:49:56
174
原创 SpringBoot整合MongoDB讲解
时必须把 每个节点 IP/域名、端口、副本集名字、authSource 全写在 URI 里,加 +srv 后,可以不用写详细uri了。mongo 是springboot 整合的,直接使用springboot中集成的版本了。,但是没有使用,则需要排序mongo的配置不然没有配置uri,项目启动有问题。记录,自动拿到副本集所有节点地址 + 鉴权数据库、参数,再真正连接。对象,并没有有类的概念。方法,可以返回对象所属的类。字段,用来存储Java类的全限定名。对象来实现这一目标。需要知道每个文档所属的Java类。
2026-01-13 11:16:29
913
原创 Ollama讲解与使用
Ollama是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计,支持多种操作系统,包括 macOS、Windows、Linux 以及通过Docker容器运行。Ollama的特点在于它不仅仅提供了现成的模型和工具集,还提供了方便的界面和API,使得从文本生成、对话系统到语义分析等任务都能快速实现。与其他 NLP 框架不同,Ollama旨在简化用户的工作流程,Ollama。
2025-12-27 19:46:37
942
原创 Spring WebFlux与SpringMVC 对比讲解
从早期的Struts到统治多年的Spring MVC,见证了整个 Java Web 开发框架的演进。所以今天深入聊聊 Spring 5 带来的这个“新成员”——WebFlux。有些小伙伴在工作中可能听说过它,知道它性能高异步非阻塞,但真要上手,心里却直打鼓:这和Spring MVC到底有啥不同?项目真的需要它吗?
2025-12-27 17:42:40
1129
原创 网络传输架构之gRPC讲解
有些小伙伴在工作中构建微服务架构时,可能会遇到服务间通信性能瓶颈。gRPC正是为了解决高性能分布式系统通信而设计的。双向流:支持客户端流、服务器流和双向流流量控制:基于HTTP/2的流控制多路复用:单个连接上并行多个请求头部压缩:减少传输开销优点:高性能,二进制编码支持双向流式通信强类型接口定义多语言支持内置认证、负载均衡等缺点:浏览器支持有限(需要gRPC-Web)可读性差,需要工具调试学习曲线较陡生态系统相对较小。
2025-11-24 17:43:14
1301
原创 网络传输架构之GraphQL讲解
有些小伙伴在工作中可能遇到过这样的场景:移动端只需要用户的姓名和邮箱,但REST API返回了用户的所有信息,造成数据传输浪费。GraphQL正是为了解决这个问题而生的。Schema定义:强类型系统描述API能力查询语言:客户端精确请求需要的数据执行引擎:解析查询并返回结果GraphQL的优缺点分析优点:精确的数据获取,避免过度获取单一端点,减少HTTP连接开销强类型系统,自动生成文档前端主导数据需求缺点:查询复杂度控制困难缓存实现复杂(HTTP缓存失效)
2025-11-24 17:39:58
1181
原创 MyBatis Flex 讲解使用
是一个在MyBatis基础上深度增强的框架,专为解决Java开发中数据库操作的复杂性而设计。它不仅保留了MyBatis原生的灵活性,可以自由编写SQL语句,同时又引入了一系列强大的特性,大大简化了开发流程。MyBatis-Flex 官网与其他ORM框架相比,具有显著的优势。它非常轻量,除了MyBatis之外,没有任何第三方依赖,这不仅减少了项目的依赖复杂度,还提高了系统的稳定性和自主性。在性能方面,表现卓越,其独特的架构设计,在SQL执行过程中没有任何SQL。
2025-11-22 18:57:58
733
原创 Maven插件核心原理讲解
确切的说,我们日常提及的Maven实际上只是Maven插件集合的核心框架。创建jar文件创建war文件编译代码单元测试代码创建项目文档等等。几乎所有能想到的在项目中执行的操作都是通过Maven插件实现的。而我们安装的maven仅仅是为插件的运行提供一个管理框架我们在打开一个maven管理的工程时,通常能在其POM文件中看到这样的内容。
2025-11-19 14:54:31
644
原创 Go日志之日志库讲解
,可以用于记录简单的日志信息,如时间、级别、消息等。但是,如果需要更多的功能和灵活性,例如结构化日志、日志旋转、日志钩子、日志格式化等,那么可能需要使用第三方的日志库。是一种高性能、简洁、并发友好的编程语言,广泛用于开发各种应用程序,如网络服务、微服务、云计算、区块链等。是一个结构化、分级、可扩展和兼容标准库log包的日志库,由Sirupsen开发和维护。只支持结构化的日志记录,但是具有更高的性能和更低的内存分配。语言中最流行和最优秀的日志库,并给出每个库的使用示例代码。
2025-11-15 10:27:17
908
原创 ThreadLocal与ScopedValue对比讲解
*** Web应用ScopedValue定义*/// 用户上下文// 请求信息// 数据库连接(可选)// 追踪ID/*** 用户上下文详细信息*///省去get 全参/*** 请求信息*///省去get 全参。
2025-11-06 11:20:30
757
原创 RocketMQ之原生方式操作
可以提供对 RocketMQ 的完全控制,可以精确配置各种参数(如 sendMsgTimeout、retryTimesWhenSendFailed 等),还可以直接访问所有 RocketMQ 特性。:是指客户端处理网络回调(包括消息拉取结果、心跳响应、offset 更新、发送确认等)时的线程池大小。客户端网络 I/O 层(Netty 客户端) 的回调处理线程数,主要负责执行客户端与。Push 模式特点 和 Pull方式(手动拉取)比较。核心类:DefaultMQPullConsumer。
2025-10-24 09:20:43
873
原创 FFmpeg和ZLMediaKit 实现本地视频推流
是一套强大的开源音视频处理工具,能够对本地视频进行解码、转码和推流。 则是一个轻量级、高效的流媒体服务器,负责接收并分发视频流。两者结合时,通常由将处理后的视频流,以或等协议推送至服务器,再由实现多终端、多协议的实时直播分发。 音视频编码、转换、处理的瑞士军刀,是一套可以记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案主要网址:特点:核心工具:主要包含三个强大的命令行工具::运营级流媒体服务器与服务框架,基于的高性能运营级流媒体服务框架主要网址:
2025-10-01 20:04:41
2029
原创 Win环境下包管理工具
Scoop和winget两个Windows下常见的包管理器Scoop:类Unix风格、以用户目录安装、无需管理员权限、适合把程序装在自定义位置,版本要求:Windows 7 或更高版本;winget:微软官方的Windows包管理器,集成Microsoft存储库和社区清单,适合统一安装/升级系统级软件(有时需要管理员权限),但不保证能把所有程序装到自定义盘(安装路径由各包的安装器决定)或更高版本 / Windows 11作为微软官方工具,winget的目标是成为Windows上统一的软件包管理标准。
2025-10-01 14:57:53
1829
原创 数据库之Doris DB详细讲解
在大数据时代,企业亟需能够同时应对海量数据和实时分析挑战的引擎。(原 Palo) 应运而生,它是一个现代化、高性能的 (大规模并行处理) 核心目标是为用户提供对超大规模数据集的毫秒级交互式查询体验。简单来说,它主要用于的快速分析和报表查询,而不是处理日常的事务(比如银行转账、电商下单等)。它最初由百度开发,后来贡献给了 Apache 基金会,现在是一个顶级的开源项目,全称是 Apache Doris主要应用场景:相较于同类产品(如 ClickHouse、StarRocks、Hadoop生态组件),Dor
2025-08-25 11:05:20
1907
原创 AI框架之LangChain4j讲解
是LangChainPython) 的 Java 移植版,遵循其原设计理念,灵活、模块化、非侵入式,是通用性很强的工具包。虽然是的 Java 实现,但并非简单移植,而是融合了 LangChain、Haystack、LlamaIndex 等框架的理念,专为 Java 开发者优化。以LLM为中心,注重模块化和灵活性,提供了统一的 API 来适配多种 LLM 和向量存储,适合需要高度定制化的场景。更灵活,模块化设计让开发者可以自由组合功能,适合构建复杂、定制化的 AI 工作流。
2025-08-20 10:18:06
2145
1
原创 SpringBoot打包运行原理和加载机制原理
java -jar启动过程中,会首先Paths类找到对应的启动jar的位置信息。读取文件里面的Main-class,启动使用类加载器,完成对当前类依赖的加载,如果当前类不存在,则去super(打破了双亲委派)。类加载器通过使用解决嵌套 JAR 的加载问题加载主类,并且执行main方法。这种设计使得Spring Boot应用可以像普通可执行文件一样运行,简化了部署和分发过程。
2025-06-14 20:36:35
1248
1
原创 Spring Integration之消息传递讲解
是Spring框架的一个重要扩展,其核心目标在于极大地简化企业集成模式的开发过程。它构建了一种基于消息的编程模型,让分布式系统中的系统集成变得更加轻松便捷。消息:在的体系中,消息是信息传递的关键载体。它就像一个装满各种信息的“包裹”,不仅可以包含业务数据,还能携带头部信息、消息标签等内容。消息会沿着特定的通道(Channel)在系统中有序传递。通道(Channel):通道就像是消息在系统中流动的“高速公路”。提供了多种不同类型的通道,直接通道(),它就像一条直达专线,能让消息快速高效地传递;
2025-05-06 14:50:57
1403
原创 MySQL数据同步之Canal讲解
Canal是阿里巴巴开源的一个用于高效抓取MySQL数据库增量变更日志(binlog)并进行处理的中间件。它可以将MySQL的binlog解析为结构化的JSON格式,并提供多种方式将这些数据推送到下游系统。
2025-05-01 09:37:25
2465
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
1372
转载 动态脚本引擎之QLExpress讲解
是阿里巴巴开源的一门动态脚本引擎解析工具,是一个轻量级、高性能的 Java 规则引擎 和 动态脚本执行框架,起源于阿里巴巴的电商业务,旨在解决业务规则、表达式、数学计算等动态脚本的解析问题。它类似于Groovy或JavaScript引擎,但更专注于规则解析和执行效率线程安全QLExpress被设计为线程安全的动态脚本引擎,它使用类型的临时变量,确保在引擎运算过程中的并发场景下的线程安全性。高效执行: 为了提高执行效率,QLExpress在编译过程中可以将比较耗时的脚本编译结果缓存到本地机器。
2025-04-11 09:51:14
1323
原创 Model Context Protocol (MCP) 协议讲解
是OpenAI提出的一个用于多模型系统之间共享上下文和状态的协议,主要目标是在不同的AI 模型之间建立统一的上下文语言,以便它们能够更好地协同工作。简单来说,MCP是用来让多个模型在同一个脑子里工作的协议,它建立了共享上下文的通用格式。MCP 就像一个统一的翻译官,让AI只需学一种"语言"就能和所有服务交流。这样开发者不用为每个服务单独开发连接方式,AI也能更容易获取它需要的信息。gRPC通过标准化的通信方式可以实现不同语言开发的服务之间进行通信,那么MCP专门为AI模型设计的翻译官和接口管理器。
2025-04-08 10:35:48
1370
原创 内网穿透工具讲解
nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcpudp流量转发,可支持任何tcp、udp上层协议(访问内网网站、本地支付接口调试、ssh访问、远程桌面,内网dns解析等等……),此外还支持内网http代理、内网socks5代理、p2p等,并带有功能强大的web管理端。一台有公网IP的服务器(VPS)运行服务端(NPS)一个或多个运行在内网的服务器或者PC运行客户端(NPC)frp是一个专注于内网穿透的高性能的反向代理应用,支持等多种协议。
2025-03-28 16:38:03
1501
转载 使用 Ollama 本地化部署 deepseek
Ollama是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。Ollama本地运行:支持在本地环境中部署和运行大型语言模型,确保数据隐私和安全。简化部署:通过简单的安装和配置,即可快速启动模型,降低了技术门槛。多模型支持:兼容多种预训练模型,满足不同的应用需求。硬件友好:支持纯 CPU 推理,适用于各种硬件环境。。
2025-03-26 13:42:38
359
转载 SpringBoot 3 替换 spring.factories
从开始,引入了基于imports文件的新机制,作为的替代方案。这些文件位于文件名对应的spring.factories中的键对于自定义的扩展点,需要提供类似的imports// 自定义扩展点加载器示例// 迁移到新机制// 或者实现自己的imports文件加载逻辑// ...// 1. 创建配置属性类// getter和setter方法// ...// 2. 创建自动配置类。
2025-03-26 11:13:19
905
原创 Java多线程之StampedLock讲解
锁允许多个线程同时读取共享变量,但是在读取共享变量的时候,不允许另外的线程对共享变量进行写操作,更多的适合于读多写少的环境中。那么,在读多写少的环境中,有没有一种比更快的锁呢?答案当然是有!那就是——JDK1.8中新增的与相比,在读的过程中也允许后面的一个线程获取写锁对共享变量进行写操作,为了避免读取的数据不一致,使用读取共享变量时,需要对共享变量进行是否有写入的检验操作,并且这种读是一种乐观读。总之,是一种在读取共享变量的过程中,允许后面的一个线程获取写锁对共享变量进行写操作,使用乐观读。
2025-03-18 11:14:30
1046
2
原创 SpringCloud之Gateway灰度发布讲解
灰度发布, 也叫金丝雀发布。是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。
2025-03-11 11:50:22
1586
原创 Redis两级缓存之Caffeine讲解使用
在高性能的服务架构设计中,缓存是一个不可或缺的环节。在实际的项目中,我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中,只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时,也能降低数据库的压力。随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如或Caffeine,从而再次提升程序的响应速度与服务性能。于是,就产生了使用本地缓存作为一级缓存,再加上远程缓存作为二级缓存的两级缓存架构。
2025-03-01 10:35:42
1188
原创 SpringBoot 整合 Apache Tika提取数据
它支持多种文件格式,包括文档、电子表格、PDF、音频、视频、图片等,具有强大的文件内容解析能力。用于 敏感信息识别 和 数据泄露防护,我们可以在文件上传时提取文件内容,并在提取的文本中搜索潜在的敏感数据,如身份证号、信用卡信息、电话号码等。敏感信息的检测通常涉及正则表达式(Regex),你可以使用常见的模式来检测个人信息(如身份证号、信用卡号、电话号码等)。的架构组件主要包括以下几个核心部分,它们共同协作,以支持从各种文件格式中提取文本、元数据和其他信息。
2025-02-13 15:12:11
1585
原创 MySQL中大量数据优化方案
表分区可以在区间内查询对应的数据,降低查询范围并且索引分区也可以进一步提高命中率,提升查询效率分区是指将一个表的数据按照条件分布到不同的文件上面,未分区前都是存放在一个文件上面的,但是它还是指向的同一张表,只是把数据分散到了不同文件而已。分表后,显而易见,单表数据量降低,树的高度变低,查询经历的磁盘io变少,则可以提高效率分库分表。
2025-01-17 21:35:47
2924
原创 JavaFX基础之环境配置,架构,FXML
JavaFX中文官方网站JavaFX是一个开源的下一代客户端应用平台,适用于基于Java构建的桌面、移动端和嵌入式系统。目的是为开发丰富的客户端应用提供一个现代、高效、功能齐全的工具包。DBeaver、finalshell、Behinder(冰蝎)、BurpSuite、Jmeter、IDEA等等这类比较知名软件,那么java是否有更好的桌面应用开发的框架呢?准备环境:IDEA,JDK17,Windows,Scene BuilderFXML是一种可编写的、基于XML的用于构造JavaFX。
2025-01-08 17:50:20
1845
转载 JavaFX基础之组件讲解
以下是父节点坐标系的示例,其中子节点位于父节点坐标系中的(25,25)处。子节点也有它自己的坐标系,它有它的 (0,0),其中子节点位于父坐标系中-意思是在父节点坐标系中的(25,25)。这意味着,作为另一个节点的子节点的节点都有自己的坐标系,以及在其父节点坐标系中的位置 (X,Y)。在JavaFX中,窗口Stage可以插入一个场景Scene,它表示在窗口内显示的内容。随着Y值的增加,该点从坐标系的顶部向下移动。类是所有控件的父类,下面通过其控件子类示例演示Node节点的UI控件的通用属性。
2025-01-08 17:49:42
556
原创 Go IO之文件处理,TCP&UDP讲解
UDP是用户数据报协议,是一种无连接传输协议,不需要建立连接就可以直接发送和接收数据,属于不可靠的,没有时序的通信,UDP 实时性好,适合直播环境。一个服务端连接多个客户端,例如:世界各地的用户使用自己电脑的浏览器访问淘宝网。的作用是将 v 的值写入 f 中,并且在写入的值后面会自动添加换行符。” 输出到标准输出(即控制台)函数能够以指定模式打开文件,从而实现文件写入相关功能。函数能够打开一个文件,返回一个。,读到文件末尾时会返回。如果想把某个值写到控制台。如果有乱码,可以使用。v 的内容写入到 f。
2024-12-29 08:31:43
1071
1
原创 Go 并发之WaitGroup,并发锁,Context
context是一个用于跨 API 边界传递元数据、取消信号、超时控制以及其他请求范围内的信息的包。它常用于处理并发编程中的超时、取消、以及请求范围内的数据传递。那么为什么需要 context?请求取消:在某些情况下,可能需要在某个请求被取消时终止正在进行的操作。超时控制:有时需要设置操作的超时时间,超过时间就终止操作。跨 API 边界传递元数据:需要在不同的函数、服务或系统之间传递共享的状态信息。为了处理这些问题,context 被引入 Go 语言。
2024-12-29 08:30:42
1279
原创 Go基础之指针和反射讲解
Go 语言的取地址符是,放到一个变量前使用就会返回相应变量的内存地址。一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前需要声明指针。var-type为指针类型,var_name为指针变量名,号用于指定变量是作为一个指针。当一个指针被定义后没有分配到任何变量时,它的值为nil,也称为空指针。nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。一个指针变量通常缩写为 ptr。示例:Go 中函数可以赋值给变量。// 函数可以赋值给变量。
2024-12-29 08:29:51
1147
原创 Go 并发之goroutine和Channel讲解
Go 语言支持并发,通过goroutines和channels提供了一种简洁且高效的方式来实现并发。goroutine协程,是轻量级线程,goroutine的调度是由Golang运行时进行管理的,Go 中的并发执行单位,类似于轻量级线程。Goroutine的调度由Go 运行时管理,用户无需手动分配线程,使用go关键字启动Goroutine,以一个不同的、新创建的goroutine来执行一个函数。同一个程序中的所有goroutine共享同一个地址空间。Goroutine是非阻塞的,可以高效地运行成千上万个。
2024-12-29 08:28:50
1067
原创 Go基础之结构体,接口,泛型
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体定义需要使用type和struct语句。struct语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。或// 创建一个新的结构体fmt.Println(Books{"Go 语言", "www.test.com", "Go 语言教程", 6495407})// 也可以使用 key => value 格式。
2024-12-29 08:27:58
873
原创 Go基础之条件语句,For循环,错误处理
Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。和 C 语言的 for 一样:for init;condition;post { }init: 一般为赋值表达式,给控制变量赋初值;condition: 关系表达式或逻辑表达式,循环控制条件;post: 一般为赋值表达式,给控制变量增量或减量。和 C 的 while 一样:和 C 的 for(;;) 一样:for { }for i := 1;i <= 10;i++ {for {也可以在for循环中声明和操作多个变量。
2024-12-29 08:26:55
1172
原创 Go基础之函数和方法讲解
函数体func:函数由 func 开始声明:函数名称,参数列表和返回值类型构成了函数签名。:参数列表,参数就像一个占位符,当函数被调用时,可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。:返回类型,函数返回一列值。是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。函数体:函数定义的代码集合。defer是 Go 中的一个关键字,用于延迟函数调用。
2024-12-29 08:25:56
1220
原创 Go基础之数组,切片,Map
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明 number0, number1, …, number99 的变量,使用数组形式更加方便且易于扩展。数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。切片是对数组的抽象,数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(动态数组。
2024-12-29 08:24:53
1477
原创 Go基础之包&文件夹,数据类型,变量
在Go中,访问权限的控制非常简洁且独特,没有像其他语言(如 Java 或 C++)那样使用显式的 public、private 修饰符。Go通过标识符首字母大小写来决定访问权限。首字母大写:公共(Public)访问如果一个标识符(变量、函数、类型等)的首字母是大写的,则它是导出(exported) 的,包外可以访问。首字母小写:私有(Private)访问如果一个标识符的首字母是小写的,则它是未导出unexported) 的,包外无法访问。在上面的代码中,我们首先创建了一个变量并且赋值为常量。
2024-12-29 01:10:59
1165
空空如也
关于EL表达式的动态取值
2017-12-07
maven项目在tomcat上运行正常但是在jetty上运行一启动就报错
2017-12-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅