- 博客(38)
- 收藏
- 关注
原创 Java——踩坑Synchronized
不要使用Integer对象作为锁对象,Integer对象改变,往往会生成一个新的对象,从而导致锁对象不唯一。
2024-06-05 11:51:28
122
原创 面试——数据库中小表驱动大表?为何能提高性能?
student表和school表,执行下面的sql。算法,那么选择哪个表作为外驱表和内驱表至关重要。作为外驱表的话,就是大表驱动小表,时间复杂度将是。作为外驱表的话,就是小表驱动大表,时间复杂度将是。都存在索引的情况下,并且数据库采用的是。**,可见根本不是一个数量级的。有一百条数据,如果选择。
2024-04-25 16:18:58
289
1
原创 面试——数据库中的锁升级(Lock Escalation)机制
以MySQL为例,按照两阶段锁协议,会先给tb_user加上表意向锁,然后对tb_user的所有行加上行锁,但是当tb_user数据量非常多的时候,频繁的获取行锁会影响性能,所以会将表意向锁升级为表锁,后续访问的时候不需要再加锁,这样导致的结果是并发性能降低,因为其他线程访问该表会被阻塞。条件,分批去操作数据,尽量防止全表扫描。因此得出建议:操作表的时候尽量带仨很。假设执行下面的sql语句。
2024-04-24 18:20:40
488
原创 Java——内存溢出如何排查
初始化启动参数最大堆内存为20m,在内存溢出的时候生成一个dump文件,然后存储在对应目录下。打开mat导入内存溢出dump文件,选择。
2024-04-24 18:09:55
442
原创 Java——基于CompletableFuture的流水线并行处理
CompletableFuture在JDK1.8提供了一种更加强大的异步编程的api。它实现了Future接口,也就是Future的功能特性CompletableFuture也有;除此之外,它也实现了CompletionStage接口,CompletionStage接口定义了任务编排的方法,执行某一阶段,可以向下执行后续阶段。
2024-03-26 18:13:29
1302
原创 面试——深度分页问题的优化
在开发中为了防止一次加载太多数据到内存,对内存占用和IO读取开销太大,一般使用limit关键字进行分页加载数据,在数据量比较大的时候,如果进行limit分页查询,越往后,分页查询的效率越低。当在进行分页查询时,如果执行limit 9000000, 10,此时需要排序前9000010条记录,仅仅返回9000000-9000010的记录,其他的记录丢弃,查询排序的代价非常大。丢掉前m条,保留第[m, m+n],n条结果,并返回给客户端返回,从磁盘中读取m+n条数据就是整个查询过程中耗时的操作。
2024-03-26 14:58:34
251
原创 ReentrantReadWriteLock
注意,这里的阻塞是一个概率性的阻塞,因为它只是一个启发式的判断,不是绝对的。根据 ReentrantReadWriteLock 的特性,第一个线程获取了读锁,第二个线程尝试获取写锁,会被阻塞。如果按照 ReentrantReadWriteLock 的特性,第三个线程应该可以成功获取读锁,因为读锁是共享锁,不会阻塞其他读线程。但是,实际上,第三个线程却被阻塞了。与传统的独占锁不同,ReentrantReadWriteLock 允许多个读线程同时访问资源,但在写线程访问时,会阻塞所有其他读线程和写线程。
2024-03-21 18:54:04
456
原创 面试——Java垃圾回收算法和垃圾回收器
他不但只会用一个线程去收集垃圾,在收集垃圾的时候其他的所有工作线程必须停止,即会发生Stop the World现象,对于Stop the world(在垃圾回收开始时停掉其他所有的线程,只供垃圾回收器回收使用,对于系统尤其是高并发系统来说就是一个噩梦),直到垃圾回收结束。复制算法将堆内存分为两个区域,通常是”From“区和”To“区,当”From“区的对象被标记为存活时,它们将被复制到”To“区,而未被标记的对象将被丢弃,完成复制后,”From“区和”To“区的角色交换。标记-清除算法分为两个主要阶段。
2024-02-28 18:46:02
942
原创 面试——双亲委派机制
我们再看第四个问题,我们想我们要怎么实现jsp文件的热加载,jsp 文件其实也就是class文件,那么如果修改了,但类名还是一样,类加载器会直接取方法区中已经存在的,修改后的jsp是不会重新加载的。这样保证了Class执行安全。在加载某个类时会先委托父加载器寻找目标类,找不到再委托上层父加载器加载,如果所有父加载器在自己的加载类路径下都找不到目标类,则在自己的类加载路径中查找并载入目标类。如果父加载器及bootstrap类加载器都没有找到指定的类,那么调用当前类加载器的findClass方法来完成类加载。
2024-02-27 18:22:26
903
原创 面试——类加载机制
4、解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用。1、加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。3、父类的变量和代码块(先声明的先执行)
2024-02-27 17:36:11
344
原创 Lambda表达式代替观察者模式
场景:用户申请退款,系统同意退款。:创建多个观察者类,注册,通知。3、调用支付接口进行退款。2、发送站内信与短信。
2024-02-19 18:58:00
349
原创 springboot:通过WebMvcConfigurer和HandlerInterceptor配置多个拦截器
通过WebMvcConfigurer和HandlerInterceptor配置多个拦截器
2024-02-02 11:03:52
1311
原创 使用iText将Excel导出为pdf
这里貌似还有存在一个问题,就是创建pdf表格的使用的是excel每一列的宽度比例,并无法完美做到将excel每个单元格的数据的长度做到适应,思来想去没有想到什么好的方法。
2023-09-06 16:48:07
1563
1
原创 Docker 安装 IoTDB
这将创建一个名为 “iotdb” 的容器,并将 IoTDB 的端口映射到主机的相应端口上(6667、31999、8123 和 9003)。首先,你需要在你的机器上安装 Docker。在容器的命令行界面中,你需要配置 IoTDB。完成配置后,你可以启动 IoTDB 服务。要配置和启动 IoTDB,你需要进入容器的命令行界面。接下来,你需要创建一个容器来运行 IoTDB。在文件中,你可以修改各种配置选项,如存储路径、数据复制等。这将启动 IoTDB 服务,并将输出日志显示在控制台上。步骤 3:创建并启动容器。
2023-09-04 09:45:20
1063
1
原创 Elasticsearch启动异常
1、查看日志文件所属群组和用户是否非root用户chgrp -R 群组 xxxxx.log chown -R 用户 xxxxx.log
2022-05-08 14:28:41
825
原创 腾讯云redis远程连接
1、编辑redis.conf,添加所有ip地址cd /usr/local/redis/bin/vim redis.confcd进入你的redis.conf文件,使用vim命令编辑文件,把刚才上面查到的所有ip地址都加到bind后面或者直接这样写bind 0.0.0.02、编辑redis.conf,设置密码redis.conf中找到 requirepass 字段,退出insert编辑模式,处于normal模式下,按/,然后后面跟上你要查找的内容,按回车就行了。会跳转到第一个匹配到的查找结果,
2022-05-07 21:52:37
824
原创 面试——redis的缓存击穿、雪崩和穿透及处理办法
redis击穿:请求数据顺序,首先会从redis缓存中拿数据,若未拿到则查数据库,再写到redis。如果是请求一条根本不存在的数据时,则会去直接访问数据库,但是数据库也没有,所以它也没把数据写入redis缓存。所以每次这种请求都会直接访问数据库。如果请求的数量太大的话,这种绕过redis直接访问数据库情况则成为击穿。解决办法:1、在查询数据库的时候若未查询到数据,依然在redis中保存一条记录,并把value设置为null或者其他便于区别的值,可以再给该条数据设置一个过期时间,那么以后再有请求过来访问
2022-05-04 11:02:02
298
原创 【websocket】spring boot 集成 websocket 的四种方式
1. 原生注解pom.xml<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>WebSocketConfig/* * * * * blog.coder4j.cn * * Copyright (C) 2016-20
2022-04-27 15:40:42
3404
原创 mybatis plus中的${ew.sqlSelect},${ew.customSqlSegment}使用
{ew.sqlSelect}:表示QueryWrapper中select后面的内容{ew.customSqlSegment}:表示QueryWrapper中eq,gt等条件内容,但在xml不用使用where。在service中需使用@Param(Constants.WRAPPER)指定别名
2022-03-08 00:10:47
980
原创 java-日常函数使用
trim()方法:去除首尾空格String str = " Hello World! ";str.trim();//输出为:“Hello World!”substring():截取父字符串的某一部分public String substring(int beginIndex, int endIndex)第一个参数int为开始的索引,对应String数字中的开始位置;第二个参数是截止的索引位置,对应String中的结束位置;1、取得的字符串长度为:endIndex - beginIndex
2022-03-06 20:49:18
419
原创 java——快速排序
public static void main(String[] args) { int arr[] = {7, 5, 3, 2, 4, 1, 8, 9, 6}; //快速排序 int low = 0; int high = arr.length - 1; quickSort(arr, low, high); } public static void quickSort(int[] arr, int l
2022-03-04 11:49:00
131
原创 java——ES启动后自动关闭解决
#查看ES id编号docker ps -a#查看日志docker logs -f id编号我出现的问题是内存不够修改jvm.optionsfind / -name jvm.optionsvi 查找的文件将Xms和Xmx改小一点,我是改为64m,然后es就可以了
2021-12-09 18:46:43
1573
原创 python——enumerate的用法
seq = 'hello'for i, key in enumerate(seq): print('seq[%d]=%c',%(i,key))'''输出:seq[0]=hseq[1]=eseq[2]=lseq[3]=lseq[4]=o'''seq = ['a', 'b', 'c', 'd']for i, key in enumerate(seq[::-1]) print 'seq[%d]=%c',%(i,key)''' seq[0]=dseq[1]=cseq[2]=bse
2020-11-16 19:32:05
157
原创 pytorch——pytorch.nn.Linear
import torchx = torch.randn(128, 20) # 输入的维度是(128,20)m = torch.nn.Linear(20, 30) # 20,30是指维度output = m(x)print('m.weight.shape:\n ', m.weight.shape)print('m.bias.shape:\n', m.bias.shape)print('output.shape:\n', output.shape)# ans = torch.mm(inpu
2020-11-14 17:05:56
141
原创 pytorch——batch_size
1 定义单次训练用的样本数,通常为2^N,如32、64、1282 提出背景在batch_size概念没提出之前,神经网络的训练每一个epoch需要将所有的数据一次性加载训练,使得内存负载加大。这样会准确计算梯度方向更准确,但不同梯度值差异过大,无法确定全局的学习率。在这样的条件下,batch_size被提出来了。3 合适的batch_size训练的优点使内存利用率增大,加快训练速度使梯度方向计算更准确,收敛快...
2020-11-14 16:25:31
2325
原创 python——求微分
import torchdef f(x): return (x-2).pow(2)def fp(x):#f(x)的求导 return 2*(x-2)x = torch.tensor([3.0], requires_grad=True)#x=3时的导数y = f(x)y.backward()#反向传播#对比print(fp(x))print(x.grad)
2020-11-14 15:14:49
350
原创 python——plt.text
plt.text(0,0.5,'loss:%.4f '%loss.data.numpy(),#%.4f格式化输出,保留四位小数点 fontdict={'size': 20, 'color': 'red'}#字体尺寸20,颜色 红色) #第一和第二个参数0,0.5表示输出信息的坐标,原点坐标是(0,0)...
2020-11-14 15:01:06
1750
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人