自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(315)
  • 问答 (1)
  • 收藏
  • 关注

原创 CQL学习

使用cypher语言来描述关系。

2025-03-22 16:09:07 294

原创 RabbitMQ 和 Redis 的选择

在处理大规模消息场景时,RabbitMQ 和 Redis 的选择需根据具体需求权衡。最终决策应结合压测结果(如 JMeter 或 Locust)和团队技术栈综合评估。

2025-03-18 22:33:47 397

原创 Lambda表达式

Lambda表达式通过简化函数式接口的实现,使得代码更加简洁和易读。对于只有一个抽象方法的接口(如Runnable),Lambda表达式可以直接替代匿名内部类,减少样板代码。

2025-03-02 11:38:35 145

原创 Stream API

对象,可以使用 Java 8 引入的 Stream API。

2025-02-27 13:14:41 87

原创 Java中HashMap的常用api

删除指定键的映射关系,并返回与该键关联的值。如果键已经存在,则替换旧值并返回旧值;: 替换指定键的映射值,如果键存在则替换并返回旧值,否则返回。: 将指定映射中的所有键值对插入到当前。: 创建一个指定初始容量和负载因子的。: 返回指定键所映射的值,如果。: 返回指定键所映射的值,如果。中的每个键值对执行指定的操作。中不包含该键,则返回默认值。: 创建一个指定初始容量的。: 创建一个包含指定映射的。: 仅当指定键的当前值等于。中不包含该键,则返回。中是否包含指定的键。中是否包含指定的值。

2025-02-27 11:33:07 154

原创 ArrayList的常用api

ArrayList是 Java 中最常用的动态数组实现类,它基于数组实现,支持动态扩容,允许存储重复元素和null值。以下是ArrayList。

2025-02-27 11:29:22 203

原创 四种限流算法

固定窗口限流是最简单直观的一种限流算法,其基本原理是将时间划分为固定大小的窗口,并在每个窗口内限制请求数量或速率。具体来说,就是将请求按照时间顺序放入时间窗口中,并计算该时间窗口内的请求数量,如果请求数量超出了限制,则拒绝该请求。漏斗限流算法的核心思想是将请求存储在一个漏斗中,漏斗以固定的速率漏出请求。请求可以以不定的速率流入漏桶,而漏桶以固定的速率流出,所以漏斗算法可以将突发流量均匀地配,确保系统在稳定的负载下运行。令牌桶算法限流是维护一个固定容量的存放令牌的桶,令牌以固定的速率产生,并放入桶中。

2025-02-23 20:28:06 178

原创 RabbitMQ消息队列机制与模式解析

RabbitMQ 提供了多种消息队列模式,适用于不同的业务场景。通过合理使用这些模式,可以实现系统的高效异步处理、消息的可靠传递以及系统的解耦和扩展。掌握这些机制有助于优化系统性能,提升系统的可靠性和可维护性。

2025-02-23 09:34:10 912

原创 java 从零开始手写 redis(六)redis AOF 持久化原理详解及实现

时,将操作的信息放入到 CachePersistAof 的 buffer 列表中。持久化的实现也比较简单,追加到文件之后,直接清空 buffer 列表即可。注解中添加 aof 属性,用于指定是否对操作开启 aof 模式。这里为了避免浪费,只有当持久化类为 AOF 模式时,才进行调用。当 AOF 的注解属性为 true 时,调用上述拦截器即可。实现一个 Buffer 列表,用于每次拦截器直接顺序添加。我们定义拦截器,当 cache 中定义的持久化类为。3、AOF 持久化拦截实现。8、AOF 加载实现。

2025-01-09 11:25:18 364

原创 java从零开始手写redis(五)过期策略的另一种实现思路

(2)keys 的遍历可能大部分都是无效的。我们每次都是根据 keys 从前往后遍历,但是没有关心对应的过期时间,所以导致很多无效遍历。(1)keys 的选择不够随机,可能会导致每次循环 100 个结束时,真正需要过期的没有被遍历到。以前的设计非常简单,符合最基本的思路,就是将过期的信息放在一个 map 中,然后去遍历清空。为了避免单次操作时间过长,类似 redis,单次操作 100 个元素之后,直接返回。这里直接遍历 sortMap,对应的 key 就是过期时间,然后和当前时间对比即可。

2025-01-08 11:48:53 291

原创 从零手写实现redis(四)添加监听器

