自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【vue】computed计算属性

computed计算属性

2025-08-02 20:05:07 167

原创 【vue】创建响应式数据ref和reactive的区别

所谓响应式数据就是,在vue页面中,template标签内的数据是渲染在页面的数据,一般需要和script标签内的数据进行绑定,也就是说在script标签内会进行一些逻辑计算改变一些数据的值。那么如果不使用响应式数据,script标签内更改了数据的值,template渲染在页面的值是不会发生改变的。

2025-08-02 20:02:10 382

原创 ThreadLocal使用及其原理和注意点

静态声明 ThreadLocal:是为了保证容器实例唯一,避免资源浪费,确保线程内变量的全局一致性(最常见的使用方式)。多个 ThreadLocal 实例:完全合理且必要,用于隔离同一线程中的不同类型变量(如用户信息、事务 ID 等)。一个 ThreadLocal 实例对应一种类型的线程变量,静态声明是为了让这种对应关系全局唯一。

2025-07-25 21:15:57 345

原创 【Mybatis】分页插件及其原理

这些数据会被 PageHelper 存入。

2025-07-25 21:12:24 367

原创 【力扣】第15题:三数之和

(1)头尾指针对应值相加如果大于目标值(target),那么只能尾指针-1;如果小于target,那么只能头指针+1。优化2:如果当前值和最大的两个值相加都小于0,那么本次遍历的i没有满足要求的,直接continue。(2)如何去除重复?因为已经排好序了,如果下一个要检索的值等于前一个检索的值,直接跳过。优化1:如果最小的三个值相加都大于0,那么没有满足要求 的,直接break。

2025-07-23 14:36:54 172

原创 【redis】点赞和排行榜功能实现

排行榜需要一个参考值来排序吧,而恰好redis中的zset集合有一个“分数的机制”,zset会根据这个分数来进行排序,那么我只需要把自己业务的参考值赋值给分数,然后将zset的数据取出,即可以实现排行榜的功能了。

2025-07-23 11:26:38 692

原创 【力扣】第42题:接雨水

我们可以用两个数组,一个用来记录每一个坐标值的左边中柱子的最高值,一个用来记录每一个坐标值右边中柱子的最高值。当我们要记录某一个坐标值能盛装多少水时,根据上面提供的公式,只要在这两个数组中取出该坐标对应的值即可。解读:给定一个数组,使数组的值为高形成柱子,按照短板效应原理能剩多少水。

2025-07-21 18:05:53 396

原创 【Spring AI】Advisors API—顾问(即拦截器)

Advisors API :: Spring AI 参考在官方的介绍中,Spring AI Advisors API 提供了一种灵活而强大的方式来拦截、修改和增强 Spring 应用程序中的 AI 驱动交互。通过利用 Advisors API,开发人员可以创建更复杂、可重用和可维护的 AI 组件。主要优势包括封装重复出现的生成式 AI 模式、转换与大型语言模型 (LLM) 发送和发送的数据,以及提供跨各种模型和用例的可移植性。

2025-07-21 17:03:26 833

原创 【Serverless】使用云托管平台快速部署项目

相比于使用各家的云服务器,又比如腾讯云的宝塔面板之类的,使用Serverless可以做到快速部署,无需自购服务器和域名,随用随关,按量计费。非常适用于业务规模不确定、流量波动大的场景,也很适合个人开发者部署项目。微信云托管云托管 腾讯云阿里云 Serverless至于如何部署,只需要编写docker镜像,以及打包好源文件即可。

2025-07-18 10:50:01 855

原创 【Spring AI Alibaba】接入大模型

至此,AI的基本调用问题就完成了,更深入的用法,例如对话记忆、RAG知识库、工具调用、MCP服务等等,请关注后续博客。

2025-07-14 19:44:16 1060

原创 【java】AI内容用SSE流式输出响应给前端,实现打字机效果

