- 博客(44)
- 收藏
- 关注
原创 005IPv6协议Tunnel技术是什么
网卡(Network Interface Card,简称 NIC),也称为网络适配器,是计算机硬件的一部分,用于连接计算机到网络。网卡负责在计算机与网络之间进行数据传输。
2024-07-20 21:44:38
578
原创 java 比Scanner 更高效的输入输出 BufferedWriter和`OutputStreamWriter
当我们在 Java 中需要进行字符输出时,可以使用和的组合来实现。
2024-06-02 14:56:19
245
原创 JWT详解
JWT是JSON Web Token的缩写,是为了在网络应用环境间传递生命而执行的一种基于JSON的开放标准。JWT本身没有定义任何技术实现,它只是定义了一种基于token的会话管理的规则,涵盖Token需要包含的标准内容和Token的生成过程,特别使用与分布式站点的单点登录场景一个JWT Token格式它有 . 分割成但部分组成,头部负载签名头部和负载以JSON形式存在,这就是JWT中的JSON,三部分的内容都分别单独经过了 Base64编码,以 . 拼接成一个JWT Token。
2024-05-26 14:52:43
769
原创 【操作系统】为什么要引入虚拟内存
操作系统通过将虚拟内存映射到物理内存和磁盘上的交换空间,允许程序使用比实际物理内存更多的内存。进程可以假定它拥有连续的内存空间,而操作系统负责将这些虚拟地址映射到实际的物理地址。这种机制不仅扩展了有效的内存容量,还允许进程状态在程序崩溃或关机时保持,并在重新启动时恢复。虚拟内存使得每个进程都有自己独立的地址空间,防止一个进程访问或修改另一个进程的内存。虚拟内存使得进程可以被调度到不同的物理内存位置,甚至可以被交换到磁盘上。多个进程可以共享同一个库的内存映像,而无需为每个进程复制该库。
2024-05-19 11:35:52
331
原创 Redis缓存雪崩,击穿,穿透问题
通常我们为了保证缓存中的数据与数据库中的数据一致性,会给 Redis 里的数据设置过期时间,当缓存数据过期后,用户访问的数据如果不在缓存里,业务系统需要重新生成缓存,因此就会访问数据库,并将数据更新到 Redis 里,这样后续请求都可以直接命中缓存。fill:#333;应用层Redis层数据库层请求数据返回缓存数据请求数据返回数据返回数据并缓存alt[数据存在于Redis][数据未命中]应用层Redis层数据库层 那么,当。
2024-05-09 09:31:53
927
1
原创 乐观锁 通俗易懂的介绍
乐观锁是一种并发控制机制,通常用于多个用户或线程并发访问共享资源时,保证数据一致性的一种方法。与悲观锁不同,乐观锁假设在大多数情况下并发冲突不会发生(所以叫乐观),因此不会在访问资源之前进行加锁,而是在更新资源时进行检查。通俗点就是 我认为这个事务很少会有高并发的冲突,所以我不对资源上锁,只乐观地上个锁看这个事务有没有被其他客户端影响,如果被影响就终止事务或重做。
2024-04-25 09:48:11
376
1
原创 go语言 go-redis watch实例
讲一下对watch的理解在redis中watch是通过加了乐观锁的方法先获取事务执行前key值,如果在开始执行事务时检测到由于并发key被其他客户端修改了,就会终止事务如果用go-redis实现就是这样的其中watch即使对key值的监听,fn回调函数相当于如果key没有发生修改要执行的事务逻辑。
2024-04-25 09:45:05
380
原创 第15届蓝桥杯题解
十四届国二选手,发表一下,今年提挺坑的。以前经典的斐波那契函数是初始数据 是 1 1然后新的数等于前两个数相加于是数列为 1 1 2 3 5 8......本题的意思是 先给你一个数让你初始化数列数据比如 197初始化数据是 1 9 7然后新的数等于前n个数相加(n为S的位数比如197n就为3)于是数列为 1 9 7 17(1+9+7) 33(9+7+17) 57(7+17+33) 107(17+33+57)197(33+57+107)...所以我们算法思路也是先
2024-04-21 08:29:20
4529
4
原创 009优化器
而对于其他优化器误判的情况,你可以在应用端用 force index 来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。因为以a为索引 会先用索引查询1000条数据 然后在根据b between 50000 and 100000 的条件过滤,我当时想的and语句会分别查询a 和b的行然后求交集再排序 ,由于排序的时候是b所以我想选b为索引。1)扫描行数 ,扫描的行数越少,意味着访问磁盘的数据的次数越小,消耗cpu的资源越少。Mysql是如何得到索引的激素和。
2024-04-14 14:27:57
201
原创 第十四届蓝桥杯javaA组 阶乘的和
这个题我做的时候已经看出来,最小的m一定是最小的Ai,然后如果想让想让m+1那么只能让最小的Ai的数量是m+1的倍数因为比如说m=Amin +1 那么想让m!是 Ai阶乘和的倍数只有。然后以相同的方法看是否能将Amin+1!转化为Amin+2!然后我就不知道如何就m等于Amin+2的情况了,其实可以迭代将nAmin!直到不能转化为止,此时最小的Amin就为m的最大值。
2024-03-30 21:40:53
206
原创 第十四届蓝桥杯javaA组 D题棋盘
题目也就迎刃而解了,如果不了解上面基础算法得小伙伴可以先学习一下,解题事半功倍。后面看题解也看不懂,于是慢慢了解一维差分,二维差分,二维前缀和。这道题写的时候先用暴力解题只能过30%
2024-03-30 20:58:20
276
原创 一维差分算法
在刷javaA组蓝桥本真题时,碰到了一个用二维差分方法的解题思路,意识到自己差分不熟悉,就想先学习一下一维差分。假设:数组的大小为n,修改次数为m,修改区间平均下来是 1/2 n。就可得到状态2的数组arr2=【1,1,1,1,1,1,1,0】经过遍历之后arr就变成【1,-2,-2,2,5,1,1,0】那么数组arr为 【1,0,0,0,0,0,-1,0】比如说arr1=【1,0,0,0,0,0,-1,0】实际数组应该是【1,1,1,1,1,1,1,0】输出:[ 1,-2,-2,2,5,1,1,0 ]
2024-03-30 16:48:52
351
原创 加密技术概述
所以数字签名很难会被修改,因为采用密钥加密,攻击者即使可以捕获数字签名并用公钥解密,他修改数字签名后也不能对修改后的数字签名进行加密。修改,因为采用密钥加密,攻击者即使可以捕获数字签名并用公钥解密,他修改数字签名后也不能对修改后的数字签名进行加密。具体原理就是 用共享密钥加密数据,用公钥加密共享密钥, 将两个加密的数据和密钥都发给对方。共享加密和公共加密,用共享加密加密公共加密的公钥,优化了公共加密加密时间长的问题。来回交换生成新的密钥 运用了伟大的离散问题,我的理解非常安全。
2024-03-24 11:01:49
879
原创 第十四届蓝桥杯蜗牛
到达第i根竹竿底部的时间=蜗牛到达第i根竹竿的传送门出口的时间(即到达第i-1竹竿传送门入口的时间:time_portal[i-1])+ 传送门出口到底部距离/下爬速度。time_portal[i] 表示蜗牛从原点到达第i根竹竿可以传送到第i+1竹竿的传送门入口 a1的最短1时间。很明显,代码中表示最状态的数组为 time_bottom[i]表示蜗牛从原点到达第i根竹竿的底部用的最短时间。注意:到达第i个竹竿传送门入口的最短时间也是,蜗牛传送到第i+1根竹竿传送门出口的最短时间。(2)从底部爬到传送门。
2024-03-12 08:14:36
574
原创 三步实现支付宝支付【go语言 支付宝沙箱】
支付宝沙箱支付是支付宝提供的一个测试环境,用于开发者在不影响真实交易的情况下进行支付接口的开发和调试。在沙箱环境中,开发者可以模拟真实的支付流程,包括支付、退款、查询等操作,以便更好地调试和验证自己的支付接口是否正确。使用支付宝沙箱支付可以帮助开发者提高支付接口的稳定性和安全性,避免在开发过程中对真实交易造成影响。同时,沙箱环境还提供了丰富的测试工具和文档,方便开发者快速上手和进行测试。在控制台的沙箱操作时可以查看自己的沙箱账号用于模拟收付款。将私钥 和 KAppId改成自己的。
2024-03-09 17:29:55
969
1
原创 003堆栈内存
引用数据类型的大小是不固定的,而且它们的生命周期可能会比栈内存中的局部变量更长。因此,将引用数据类型的对象存储在堆内存中。可以更灵活地管理对象的生命周期,并且可以通过引用在不同的方法和作用域中共享对象。ps:第四点便是堆内存存放引用数据类型的原因之一。
2024-03-01 21:59:58
330
原创 001队列
java中的队列(Queue)是一种常见的数据结构,它遵循先进先出的原则。java提供了多种队列的实现方式。常用的包括LinkedList。ArrayDeque 和 PriorityQueue.(前两种实现方式队列没有边界大小,不会满) 添加元素、获取并移除元素、获取但不移除元素、其他操作(如判断空,大小,清除全部队列)
2024-02-25 19:45:23
256
原创 解决前端获取后端传输的整形数据爆精度问题
本例将 code{1,12.0} 序列化为josn格式 {"id":"1","score":"12"}`{"id":"1234456","score":"88.50"}`反序列化为Card{ID:1234567, Score:88.5}序列化时将结构体变量名转化为tag名 类型转化为tag的类型反序列化时将tag名转化为结构体变量名 类型转化为结构体变量的类型。
2024-02-17 20:07:06
225
原创 【mysql】当表为空时如何输出null 方法全集
ps空表示没有没有任何输出,null表示输出为null可以使用聚合函数进行空值null值的转换,具体的聚合函数包括SUM/AVG/MAX/MIN可以使用select语句进行转换但空值应直接写在select中而非from中 limit语句无法出现新的null值where和having同样无法出现新的null值。
2024-02-17 15:26:39
932
原创 go语言 声明结构体变量以及结构体指针的方法与区别
现有结构体 MyStructimport ("fmt"var myStruct *MyStruct // 结构体变量的零值fmt.Printf("IntField: %d\n", myStruct.IntField)//输出0fmt.Printf("StringField: %s\n", myStruct.StringField)//输出“”fmt.Printf("PtrField: %v\n", myStruct.PtrField) // 指针字段的零值是 nil。
2024-01-29 14:49:31
226
原创 【快速幂加快速乘】解决算法中90%快速幂爆精度问题
第三步 38+76+(76*2)%100 *5/2 等价 (38+76)%100+52*2 即 14+52*2。第二步 38+38*2*(11/2) 等价 19+72*5。第一步 (19*2)*22/2 等价 38*11。如果题目背景是数值最大精度为200 那么19*22就直接爆精度了,而用快速乘的方法不会直接爆。b 拆分成 (2a)
2024-01-26 18:00:46
439
原创 数组之二分查询
if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target(也就是说target一定不能在mid位置)那么搜索范围肯定不,那么接下来要查找的左区间结束下标位置就是 middle - 1 类比 如果中间值大于target left=mid+1。【2】比较中间值 mid=(left+right)/2 如果中间值大于target那么target就在左半部分 如果中间值小于target那么target就在右半不放呢。
2023-11-16 17:22:45
201
1
原创 MySQL 备份数据库 以及运行备份好的.sql文件
要复制备份一个 MySQL 数据库,您可以使用 MySQL 的内置工具和功能来执行该任务。2.查看自己系统变量里配的mysql环境。1.打开终端黑窗口 输入。
2023-10-25 20:17:39
264
1
原创 力扣673.最长递增子序列的个数
一样先从i=1开始遍历数组nums[]与前面的数比较如果nums[i]>nums[j] 1<=i<nums.length。那么最长递增序列的长度不变,数量加上新产生的子序列的数量num[j] 即num[i]=num[i]+num[j]那么最长递增子序列的长度和数量都将变化, 长度变dp[i]=num[j]+1 数量为新产生序列的数量。只需在原来代码的基础上多加一个数组num[i]记录以nums[i]结尾的最长递增子序列的数量。假如当前记录的以nums[i]结尾的最长递增子序列的长度为n。
2023-10-19 21:57:13
55
1
原创 力扣300. 最长递增子序列
i->[1,nums.length) j->[0,i) 让nums[i]与nums[j]进行比较如果nums[i]>nums[j]那就说明nunms[i]可以加在nums[j]后面形成新的序列,新增的序列的长度为nums[j]+1 然后让 求出dp[i]的转移方程。2,5,7 或2,3,7就不能选了所以我们可以返回直接跳过10,9但计算机很难实现这样的思路即从前往后比较添加递增序列突然发现后面有一段递增序列但由于前面数的限制而不能添加,再回到前面把那个限制添加的数去掉。
2023-10-19 17:06:58
53
1
原创 力扣53. 最大子数组和
抛开计算机不谈,先说一下我们现实中碰到几个数让你求连续的几个数的和的最大值,怎么办,连续的序列比如 -2 1 -3 4 -1 2 1 -5 4 首先找连续序列的第一个数,只要是正常人,看到负数 -2 直接pass,只要是负数开头的序列一定会更小 ,然后直接 选1 接着就是-3 然后序列1开头也就到此为止了因为1+(-3)=-2 你如果把1+(-3)看成一个数-2 那么序列就变成了 -2 -2 4 -1 2 1 -5 4 所以我们要接着跳过-2(也就是1-3)我们要创建一个变量 int sum=0;
2023-10-19 15:58:57
44
1
原创 golang 同一包下调用不同go文件的函数报错:undefined:函数名
因为只编译了main.go文件,而game.go文件没有编译,所以mian.go运行到NewGame()时就会找不到。命令运行Plane 目录下的全部文件。
2023-10-15 11:34:11
426
1
原创 java 浮点数取余的原理 及 精度丢失的原因
之前纠结的是做算法题时,用一个极大的整数对1e9+7取模运算有精度丢失,毕竟时整数型的浮点数想着得到的商也是一个整数,不应该会有误差,但忽略了浮点数取余的商也是一个以科学计数形式的浮点数,由于被除数很大,所以商的位数也就很多,那么浮点数并不能有足够的小数位来表示这是商,就必须舍弃不能表示的后几位,然后就会造成精度丢失。在Java中,浮点数的取余操作使用的是%运算符。具体来说,浮点数的取余操作实际上是通过将被除数除以除数并取得商的整数部分,然后再将商乘以除数,最后用被除数减去这个乘积得到余数。
2023-10-08 08:54:45
398
1
原创 Java 用sort对二维数组进行排序
用Arrays.sort()对一维数组进行快排相信大家一定不陌生,但对今天给大家分享一下sort对二维数组的3种排序方式。
2023-05-11 11:28:02
2146
原创 力扣 56. 合并区间 Java题解
那么intervals[1][0]<intervals[0][0] 然后用end =Math.max(end,intervals[1][1])来决定合并后区间的后端点。如果第一个区间和第二个区间不重合那么将star end存入list集合中,然后将star end'的值改成第二个区间左右端点的值重复上述操作。为来避免着这种情况,我们先把数组按照它的左端点升序排序,然后在依次遍历判断当前区间是否和前面的区间是否重合然后合并。先让 star end 为第一个区间的两个端点,如果第二个区间和第一个区间重合。
2023-04-15 21:21:00
506
原创 第十二届蓝桥杯java B组 D货物摆放
首先我们应该分析到 a b c在绝对情况下 一定是 n d的因数那那么 a b c 一定满足。即 设集合 N={x| n%x==0 } a,b,b属于N 且 n=a*b*c。1.那我们首先 先求n得因数 n=2021041820210418 16位数用long。那么这个题就进一步简化成 在n的因数 有多少种组合使得n=a*b*c;题目要求便是:求n的三位因数的组合即 n=a*b*c。3.如果符合n=a*b*c 就让记录的数加1。a b c 有多少种;求 a b c得组合数。
2023-04-06 15:18:19
89
原创 做java小游戏添加音乐用getResourceAsStream()读取音乐文件时返回值为null
getResourceAsStream()里填写的相对路径错误,其实这个原因大部分人都不会犯,因为大部分都是看着视频做的游戏,不太可能把相对路径填错。如果没有把你将要播放音乐的所在目录设置成资源根目录。从第一行可以看到错误类型为空指针异常。将resource设置成资源根目录后。设置好之后就能正常播放音乐了。IDEA设置资源根目录·
2023-03-28 15:30:54
350
原创 HTML JavaWeb form表单里的action属性是干嘛的
啊哈终于学到了Javawe但对于表单发送请求还不怎了解,那就看这篇超细讲解。学完就会觉得action妙啊
2023-01-04 21:39:28
1270
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人