(1)slowlog-log-slower-than 预设阈值,它的单位是毫秒(1秒=1000000微秒)默认值是10000。根据实际工作体验,如果我们可以添加慢日志的监听,然后有对应的存储或者报警,这样更加方便问题的分析和快速反馈。超过 1s,可能影响到业务了,可以直接接入报警系统。为了保证接口的灵活性,每一个实现都可以定义自己的慢操作阈值,这样便于分级处理。这里每一个监听器都可以指定自己的慢日志阈值,便于分级处理。为了统一,我们将所有的删除都定义统一的接口。用户可以自己的需要,进行自定义实现。

2025-01-07 21:38:08 274

原创 从零手写实现redis(三)内存数据如何重启不丢失?

我们要做的另一件事,就是将 cache 的内容持久化到文件或者数据库,便于初始化的时候加载。上面先介绍初始化加载,其实已经完成了 cache 持久化的一半。我们只需要在创建 cache 时,指定我们的持久化策略即可。上面定义好了一种持久化的策略,但是没有提供对应的触发方式。只需要在缓存初始化的时候,指定对应的加载实现类即可。我们在初始化的时候,放入 2 个固定的信息。为了便于灵活替换,我们定义一个持久化的接口。我们就采用对用户透明的设计方式:定时执行。2、自定义初始化策略。

2025-01-07 17:24:33 313

原创 从零手写缓存框架(二)redis expire 过期原理

为了便于处理,我们将多久之后过期,进行计算。将两个问题变成同一个问题,在什么时候过期的问题。我们定义一个 map,key 是对应的要过期的信息,value 存储的是过期时间。这个非常简单,遍历过期数据,判断对应的时间,如果已经到期了,则执行清空操作。我们固定 100ms 清理一次,每次最多清理 100 个。核心的代码,主要还是看 cacheExpire 接口。为了避免单次执行时间过长,最多只处理 100 条。

2025-01-07 11:40:14 290

原创 从零开始手写缓存之如何实现固定缓存大小

1、HashMap或者ConcurrentHashMap但是这样做就有个问题HashMap无法进行数据淘汰,内存会无限制的增长,所以hashMap很快也被淘汰了。我们可以通过继承 LinkedHashMap,重写 removeEldestEntry 方法,即可完成一个简单的 LRUMap。LRUMap,用来进行缓存数据的淘汰,但是有几个问题:锁竞争严重,可以看见我的代码中,Lock是全局锁,在方法级别上面的,当调用量较大时,性能必然会比较低。不支持过期时间不支持自动刷新。

2025-01-05 15:15:26 693

原创 单例模式

一个类有且仅有一个实例,并且自行实例化向整个系统提供。单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。

2024-12-25 11:05:31 631

原创 生产者-消费者模型:例如一个厨师10s生产一个,一个客人4s消费一个

【代码】生产者-消费者模型:例如一个厨师10s生产一个,一个客人4s消费一个。

2024-12-25 09:28:03 105

原创 多线程场景题:有5个人,在那赛跑,请你设计一个多线程的裁判程序给出他们赛跑的结果顺序,5个人的速度随机处理

【代码】多线程场景题:有5个人,在那赛跑,请你设计一个多线程的裁判程序给出他们赛跑的结果顺序,5个人的速度随机处理。

2024-12-25 09:05:34 130

原创 .多线程交替打印:打印内容为ABC循环

利用semaphore来控制执行顺序,代码是nk大佬的,我记录记录,无其他用途。

2024-12-24 15:26:59 105

原创 快速排序代码Java

找中间的值,小于的放左边,大于的放右边,递归。

2024-12-24 14:46:40 122

原创 通过构建和利用知识图谱来提高基于RAG的应用程序的准确性

理论上,您应该选择能力最强的模型。在 RAG 应用中,结合结构化的图数据和非结构化的文本向量搜索,可以让我们同时享受两者的优势,这也是本文将要探讨的内容。首先,我们需要定义一个全文索引,并创建一个函数来生成全文查询,这个查询允许一定程度的拼写错误,这里我们不详细展开。的引入,生成知识图谱的过程现在应该更加顺畅和易于访问,这使得任何想要通过知识图谱提供的深度和上下文来增强其基于 RAG 的应用的人更容易上手。接下来,我们将引入一个提示,它利用混合检索器提供的上下文来生成响应,从而完成 RAG 链的实现。

2024-12-10 10:54:49 628

原创 什么是RAG?