我们当然可以直接调用完大模型后,等大模型响应完内容给我们的后端,然后后端再统一把消息返回给前端。这种方法虽然可行,但是在用户体验上就差很多了,如果后端要等大模型完整地返回内容的话,就要阻塞很久,那么用户端是无感知的,反而会觉得这个系统很差,要等这么久才能响应。所以我们就要达到现有较流行的打字机效果,就是AI响应一点内容,就给用户返回一些内容,要达到这种效果,就要用到SSE流式输出了。代码解释:AI响应的内容是String类型的,通过调用一些函数,让Flux包装,这种其实就是响应式编程。

2025-07-13 16:29:53 903

原创 【代码设计】批量查询优化

经过两个方面的优化,这个接口的性能大大提高。这只是一个示例,在平时编写代码时可能会遇到更复杂的情况,但思想还是一样的。

2025-06-24 11:16:32 426

原创 【MybatisPlus】自动填充常用字段插入数据库

项目中常用的字段有很多,比如创建时间和更新时间,几乎每个表都会用到,如果没有特殊处理的情况下,就需要我们每次的设置值。MybatisPlus帮我们解决了这个问题。

2025-06-18 13:38:51 253

原创 【Redisson】锁的可重试原理和看门狗机制

Redisson实现分布式锁可重试与续期机制的核心要点:1. 可重试逻辑通过异步订阅锁释放事件实现,获取锁失败时订阅通知并安排延迟重试,精确控制剩余等待时间;2. 看门狗机制解决锁超时问题,通过后台定时任务(默认每10秒)递归续期锁的过期时间;3. 锁释放时才取消续期任务,确保业务执行期间锁持续有效。源码分析显示其采用Lua脚本保证原子性,异步编程模型提高性能,实现了高效的分布式锁解决方案。

2025-06-18 11:01:43 547

原创 【Redisson】锁可重入原理

之前给大家介绍过redisson的分布式锁,用redisson来实现比自己手搓简单的分布式锁有很多好处,因为这些可重入、可重试的逻辑较为复杂,他们的lua脚本不可能让我们在开发时自己实现,这样太耗时间了。所以redisson就帮我们实现了可重入和可重试。但我们也要知道他的原理,这期我们先讲可重入。

2025-06-12 09:34:44 639

原创 【idea】分享一个关于Maven依赖管理好用的插件

这是一个可以快速寻找引入了哪些依赖的工具,并且支持搜索,还可以将搜索到的以来,一键排除出去。这个是lombok和logback冲突时用的最多了。因为通常引入了各种依赖后,他们内部会传递一些冲突的依赖。这时候根据报错,搜索到冲突的依赖,排除其中一个即可。

2025-06-06 15:25:34 690

原创 【Maven打包错误】 Fatal error compiling: 错误: 不支持发行版本 21

因为最近想尝试一下java21和springboot3,但是从17更换到了21后,打包就出现了下面的错误。

2025-06-06 11:25:59 653

原创 【vue3学习】vue3入门

大家好啊,我是jstart千语。好久没更新咯,因为最近一直忙找实习的原因,跑来跑去的,耽搁很多时间。这段时间呢想把自己的项目先上线了,所以对vue3进行了一个学习打算把前端做了一起部署上线。

2025-06-04 22:46:45 782

原创 【Redisson】快速实现分布式锁

大家好,我是jstart千语。之前给大家分享过使用redis的set nx ex命令实现分布式锁。但手动的实现方式不仅麻烦,而且不好管理。实现出来的锁也是不可重入的,不可重试的。那么在要求比较高的系统中,就不太适用了。虽然说重入问题可以手动来解决,但总归也是不方便的。那么我们就需要一个更好用的工具了,就是redisson啦。

2025-05-20 17:26:33 844

原创 【RabbitMQ】java代码中优雅实现方案

在Java中创建交换机和队列有两种主要方式。第一种是基于Bean的手动创建,生产者负责发送消息,消费者则声明队列、交换机及绑定关系,并接收消息。这种方式适用于多个队列绑定到同一交换机的情况。然而,这种方式存在流程繁杂的问题,每次绑定不同的key都需要另写一个Bean。因此,更推荐第二种方式,即基于注解声明队列和交换机。这种方式更为优雅,简化了绑定流程,提高了代码的可读性和维护性。通过注解,可以更灵活地管理队列和交换机的绑定关系,减少重复代码,提升开发效率。

