Reciprocal Rank Fusion (RRF)简单实现

什么是 RRF? 倒数排名融合 (RRF) 是一种简单而有效的方法,用于合并多个排序列表。它广泛应用于信息检索、搜索引擎和推荐系统,用来融合来自不同排序算法的结果。 RRF 通过基于文档在每个排序列表中的位置分配分数,然后组合这些分数来创建最终排名。公式为: RRF_score(document) = ∑ 1/(k + rank_i) 其中 k 是一个常数(通常为 60),用于减轻单个列表中高

vi中替换内容

替换全部内容 :%s/512m/1024m/g 解释: :%s → 在整个文件范围内执行替换 /512m/ → 查找 512m /1024m/ → 替换成 1024m g → 替换一行中出现的所有 512m(否则只替换每行的第一个) 替换某一行 :5s/512m/1024m/g 解释:(只替换第5行中的 512m) 每次替换 需要人工确认 :%s/512m/1024m/gc 解释: c → 在每

计算对象在JVM中存储的大小

在一些监控中发现序列化后的对象实际没有特别大,但在JVM中占用的内存却很大,甚至导致了OOM(Out of Memory)。 写了一个简单的测试来计算对象在JVM中存储的大小。 源码 import com.au92.common.util.json.JsonUtils; import java.lang.reflect.Array; import java.lang.reflect.Field;

ConcurrentHashMap + CompletableFuture并发缓存加载方案

介绍 使用缓存时候,如果缓存中没有数据,通常会去数据库查询。为了避免多个线程同时查询同一数据导致的重复查询,经常是会使用锁来保证同一时间只有一个线程去查询数据。 但是锁会导致性能下降,尤其是高并发场景下。 因此可以使用 ConcurrentHashMap 和 CompletableFuture 来实现并发缓存加载。 源码 import java.util.concurrent.Completabl

Mapstruct IterableMapping 集合映射使用

起因 之前写过一个 MapStruct集成及使用 的文章,里面介绍了 MapStruct 的基本用法和集成方式。 有朋友问到里边出现的 @IterableMapping(qualifiedByName = "useMe") 和 @Named(value = "useMe") 起到了什么作用。 介绍 @IterableMapping(qualifiedByName = "useMe") 指定集合映射

Mybatis对象自动缓存插件

介绍 自动将 baseMapper.selectById(id) 、 lambdaQuery().eq(Entity::getId, id) 、 listByIds(ids) 等方式通过主键或主键集合查询的对象结果,自动将查询结果缓存到Redis中。 缓存对象默认1天(上下浮动10%),数据库中没有的数据也会缓存一个NULL值(1分钟有效期)。避免缓存穿透和雪崩。 数据删除、更新时会自动清除缓存(

gitignore

使用 git 很多年了,全局的 .gitignore_global 文件内容几经修改已经一团乱,让ChatGPT帮我整理了一下,去掉了冗余和不合理的部分。 最终gitignore_global内容为 # ======================================== # Operating System Files # ==============================

数据库索引创建的区分度基准

AI建议 区分度需要高于 10% 区分度计算方法 ** 区分度 = 唯一值的个数 / 总行数 ** 即: 如果一个表有 10000 行,而某一列只有 100 个不同的值,则该列的区分度为 100/10000 = 0.01,即 1% 注意 不是唯一标准,比如性别,一般不建议作为索引,但如果是联合索引里,通过实际数据测试效果依然是有一些的 AI建议 区分度需要高于 10% 区分度计算方法 ** 区

年度最差购物体验-淘宝88VIP

明着耍流氓的淘宝88VIP会员 开通了淘宝的88VIP会员,然后首页的元宝签到提示可以换10元红包,签到N天后终于攒满了,这时候提现会提示“需要30内购物实付10元以上3笔订单” 付完3笔之后再提现,提示“需要用100000元宝兑换” 攒满10w元宝之后再提现,提示“有一笔订单已经退款不符合条件,需要再下一笔10元以上订单”,然而 实际那一笔订单是没有退款的 问88VIP客服,客服提示 亲亲,小蜜