- 博客(98)
- 收藏
- 关注
原创 XXL-JOB使用
我们只需要继承IJobHandler。execute方法就是我们要执行的定时任务。这里JobHandler名称要与@XxlJob注解的value值对应。我们选择自动注册,当我们服务启动时,就会自动注册。安装xxljob服务,以及数据库(自己查文档)这里AppName要与yml文件的配置名对应。这放哪都行,最好放config包里。在xxljob仪表盘注册服务信息。step7:到仪表盘开启任务。step6:启动项目。
2026-06-28 17:55:02
212
原创 Ragent性能指标
context_precision:召回里有多少是有用的,排得好不好。context_recall:标准答案需要的信息找全没。answer_correctness:端到端答案对不对。faithfulness:回答里的话有据可查吗。answer_relevancy:回答切题吗。Recall@K:找全了没有。Hit@K:有没有找到。
2026-06-16 21:43:52
33
原创 Tlias智能学习辅助系统(前端部分)
我们首先先确定目标,确认目标效果如下图所示。随后我们到Element官网寻找合适的布局,找到布局容器,阅读一下官方api大概了解一下每个标签的作用。<el-aside><el-main>随后往下划寻找心仪的布局,我们发现这个布局和我们的目标布局相符,于是我们可以将它复制到工程文件。复制到template标签下,style标签的内容看个人自行决定。最后出来效果如下图。
2026-06-16 21:40:59
243
原创 vibecoding工作流
CLAUDE.md 是 Claude Code 启动时第一个读的文件。写在里面的东西,Claude 在每一次对话里自动遵守。全局 CLAUDE.md 的精简模板:## 沟通方式- 默认中文回复;代码、命令、变量名、文件路径保持英文- 结论先行,简洁直接,不先铺垫背景- 不谄媚,不夸"这是个很好的问题",不以"当然可以"开头- 给真实判断——方案有问题直接指出,发现更好做法主动说明## Git- 不自动 `git commit` 或 `git push`,除非我明确要求。
2026-06-16 21:38:19
277
原创 Ragent性能优化
demo 里我们一次性把 5 个 chunk 传给 API,实际项目中可能有几万甚至几十万个 chunk。一次全传过去不现实(API 有请求大小限制),一个一个传又太慢。最基本的优化:把 chunks 分成固定大小的批次,逐批调用 API。
2026-05-17 13:05:49
117
原创 AntPathMatcher路径匹配
这是一个由Spring提供的工具类,当我们需要手动匹配路径时可以使用它,比如说,我现在需要匹配yml文件中需要网关不拦截的路径,我们就可以用这个工具类去确认你的路径是否匹配。这里我们要去匹配excludePaths中的路径,调用antPathMatcher.match比较输入路径是否在配置路径中存在。
2026-04-19 14:58:19
34
原创 查询数据库是MySQL的in语句无法保证顺序
手动排序,ids是排好序的,如果直接query().in("id",ids)会是乱序的。: 你希望出现的顺序。
2026-04-16 08:26:55
30
原创 axios异步请求
axios本身是一个异步请求,无法得知什么时候返回结果,所以如果我们有对象要获取axios的数据之前都需要使用await等待异步响应结果到达后,再往下执行。如果没有await线程会不等待异步结果立马往下执行。
2026-04-10 08:27:32
30
原创 SpringBoot项目部署&&多环境配置
随后java -jar jar包即可,服务器必须有java环境。点击进行打包,在target目录找到jar包。首先需要引入maven打包插件。
2026-04-09 00:10:51
38
原创 Redis使用lua脚本
step2:创建脚本对象,这里因为脚本对象是静态的所以在静态代码块中进行构造。用lua脚本使用redis是为了保证其原子性和线程安全。step1:编写lua脚本,放在resource中。RedisScript<T> script脚本对像。args 输入args数组参数。Keys 输入Key数组参数。step3:执行lua脚本。
2026-04-05 09:46:05
84
原创 Redisson分布式锁
为config类设置redis地址端口和密码,用于创建RedissonClient对象,进行锁操作step1:获取指定一个指定名字锁的对象。step2:尝试获取锁并接收boolean。step3:执行业务并释放锁。
2026-04-04 19:24:31
61
原创 超卖问题的乐观锁与悲观锁
有没有其它线程对数据做了修改。如果没有修改则认为是安全的,自己才更新数据。如果已经被其它线程修改说明发生了安全问题,此时可以重试或异常。以下有一个来自黑马点评的案例。我们采用了CAS法设置库存预期值为0,当发现库存小于1时就要停止操作了。每个线程会在更新前进行判断。Lock都属于悲观锁认为线程安全问题一定会发生,因此在操作数据之前先获取锁,确保线程串行执行。认为线程安全问题不一定会发生,因此不加锁,认为线程安全问题一定会发生,因此在。,确保线程串行执行。
2026-03-31 18:57:56
49
原创 黑马点评技术汇总(六)全局ID生成器
能完成一下条件的就是redis,我们通过Redis的自增数值来生成序列号。自增的数值,而是拼接一些其它信息。的安全性,我们可以不直接使用。
2026-03-29 21:12:38
507
原创 JUC基础
就按照上述参数,创建一个你需要的线程池。随后execute方法分配任务,2,5,2L,try {i < 10;++i) {System.out.println(Thread.currentThread().getName() + " 办理业务");});
2026-03-29 09:56:33
508
原创 黑马点评技术汇总(五)缓存更新策略
先查询缓存,如果缓存命中,直接返回,如果缓存未命中,则查询数据库,将数据库数据写入缓存,返回结果先修改数据库,然后删除缓存,确保两者的原子性。redis自动进行,当redis内存达到咱们设定的max-memery的时候,会自动触发淘汰机制,淘汰掉一些不重要的数据(可以自己设置策略方式)当我们给redis设置了过期时间ttl之后,redis会将超时的数据进行删除,方便咱们继续使用缓存我们可以手动调用方法把缓存删掉,通常用于解决缓存和数据库不一致问题。
2026-03-27 08:19:22
118
原创 黑马点评技术汇总(四)缓存雪崩 && 缓存击穿
在第一个线程获取锁后,将查询数据库的任务交给另一个线程,自己返回过期数据。eg:多个线程同时访问一个商品页面,由于查询数据库速度较慢,多个线程同时访问就会导致多线程同时查询数据库,很多重复操作,增加数据库压力。缓存命中后判断是否过期,如果过期尝试获取互斥锁,获取失败就返回过期信息,如果获取到锁,就开启一个独立线程进行数据重建,并返回过期信息。一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来巨大的冲击。第一个线程在查询到未命中是先获取互斥锁,在开始查询数据库。
2026-03-26 19:53:24
73
原创 黑马点评技术汇总(三)缓存穿透
当没有命中redis时,并且查询数据库也为空,那我们不返回404,而是返回一个空对象存储在redis中并设置一个TTL,防止频繁访问数据库。我们在原来的基础上,当商铺不存在时将空值写入redis,并且在缓存校验时,判断是否为空值,如果是就直接返回错误信息,不是就返回商户信息。缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。1.增强id的复杂度,避免被猜测id规律。下面我们就根据这个方案修改原先的缓存方案。2.做好数据的基础格式校验。
2026-03-25 14:10:47
255
原创 黑马点评技术汇总(一)验证码登录
前端提交手机号发起code请求,服务端校验手机号是否符合格式,成功后生成验证码存入session并发送给用户。用户提交手机号和验证码验证手机是否符合格式验证码是否和session中的验证码一致,成功后查询数据库是否有该手机号,如果由就保存用户信息到session中,如果没有就就进行注册后保存。拦截器从session中获取用户信息判断用户是否存在,如果存在就存放在ThreadLocal方便以后其他类需要使用当前登录用户信息。UserHolder。
2026-03-25 13:24:09
57
原创 黑马点评技术汇总(二)redis缓存通用思路
接收店铺id,检查redis中如果有存储就直接返回数据,如果没有就查询数据库,如果查到了就存到redis并返回数据,如果没找到返回报错信息。这是一个通用思路,我们以后用redis做缓存都可以这样操作。
2026-03-25 01:06:19
146
原创 文件上传(UUID防止重名文件&&阿里云实现云端上传&&MultipartFile接收前端文件)
翻译过来就是。由Spring提供在 Java 代码中,它是一个接口,代表了客户端上传的一个完整文件。你可以通过它轻松获取文件名、文件大小、文件内容(字节流)等信息,并将其保存到服务器磁盘或云存储中。
2026-03-23 19:00:42
96
原创 SpringAOP
Aspect Oriented Programming(面向切面编程、面向方面编程),就是面向特定方法编程。当部分业务方法运行较慢,要定位到 耗时较长的方法,此时需要统计每个方法消耗时长。我们要计算一个方法运行时长就在方法开头和结尾计时再做差即可但这样做需要给每个方法都单独写,太耗时了。Sspring中提供了AOP。
2026-03-22 20:30:44
411
原创 获取用户详情ThreadLocal && 更新用户头像 && 当没有实体类接收json参数时使用Map来接收&& 实体类转换成JSON是指定日期格式
用于提供ThreadLocal会为每个线程创建独立空间。
2026-03-22 08:33:51
53
原创 Springboot项目配置文件分解
有时候遇到不同场景需要不同的配置时,我们把配置文件统一放在一个yml文件需要不断修改,因此Spring提供了相应的方法。在spring:application:profiles:active:选项中指定要扫描哪个配置文件,配置文件命名为。
2026-03-20 15:30:53
35
原创 md5加密(存放用户密码信息时使用) && Spring Validation参数校验
我们使用一个提供的例如:将密码字符串转换为字节数组,就可以直接得到加密后的字符串。
2026-03-15 09:23:52
67
原创 REST风格基本写法
但是我们的问题也随之而来了,一个相同的url地址即可以是新增也可以是修改或者查询,那么到底我们该如何区分该请求到底是什么操作呢?
2026-03-14 15:09:42
33
原创 SpringBoot项目的基本构建
我们先用maven的quickstart模板快速创建基本骨架后,开始引入我们需要用到的几个依赖(web,mybatis,mysql)随后我们创建我们需要用到的软件包,并重命名我们的启动类的名称。随后在application.yml中配置基本的数据源信息。
2026-03-14 13:30:15
41
原创 Bean的条件注册
例如下面这个注解,就是设置只有当配置文件中,以country为前缀,有name和system属性,才会进行注册。其他延申注解自行探索,见明知意。SpringBoot提供了。我们可以使用它的延申注解。
2026-03-14 08:35:56
30
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