2025-05-19 22:37:54 525

原创 【消息队列】java代码实现对mq进行收发消息

Slf4j@Component//性能好的服务器System.out.println("消费者1张三。。。监听到消息为:" + message);//性能差的机器,让它消费完sleep二百毫秒System.err.println("消费者2李四......监听到消息为:" + message);

2025-05-18 19:29:42 1025

原创 【消息队列】RabbitMQ基本认识

大家好,今天给大家分享RabbitMQ。MQ呢可以看作一个中间者,我们给MQ发送一条消息,然后其他服务就可以从MQ获取到消息并执行相应的业务。这样的好处就是可以达到异步处理,生产消息的一方只需要把消息发送给MQ即可,无需再关注后续操作,可以继续执行自己的业务。

2025-05-14 17:20:44 1237

原创 【Redis】分布式锁的实现

分布式锁利用set nx ex的原理。(set nx的互斥性,ex保证超时释放锁,避免死锁)释放锁时要看看锁是不是该线程的持有者,避免误删使用Lua脚本满足一组操作的原子性。

2025-05-12 13:01:54 1433

原创 【并发问题】一人一单(悲观锁解决)

今天给大家介绍一下分布式锁。在项目中,为了在并发情况下保证保证线程安全来实现,通常使用来实现。而锁也可以分为乐观锁和悲观锁,他们是一种锁的设计理念,关于乐观锁可以看看这一篇博客下面我将详细介绍一下悲观锁,而本地锁和分布式锁的区别和实现会在后面章节讲解。

2025-05-11 10:12:50 877

原创 【java】jdk8及以后的时间类总结

表示两个时间点之间的时长(基于秒和纳秒),不可变且线程安全。:表示不带时区的时间(时、分、秒、纳秒),不可变且线程安全。:表示不带时区的日期(年、月、日),不可变且线程安全。:用于日期时间对象的格式化和解析,线程安全且不可变。:表示带时区的完整日期时间,不可变且线程安全。

2025-05-10 10:36:02 377

原创 【并发问题】商品超卖问题(乐观锁解决)

超卖的意思就是,一些限时限量的订单,在并发场景下,如果没有做对应的措施,就会造成并发问题。比如一个商品限时100份,每一个线程到来时,先判断还有没有库存,如果有就派发出去,并且库存-1,如果没有库存,就直接返回错误信息。在实际项目上线时,由于大量的用户同时抢购,由于线程之间会抢夺cpu的执行权,就会引发并发问题。比如当最后只剩下一个库存时,用户A的线程判断到还有库存,还没来得及减1。cpu的执行权就被用户B的线程抢去了,用户B也判断到了还有库存,执行业务,最后对数据库的库存-1。

2025-05-09 11:19:25 831

原创 【权限模型】RBAC模型详解

大家好,我是jstart千语。今天给大家介绍一下鉴权模型RBAC,传统的鉴权模式就是基于用户和权限之间的多对多关系。而RBAC就更加的精准,更好管理。

2025-04-28 20:08:22 1244

原创 【java】lambda表达式总结

显然,如果使用面向对象的思想,要先自己写实现类,然后重写方法,然后创建对象,最好再调用方法。相对来说比较麻烦,特别是某种情况只用一次的时候。

2025-04-27 16:34:39 1118

原创 Maven的聚合工程与继承

大家好,我是jstart千语。想着平时开发项目似乎都是用maven来管理的,并且大多都是聚合工程。而且在maven的聚合工程中,通常与maven继承一起使用。有时候可能会把这两者混淆,所以在这里做一些总结吧。

2025-04-26 16:31:52 1548

原创 【Git】连接github时的疑难杂症(DNS解析失败)

大家好,我是jstart千语。最近在将项目推送到github的时候,突然github就拒绝访问了,即使挂了VPN,网页也进不去,通过git也不能把代码推送上去。即使后面看别人的一些解决方案,比如取消代理啊、更换ssh的方式、该22端口号为443等等,通通都解决不了。

2025-04-25 12:57:38 1391

原创 【MySQL】索引失效问题总结

大家好,今天给大家总结一下索引失效的场景。有忽略的欢迎补充!