RAG(Retrieval-Augmented Generation)是一种结合检索与生成的自然语言处理(NLP)模型架构。它的基本思路是将外部知识检索过程与生成模型结合起来,从而增强生成模型的能力,特别是在处理那些生成模型本身可能没有足够知识的问题时。RAG 通常用于文本生成任务,其中需要结合大量外部知识或信息才能生成更准确的答案。:首先,模型通过某种方式从一个大的外部知识库中检索出与输入相关的文档或片段。这些片段可以是预先存储的文本,如维基百科、常见问题解答或任何结构化数据源。

2024-12-09 15:29:11 244

原创 确定核心线程数

【代码】确定核心线程数。

2024-11-21 21:26:58 330

原创 引入JIT不是没有解释了吗,怎么说是编译与解释共存的语言?

JIT(Just-In-Time)编译引入后,Java 的执行方式发生了很大的变化,但是它依然是,原因在于 Java 的执行流程和 JIT 编译的工作方式。

2024-11-17 20:10:25 852

原创 JAVA中对象实体与对象引用有何不同?举例说明

在 Java 中,对象实体(Object instance)和对象引用(Object reference)是两个不同的概念,虽然它们通常被一起讨论,但它们的作用和表现方式是不同的。下面我们来详细说明这两者的区别。

2024-11-17 19:47:52 299

原创 高频 SQL 50 题(基础版)连接部分

INNER JOIN:仅返回匹配的记录。LEFT JOIN:返回左表的所有记录,即使右表没有匹配的记录。RIGHT JOIN:返回右表的所有记录,即使左表没有匹配的记录。FULL JOIN:返回左表和右表的所有记录,没匹配的部分用NULL填充。CROSS JOIN:返回两张表的笛卡尔积,生成所有可能的组合。SELF JOIN:将表与自身进行连接,常用于表示层级关系。:自动根据同名列进行连接。在MySQL中,JOIN操作默认使用的是INNER JOIN。

2024-11-12 21:27:50 428

原创 什么是Kafka?

Apache Kafka 是一个开源的流处理平台,主要用于构建分布式、高吞吐量的消息队列系统。它最初由 LinkedIn 开发,后来成为 Apache 软件基金会的一部分。Kafka 可以用于实时数据传输、日志聚合、事件驱动架构以及其他流处理应用。

2024-11-11 19:23:45 565

原创 什么是RabbitMQ?

RabbitMQ 是一个开源的消息中间件(Message Broker),主要用于不同应用程序之间传递消息。它实现了高级消息队列协议(AMQP,Advanced Message Queuing Protocol),并且支持多种消息传递模式。通过它,应用程序可以通过队列机制异步地交换信息,提高系统的可扩展性、可靠性和解耦性。

2024-11-11 14:36:27 626

原创 反射机制(简单版)

这段代码展示了 Java 反射的基本操作,涉及动态加载类、调用方法、访问字段以及调用构造函数。反射可以在运行时处理类的结构,非常灵活,但也可能带来性能开销和安全性问题。这段代码展示了如何通过反射机制动态地加载类、调用方法、访问字段和调用构造方法。反射:动态引入类、动态调用实例的成员函数、成员变量等。等异常处理,这些与反射库中的。

2024-10-30 11:36:08 205

原创 AtCoder Beginner Contest 365

D。

2024-08-04 21:51:10 1030

原创 NLP领域生成模型和判别模型举例以及对应的评价指标

在自然语言处理(NLP)领域,生成模型和判别模型各有其独特的用途和评价指标。以下是一些常见的生成模型和判别模型的例子以及它们的评价指标:生成模型(Generative Models):生成模型主要用于生成新的数据,类似于现有的数据。这些模型在文本生成、语言翻译、对话系统等方面应用广泛。

2024-08-02 16:00:57 543

原创 最长公共上升子序列

熊大妈的奶牛在小沐沐的熏陶下开始研究信息题目。小沐沐先让奶牛研究了最长上升子序列,再让他们研究了最长公共子序列,现在又让他们研究最长公共上升子序列了。小沐沐说,对于两个数列 A 和 B,如果它们都包含一段位置不一定连续的数,且数值是严格递增的,那么称这一段数是两个数列的公共上升子序列,而所有的公共上升子序列中最长的就是最长公共上升子序列了。奶牛半懂不懂,小沐沐要你来告诉奶牛什么是最长公共上升子序列。不过,只要告诉奶牛它的长度就可以了。数列 A 和 B的长度均不超过 3000。

2024-08-01 21:36:14 395

原创 蓝桥杯2024年第十五届省赛真题-团建

