- 博客(51)
- 收藏
- 关注
原创 Spring Boot 3 整合 MQ 构建聊天消息存储系统
在构建实时聊天服务时,我们既要保证消息的即时传递,又需要对消息进行持久化存储以便查询历史记录。然而,直接同步写入数据库在高并发场景下容易成为性能瓶颈,影响消息的实时性。秉承"没有什么问题是加一层解决不了的"理念,引入消息队列(MQ)进行异步存储是一个优雅的解决方案。消息先快速写入MQ确保即时送达,随后由专门的消费者服务从队列取出,平稳写入数据库。在本文中,我们将详细探讨如何利用Spring Boot 3 结合消息队列技术,构建一个高效可靠的聊天消息存储系统。
2025-05-30 15:07:07
1300
原创 SpringBoot整合Flowable【08】- 前后端如何交互
BpmnModel是Flowable提供的一个核心类,它允许开发者以编程方式构建完整的BPMN 2.0流程模型。与通过 Flowable-UI 设计流程并导出XML文件的方式不同,BpmnModel让我们可以直接在代码中定义流程的各个元素。所以,我们可以通过BpmnModel对象来动态创建流程定义,前端只需通过接口传递必要的流程参数即可,无需传递完整的 XML 文件。这里需要明确区分两个概念:一是后端如何接收参数并构建流程模型,二是前端如何提供流程设计的交互界面。
2025-05-30 15:01:57
875
原创 AI赋能开源:如何借助MCP快速解锁开源项目并提交你的首个PR
很多同学都梦想为开源项目贡献力量,然而现实往往是——面对庞大复杂的项目,从入门到提交第一个有实质性代码的PR,时间跨度可能长达数年。传统路径通常是先从文档贡献开始,逐步深入理解项目架构,最终才能进行代码层面的参与。大模型时代的到来促进了一些AI IDE的兴起,比如cursor、Trae等,它们能够完成部分编码工作,大幅缩短了参与门槛。然而,编码前的项目理解环节仍是开发者必须自行跨越的障碍。那么,我们能否让AI不仅辅助编码,更能帮助我们理解项目结构呢?答案是肯定的。
2025-05-30 14:56:44
1455
原创 Java 工程师进阶必备:Spring Boot 3 + Netty 构建高并发即时通讯服务
作为异步事件驱动的网络框架,凭借出色的性能和设计,已成为高并发通信领域的标杆。它不仅简化了编程的复杂性,还能轻松支持数万并发连接,被等众多知名项目采用。本文将探索如何结合与,打造高性能即时通讯系统。
2025-05-30 14:51:16
838
原创 redis分布式锁在高并发场景下的方案设计与性能提升
在上文的结尾中我提到了redis分布式锁在“主从架构”下失效的情况:比如当redis执行相应命令时,主节点挂掉了,从节点被选为新的主节点,但命令还没来得及同步到从节点,因此高并发场景下,新的请求又会拿到锁,但前一个锁并没有手动释放掉,到过期时间后,就把新请求的锁给释放掉了,那么就又出现并发问题了,本篇文章就将以解决这个问题作为开端来展开。
2025-05-27 11:11:13
939
原创 从扣减库存场景来讲讲redis分布式锁中的那些“坑”
代码的逻辑很简单,就是从redis里拿到一个key为的键值对,然后判断其值在大于0的情况下进行减一操作,之后再将这个键值对重新存储,这里模拟的是下单减商品库存这么一个场景。
2025-05-27 10:44:04
658
原创 年终盘点AIGC:生成式AI一路生花,互联网开始步入大模型时代
截止这篇文章发布,此时距离chatGPT发布已经过去了383天。在这383天里,我们在不断接收着生成式AI技术带给我们的冲击,AI、大模型等字眼也越来越频繁地出现在大众的视野里,正在阅读这篇文章的你可能也已经在工作和学习中使用AI提升效率,但也给我们带来了两个问题:它,给我们带来了什么变化?结合AI怎么去做好应用?
2025-05-23 14:36:10
733
原创 【分布式锁通关指南 10】源码剖析redisson之MultiLock的实现
在分布式环境中,如果我们将数据拆分到不同的 Redis 实例、集群或是不同的 key 上,有时会遇到需要“一次性对 N 个资源都上锁,才算占用资源”的场景。使用 Redisson 的MultiLock可以极大地简化这类需求的实现。它提供了一个整合多个RLock的抽象,对外暴露成单一的锁接口,使用起来就像在操作一把锁,而内部却是对多把锁的组合操作。同时锁定多个不同 Redis key,保证“要么全加锁成功,要么全部不加锁”。
2025-05-16 09:55:59
606
原创 【内含邀请码】扣子空间体验:Manus类型产品的新选择
近日,Coze重磅推出,让类型的AI应用再添一员强将。它的定位和类似,都是旨在让用户与高效协作,完成复杂任务。- 智能系统可自主规划并执行多步骤流程,大幅提升工作效率- 汇聚各领域 AI 助手,为不同场景提供精准专业支持- 灵活对接多种系统与服务,实现功能无限扩展那么它的实际表现究竟如何?让我们今天一探究竟。
2025-04-23 09:35:50
704
1
原创 【分布式锁通关指南 09】源码剖析redisson之公平锁的实现
在本篇中,我们继续探索redisson中相关锁的实现,本期将围绕公平锁进行讲解。在正式开始前,我们回顾下公平锁的概念-。这就意味着A、B、C 三个线程都想获得同一把锁,那么最先请求的线程会被优先给予资源。如果此时锁被某个线程占用,其余线程会根据各自的排队顺序来抢占锁,谁排在前面,谁就先获得锁。在 Redisson 中,对分布式 Redis 锁的公平性,就是说锁的获取需要按照先来后到排队,避免后来的请求“插队”。
2025-04-23 09:28:09
338
原创 对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
随着人工智能的飞速发展,大语言模型(LLM)正在革命性地重塑用户与软件的交互范式。想象一下这样的场景:用户无需钻研复杂的API文档或者在繁琐的表单间来回切换,只需通过自然语言直接与系统对话——“帮我查找所有2023年出版的图书”、“创建一个新用户叫张三,邮箱是zhangsan@example.com”。这种直观、流畅的交互方式不仅能显著降低新用户的学习曲线,更能大幅削减B端系统的培训成本和实施周期,让企业应用变得更为简单和高效。这正是协议在应用层面所带来的价值体现。
2025-03-20 12:50:08
4071
29
原创 【分布式锁通关指南 08】源码剖析redisson可重入锁之释放及阻塞与非阻塞获取
有加锁自然就有解锁,本篇则将围绕锁的释放锁Lua脚本进行深入剖析,另外,还将对阻塞和非阻塞两张方式分别如何获取锁进行比较。
2025-03-17 16:08:35
493
原创 【分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
在上篇中,我们梳理了redisson的可重入锁的加锁流程,而加锁必然就会有锁续期的问题,那么看门狗机制是维持锁续期的关键。因此,在本篇中我们将剖析redisson中的看门狗机制究竟是如何实现的。
2025-03-13 18:24:30
293
原创 Manus值得追捧吗?通过开源方案实测引发的思考
继DeepSeek在春节期间引爆大模型领域后,近期Manus又以"AI打工人"之称成功"破圈"。在中文互联网上,随处可见关于它的话题,从某鱼上卖到上万元的邀请码,到科技圈内外的热烈讨论。技术爱好者、内容创作者乃至普通用户都在争相体验这款号称能自动完成知识工作的AI助手。然而热潮之下,其真实能力与技术壁垒几何?作为技术从业者,我决定绕过高昂门槛,通过开源方案验证Manus的实际表现,希望提供一个基于实践的理性参考。
2025-03-11 15:39:50
822
原创 Spring Boot 3 整合 MinIO 实现分布式文件存储
文件存储已成为一个做任何应用都不可回避的需求。传统的单机文件存储方案在面对大规模数据和高并发访问时往往力不从心,而分布式文件存储系统则提供了更好的解决方案。本篇文章我将基于Spring Boot 3 为大家讲解如何基于MinIO来实现分布式文件存储。
2025-03-05 09:50:19
1503
原创 【分布式锁通关指南 06】源码剖析redisson可重入锁之加锁
在上篇中,我们基于spring boot整合redisson实现了分布式锁,接下来我会带领大家花一些时间来学习redisson如何实现各种锁,所以我们需要先从github上下载它的源码,本篇则先从可重入锁的相关实现开始来为大家做讲解。
2025-03-04 11:25:57
377
原创 【分布式锁通关指南 05】通过redisson实现分布式锁
一句话总结-redis的高性能客户端,我们选择它是因为它内部已经封装好了很多锁的实现,详细介绍可以通过redisson的Github主页来查看。
2025-02-28 16:18:41
592
原创 【分布式锁通关指南 04】redis分布式锁的细节问题以及RedLock算法原理
在03篇中我们讲解了lua脚本的使用(Ps:如果你没跳过的话),目前我们通过api也好,lua脚本也好,已经基于redis实现了分布式锁,但看似完美的它其实还存在一些细节问题,本章节将会带领大家去探索这些细节并完善我们的分布式锁,并且在本章中还会为大家讲解一下“红锁”的算法原理。那么话不多说,开始我们今天的学习。
2025-02-27 10:34:15
1063
原创 Spring Boot 3 整合 Spring Cloud Gateway 工程实践
当前微服务架构已成为中大型系统的标配,但在享受拆分带来的敏捷性时,的复杂度也呈指数级上升。因此,我们需要构建来为系统“保驾护航”。本文将会通过一个项目(核心模块包含共 3 个微服务),采用注册中心与配置中心),分享如何构建一个微服务网关。
2025-02-24 15:50:15
1556
原创 DeepSeek全链路开发指南:从零搭建智能问答系统到API无缝对接【内含知识库实战】
DeepSeek凭借其强大的推理能力形成了破圈效应。当其他大模型还在知识库问答的泥潭里挣扎时,DeepSeek-R1通过,将复杂问题的解决准确率提升了37.6%。这直接导致了一个有趣现象:原本属于NLP工程师专属玩具的大模型,开始频繁出现在运维告警系统、电商客服工单甚至医院电子病历处理流程中。如果你也想接入DeepSeek开发企业级AI应用,那么——别划走!这篇可能是全网最干的DeepSeek实操指南👇✔️ 被知识库折腾到秃头的程序员✔️ 急需交付AI应用证明价值的团队。
2025-02-22 21:46:13
729
原创 【分布式锁通关指南 03】通过Lua脚本保证redis操作的原子性
官方介绍它是一种轻量小巧的脚本语言,设计的目的是为了嵌入应用程序,从而为应用程序提供灵活的扩展性和定制功能。redis支持嵌入Lua脚本,因此可以很方便地使用。安装过程很简单,本文不做赘述,直接移步官网下载即可,如遇到问题,善用一下你的搜索引擎即可。
2025-02-20 10:30:57
1305
原创 【分布式锁通关指南 02】基于Redis实现的分布式锁
在01篇文章中,我们深入探讨了单机锁的多种实现方式,并相信各位读者已经对它们有了较为全面的了解。然而,随着我们对单机锁的深入了解,不难发现它们所固有的一些局限性。因此,从本篇开始,我们将开始探讨分布式锁的相关内容。
2025-02-19 09:59:59
984
原创 ✨️ 2024年终总结 - 23岁正是折腾的年纪 从开发到产品 | 日本旅行 | 捣鼓项目 | 技术写作与分享 | 五月天
相比于技术类分享,我其实不太擅长写年终总结,比如这篇写到这里的第一反应是:哥的模块化结构处理的真好啊,哈哈。但我又觉得这类型的文章还是有写写的必要,就像这次写的时候回看23年写的总结,有一种在看过去的自己感觉。最后引用一下坂本龙一的一句话送给大家:真实地活下去,不要忘记每天看月亮。
2025-01-17 18:20:42
917
原创 2023年终总结-一名23届毕业生的风雨秋招路
在我敲下最后一行的文字,是2023年的最后一天,不管这一年大家过的怎么样,新的一年都已经要到来了,就预祝各位掘友在新的一年都能实现自己的目标和愿望!
2025-01-16 11:11:25
706
原创 【分布式锁通关指南 01】从解决库存超卖开始加锁的初体验
在电商业务中,库存超卖问题就如同一颗定时炸弹,随时可能在高并发的环境下引爆。对于后端工程师来说,就需要为这颗炸弹加上防止爆炸的保险,从而避免因为超卖导致的资损问题。本系列文章就将从这个场景入手,一步步地为各位读者引入分布式锁的各种实现,从而让大家可以掌握分布式锁在常见场景的使用。
2025-01-15 09:29:31
1199
原创 SpringBoot整合Flowable【07】- 驳回节点任务
在06篇中我以查询历史绩效结果这个业务场景,来帮助大家熟悉和掌握相关API的使用,通过查询历史流程和变量来实现这个目的。回到我们本篇的博客,我们依然从业务场景出发,还是这个绩效流程,如果你的上级对你的自评结果不满意,他想要驳回让你重评;或者你自评后发现有遗漏填写数据需要补充,也需要上级给你驳回重填。通过以上的业务场景,我们可以发现其实驳回功能在实际业务中是一个很普遍且有用的功能。因此,在本篇中我们将学习如何对任务进行驳回。
2025-01-14 18:52:34
1998
1
原创 SpringBoot整合Flowable【06】- 查询历史数据
在05篇中我们学习了如何使用流程变量,如果业务需求为,其实流程变量就可以当“表单”使用的,K-V的结构几乎天然支持了这部分。但是,如果你的业务需求需要用户灵活定制流程变量,这里用文字说明可能有的同学不太理解,具体案例大家可以去参考,用户可以在每个节点自己定义和管理变量,这种场景流程变量就无法很好地支持了,就需要用到Flowable提供的来操作了。上述的内容其实是对流程变量的一个小结,可以让大家对有更好的理解,也是我们后续内容的一个预告。说回正题,前面我们多次提到了。
2025-01-14 18:52:25
1386
原创 SpringBoot整合Flowable【05】- 使用流程变量传递业务数据
首先,我们来看下流程变量的官方定义:在Flowable中,流程变量是在流程实例按步骤执行时需要保存并使用的数据,这些数据被称为变量(variable)。流程实例可以持有变量,这些变量被称为流程变量。我们目前只需要知道变量可以在Java服务任务中用于调用外部服务(例如为服务调用提供输入或结果存储),参考上面绩效分数的例子。我们在实际业务中执行任何流程都可能涉及到有数据流转,流程变量负责的就是在流程流转的过程中传递业务参数。
2025-01-14 18:52:16
849
1
原创 SpringBoot整合Flowable【04】- 通过代码控制流程流转
本次我们演示使用的模型就是上篇中在Flowable-UI中建立的绩效模型,因此我们需要把模型文件导出。在模型管理界面,我们绘制的模型在详情页都有导出选项。将导出的模型文件放到项目里,位置没有硬性要求,但建议放在resource目录下。虽然Flowable也可以在非Spring环境下使用,但我相信应该没人会拒绝SpringBoot,毕竟精力扑到业务和开发上,比折腾配置可有趣多了。我们需要在02篇配置的基础上添加Flowable相关的配置。2.部署流程完成了相关的配置后,我们来定义一个流程控制器并注入
2025-01-14 18:52:05
1394
1
原创 SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
对于第一次使用Flowable,我们先采用官方提供的flowable-ui进行模型的绘制,让各位读者可以感受到整个流程的运行变化,从而在后期的编码中不会感到迷惑,这也是我本次选择使用7.0版本以下的flowable的原因(前文提过:官方将7.0以上的版本已经移除flowable-ui)。
2025-01-14 18:51:55
1851
原创 SpringBoot整合Flowable【02】- 整合初体验
在我们正式建立项目前,我们先去flowable的github主页了解一下版本信息,flowable版本上大的区别主要以7.0.X版本作为界线,通过官方的版本说明我们知道7.0版本主要对JDK17和SpringBoot3做了支持,所以各位读者在选择版本的时候要根据自己项目目前Spring和JDK的版本进行选择,如果是非SpringBoot3.X的版本就使用Flowable7.0.X以下的版本就好。#二、创建项目。
2025-01-14 18:51:44
1360
原创 SpringBoot整合Flowable【01】- 初识工作流引擎
当FlowableUI无法满足复杂的流程业务需求时,这个时候“大手子”就可以基于bpmn.js来自定义流程设计器。官网地址:https://bpmn.io/感兴趣的同学可以参考中文学习文档:https://github.com/LinDaiDai/bpmn-chinese-document。
2025-01-14 18:51:30
803
原创 SpringBoot通过Azure Open AI打造一个国内可用的chatGPT
最近想在自己的一个项目里接入chatGPT实现AI对话助手,但是调研了一下Open AI提供的服务在国内不好用,需要搭代理,而且还有封号的风险。于是在寻找别的方案时发现了微软也提供了相应的服务,并且国内可用,而且响应速度还是挺快的。
2025-01-14 09:55:58
945
原创 记录一次后端接口抖动的排查过程
某天下午,提交了代码的我正在测试环境狠狠地测试刚完成的新功能,把业务流程走了一遍没发现什么问题,美滋滋地准备享受下午茶,但突然发现页面上有的接口打开速度变慢了,要好几秒,刚开始以为是自己的网卡了,刷新后又测试了几下,发现确实有时候接口会变慢,于是开始了漫漫排查之路!
2025-01-14 09:45:53
585
原创 SpringBoot整合gRPC踩坑回顾
把自己内部的服务也改造成gRPC相关的代码。当时需求提的是项目想升到SpringBoot3.0,因此对于版本这里我就没给予重视,满腔热血地打开Github,搜索了相关starter,然后引入到了项目中,光速仿写了个Demo,然后项目启动傻眼了,RPC服务没启动起来,一顿操作猛如虎,最后发现自己预研不够充分,官方文档贴出了版本对照表:https://yidongnan.github.io/grpc-spring-boot-starter/en/versions.html#version-2x。
2025-01-13 15:46:48
416
原创 自研一套高性能API网关,你都需要做什么?
其实有点小小的标题党啦,毕竟相信各位读者对“高性能”的追求是永无止境的。但如果你确实有打算自研一套API网关,那么我认为了解构建它的基本组成和架构是很有必要的,本篇博客主要是围绕这些东西做一个整体的介绍。
2025-01-13 14:33:09
750
原创 为什么我的“OSS”上传图片会失败?
这篇文章出自我毕业后的一个半月,自己也很快地从学生思维转变到了打工人思维模式上,未来之路还很长,自己要学的东西也还很多,希望自己能保持着对技术的热情走远些吧!
2025-01-13 13:50:35
490
原创 @Transactional 你真的用对了吗?
我们在日常开发中几乎经常会使用@Transactional对方法或者接口进行事务管理,毕竟声明式事务这么方便,谁不爱呢,哈哈!但是这个注解的实现原理我们需要搞清楚才能避免“踩坑”。本篇文章就是针对一个使用场景来讨论的,希望可以帮助大家避免在开发中犯下这个错。在这个代码里,updateA方法里调用了updateB方法,它们在各自的接口上都注解,但是这个调用又是在当前同一个类下进行的,所以不会开启新的事务,进而也就有了IDE的这个提示。
2025-01-13 11:02:54
756
原创 打造智能音乐推荐系统:基于深度学习的个性化音乐推荐实现
在数字化时代,音乐已成为人们生活中不可或缺的一部分。随着音乐流媒体平台的兴起,如何在海量的音乐库中为用户提供个性化的音乐推荐,提升用户体验,已成为一个重要的研究方向。传统的推荐算法在处理大规模数据和复杂用户偏好时,存在一定的局限性。近年来,深度学习的快速发展为构建智能化的音乐推荐系统提供了新的思路。本文将详细介绍如何基于深度学习技术,构建一个个性化的音乐推荐系统。我们将从数据收集、模型设计、训练优化到实际部署,全面展示系统的实现过程。
2025-01-13 10:57:44
2108
原创 FastAPI + ONNX 部署机器学习模型最佳实践
模型兼容性:不同的深度学习框架(如 TensorFlow、PyTorch)有各自的模型格式,直接部署可能会有兼容性问题,导致部署困难。性能瓶颈:模型推理速度直接影响用户体验和系统资源消耗,性能优化至关重要。服务稳定性:需要确保服务在高并发情况下的稳定性和可靠性,否则可能会崩溃。安全性:需要防范潜在的安全风险,如输入数据的验证、攻击防护等,保障应用安全。看到这里,可能有人会问:“有没有一种简单的方法,可以解决这些问题呢?”答案就是——!编写应用主文件main.py。
2025-01-13 10:51:00
838
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人