2025-04-22 18:10:28 1559

原创 【SpringBoot】HttpServletRequest获取使用及失效问题(包含@Async异步执行方案)

Async 是 Spring 提供的一个注解,用来让你的方法异步执行(非阻塞)。它背后是线程池 + AOP 实现的。你只需要加个注解,Spring 就会帮你把方法在新线程里执行,非常适合处理不需要立刻返回的任务,比如发送邮件、日志记录、异步通知等等。

2025-04-21 09:19:19 1551

原创 【实体转换】mapstruct详解

这个工具有些类似于spring提供的BeanUtils.copyProperties()用于对象转化。而mapstruct是通过生成高效的、类型安全的映射代码来帮助开发人员在不同的数据对象之间进行转换。但他们的实现方式大有不同,从而他们从性能方面也会有差异。总得来说,如果项目中使用到的实体转换场景不多,那么使用BeanUtils就可以了,但如果项目中需要大量使用到实体转换,那么使用mapstruct在提高性能方面就是一个很好的选择。

2025-04-18 19:37:25 1375

原创 【版本控制】idea中使用git

大家好,我是jstart千语。接下来继续对git的内容进行讲解。也是在开发中最常使用,最重要的部分,在idea中操作git。目录在右侧哦。

2025-04-16 15:07:58 1623

原创 【版本控制】git命令使用大全(图文讲解)

大家好,我是jstart千语。今天来总结一下git的使用命令,上文会先将git命令都列出来,便于快速寻找,然后还会对部分常用命令图文讲解,适合新手。最后还会总结在idea中使用git。如果有缺失的,欢迎反馈补充。

2025-04-15 22:30:18 2143

原创 【AI扩图】基于调用阿里百炼大模型完成

大家好,我是jstart千语。今天来给大家如何给系统接入AI大模型,让我们的系统可以增加AI功能。本篇主要是依赖阿里云百炼来讲解,因为它有丰富的模型和应用,也可以自定义一个应用发布,然后调用API使用自己的模型。本篇以AI扩图为例给大家讲解。

2025-04-14 09:03:06 1906

原创 【websocket】使用案例( ​JSR 356 标准)

大家好,我是jstart千语。今天补充关于websocket使用的剩下两种使用方法。分别是JSR 356 标准与STOMP 协议。

2025-04-11 10:35:07 1326

原创 【webSocket协议】进阶实战案例(Spring 原生低层 API)

特性类要继承​协议层级直接处理 WebSocket 原始帧(文本/二进制)​消息格式需自行解析消息内容(如 JSON、XML)​连接管理需手动管理连接状态(如在线用户列表、心跳检测)​消息路由需自行实现消息路由逻辑(如根据消息类型分发)广播与点对点需手动实现(如遍历所有 Session 发送消息)鉴权与拦截需手动实现(如通过 HandshakeInterceptor 拦截连接)​集群支持需自行处理多节点消息同步(如通过 Redis 广播)

2025-04-10 11:40:09 1046

原创 【网络协议】WebSocket讲解

WebSocket 是一种基于 TCP 的网络通信协议,设计用于在客户端(通常是浏览器)和服务器之间建立一个持久化的、双向通信通道。实时通信。传统的 HTTP 协议是 请求-响应模式,不适合实时性要求高的应用。而 WebSocket 允许服务器主动向客户端推送消息,非常适合用于聊天室、在线游戏、股票行情、实时通知等场景。半双工允许数据在两个方向上传输,但同一个时间段内只允许一个方向上的传输全双工允许数据在两个方向上同时传输。

2025-04-07 17:12:32 1701 2

原创 【Redis】数据的淘汰策略

大家好,我是jstart千语。今天和大家回来聊一下redis,这次要讲的是它的淘汰策略。为什么需要淘汰策略呢,就是当redis里面的内存占满后,存不下数据了,那么新加入的数据该如何处理呢?这种处理的方式不同,就称为不同的数据淘汰策略。redis支持8种不同的淘汰策略。

2025-04-05 12:59:06 1304

Student.cpp

Student.cpp

2022-12-21

空空如也

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

TA关注的人

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