第三行包含 m 个正整数 d1, d2, · · · , dm ,相邻整数之间使用一个空格分隔,其中 di 表示第二棵树结点 i 上的权值。两个人需要从各自树的根结点 1 出发走向某个叶结点,从根到这个叶结点的路径上经过的所有结点上的权值构成了一个正整数序列,两人的序列的最长公共前缀即为他们的得分。小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 n 和 m 的树,树上的每个结点上有一个正整数权值。输入的第一行包含两个正整数 n, m ,用一个空格分隔。

2024-05-22 10:45:15 955 1

原创 主存和赋存

在计算机运行时,CPU通常从辅存加载程序和数据到主存中。因为CPU直接从主存中读取指令和数据,主存的速度对系统性能影响很大。辅存则用于长期存储和在需要时加载到主存中的数据。主存,也称为主内存或RAM(随机存取存储器),是计算机中直接与CPU交互的内存。它用于存储当前正在执行的程序和这些程序处理的数据。辅存,又称为辅助存储器或永久存储,是用于长期存储数据和程序的存储设备。总的来说,主存和辅存在计算机存储体系中各司其职,确保数据在需要快速处理时迅速可用,同时也保证数据的长期安全存储。

2024-05-19 21:27:27 312

原创 多处理机调度和单处理机调度的区别

多处理机调度与单处理机调度之间的主要区别在于系统架构、资源管理、调度策略和复杂性方面。总的来说,多处理机调度提供了更高的并行处理能力,但相应地也带来了更高的调度复杂性和管理挑战。

2024-05-19 19:23:22 595

原创 30天自制操作系统第五天代码解读

用了结构体、指针、箭头记号。只用了指针的代码片段。

2024-05-12 11:42:48 147

原创 30天自制操作系统第三天暂时代码

第一部分代码:ORG 0x7c00- 设置程序加载到内存的基地址为0x7c00,这是BIOS将引导扇区加载到内存的标准位置。JMP entry- 无条件跳转到标签entry,这是程序主体的开始位置。DB 0x90- 插入一个单字节(0x90),用于指令对齐。- 引导扇区的标识名,最长为8个字符。这里命名为"HARIBOTE"。DW 512- 定义每个磁盘扇区的大小为512字节。这是FAT12和大多数磁盘格式的标准扇区大小。DB 1- 定义每个簇包含的扇区数量为1,对于FAT12格式来说,这是一个常见的设置。

2024-05-09 16:52:58 623

原创 牛客周赛round34 D、E

D:小红定义一个数组的陡峭值为相邻两数差的绝对值之和。现在小红拿到了一个长度为n的、仅由正整数组成的数组,但她有一些元素看不清了,只记得数组的陡峭值恰好等于 1。小红希望你能还原整个数组,你能帮帮她吗?输入描述:第一行输入一个正整数n,代表数组的大小。第二行输入n个整数ai​,其中如果ai​为 0 代表小红看不清该元素,大于 0 代表能看清该元素。2≤n≤10^50≤ai​≤10^9输出描述:如果无解,请输出 -1。否则输出n个正整数,用空格隔开,代表小红还原的数组。

2024-04-04 14:43:05 325

原创 矩阵最大路径与

东九日在学习dp的时候,解决了经典的矩阵最大路径和问题;他向队友小夨阐述他的感悟,dp要做的就是感受解空间;为了防止东九日赛上犯病,小夨决定出一道改编版检查东九日的实力。给定一个 n 行 m 列的矩阵 a,初始的时候,你在矩阵左上角 (1,1) 的位置(即第 1 行第 1 列),你想要通过移动到达矩阵右下角 (n,m)的位置(即第 n 行第 m 列);若你在位置 (x,y),那么你可以进行以下移动:①:向左移动到达位置 (x,y−1);②:向右移动到达位置 (x,y+1);

2024-03-25 14:49:53 487 1

原创 能被整除的数

给定一个整数 n 和 m个不同的质数 p1,p2,…,pm。请你求出 1∼n中能被 p1,p2,…,pm 中的至少一个数整除的整数有多少个。

2024-03-23 10:31:14 312

原创 L1、L2正则化的区别、优势与不足

L1和L2正则化是机器学习中常用的两种正则化技术,主要用于防止模型过拟合,提高模型的泛化能力。它们通过向模型的损失函数中添加一个正则项来实现对模型复杂度的控制。尽管它们的目的相同,但是通过不同的方式实现,因此各有优势与不足。

2024-03-09 09:15:54 2454

空空如也

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

TA关注的人

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