- 博客(28)
- 收藏
- 关注
原创 数据结构与算法--图论
Floyd-Warshall算法可以在有向图或无向图中寻找所有顶点对之间的最短路径。它不仅能够处理正权边,还能处理负权边,但图中不能包含负权循环。该算法的时间复杂度为O(V2)。
2025-04-03 11:11:33
1069
原创 ThreadLocal源码分析
在Java中,一个线程可以有多个实例。每个实例会存储在Thread类里包含的变量中,每个是通过Entry对象数组来存储信息的。
2025-04-03 11:01:46
690
1
原创 算法--滑动窗口
洛谷 P1638、LeetCode 76.最小覆盖子串。每个元素最多被左右指针各访问一次,总体操作次数为2n。LeetCode 3.无重复字符的最长子串。LeetCode 239.滑动窗口最大值。要求窗口内元素满足特定条件(如无重复)窗口长度动态变化,根据条件调整左右边界。需要覆盖所有目标元素,且区间尽可能短。窗口长度固定,每次移动时整体右移一位。窗口大小固定,快速计算窗口内属性。3.1 固定大小的窗口。3.2 可变大小的窗口。时间复杂度:O(n)
2025-03-27 09:18:14
668
原创 并发编程——累加器
例如,在多线程计算之间的 static points 期间,此方法可能适用。如果存在与此方法并发的更新, 则不能保证 返回的值是重置之前出现的最终值。此方法可能是创建新 adder 的有用替代方法,但仅在没有并发更新时有效。由于此方法本质上是 racy,因此仅当已知没有线程同时更新时,才应使用它。包,专为高并发场景下的累加操作优化。它的核心目标是解决AtomicLong 在及极高并发下的性能瓶颈——通过分散压力来减少线程间的CAS冲突。类实现高效的原子更新,解决传统。的原子类,用于在多线程环境下对。
2025-03-07 20:01:27
761
原创 算法--前缀和、差分、离散化
离散化是指将连续的数据或范围转化为有限个离散点或区间的操作。在计算机科学中,尤其是在处理线段,区间覆盖等问题时,通过将连续的线段合并为互不重叠的最大线段,能够简化数据处理并提高效率。在实际应用中,如果我们遇到逆序的情景,应该首先将其转换为正常顺序(确保L<=R)后再进行差分数组的操作。差分数组要求在操作区间中起点L必须小于等于R,否则会导致错误的结果。4.完成合并:处理完所有线段,确保最后一个线段也被加入到结果列表中。2.初始化变量:创建一个空的结果列表,并记录当前合并后的线段。
2025-03-06 16:05:58
954
原创 算法-数论
题中: ABC的1e9+6次方mod(1e9+6)与1mod(1e9+6)相等,为1。=((an-2*bn-2*cn-2)2)2=((a1*b1*c1)2)的n次方。
2025-03-06 16:02:54
467
原创 洛谷算法1-6 二分和二分答案
二分答案介绍:用二分查找的方法枚举答案,枚举时判断这个答案是否可行。使用二分需要满足两个条件:有界性,单调性。二分答案适用场景:二分一般用来解决最优解问题,如果题目规定了有“最大值最小”或者“最小值最大”的东西,那么这个东西应该就满足二分答案的有界性和单调性。
2025-02-11 16:12:04
291
原创 洛谷算法1-1 模拟与高精度
注:在赋值元素时,如果直接替换容易元素覆盖,可以使用一个临时数组存储原来的元素,然后将对应元素赋值。5 6 7 顺时针旋转90° -> 9 6 2 逆时针旋转90° -> 2 6 9。顺时针旋转:将某一列的值放到对应的行上(例如将第一列赋值到第一行),从下到上。使用高精度计算,BigInteger可以表示任意大的数,仅受到内存的限制。使用高精度计算,BigInteger可以表示任意大的数,仅受到内存的限制。求一个数的位数,我们可以根据数学公式直接计算,不需要知道该数具体的值。数码就是一个数0-9。
2025-01-27 17:23:07
425
原创 MySQL--SQL优化
id为50的数据要插入,它应该存储在47以后的位置,但是该页已经不够存储这行数据了,它会开辟一个新页page3,id为50的数据不会直接放在page3中,而是将page1中后50%的数据一起放在page3中。当我们的order排序条件为age升序,phone倒序时,age走索引,phone不走索引,因为创建索引默认是按照升序排序的,age为前缀索引,此时就无法倒着扫描phone索引。原因:二级索引结构下挂的是id,如果二级索引较多,id较长,会加大需要的数据库存储空间。
2024-11-30 11:30:58
893
原创 数据结构--数组
1 2 3 5 6给数组添加元素时,应将原来添加位置的元素和之后的元素进行复制System.copy(要复制的数组,开始的位置,复制到哪个数组中去,加到数组中的哪个位置,复制的长度)
2024-11-26 11:30:36
806
原创 MySQL--存储引擎
存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。在创建表时指定存储引擎InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQl存储引擎MyISAM时MySQL早期的默认存储引擎Memory存储的表数据是存储在内存中的,由于收到硬件问题,或断电问题的影响,只能将这些表作为临时表或缓存使用。
2024-11-24 12:37:43
743
原创 数据库--深度剖析索引
索引(index)是帮助MySQL的。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2024-11-24 12:32:30
1197
原创 JVM--内存结构
PC Register,即程序计数器(Program Counter Register),是计算机处理器中的一个关键寄存器,也被称为指令计数器。它主要用于存放下一条指令所在单元的地址,是计算机能够连续执行指令的重要机制之一。以下是关于PC Register的详细概念介绍:基本概念定义程序计数器是用于存放下一条指令所在单元的地址的地方。当执行一条指令时,CPU会根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。作用。
2024-11-17 10:20:22
1373
原创 万字长文分析函数式编程
函数式编程把计算当成是数学函数的求值,注重描述而非具体执行步骤。在函数式编程中,函数是核心的概念,它们可以接受输入(参数),并返回输出(结果)。这些函数可以像其他数据类型一样被传递和操作,从而允许开发者构建高度模块化和可重用的代码。我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断而过多的判断语句会让我们的代码显得臃肿不堪所以在JDK8引入了Optional,养成使用Optional的习惯后,可以写出更加优雅的代码来避免空指针异常4.2 安全的消费值。
2024-11-13 22:17:00
1124
原创 缓存穿透,缓存击穿,缓存雪崩
定义:缓存穿透是指用户查询数据,缓存和数据库中都不存在该数据(一般是发起恶意的查询,试图击穿缓存,直接查询数据库),这时用户每次查询都会直接打到数据库上,而数据库中也没有该数据,如果用户不断发起这样的请求,数据库压力会非常大,甚至可能拖垮数据库。解决方案布隆过滤器(Bloom Filter):布隆过滤器可以快速判断一个元素是否在一个集合中,但是会有一定的误判率。在数据放入缓存之前,先使用布隆过滤器判断数据是否存在,如果不存在则直接返回,不进行数据库查询。空值缓存。
2024-11-11 12:39:11
911
原创 数据库--索引
索引是数据库管理系统中用于加速数据检索的一种数据结构。它类似于书籍的目录,通过维护一个指向数据表中实际数据位置的指针,索引可以显著提高查询的效率,减少数据库在检索数据时需要扫描的记录数。索引是提升数据库性能的重要工具,合理使用索引可以显著提高查询效率,但也需要注意其对写入操作的影响。选择合适的索引类型和策略,能够在不同的应用场景中发挥最大的效益。
2024-11-11 12:24:56
922
原创 数据库--字段设计规范
允许存储最多 50 个字符。:允许存储最多 100 个字符。虽然在存储 50 个字符时,和实际消耗的空间是相同的,但在定义上允许更长的字符串。因此,如果数据超过 50 个字符,会报错或截断,而能存储完整的数据。类型最大存储空间特点BINARY(n)n字节固定长度的二进制字符串,长度不足会填充0x00。n字节可变长度的二进制字符串,根据实际数据长度存储,节省空间。TINYBLOB255 字节适合小型二进制数据。BLOB65,535 字节(约 64 KB)
2024-11-11 12:03:58
2623
3
原创 动态规划-Dynamic-Programing
Dynamic-Programing 由Bellman 提出动态 编程Programming - 在这里指用数学方法来根据子问题求解当前问题Dynamic - 指缓存上一步结果,根据上一步结果计算当前结果(多阶段进行)从已知子问题的解,推导出当前问题的解推导过程可以表达为一个数学公式用一维或二维数组来保存之前的计算结果(可以进一步优化)将找出递归公式,将当前问题分解成子问题,分阶段进行求解求解过程中缓存子问题的解,避免重复计算 n入门练习return 0L;return 1L;
2024-11-09 15:18:42
571
原创 JVM--类加载机制
符号引用是指在编译阶段通过类或接口的全限定名来引用其所代表的实体,而不需要直接知道实体的内存地址。这种引用方式在Java虚拟机的运行时阶段会被解析成直接引用(Direct Reference),也就是实体的内存地址。符号引用是Java中一个重要的引用机制,它提高了程序的灵活性和可维护性,并为复杂的类加载和链接过程提供了支持。直接引用是在Java虚拟机运行时,经过符号解析和地址转换后,最终生成的指向具体对象或方法内存地址的引用。
2024-10-30 17:38:18
887
1
原创 会话跟踪技术
从浏览器发出请求到服务端响应数据给前端之后,一次会话(在浏览器和服务器之间)就被建立了,会话建立后,浏览器或服务端都没有被关闭,则会话就会持续建立着,浏览器和服务器就可以继续使用该会话进行请求发送和响应。服务器会收到多个请求,这多个请求可能来自多个浏览器,服务器需要用来识别请求是否来自同一个浏览器,服务器用来识别浏览器的过程;服务器识别浏览器后就可以在同一个会话中多次请求之间来共享数据。
2024-02-15 15:00:43
1338
原创 SQL基础语法
desc 查询表结构double(总长度,小数点后保留的位数)varchar(20) 存储性能低 变长 节约空间char()定长字符串 存储性能高 定长 浪费空间drop table if exists 表名修改表名alter table 表名 rename to 新表名;添加一列add table 表名 add 列名 数据类型;修改数据类型alter table 表名 modify 列名 新数据类型;
2024-01-08 21:52:30
1660
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人