- 博客(42)
- 收藏
- 关注
原创 面试——MySql索引什么场景下会失效
描述:在联合索引中,如果某列的范围查询中断了索引的有序性,后续列的索引无法生效。描述:当查询条件值的类型与索引列类型不一致时,MySQL 会进行隐式类型转换。描述:MySQL 优化器动态调整索引,可能选择非最佳索引或直接全表扫描。描述:如果 OR 条件中有字段未使用索引,会导致整体索引失效。描述:分区表的查询条件未覆盖分区键时,全局索引可能无法生效。描述:排序或分组字段与索引顺序不匹配时,索引无法生效。描述:查询中包含未索引的字段,可能导致回表或索引失效。=、<>)通常会导致索引失效。
2024-12-04 10:26:12
736
原创 springboot:责任链模式实现多级校验
责任链模式是将链中的每一个节点看作是一个对象,每个节点处理的请求不同,且内部自动维护一个下一节点对象。当一个请求从链式的首段发出时,会沿着链的路径依此传递给每一个节点对象,直至有对象处理这个请求为止。2、实现不同的校验处理器。4、服务类调用责任链。
2024-11-19 17:29:34
577
原创 Java——踩坑Arrays.asList()
查看源码可以看到,asList返回到ArrayList是一个内部类,继承了AbstractList,再查看源码,并没有是哪set,add,remove方法。查看源码可以看到,接收入参为泛型,而基本类型并没有集成Object。asList之后new一个List给他。进行装箱或者直接使用包装类型。new一个新的List。报了不支持的操作异常。
2024-09-06 10:37:19
852
1
原创 Java——踩坑Synchronized
不要使用Integer对象作为锁对象,Integer对象改变,往往会生成一个新的对象,从而导致锁对象不唯一。
2024-06-05 11:51:28
223
原创 面试——数据库中小表驱动大表?为何能提高性能?
student表和school表,执行下面的sql。算法,那么选择哪个表作为外驱表和内驱表至关重要。作为外驱表的话,就是大表驱动小表,时间复杂度将是。作为外驱表的话,就是小表驱动大表,时间复杂度将是。都存在索引的情况下,并且数据库采用的是。**,可见根本不是一个数量级的。有一百条数据,如果选择。
2024-04-25 16:18:58
423
3
原创 面试——数据库中的锁升级(Lock Escalation)机制
以MySQL为例,按照两阶段锁协议,会先给tb_user加上表意向锁,然后对tb_user的所有行加上行锁,但是当tb_user数据量非常多的时候,频繁的获取行锁会影响性能,所以会将表意向锁升级为表锁,后续访问的时候不需要再加锁,这样导致的结果是并发性能降低,因为其他线程访问该表会被阻塞。条件,分批去操作数据,尽量防止全表扫描。因此得出建议:操作表的时候尽量带仨很。假设执行下面的sql语句。
2024-04-24 18:20:40
651
原创 Java——内存溢出如何排查
初始化启动参数最大堆内存为20m,在内存溢出的时候生成一个dump文件,然后存储在对应目录下。打开mat导入内存溢出dump文件,选择。
2024-04-24 18:09:55
678
原创 Java——基于CompletableFuture的流水线并行处理
CompletableFuture在JDK1.8提供了一种更加强大的异步编程的api。它实现了Future接口,也就是Future的功能特性CompletableFuture也有;除此之外,它也实现了CompletionStage接口,CompletionStage接口定义了任务编排的方法,执行某一阶段,可以向下执行后续阶段。
2024-03-26 18:13:29
1972
原创 面试——深度分页问题的优化
在开发中为了防止一次加载太多数据到内存,对内存占用和IO读取开销太大,一般使用limit关键字进行分页加载数据,在数据量比较大的时候,如果进行limit分页查询,越往后,分页查询的效率越低。当在进行分页查询时,如果执行limit 9000000, 10,此时需要排序前9000010条记录,仅仅返回9000000-9000010的记录,其他的记录丢弃,查询排序的代价非常大。丢掉前m条,保留第[m, m+n],n条结果,并返回给客户端返回,从磁盘中读取m+n条数据就是整个查询过程中耗时的操作。
2024-03-26 14:58:34
309
原创 ReentrantReadWriteLock
注意,这里的阻塞是一个概率性的阻塞,因为它只是一个启发式的判断,不是绝对的。根据 ReentrantReadWriteLock 的特性,第一个线程获取了读锁,第二个线程尝试获取写锁,会被阻塞。如果按照 ReentrantReadWriteLock 的特性,第三个线程应该可以成功获取读锁,因为读锁是共享锁,不会阻塞其他读线程。但是,实际上,第三个线程却被阻塞了。与传统的独占锁不同,ReentrantReadWriteLock 允许多个读线程同时访问资源,但在写线程访问时,会阻塞所有其他读线程和写线程。
2024-03-21 18:54:04
492
原创 面试——Java垃圾回收算法和垃圾回收器
他不但只会用一个线程去收集垃圾,在收集垃圾的时候其他的所有工作线程必须停止,即会发生Stop the World现象,对于Stop the world(在垃圾回收开始时停掉其他所有的线程,只供垃圾回收器回收使用,对于系统尤其是高并发系统来说就是一个噩梦),直到垃圾回收结束。复制算法将堆内存分为两个区域,通常是”From“区和”To“区,当”From“区的对象被标记为存活时,它们将被复制到”To“区,而未被标记的对象将被丢弃,完成复制后,”From“区和”To“区的角色交换。标记-清除算法分为两个主要阶段。
2024-02-28 18:46:02
999
原创 面试——双亲委派机制
我们再看第四个问题,我们想我们要怎么实现jsp文件的热加载,jsp 文件其实也就是class文件,那么如果修改了,但类名还是一样,类加载器会直接取方法区中已经存在的,修改后的jsp是不会重新加载的。这样保证了Class执行安全。在加载某个类时会先委托父加载器寻找目标类,找不到再委托上层父加载器加载,如果所有父加载器在自己的加载类路径下都找不到目标类,则在自己的类加载路径中查找并载入目标类。如果父加载器及bootstrap类加载器都没有找到指定的类,那么调用当前类加载器的findClass方法来完成类加载。
2024-02-27 18:22:26
986
原创 面试——类加载机制
4、解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用。1、加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。3、父类的变量和代码块(先声明的先执行)
2024-02-27 17:36:11
398
原创 Lambda表达式代替观察者模式
场景:用户申请退款,系统同意退款。:创建多个观察者类,注册,通知。3、调用支付接口进行退款。2、发送站内信与短信。
2024-02-19 18:58:00
386
原创 springboot:通过WebMvcConfigurer和HandlerInterceptor配置多个拦截器
通过WebMvcConfigurer和HandlerInterceptor配置多个拦截器
2024-02-02 11:03:52
1925
原创 使用iText将Excel导出为pdf
这里貌似还有存在一个问题,就是创建pdf表格的使用的是excel每一列的宽度比例,并无法完美做到将excel每个单元格的数据的长度做到适应,思来想去没有想到什么好的方法。
2023-09-06 16:48:07
1957
1
原创 Docker 安装 IoTDB
这将创建一个名为 “iotdb” 的容器,并将 IoTDB 的端口映射到主机的相应端口上(6667、31999、8123 和 9003)。首先,你需要在你的机器上安装 Docker。在容器的命令行界面中,你需要配置 IoTDB。完成配置后,你可以启动 IoTDB 服务。要配置和启动 IoTDB,你需要进入容器的命令行界面。接下来,你需要创建一个容器来运行 IoTDB。在文件中,你可以修改各种配置选项,如存储路径、数据复制等。这将启动 IoTDB 服务,并将输出日志显示在控制台上。步骤 3:创建并启动容器。
2023-09-04 09:45:20
1393
1
原创 Elasticsearch启动异常
1、查看日志文件所属群组和用户是否非root用户chgrp -R 群组 xxxxx.log chown -R 用户 xxxxx.log
2022-05-08 14:28:41
971
原创 腾讯云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
872
原创 面试——redis的缓存击穿、雪崩和穿透及处理办法
redis击穿:请求数据顺序,首先会从redis缓存中拿数据,若未拿到则查数据库,再写到redis。如果是请求一条根本不存在的数据时,则会去直接访问数据库,但是数据库也没有,所以它也没把数据写入redis缓存。所以每次这种请求都会直接访问数据库。如果请求的数量太大的话,这种绕过redis直接访问数据库情况则成为击穿。解决办法:1、在查询数据库的时候若未查询到数据,依然在redis中保存一条记录,并把value设置为null或者其他便于区别的值,可以再给该条数据设置一个过期时间,那么以后再有请求过来访问
2022-05-04 11:02:02
330
原创 【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
3602
原创 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
1089
原创 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
450
原创 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
156
原创 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
1640
原创 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
200
原创 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
195
原创 pytorch——batch_size
1 定义单次训练用的样本数,通常为2^N,如32、64、1282 提出背景在batch_size概念没提出之前,神经网络的训练每一个epoch需要将所有的数据一次性加载训练,使得内存负载加大。这样会准确计算梯度方向更准确,但不同梯度值差异过大,无法确定全局的学习率。在这样的条件下,batch_size被提出来了。3 合适的batch_size训练的优点使内存利用率增大,加快训练速度使梯度方向计算更准确,收敛快...
2020-11-14 16:25:31
2424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人