- 博客(86)
- 资源 (1)
- 收藏
- 关注
原创 ES作为推荐库的设计原理
ES 实现商品推荐的核心是利用其查询和分析能力,将推荐逻辑转化为 ES 可执行的查询相似商品:通过字段匹配、文本相似、向量相似实现;关联商品:通过用户行为聚合挖掘商品关联;个性化推荐:结合用户画像过滤和排序商品。适合中小规模推荐场景,或作为大型推荐系统的“候选集过滤/排序”环节,配合机器学习模型提升效果。
2025-08-23 18:08:32
808
原创 ClassLoader卸载&类卸载&JVM内存空间布局【源码分析】
本文基于OpenJDK24源码分析JVM类加载与回收机制。类加载过程包括加载(读取.class文件并校验)、准备(分配静态内存并创建mirror对象)、解析(链接常量池引用)和初始化(执行clinit方法)。关键点在于klass(元空间存储的类元数据)和mirror(堆中的Java类对象)的分离设计。类卸载需要满足三大条件:无存活实例、类加载器被回收、Class对象无引用。通过ClassLoaderData管理类加载器元数据,当加载器被回收且所有mirror对象不可达时,元空间中的klass数据才会被回收。
2025-08-04 16:50:26
744
原创 从源码角度了解Elasticsaerch(分布式协调排序、深分页问题)
Elasticsearch基于Lucene所以很多系统实现都在其中,所以可以先看看Lucene的实现:https://blog.csdn.net/qq_35040959/article/details/147931034不像Kafka这种顶级项目核心性能组件全自己实现,ELK中有很多引用至第三方开放库;网络模型多重要不必多说,Elasticsearch基于Netty,一个认可度&社区活跃度都非常高的NIO多路复用模型;Elasticsearch基于Lucene上提供分布式服务;具体可以看看这篇文章对存储模
2025-06-16 16:33:26
881
原创 从源码角度了解Lucene(倒排索引存储结构)
WAL+Segment存储模式结合了写前日志(WAL)和不可变分段(Segment)技术,实现高效数据写入和查询。WAL确保数据持久化,Segment按块存储数据并支持合并优化。Lucene采用该模式构建索引,通过批量写入有序数据提升索引效率。查询时采用二分查找快速定位文档,使用BM25算法计算相关性评分,考虑词频、逆文档频率和文档长度因素。该模式还通过文件聚合(cfs/cfe)解决大量小文件问题,支持高效的分页查询,但深分页可能存在性能问题。
2025-06-11 17:05:55
888
原创 redis压测&调优
8核(vCPU)16 GiB11.2w负载指标:没有强烈的资源竞争,整体(多核心)负载低36.4wtp99.9 3ms4核(vCPU) 8 GiBc8a-卓越的单核性能: c8a采用AMD EPYCTM Genoa处理器,主频2.7 GHz,睿频最高3.7 GHz,单核性能强劲,适合需要高性能计算的应用场景。25.7w2核(vCPU) 4 GiB。
2025-02-28 09:16:00
960
原创 DeepSeek介绍[Cache-Through、Cache-Around、Cache-Behind、Cache-Asid]
DeepSeek介绍[Cache-Through、Cache-Around、Cache-Behind、Cache-Asid]
2025-02-18 16:52:42
986
原创 Kafka-时间轮和延迟操作-源码流程
DelayedProduce通过DelayedOperationPurgatory.tryCompleteElseWatch()被放入Watchers和SystemTimer中。Watchers的tryCompleteWatched()方法会尝试完成DelayedProduce(调用DelayedProduce的tryComplete()方法),那么tryCompleteWatched()是怎么被调用的呢?分区的HW发生了变动(acks = -1时)
2024-07-01 14:52:00
1952
1
原创 Kafka-Produce客户端源码流程
KafkaProducer中会起一个Sender线程,Sender线程中主要有两个方法:sendProducerData()和client.poll()。sendProducerData()负责准备数据并将数据set到通道中等待发送,client.poll()负责真正执行网络的io操作,在每次poll操作中必定有3次发送事件(假设集群中有3个kafka,生产者客户端会分别和3个kafka建立3个通道,这也是每次setSend不会失败的原因,如果失败了则该通道就关闭了)以及若干的接收响应事件。
2024-07-01 14:48:29
968
原创 Kafka-服务端-网络层-源码流程
整体架构如下所示:responseQueue不在RequestChannel中,在Processor中,每个Processor内部有一个responseQueueKafkaServer是Kafka服务端的主类,KafkaServer中和网络成相关的服务组件包括SocketServer、KafkaApis和KafkaRequestHandlerPool。SocketServer主要关注网络层的通信协议,具体的业务处理逻辑则交给KafkaRequestHandler和KafkaApis来完成。
2024-07-01 14:38:42
881
原创 Kafka-服务端-副本同步-源码流程
num.replica.fetchers 单个broker的拉取线程,默认1replica.fetch.response.max.bytes 单次最多拉取多少数据,默认10MBreplica.fetch.max.bytes 单次单分区最多拉取多少数据,默认1MB。
2024-07-01 14:34:32
1157
原创 Java核心锁基准测试
ReentrantLock: 平均用时263毫秒。ReentrantLock: 平均用时271毫秒。ReentrantLock: 平均用时8.0毫秒。synchronized: 平均用时454毫秒。synchronized: 平均用时465毫秒。synchronized: 平均用时8.9毫秒。StampedLock: 平均用时263毫秒。StampedLock: 平均用时297毫秒。StampedLock: 平均用时8.1毫秒。
2023-05-26 10:56:46
952
原创 系统化了解Micrometer
Micrometer是基于 JVM 的应用程序的指标检测库。它为最流行的监视系统提供了检测客户端的简单门面[门面设计模式],使您可以检测基于 JVM 的应用程序代码,而不会被供应商锁定。它旨在为指标收集活动增加很少甚至没有开销,同时最大限度地提高指标工作的可移植性。提供了标准化接口,像Slf4j一样提供门面Micrometer不是分布式跟踪系统或事件记录器
2023-05-14 16:23:42
2774
原创 个人 [Raft项目] 记一次内存泄漏排查
笔者在一步一步写Raft协议, 在可以跑了一天后,发现Leader节点的内存使用量缓慢上涨, 且手动执行GC后也没达到预期水平线。
2023-05-14 09:31:58
595
原创 JDK8后:作用域值(Scoped Values)
在此之前我们使用TheadLocal去做多线线程的共享,JDK20的孵化特性 Scoped Values作用域值提供的更轻量的多线程共享特性。
2023-04-04 19:11:24
536
原创 rabbit是否支持批量发送?
Rabbit是否支持批量发送消息该问题笔者翻阅官方文档与三方博客也没有找到答案,后也是自己去翻阅源码后才大概找到一个不敢确定的答案:
2023-01-30 14:36:28
1228
原创 Spring AMQP搭建RabbitMQ客户端
对于MQ的客户端我们主要分为**生产者**与**消费者**,前者负责向Mq推送消息后者监听MQ处理消息,本文也以两角色为主要切入来搭建项目;
2023-01-05 21:00:26
609
四级联动 经度 纬度 有单表与多表
2020-11-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人