- 博客(193)
- 收藏
- 关注
原创 乐观锁和悲观锁
乐观锁(Optimistic Concurrency Control, OCC)与悲观锁(Pessimistic Locking, PLC)都是为了解决并发修改导致的数据冲突与“丢失更新”问题,只是对“会不会冲突”这个判断的态度不同:悲观锁默认“很可能冲突”,先上锁再操作,典型做法是在数据库里用行级独占锁(如。两者都能在事务内配合隔离级别与索引生效,乐观锁通常与 MVCC(多版本并发控制)天然契合以实现快照读,悲观锁则更依赖底层锁管理器(行锁、间隙锁、死锁检测)来提供强一致的串行化效果。
2025-08-17 22:08:54
310
原创 分布式锁讲解
分布式锁(Distributed Lock)就是在分布式系统里保证“同一时刻只有一个节点能拿到锁”的机制,避免多个进程/线程同时修改共享资源造成混乱。在 Redis 里,最简单常见的实现方式就是用SETNX(SET if Not eXists)+ 过期时间。
2025-08-17 02:19:16
246
原创 自定义线程池的参数有哪些?
线程池会保持的最小线程数量,即使这些线程处于空闲状态也不会被销毁(除非设置了 allowCoreThreadTimeOut(true)线程池中允许存在的最大线程数量,当任务太多、阻塞队列满了时才会创建超过核心线程数的新线程,直到达到这个上限。决定新线程的创建方式,可以自定义线程名、是否为守护线程、线程优先级等。:丢弃队列里最老的任务,再尝试提交新任务。:不存储元素,直接交给工作线程。非核心线程的空闲存活时间。:任务回退到调用线程执行。:直接丢弃任务,不抛异常。:带优先级的无界队列。:有界队列,先进先出。
2025-08-17 00:54:33
303
原创 Java日志
下面为你综合整理了 SLF4J + Logback、Log4j2 两种主流日志方案的依赖和典型用法,适用于 Java 项目(以 Maven 为例)。
2025-08-03 20:22:41
644
原创 Kafka工作原理
消费者隶属于特定的消费者组,同一个组中的消费者对于同一条消息只消费一次,分区数量决定了并发消费者的最大数量,从而影响消费数据的速度。每个消费者都属于某个消费者组,如果不指定,那么所有的消费者都属于默认的组。Consumer Group中的分区数量决定了并发消费者的最大数量,从而影响消费数据的速度。Consumer是Kafka中的消息消费者,负责从Kafka集群中读取消息,Consumer可以隶属于特定的consumer group,同一个group中的消费者对于同一条消息只消费一次。
2025-04-15 23:21:52
852
原创 在Hive中,将数据从一个表查询并插入到另一个表
确保目标表已存在且结构与查询结果匹配。dt -- 分区字段必须放在最后。-- 启用动态分区(如需)
2025-04-06 23:49:34
862
原创 Hive 中书写SQL注意的地方
具体而言,如果使用的是 MySQL 5.7.5 或更高版本,并且在 SELECT 子句中使用了列别名,则可以在 GROUP BY 子句和 ORDER BY 子句中使用相同的别名。不同的数据库实现可能会有不同的规定。需要注意的是,不同的数据库实现对于窗口函数语法的支持和细节可能会有所不同,实际使用中需要查看所使用的数据库实现的文档,以了解其具体的语法和使用方式。窗口函数是一种基于窗口(Window)的计算方式,可以对数据集中的一个子集(称为窗口)进行聚合、排序、排名等操作,同时不影响原始数据集中的数据。
2025-04-06 23:37:46
1311
原创 1333.餐厅过滤器
Collections.sort(sorted, (a, b) -> { if (b.getValue().equals(a.getValue())) { // 评分相同按ID降序 return b.getKey() - a.getKey();
2025-03-27 08:39:17
463
原创 正则表达式基本语法和Java中的简单使用
public Matcher appendReplacement(StringBuffer sb, String replacement): 将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个 StringBuffer 对象里。在程序开发过程中,经常回遇到需要匹配,查找,替换判断的情况,如果仅仅用纯编码的方式解决,肯定会很吃力,所以,正则表达式就出现了,目的就是用来处理字符串的一系列操作。public int start():返回以前匹配的初始索引。
2025-03-23 14:54:45
1047
原创 Java 关键字transient与注解@Transient的区别
被声明为 transient 的字段在反序列化时会被设置为默认值,如 null(对于对象)、0(对于基本数据类型)或 false(对于布尔类型)当一个对象被序列化时,被声明为 transient 的字段将不会被保存到序列化的结果中。transient 只影响对象的序列化,不影响其它方面的行为,比如字段的访问权限等。在Java中,transient 是一个关键字,用于声明一个字段不会被序列化。序列化过程中,transient 字段的内容不会被保存到序列化结果中。的,仅影响ORM框架的行为,不影响序列化。
2025-03-23 10:19:20
2904
原创 注解@JSONField 和@Fileld含义和实用场景?
JSONField:主要用于 Fastjson 库中,控制 Java 对象与 JSON 数据之间的映射和序列化行为。@Field:通常用于指定字段的映射关系,具体含义取决于所使用的框架(如 Spring Data MongoDB)。
2025-03-23 09:42:09
744
原创 70.爬楼梯
你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。
2024-12-23 13:44:57
217
原创 136.只出现一次的数字
除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
2024-12-18 16:54:49
316
原创 169 多数元素
尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。多数元素是指在数组中出现次数。
2024-12-18 16:29:56
238
原创 1.两数之和
因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。
2024-12-16 20:58:45
260
原创 判断二叉树是否有与另一颗二叉树相同的子树
给定彼此独立的两棵二叉树,树上的节点值两两不同,判断(1树是否有与2树完全相同的子树)。* 子树指一棵树的某个节点的全部后继节点。
2024-10-29 13:26:08
223
原创 二叉树前序遍历(非递归的方法)
某App通过现金红包或优惠券等形式引导用户邀请亲朋好友甚至是陌生人来下载其App从而得到裂变式增长,其中邀请人称作师傅,被邀请人称作徒弟。现请你根据师傅节点,返回其师徒二叉树的前序遍历结果。输入: data =['a' 'b','c', ", 'd']返回值:['a,'b','d','c']1.假设一个师傅最多只能邀请两个徒弟,当师傅没有完全邀请到两个徒弟时,空缺的部分用”表示。输入: data =['a', 'b'.", d']返回值:['a','b'.'d']2.不可以使用递归的方法求解#示例1。
2024-10-28 20:37:48
391
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1