摘要: 特性 ActiveMQ RabbitMQ RocketMQ Kafka 消息顺序性 有序 有序 有序 分区有序 阅读全文
posted @ 2025-05-07 23:49 kuki' 阅读(12) 评论(0) 推荐(0)
摘要: Kafka可以保证在同一个分区内,消息的有序性。 生产者写入到同一分区的消息,会按照写入顺序追加到分区日志文件中 消费者从分区中读取消息时,也会按照这个顺序。(Kafka天然具备的特性)。 具体说明如何实现如何实现顺序读取消息 生产者端确保消息顺序:为保证消息写入同一分区从而确保顺序性, 生产者需要 阅读全文
posted @ 2025-05-07 23:47 kuki' 阅读(49) 评论(0) 推荐(0)
摘要: 一般有三种方式分包的方式: 固定长度的消息; 特殊字符作为边界; 自定义消息结构。 阅读全文
posted @ 2025-05-07 11:19 kuki' 阅读(26) 评论(0) 推荐(0)
摘要: 题目 Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补全和拼写检查。 请你实现 Trie 类: Trie() 初始化前缀树对象。 void insert(String word) 向前缀树中插入字符 阅读全文
posted @ 2025-05-04 18:43 kuki' 阅读(23) 评论(0) 推荐(0)
摘要: 题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点 root ,返回其 最大路径和 。 示例 1: 输入:root = 阅读全文
posted @ 2025-05-03 16:00 kuki' 阅读(14) 评论(0) 推荐(0)
摘要: 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 输入:root = [3,5,1,6,2,0, 阅读全文
posted @ 2025-05-02 18:42 kuki' 阅读(23) 评论(0) 推荐(0)
摘要: 题目 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 输入:root = [10,5,-3,3,2,null 阅读全文
posted @ 2025-05-02 16:30 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 题目 给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7] 输出: [3, 阅读全文
posted @ 2025-05-02 13:32 kuki' 阅读(23) 评论(0) 推荐(0)
摘要: 1 Arrays 1. 截取数组 int[] arr2 = Arrays.copyOfRange(int[] original, int from, int to) original − 这是要从中复制范围的数组。 from − 这是要复制的范围的初始索引,包括在内。 to − 这是要复制的范围的最 阅读全文
posted @ 2025-05-02 13:20 kuki' 阅读(17) 评论(0) 推荐(0)
摘要: 题目 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 输入:root = [1,2,5,3,4,null,6] 阅读全文
posted @ 2025-05-01 21:02 kuki' 阅读(19) 评论(0) 推荐(0)
摘要: Java.util.ArrayList.size() 方法 描述 java.util.ArrayList.size() 方法返回此列表中元素的数量,即列表的大小。 声明 以下是 java.util.ArrayList.size() 方法的声明 public int size() 阅读全文
posted @ 2025-05-01 17:24 kuki' 阅读(26) 评论(0) 推荐(0)
摘要: 题目 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 思路(Switte) 根节点-> 右子树 -> 左子树 顺序访问,保证每层最先访问最右边的节点 时间复杂度:O(n) 每个节点访问了一次 空间复杂度:O(n) 递归用的栈为O(n) 阅读全文
posted @ 2025-05-01 17:17 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 题目 给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。 输入:root = [3,1,4,null,2], k = 1 输出:1 思路(灵茶山) 中序遍历就是在从小到大遍历节点值,所以遍历到的第 k 个节点值就是答案。 答案用一 阅读全文
posted @ 2025-05-01 14:34 kuki' 阅读(44) 评论(0) 推荐(0)
摘要: 题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:root = [2,1,3] 输出:true 思 阅读全文
posted @ 2025-05-01 13:27 kuki' 阅读(17) 评论(0) 推荐(0)
摘要: 题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案: 思路(Sw 阅读全文
posted @ 2025-05-01 10:50 kuki' 阅读(40) 评论(0) 推荐(0)
摘要: 二叉搜索树(Binary Search Tree,简称 BST)是一种特殊的二叉树,它满足以下性质: 每个节点最多有两个子节点,即左子节点和右子节点; 对于任意一个节点: 它的左子树中所有节点的值都小于该节点的值; 它的右子树中所有节点的值都大于该节点的值; 左右子树也分别是二叉搜索树。 阅读全文
posted @ 2025-04-30 23:00 kuki' 阅读(31) 评论(0) 推荐(0)
摘要: Spring Boot Starter 的作用是简化和加速项目的配置和依赖管理 Spring Boot Starter 可以理解为一种预配置的模块 它封装了特定功能的依赖项和配置,开发者只需引入相关的Starter 依赖,无需手动配置大量的参数和依赖项。 常用的启动器包括(pom.xml中) spr 阅读全文
posted @ 2025-04-30 19:10 kuki' 阅读(40) 评论(0) 推荐(0)
摘要: @SpringBootApplication 用于标识主应用程序类,通常位于项目的顶级包中。 这个注解包含了@Configuration、@EnableAutoConfiguration 和 @ComponentScan @Controller 用于标识类作为 Spring MVC 的Control 阅读全文
posted @ 2025-04-30 17:20 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: Spring框架提供了很多注解,用于简化配置、管理Bean、处理事务、处理AOP等 @Componet: 用于将一个类标识为Spring容器中的一个组件(Bean) @Autowired 用于自动装配Bean。可以用在构造方法、Setter方法、字段上, Spring会自动查找匹配类型的Bean进行 阅读全文
posted @ 2025-04-30 16:00 kuki' 阅读(22) 评论(0) 推荐(0)
摘要: SpringBoot是用于简化Spring应用程序开发的框架。 提供快速启动的方式、自动配置和约定优于配置的原则, 简化了Spring应用的开发过程。 Spring Boot 提供了快速启动的能力 通过内嵌的服务器(如Tomcat、Jetty)等,可以将应用程序 打包成 一个 可执行的JAR 文件, 阅读全文
posted @ 2025-04-30 15:19 kuki' 阅读(27) 评论(0) 推荐(0)
摘要: 用户发送请求至前端控制器 DispatcherServlet(调度员 Server applet小应用程序)。 DispatcherServlet收到请求调用HandlerMapping(驯狗师映射) 即处理映射器。 处理器映射器找到具体的处理器(可以根据注解、xml配置查找),生成处理器对象 及处 阅读全文
posted @ 2025-04-30 14:42 kuki' 阅读(10) 评论(0) 推荐(0)
摘要: 1 Spring Spring是一个全面的 Java 企业级应用程序开发框架,提供了如下功能 依赖注入(DI)、 AOP(面向切面编程) 事务管理等 2 SpringMVC Spring MVC 是Spring中的一个很重要的模块、赋予Spring快速构建MVC架构的Web程序的能力。 MVC是模型 阅读全文
posted @ 2025-04-30 14:14 kuki' 阅读(24) 评论(0) 推荐(0)
摘要: String, StringBuilder, StringBuffer 都是Java中处理字符串的类。区别如下 1. 不可变性 1.1 String String内部的字符数组使用final修饰,为不可变的字符串类, 每当对String对象进行改变时,都会创建一个新的String对象,旧的Strin 阅读全文
posted @ 2025-04-28 18:59 kuki' 阅读(20) 评论(0) 推荐(0)
摘要: https://docs.spring.io/spring-kafka/api/org/springframework/kafka/annotation/KafkaHandler.html 1. @KafkaHandler 的背景和意义 在使用 Spring for Apache Kafka 时,为 阅读全文
posted @ 2025-04-28 11:29 kuki' 阅读(77) 评论(0) 推荐(0)
摘要: 这段代码使用了 Spring Kafka 提供的注解方式,使得方法可以作为 Kafka 消费者自动监听指定主题的消息。下面详细解释各个部分: 1. @KafkaListener 注解 功能: @KafkaListener 注解告诉 Spring,该方法是一个 Kafka 消费者,用于接收并处理来自 阅读全文
posted @ 2025-04-27 22:23 kuki' 阅读(242) 评论(0) 推荐(0)
摘要: 句法 XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] id [id ...] 从一个或多个流中读取数据,仅返回 ID 大于调用者报告的最后一个接收 ID 的条目。此命令具有一个选项,用于在条目不可用时进行阻止,其方式类似于 阅读全文
posted @ 2025-04-27 12:48 kuki' 阅读(85) 评论(0) 推荐(0)
摘要: https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/StreamOperations.html#read(org.springframework.data.redi 阅读全文
posted @ 2025-04-27 12:23 kuki' 阅读(42) 评论(0) 推荐(0)
摘要: https://docs.spring.io/spring-data/redis/docs/current/api/org/springframework/data/redis/core/RedisTemplate.html#opsForStream() opsForStream public <H 阅读全文
posted @ 2025-04-26 23:08 kuki' 阅读(23) 评论(0) 推荐(0)
摘要: Package org.springframework.data.redis.connection.stream Interface MapRecord<S,K,V> public interface MapRecord<S,K,V> S是stream, <K,V> 是固定的 extends Rec 阅读全文
posted @ 2025-04-26 22:42 kuki' 阅读(15) 评论(0) 推荐(0)
摘要: @SuppressWarnings("unchecked") 是 Java 中的一个注解,用于在编译时抑制与未检查的类型转换相关的警告信息。 Annotation Type SuppressWarnings public @interface SuppressWarnings 表示应在被注解的元素( 阅读全文
posted @ 2025-04-26 16:26 kuki' 阅读(297) 评论(0) 推荐(0)
摘要: send方法 public CompletableFuture<SendResult<K,V>> send(String topic, @Nullable V data) Description copied from interface: KafkaOperations 将数据发送到没有键或分区的 阅读全文
posted @ 2025-04-26 16:05 kuki' 阅读(99) 评论(0) 推荐(0)
摘要: https://docs.spring.io/spring-kafka/api/org/springframework/kafka/core/KafkaTemplate.html class KafkaTemplate<K,V> public class KafkaTemplate<K,V> ext 阅读全文
posted @ 2025-04-26 15:55 kuki' 阅读(12) 评论(0) 推荐(0)
摘要: 产生死锁需要同时满足四个必要条件: 1 互斥条件(Mutual Exclusion): 资源不能被多个进程共享,即资源一次只能被一个进程使用。 如果一个资源已经被分配给了一个进程,其他进程必须等待,直到该资源被释放。 2 持有并等待条件(Hold and Wait): 一个进程已经持有了至少一个资源 阅读全文
posted @ 2025-04-25 14:38 kuki' 阅读(56) 评论(0) 推荐(0)
摘要: G1 在 JDK 1.7 时引入,在 JDK 9 时取代 CMS 成为默认的垃圾收集器。 G1 把 Java 堆划分为多个大小相等的独立区域Region,每个区域都可以扮演新生代或老年代的角色。 同时,G1 还有一个专门为大对象设计的 Region,叫 Humongous 区。 这种区域化管理使得 阅读全文
posted @ 2025-04-25 13:51 kuki' 阅读(27) 评论(0) 推荐(0)
摘要: JVM 的垃圾收集器主要分为两大类:分代收集器和分区收集器, 分代收集器的代表是 CMS, 分区收集器的代表是 G1 和 ZGC。 CMS CMS 是第一个关注 GC 停顿时间的垃圾收集器,JDK 1.5 时引入,JDK9 被标记弃用,JDK14 被移除。 G1 G1 在 JDK 1.7 时引入,在 阅读全文
posted @ 2025-04-25 13:42 kuki' 阅读(38) 评论(0) 推荐(0)
摘要: 进程是一个正在执行的程序实例。每个进程都有自己独立的 地址空间、全局变量、堆栈、和文件描述符等资源。 线程是进程中的一个执行单元。一个进程可以包含多个线程, 它们共享进程的地址空间和资源。 每个进程在独立的地址空间中运行,不会直接影响其他进程。 线程共享同一个进程的内存空间、全局变量和文件描述符。 阅读全文
posted @ 2025-04-25 12:23 kuki' 阅读(18) 评论(0) 推荐(0)
摘要: 1 之前的分布式锁toy存在以下问题 1.1 分布式锁不可重入: 不可重入是指同一线程不能重复获取同一把锁。 比如,方法A中调用方法B,方法A需要获取分布式锁,方法B同样需要获取分布式锁, 线程1进入方法A获取了一次锁,进入方法B又获取一次锁,由于锁不可重入,所以就会导致死锁 1.2 分布式锁不可重 阅读全文
posted @ 2025-04-23 18:44 kuki' 阅读(138) 评论(0) 推荐(0)
摘要: 1 思路解析 用户 → seckillVoucher() ↓ [Redis Lua 脚本校验库存和下单资格] ↓ 通过? → 否:返回失败信息 ↓ 是:发送订单消息到 Kafka 后台 → Kafka 消费线程 ← 订单消息 ↓ 调用 createVoucherOrder() ↓ 更新数据库(扣减库 阅读全文
posted @ 2025-04-23 18:19 kuki' 阅读(315) 评论(0) 推荐(0)
摘要: 此坑不补了,直接用redisson 阅读全文
posted @ 2025-04-23 17:39 kuki' 阅读(16) 评论(0) 推荐(0)
摘要: 超时重传 其原理是在发送某个数据后开启一个计时器,如果在一定时间内没有得到发送数据报的 ACK 报文,就重新发送数据,直到发送成功为止。 重传包括超时重传、快速重传、带选择确认的重传(SACK)和重复 SACK 四种。 快速重传 TCP 还有另外⼀种快速重传(Fast Retransmit)机制,它 阅读全文
posted @ 2025-04-23 15:24 kuki' 阅读(20) 评论(0) 推荐(0)