- 博客(43)
- 收藏
- 关注
原创 所有自然数(正整数)之和是-1/12?一探究竟
相信大家之前刷到过这样的视频,一个S = 1 + 2 + 3 + ... 这样一直加下去S = -1/12,在我们的认知中,所有正整数一直加下去,最后的结果肯定是正无穷,再怎么离谱,也不会一个负数,还是一个分数,但是听说这个数在物理一些领域确实中有着实际的意义。他们的证明方法是什么呢?一起来看看到底它是什么不为人知的秘密?还是一个乱说一通呢?
2024-08-25 21:47:46
3783
3
原创 一文搞懂不确定性原理
在讲这个之前,我们先要搞清楚,什么是不确定性原理?然后再解释它为什么就是不确定的呢?我还模糊记得我第一次接触这个东西的时候,是在高中物理教材上面提了一下。其中印象最深的就是:动量确定,位置就不确定,位置确定,动量就不确定。/4π。
2024-08-25 18:53:56
2410
原创 HashMap 的长度为什么是2的n次方
如果hash = 21, length = 8,显然 hash % length = 5。然后21的二进制为10101, 8 - 1的二进制为00111,我们可以发现这个21&7其实就可以发现就是取21二进制的后三位,也是5。用其他的数也是一样的,其实就是利用了2的n次方-1的二进制全为1的特性。那和这个2的n次方有什么关系呢?其实在我们进行hash运算时hash%length==hash&(length-1)同理,任何一个数对除以2^n,也就是对2^n-1取模。注:这里2^n是2的n次方,不是异或符号。
2024-08-25 12:17:42
176
原创 java中lambda表达式报错原因分析:Variable used in lambda expression should be final or effectively final
第四个问题:对于一个对象,和上面的基本数据类型差不多,多的一点就是我们可以改变对象内部的属性不会报错,如下面的list1。第一个问题:在problem1中定义的num1和num2,num1修改了一次,在lambda中num1报错。第二个问题:在problem2中定义的num1和num2,num1在内部修改,在lambda中num1报错。因为局部变量在lambda表达式中默认被定义为final(静态)的,也就是说,在Test01类里面写了一个方法,参数为我定义的接口,准备使用lambda表达式展示我的问题。
2023-10-13 14:26:19
2611
1
原创 Redis作为缓存,mysql的数据如何与redis进行同步?
允许延时一致的业务,采用异步通知使用MQ中间中间件,更新数据之后,通知缓存删除利用canal中间件,不需要修改业务代码,伪装为mysql的一个从节点,canal通过读取binlog数据更新缓存强一致性的,采用Redisson提供的读写锁共享锁:读锁readLock,加锁之后,其他线程可以共享读操作排他锁存强一致性的,采用Redisson提供的读写锁共享锁:读锁readLock,加锁之后,其他线程可以共享读操作排他锁独占锁writeLock也叫,加锁之后,阻塞其他线程读写操作。
2023-10-04 21:33:43
2439
原创 leetcode233. 数字 1 的个数
可以发现,m < 0 时,m - 100 + 1 200 时,m - 100 + 1 > 100我们要得到100,所以剩下的这部分,百位上为1的个数为: min(max(m - 100 + 1, 0), 100)以上两部分加起来,就是百位上1的总数:(n / 1000)*100 + min(max(m - 100 + 1, 0), 100)k不要化简为 (n/10),因为(1234567%1000)*100=123400 而1234567/10=123456。
2023-08-12 14:55:07
270
原创 基于SpringBoot实现复杂邮件信息发送
3.找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击开启服务。8.启动测试,浏览器输入http://localhost:8080/send1。7.编写controller,这里代码比较简单,我没有分层。4.发送验证码验证一下,复制验证码。1.进入qq邮箱,点击设置。5.进入idea,引入依赖。
2023-08-08 10:23:31
145
原创 JVM之逃逸分析
如何将堆上的对象分配到栈,需要使用逃逸分析手段。这是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,对象只在方法内部使用,则认为没有发生逃逸。当一个对象在方法中被定义后,它被外部方法所引用,则认为发生逃逸。例如作为调用参数传递到其他地方中。
2023-08-05 10:59:06
86
原创 动态代理(jdk/cglib)
那这样做最大的好处呢就是我们可以在代理类调用目标类之前和之后去添加一些预处理和后处理的操作,来扩展一些不属于目标类的功能。那比如如果我们使用JDK动态代理,只需要我们的代理来去实现invocation handler然后实现它的invoke方法就可以去代理任何你想控制访问类,而不是具体的某个类。JDK动态代理和CGLIB动态代理是Java中两种常见的实现动态代理的方式,它们之间有一些区别。所谓静态代理,就是在程序运行之前,我们就给目标类编写了其代理类的代码然后编译其代理类。,通过代理类调用目标类完成。
2023-07-18 21:54:44
114
原创 UDP和TCP对比
因此,对于UDP用户数据报出现的误码和丢失等问题,UDP并不关心,基于UDP这个特点,UDP适用于实时应用,如IP电话、视频会议等。接收万的应用进程必须有能力识别收到的字节流,把它还原成有意义的应用层数据,也就是说,也就是说UDP对应用进程交付下来的报文,既不合并也不拆分,而是保留这些报文的边界。最后,我们再来对比一下UDP用户数据报的首部与TCP报文段的首部。换句话说,UDP是面向应用报文的,如图(应用层下面的层省略)因此,UDP是无连接的,TCP是面向连接的。同时,UDP支持单播,多播和广播。
2023-07-17 20:55:40
85
原创 JVM性能监控与调优常用命令
生成线程快照的作用:可用于定位线程出现长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等问题。这些都是导致线程长时间停顿的常见原因。jmap (JVM Memory Map): 作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息、类加载信息等。官方帮助文档:https://docs.oracle.com/en/java/javase/11/tools/jmap.html。
2023-07-08 22:14:50
125
原创 jvm之垃圾回收
垃圾收集机制是Java的招牌能力,极大地提高了开发效率。这当然也是面试的热点。那么,Java常见的垃圾收集器有哪些?串行回收器: Serial(young)、 Serial Old(Old)并行回收器: ParNew(young)、 Parallel Scavenge(young)、 Parallel Old(Old)并发回收器: CMS(Old)、 G1(young and Old)垃圾收集器发展史。
2023-07-01 18:12:14
90
原创 JVM中的String
String:字符串,使用一对""引起来表示。String声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String 可以比较大小String在jdk8及以前内部定义了final char[] value用于存储字符串数据。jdk9时改为byte[]String:代表不可变的字符序列。简称:不可变性。通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声 明在字符串常量池中。
2023-06-23 20:41:29
127
原创 jvm基本结构介绍
类加载子系统作业类加载器子系统负责从文件系统或看网络中加载class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。
2023-06-21 16:37:10
609
原创 Leetcode:354. 俄罗斯套娃信封问题(java最长递增子序列LIS)
可能有点难理解,举例说明:如对于[1,3,2,4,5,6],d[4] > d[2],4>2是必然,如果说d[2] > d[4],4>2(其实和前面一样,总不能2>4吧),这里d[4]=4(前面也解释过了),d[4]对应的数组为[1,2,4,5]或者[1,3,4,5],可以看到,这个数组的递增的,那么我们把他减去2,和d[2]长度一样。d[2]=2对应的数组又为[1,2],不管怎么样,d[2]是最小值,x就不一定了,就肯定是d[4] > x >= d[2],4>2,证明完成。就可以得到结果了dp了。
2023-06-12 22:34:05
176
原创 Leetcode:347. 前 K 个高频元素(java)
我这里使用的是基于快速排序的思想,假设我们有数组[2,2,2,1,1,1,1,3,3,4],将其转换为,键为数,值为出现的次数,map[{2,3},{1,4},{3,2},{4,1}],在将每个键值对放入list<int[]>,list每个元素为[key,value],为list[{2,3},{1,4},{3,2},{4,1}]。1.如果前面的大于基准的数的个数大于k个,那么前k个频率最高的数,就在前面,我们将范围缩小,从开始位置到基准位置-1,继续下一轮快排。,请你返回其中出现频率前。
2023-06-08 13:56:47
359
原创 leetcode:220. 存在重复元素 III(困难题)(桶排序,java版)
【代码】leetcode:220. 存在重复元素 III(困难题)(桶排序,java版)
2023-05-20 11:55:04
117
原创 Seata四种分布式事务解决方案
首先我们先来了解一下TC、TM、RMXA规范是x/Open组织定义的分布式事务处理( DTP,Distributed Transaction Processing)标准,XA规范描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对XA规范提供了支持。
2023-05-13 17:38:18
1957
原创 wiz文件打开方式(只要notepad++即可)
点击全部替换,就完成啦!但是会出现很多空行,这里我就只能把两行变成一行,查找为。但是这里还有一个问题,就是我们复制这些代码总是会带序号,就像这样。这样就每一行代码就只隔一行了,多的一行我也没办法了。对于这个ziw文件,直接打开肯定不行,会出现乱码。(如果把\r\n替换为空,就全部变成一行了)我们先把它该为zip文件,然后直接解压。我们直接使用浏览器打开就可以看了。选择下面的正则表达式,输入。里面就是一个html文件。
2023-05-08 10:47:53
841
原创 缓存穿透、缓存雪崩、缓存击穿区别
缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。如果用户请求返回null,这时就会重新发起请求,如果有不怀好意的人发起大量数据库不存在的请求,那么就有可能将数据库弄垮,那么怎么解决这个问题呢?缓存空对象:请求的数据如果不存在,那么我就把请求返回的null,也存到redis里面。这时请求就有数据了,就是null。布隆过滤:就是客户端和redis之间加了一层布隆过滤器,如果数据不存在,直接拒绝,存在才放行。那布隆过滤器怎么知道数据是否存在呢?
2023-04-26 11:04:50
106
原创 Redis集群
我们需要执行命令来创建集群,在Redis5.0之前创建集群比较麻烦,5.0之后集群管理命令都集成到了redis-cli中。修改redis-6.2.4/redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。
2023-04-11 12:11:20
92
原创 nacos集群搭建
官方给出的Nacos集群图:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
2023-04-11 12:00:54
135
原创 Centos7安装Docker/DockerCompose
Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为stabletest和nightly三个更新频道。官方网站上有各种环境下的,这里主要介绍 Docker CE 在 CentOS上的安装。
2023-04-11 11:55:48
590
原创 RocketMQ安装步骤(linux)
5.修改脚本中的JVM相关参数,修改文件如下。7.启动NameServer。9.使用命令查看是否开启成功。1.将压缩包上传服务器,把。2.使用解压命令进行解压到。3.软件文件名重命名。8.启动Broker。
2023-04-08 21:29:35
224
原创 Linux(CentOS 7)基本学习,详细配图
命令解析器(shell)、替我们运行、解析指令功能执行命令特殊符号运行脚本(代码)linux中的每个用户必须属于一个组,不能独立于组外。linux中每个文件有所有者、所在组、其它组的概念。ls -l 中显示的内容如下:drwx------. 16 jerry jerry 4096 8月 28 14:19 jerry0-9位说明第0位确定文件类型(d,-,l,c, b)l是链接,相当于windows的快捷方式d是目录,相当于windows的文件夹。
2023-04-04 21:50:03
8676
2
原创 二叉树n0=n2+1的证明
我们知道n0,n1,n2为度为0,1,2的结点,那么结点总个数n=n0+n1+n2换一种角度思考,度为2的结点有两个子结点,度为1的有一个子结点,度为0的有0个子结点,那么我们把这些结点加起来,就是0*n0+1*n1+2*n2=n1+2*n2。但是由于我们计算的时候还少算一个根结点,所以最后结果就是n1+2*n2+1我们用这两个方法算出来的总结点个数,让他们划等号,n0+n1+n2=n1+2*n2+1约分之后就是n0=n2+1
2022-10-19 17:21:11
2195
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人