- 博客(27)
- 收藏
- 关注
原创 mybatisplus报错,一旦使用LambdaQueryWrapper就报错,报错信息ew.sqlSegment != null and ew.sqlSegment != ‘‘ and ew.non
已解决,mybaitsplus报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'. Cause: org.apache.ibatis.ognl.Og
2024-11-22 11:30:40
244
原创 Spring项目如何通过MinIO实现文件分片上传、断点续传、秒传
根据生成对应的md5,和minIO中的文件的MD5去对比,如果存在,直接返回域名加路径即可,不存在再执行上传。前端每一个分片通过调用upload接口上传,每个片段有个索引index。前端将文件分成固定大小的若干个,在Vue前端,可以使用。逐个分片上传完成之后,调用这个方法进行合并。
2024-09-18 16:48:24
461
原创 Redis设计注意事项,如何设计key
Key本身的数据量过大:一个String类型的Key,它的值为5 MB。Key中的成员数过多:一个ZSET类型的Key,它的成员数量为10,000个Key中成员的数据量过大:一个Hash类型的Key,它的成员数量虽然只有1,000个但这些成员的Value(值)总大小为100 MB。
2024-09-18 09:43:52
738
原创 天源迪科java实习生面经
9、说一下项目中登录的流程,jwt怎么保存的,权限验证是在哪里实现的。5、Java中有哪些异常,什么情况会出现堆内存溢出,怎么去排查哪个线程出现这个情况?10、前端cookie怎么存储jwt的,用户登录失效怎么实现,jwt里存储什么信息。15、Mysql左连接、右连接、内连接、外连接有什么区别,笛卡尔积和外连接什么区别。2、Java常用的集合,hashmap线程安全吗,如果想要线程安全用什么。3、HashMap的key和value可以为空吗,底层原理说一下。13、设计模式,项目中怎么用的,用了哪些。
2024-09-18 09:01:40
671
原创 Redis的主从模式、哨兵模式、集群模式
简述全量同步和增量同步区别?全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl baklog,逐个发送给slave。增量同步:slave提交自己的offset到master,master获取repl baklog中从offset之后的命令给slave什么时候执行全量同步?slave节点第一次连接master节点时slave节点断开时间太久,replbaklog中的offset已经被覆盖时什么时候执行增量同步?
2024-09-18 08:36:19
2069
原创 Redis持久化存储
RDB会在两种情况执行,一种是服务停止的时候执行save,一种是通过save 60 1000这样的命令(默认60秒内至少执行1000次修改则触发RDB)触发RDB。
2024-09-16 20:40:41
954
原创 使用Redis实现用户关注博客的推模式
推送之前先查到当前发布博客用户的粉丝有哪些,然后去循环挨个推送。这里采用redis的zset结构,将键设置为。直接诶是从订阅的zset中获取。
2024-09-16 17:52:31
632
原创 Redis模拟消息队列实现异步秒杀
这样通过发布订阅实现的功能基本与List类似,但是不同点在于发布者发布的消息可以被多个消费者订阅,而且消费者可以通过PSUBSCRIBE命令实现通配符订阅消费,功能更加强大。注意:当我们指定起始ID为S时,代表读取最新的消息,如果我们处理一条消息的过程中,又有超过1条以上的消息到达队列,则下次获取时也只能获取到最新的一条,会出现漏读消息的问题。可以看到左侧接收到了order.q1的消息,右侧接受到了order.q1和order.q2的消息。然后生产者依次向order.q1和order.q2发送消息。
2024-09-15 20:14:36
1206
原创 Redis如何实现分布式锁
如果当线程1判断锁是否为自己之后,在准备释放锁的过程中线程阻塞,然后锁超时释放,这时候别的线程2来获得到锁,线程1阻塞结束,就还是会把线程2的锁释放掉,这里就需要确保一下操作的原子性,在极端情况下,如果线程1获取到锁,但是线程1发生了阻塞,阻塞期间锁超时释放,然后此时线程2获取到锁,线程1又醒了之后将线程2获取的锁释放了,这时候线程3又进来了,又会出现线程问题。结局思路就是,在释放锁的时候将储存的线程id取出来(上锁的时候值已经存为线程id),,如果不是就不能释放,只有是当前线程自己的锁才能释放id。
2024-09-14 23:01:09
921
原创 spring项目中如何通过redis的setnx实现互斥锁解决缓存缓存击穿问题
通tryLock尝试去获取锁,如果获取到返回true,没有获取到则返回false。2.1获取锁成功,则去数据库中取数据,取到后重建缓存。2.2获取锁失败,休眠一段时间再尝试去执行查询操作。1.请求到缓存当中拿数据,如果拿到,则返回。2.没有拿到数据,则尝试去获取互斥锁。
2024-09-14 17:38:08
531
原创 产生OOM(out of memory)问题如何快速定位
提前通过XX:+HeapDumpon0utOfMemoryError -XX:HeapDumpPath=【指定路径】设置,产生堆内存溢出之后会导出一个dump文件,可以根据文件定位,找到实例化对象最多的对象。3.本身资源不够,分配的堆内存不够大,可以使用 jmap -heap [线程号] 查看堆情况。2、内存泄漏,资源耗尽没有释放,例如不断去创造一些线程和连接对象没有及时的释放,会造成溢出。1、过大的数据集合,一次性查询出太多数据都存放到集合当中,实例化对象过多。结合jvisualvm工具进行分析调试。
2024-09-13 17:22:56
367
原创 Mysql锁学习笔记
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/0)的争用以外,数据也是种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
2024-08-22 23:59:15
383
原创 Mysql事务笔记,事务原理,MVCC,redolog,undolog,
学习笔记经供参考事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作默认是自动提交1 是自动提交 0 是手动提交COMMIT;ROLLBACK;当设置成手动提交之后,执行完事务需要手动提交,输入commit提交才会产生影响。执行失败输入rollback则可以回滚数据,以确保数据的完整性一致性还有一种方式可以在不修改事务提交方式的基础上进行事务控制手动开启事务进行控制。
2024-08-21 23:39:18
872
原创 java.lang.IllegalStateException: Unable to read meta-data for class at org.springframework.boot.au
检查发现问题是我在向spring.factories中添加配置的时候在末尾多加了一个逗号的问。这里末尾是不能添加逗号的,删掉就好了。当然上述的末尾的 ,\ 也不能少。
2024-07-24 11:42:06
393
原创 ArrayList 和 LinkedList区别
12.LinkedList 的节点分散存储在内存中,每个节点需要额外的空间来存储对前后节点的引用,因此在存储相同数量的元素时,通常比 ArrayList 占用更多的内存空间。综上所述,当需要频繁进行插入和删除操作时,特别是在列表的中间位置进行操作时,LinkedList 效率更高;每个节点包含对前一个节点和后一个节点的引用,因此在插入和删除操作时,特别是在列表中间插入或删除元素时,效率较高。6.LinkedList 的插入和删除操作在任意位置都很高效,因为它只需要调整节点的引用,而不需要移动其他元素。
2024-06-10 20:29:28
355
原创 HashMap源码分析,面试重点,全网最细致版本(课程笔记总结)
Hash也称散列、哈希,对应的英文都是Hash。基本原理就是把任意长度的输入,通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值。从hash值不可以反向推导出原始的数据输入数据的微小变化会得到完全不同的hash值,相同的数据会得到相同的值哈希算法的执行效率要高效,长的文本也能快速地计算出哈希值hash算法的冲突概率要小由于hash的原理是将输入空间的值映射成hash空间。
2024-05-24 23:06:39
1337
1
原创 Java中String、StringBuffer、StringBuilder 的区别
目录1. String2. StringBuffer3. StringBuilder4.使用情况如果帮助到你,别忘了点赞收藏关注String、StringBuffer和StringBuilder在Java中都用于处理字符串数据,但它们之间在功能和性能上有一些关键的区别:
2024-03-25 17:25:42
661
1
原创 java中字符串拼接使用 + 和 append()的区别
在Java中,字符串拼接有两种方式:使用加号(+)和使用(或)的append()方法。
2024-03-23 11:18:47
1737
1
原创 Vue3中Setup使用Vite的插件指定组件名字
在正常使用Vue3中要想指定组件名字需要如下操作,非常繁琐。然后回到组件中就可以直接在script后边写name属性了。我们使用vite中的插件可以简化这一繁琐步骤。打开终端,在终端输入。
2024-03-22 16:51:23
636
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人