- 博客(147)
- 收藏
- 关注
原创 volatile关键字
volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量,用法也比较简单,只需要在声明一个可能被多线程访问的变量时,使用volatile修饰即可。
2025-08-08 00:32:25
908
原创 理解单例模式 Java程序员必须掌握!!!
难道你还不会单例模式怎么写吗???单例模式是 Java 中一种常见的设计模式,核心思想是:保证一个类在整个程序运行过程中,只能创建出一个实例对象,并且提供一个全局唯一的访问点来获取这个实例。
2025-08-07 13:57:40
537
原创 MapStruct:Java对象映射的高效选择
MapStruct是一个高效的Java对象映射工具,它在编译时自动生成类型安全的映射代码,避免了手动转换的繁琐和错误。与BeanUtils相比,MapStruct通过编译时检查确保类型安全,运行时无需反射,性能更高。只需定义Mapper接口并添加@Mapper注解,MapStruct就能自动处理简单属性映射、嵌套对象和集合转换。主要优势包括类型安全、优秀性能、灵活映射规则以及Spring集成能力。特别适合需要频繁进行对象转换的多层架构应用,是替代反射类映射工具的优选方案。
2025-07-03 18:54:41
807
原创 2024RoboCom RC-u5 工作安排-dp解法
小 K 有 N 项工作等待完成,第 i 项工作需要花 ti 单位时间,必须在 di 时刻或之前完成,报酬为 pi。假设小 K 工作时刻从 0 开始,且同一时刻只能做一项工作、工作一旦开始则不可中断或切换至其他工作,请你帮小 K 规划一下如何选择合适的工作,使小 K 可以获得最多的报酬。
2025-06-10 13:17:04
190
原创 蓝桥杯国14 不完整的算式
模拟 给出这个不完整的算式,其中被擦掉的部分(被擦掉的部分是被完整的擦掉,不会出现留下若干位数字的情况)用 ? 代替。请你输出被擦掉的部分。
2025-05-23 18:28:02
622
原创 蓝桥杯国14 互质
请计算在 [1,2023的2023次幂] 范围内有多少个整数与 2023 互质。由于结果可能很大,你只需要输出对 109+7 取模之后的结果。由于 2023 可以分解为质因数 7 和 17 的乘积(2023 = 7 * 17 * 17),任何包含 7 或 17 作为因子的数都与 2023 不互质。 用总数减去这些非互质的数,剩下的就是互质的数。 119 是 被 7 和 17 同时整除的数,只需要减去一次。
2025-05-23 17:25:45
397
原创 使用Redission来实现布隆过滤器
布隆过滤器是一种概率型数据结构,它可以用来判断一个元素是否在一个集合中。我们当时使用的是Redisson实现的布隆过滤器。它的底层原理是,先初始化一个比较大的数组,里面存放的是二进制0或1。一开始都是0,当一个key来了之后,经过3次hash计算,模数组长度找到数据的下标,然后把数组中原来的0改为1。这样,三个数组的位置就能标明一个key的存在。当需要判断一个元素是否存在时,通过相同的哈希函数计算出该元素在位数组上的位置,如果这些位置上的值都为1,则认为该元素可能存在;如果任何一个位置上的值为0,则该元素一
2025-05-18 14:07:47
702
原创 MVCC多版本并发控制
全称 Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本, 使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需 要依赖于数据库记录中的三个隐式字段、undo log日志、readView。
2025-05-15 11:23:56
1110
原创 数据库的锁 - 全局锁、表锁、行锁
数据库锁机制主要包括全局锁、表级锁和行级锁。全局锁用于全库维护操作,如备份,通过 FLUSH TABLES WITH READ LOCK 加锁,UNLOCK TABLES 释放,会阻塞所有写操作。表级锁锁定整个表,适用于表级操作,元数据锁(MDL)保护表结构,意向锁表示事务对表的锁定意向。行级锁提供细粒度控制,锁定单行数据,间隙锁锁定记录间的间隙,临键锁结合行锁和间隙锁防止幻读,确保数据一致性和高并发性能。
2025-05-15 10:45:05
1854
原创 lua脚本+Redission实现分布式锁
基于Redis不论是本地锁还是分布式锁,核心都在于“互斥”。在 Redis 中,SETNX命令是可以帮助我们实现互斥。SETNX即(对应 Java 中的方法),如果 key 不存在的话,才会设置 key 的值。如果 key 已经存在,SETNX啥也不做。释放锁的话,直接通过DEL命令删除对应的 key 即可。为了防止误删到其他的锁,这里我们建议使用 Lua 脚本通过 key 对应的 value(唯一值)来判断。
2025-05-12 00:07:13
1164
原创 二叉树的遍历与构造
一、遍历唉,好想回家,我想回家跟馒头酱玩,想老爸老妈。如果上天再给我一次选择的机会,我会选择当一只小动物,或者当棵大树也好,或者我希望自己不要有那么多多余的情绪,不要太被别人影响,开心点,想睡就睡,想玩就玩,不要为难自己。老爸每次都和我说累了就回家,但越是这样我就越希望自己变得更强大一点。希望明天是个好天气。一、遍历。
2025-05-07 21:43:48
1312
原创 走出迷宫的最短路线
的顺序通过迷宫, 一共 10 步。其中 D、U、L、R 分别表示向下、向上、向左、向右走。对于下面这个更复杂的迷宫(30 行 50 列),请找出一种通过迷宫的方式,其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。因为按照字母顺序bfs的所以第一个结束的肯定是路径最小。对于上面的迷宫,从入口开始,可以按。请注意在字典序中 D<L<R<U。
2025-05-06 21:53:41
246
原创 前缀树(Trie)(字典树)
前缀树(Trie)是一种树形数据结构,用于高效地存储和检索字符串集合。它的每个节点表示一个字符,通过节点之间的连接来表示字符串。
2025-04-28 12:20:22
380
原创 实现分页的几种方法
在Java中实现分页功能,可以通过多种方式:基于注解或XML手动编写分页SQL,适合有复杂需求的场景;使用PageHelper插件,通过简单的API调用实现自动分页,适合快速开发;或者利用MyBatis-Plus内置的分页插件和Page类,直接调用selectPage方法完成分页,这种方式最为简洁高效,无需手动拼接SQL或配置分页逻辑,适合大多数基于MyBatis-Plus的项目。
2025-04-28 11:09:49
1000
原创 岛屿类问题(DFS 遍历网格)
我们所熟悉的 DFS(深度优先搜索)问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题,是在一种「网格」结构中进行的。岛屿问题是这类网格 DFS 问题的典型代表。岛屿问题是一类典型的网格问题。每个格子中的数字可能是 0 或者 1。我们把数字为 0 的格子看成海洋格子,数字为 1 的格子看成陆地格子,这样相邻的陆地格子就连接成一个岛屿。
2025-04-25 10:47:06
1219
原创 使用RabbitMQ实现判题功能
这次主要选用RabbitMQ消息队列来对判题服务和题目服务解耦,题目服务只需要向消息队列发送消息,判题服务从消息队列中取信息去执行判题,然后异步更新数据库即可。要传递的消息是什么?
2025-04-24 19:01:17
442
原创 单体OJ项目
在系统前台,管理员可以创建、管理题目;用户可以自由搜索题目、阅读题目、编写并提交代码。在系统后端,能够根据管理员设定的题目测试用例在代码沙箱 中对代码进行编译、运行、判断输出是否正确。其中,代码沙箱可以作为独立服务,提供给其他开发者使用。
2025-04-24 18:49:30
867
原创 解决session会话共享问题的方案
在分布式系统中,用户访问网站时,服务器需要记住用户的状态(比如用户是否登录、用户的权限等)。这就需要会话管理。传统的Session机制在分布式环境下会出现问题,因为不同的服务器实例可能无法共享Session数据。为了解决这个问题,有两种常见的方案:Redis + Session 和 JWT。
2025-04-23 00:17:12
1297
原创 Floyd判圈算法(环形链表)
乌龟与兔子在一个含环的跑道上(如图所求)进行比赛,乌龟在单位时间内移动一步,而兔子则在单位时间内移动两步,其移动速度是乌龟的两倍。乌龟与兔子同时从A点出发,兔子移动的快先行进入环形跑道,但那以后,一直在转圈。所以如果存在环的话,乌龟总能与兔子相遇(首次相遇在C点),甚至还能跑到兔子前面。
2025-04-21 10:53:34
1072
原创 点评项目回顾
短信验证码登录、登录拦截、分布式id、点赞、好友关注、feed流关注推送、CAS、lua脚本、Redisson、rabbitmq代替阻塞队列
2025-04-16 22:04:19
1080
原创 pta分数相加
输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。输入第一行给出一个正整数N(≤100)。
2025-04-13 15:15:12
178
原创 Java 列表复制与对象引用
在 Java 中,当使用 List<School> 这样的集合存储对象时,实际上存储的是对象的引用,而不是对象本身。也就是说,集合中的元素指向了堆内存中实际的对象实例。
2025-03-25 23:21:11
989
原创 找树左下角的值
使用广度优先搜索遍历每一层的节点。在遍历一个节点时,需要先把它的非空右子节点放入队列,然后再把它的非空左子节点放入队列,这样才能保证从右到左遍历每一层的节点。广度优先搜索所遍历的最后一个节点的值就是最底层最左边节点的值。层序遍历 我们需要在每一层的第一个节点处记录值。假设二叉树中至少有一个节点。
2025-03-15 15:15:47
201
原创 最大三角形面积(鞋带公式)
给你一个由平面上的点组成的数组points,其中。从其中取任意三个不同的点组成三角形,返回能组成的最大三角形的面积。与真实值误差在10的-5次方内的答案将会视为正确答案。
2025-03-15 13:52:29
397
原创 设计模式-工厂模式、策略模式、代理模式、责任链模式
工厂模式:通过将对象的创建过程封装起来,工厂模式让代码更加灵活,避免了直接依赖具体类,适合需要频繁创建对象的场景。策略模式:将算法或行为封装为独立的策略类,使得它们可以互相替换,增强了代码的可扩展性和可维护性。代理模式:通过引入代理对象,在不改变原始类的情况下,为其添加额外功能,如权限控制、日志记录等。责任链模式:将请求的发送者和处理者解耦,让多个对象有机会处理请求,适合处理复杂的业务流程。
2025-03-15 09:55:40
1184
原创 MySQL索引篇
索引是 MySQL 性能优化的核心技术之一。索引结构:重点解析 B+Tree 的特性(数据集中于叶子节点、链表支持范围查询),对比 Hash、R-tree 等索引类型的适用场景。分类与语法:涵盖主键索引、联合索引、前缀索引等常见类型,提供创建、查看、删除索引的 SQL 示例。性能优化:通过 EXPLAIN 分析执行计划,结合慢查询日志定位问题 SQL,总结索引失效场景(如运算、头部模糊查询)。
2025-03-08 15:29:56
972
2
原创 BitMap实现用户签到、UV统计
在 Redis 中,BitMap 并非一种独立的数据结构,而是基于 String 类型数据结构实现的一种存储方式。由于 String 类型的最大上限是 512M,换算成 bit 位就是 2^32 个,这决定了 BitMap 可操作的最大范围。BitMap 非常适合用于处理大量的布尔值,能以极小的空间存储大量的标志位信息,常用于签到统计、活跃用户统计等场景。
2025-03-05 09:57:36
464
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