自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 【力扣】第四题-寻找两个正序数组的中位数

二分法查找-第k小的数

2023-06-07 20:13:44 159

原创 【力扣】第三题-寻找不重复的最长字串的长度

寻找不重复的最长字串的长度,一看就会,不看后悔!

2023-06-02 20:14:12 156

原创 【力扣】第二题-两数相加

大众想法和评论区大神的对比---一看就会

2023-05-30 20:07:52 138

原创 Java压缩文件工具类-Excel多个sheet工具类(实测有效)

Java实现压缩文件,Excel多sheet

2023-02-09 16:06:20 479

原创 QT- 构建套件设置编译器(qt构建套件黄色感叹号的解决方法)

Qt构建套件未设置编译器, 黄色感叹号

2023-01-03 15:11:24 4470 1

原创 ubuntu编译QGroundControl历程及问题解决--待补充

下载完成后把nlohmann_json放到libs\libevents\libevents\libs\cpp\parse\目录下,ibc.so.6: version `GLIBC_2.28‘ not found.INCLUDEPATH+=libs\libevents\libevents\libs\cpp\parse\nlohmann_json\include,同样在编译的时候执行 make clean.然后去staging文件夹找可执行文件,第一次会弹出一个框,提醒你安装所需组件,安装后,就可以执行了.

2022-11-16 11:52:39 2115 4

原创 适合Ruo-Yi的请求去重方案-Redis去重

最近做了一个类似计算器的程序,要求用户可以看到之前的计算结果,这就需要把计算参数和结果分别存储起来,但是这样会遇到用户一直用同样的数据做计算,后台就会一直在存相同的数据,通常我们传到后台的大多数都是json格式,中间会有时间字段,这样会干扰我们去重,所以我们就要利用工具类把干扰去重的字段去掉,如下。这里把业务代码去除了,后面根据返回Boolean去判断要不要写入数据库.,这时候就要做请求去重.我这里用到的。接下来不如正题–redis去重。在我们在写操作之前去做判断。我这里用了测试类去测试。

2022-10-28 16:51:02 579

原创 nginx-conf 配置https(两个前端代码共用一个后端代码)前后端分离

配置方式

2022-10-09 14:39:55 1228

原创 本地搭建Minio服务

minio下载

2022-07-05 17:25:43 788

原创 本地存储集成minio实现oss对象存储

继承minio分布式存储,图片链接直接下载,而不是查看

2022-07-05 17:15:35 2593

原创 java.io.NotSerializableException: org.apache.shiro.web.servlet.ShiroHttpServletRequest 解决方案

java.io.NotSerializableExcaption

2022-06-30 15:24:05 509

原创 富文本(html)代码中提取图片路径

因为我们的路径都是固定长度,所以我最后就直接截取了(偷懒了)

2022-06-20 10:10:22 689

原创 MinioUtils中removeObjects批量删除无效的解决办法

最近遇到一个minio的工具类中的批量删除无效,也不报错,一味的感觉是我的名字传的有问题(不知道带不带后缀名),先把我改之后的正确代码贴上后来从网上查资料,原来是因为没有遍历结果的原因,源码方法的上面有一句注释(但是我没找到这句注释),大致意思就是删除后一定要遍历结果,至于为啥这么做,我们稍后见。(现在也没见到为啥)至于名字问题,需要两个参数,一个是桶的名字(这个好理解),另外一个是objectName,不知道带不带前面的文件夹名字,还是只是文件的名字,这里明确一下是带上文件夹的名字,就是存的时候传的o

2022-06-20 10:05:42 4373 5

原创 redis常见问题

经过若干晚上的沉淀,终于酝酿出一些东西。为什么使用缓存?高性能,高并发。之前以为高性能包括高并发,但是高性能和高并发是两回事,性能是查询效率快了,高并发是可以提供N多个人一起查询。常见数据模型:这个众所周知,就简单说一下算了,String,Hash,List,Set,Sorted Set。过期策略定期删除+惰性删除定期删除就是,每隔一段时间就会随机抽取一些设置了过期时间的key,检查是否过期,而这个时间默认是100ms。但是这样还有会有一些过期的key堆积,这时候就体现出来惰性删除的作用了

2021-11-03 22:55:23 154

原创 分布式锁---Redis的分布式锁的实现思想

(每步缺一不可)获取锁的时候,使用setnx加锁,并使用expire命令为锁添加一个超时时间,超过该时间则自动释放锁,锁的value值为一个随机生成的UUID,通过此再释放锁的时候进行判断获取锁的时候还设置一个获取的超时时间,若超过这个时间则放弃获取锁释放锁的时候,通过UUID判断是不是该锁,若是该锁,则执行delete进行锁释放(Redisson为了兼容新老版本,只要不是原子操作,就用lua脚本)问题一:超时时间长短问题解决:在加锁成功后,启动一个守护线程(Redission中的Watc.

2021-08-08 15:39:38 175

原创 基于AMQP的消息中间件-RabbitMQ原理

RabbitMQ就是基于AMQP协议去设计的一款软件,在RabbitMQ中一定有交换器和队列概念,中间的那部分就是一个borker,一个borker中可以运行多个v-host(虚拟主机),默认的RabbitMQ启动后里面就有一个v-host(/[根]),一个v-host中可以有多个交换器和队列组成(多个交换器多个队列),交换器和队列之间通过路由键进行绑定,路由键可选范围字符串+‘*’+‘#‘,通过‘.’进行分割,*号代表一个不包含‘.‘的完整的单词,‘#’代表所有,一切,路由键,队列和交换器之间的对应关系.

2021-08-07 16:17:11 269

原创 Elasticsearch(ES)底层写流程,包含查询性能高的原因(秒级处理),近实时(Near RunTime)特性

整体流程介绍首先客户端发一个请求,要写数据(增删改),数据是存在索引index中的,索引分成若干个分片(shard),不管是主分片还是副分片,都是存在硬盘上的,落实成文件,这是必然流程,一定是这样的,但是要做写操作的时候,往硬盘里面写数据,是I/O操作,重量级操作,很慢,不符合ES的近实时(NRT,Near RunTime)特性,无论是写还是查,1秒内返回。要是使用I/O流,未必能达到1秒返回。默认 ES会在内存里面开一个缓存,缓存的大小无限制,但里面只存1秒的数据,记录完一秒的数据,下一秒重新开一个.

2021-08-07 10:27:26 785 1

原创 双写一致中的cache aside pattern 边路缓存思想与实际开发对比

定义:当访问数据库执行写操作的时候,有缓存介入到整体执行流程中时,先写数据库保证成功的前提下,淘汰(删除)缓存中对应的数据。查询数据的时候,有缓存介入到整体执行流程中时,先查询缓存,如果有数据直接返回;如果没有数据,查询数据库,并将数据库查询结果保存到缓存中,再返回。正式开发项目中一般写操作分为保存(新增和修改)和删除。保存的时候,是同步缓存数据;删除的时候,是淘汰缓存数据。目的是,提升缓存的应用效率。边路缓存思想中的淘汰目的1、保证缓存的数据绝对正确;2、没有查询,就没有缓存的必要。边路缓存

2021-08-06 18:24:24 352

原创 分布式系统中的缓存黑洞,缓存雪崩,缓存穿透,缓存击穿问题及解决方案和一些自己的见解

今天学习了处理在分布式系统中使用缓存的会出现的问题(缓存黑洞,缓存雪崩,缓存穿透,缓存击穿)。整体还是有一些边路缓存思想在里面,下面是官方解释和本人的一些解释。public class DetailsServiceImpl implements DetailsService { @Autowired private TbItemMapper itemMapper; @Autowired private TbItemDescMapper itemDescMapper;

2021-08-05 21:21:14 283

原创 RBAC基本流程实现

RBAC中最重要的一个名词是role角色,项目中每个账号的权限不同,所以看到的东西,可以做的操作是不一样的,所以引入这个是非常有必要的,下面图中是5个表的实现,但是为了方便理解,用户表——角色表省去了,就意味着每个用户只能对应一种角色,是一对一的关系,用主外键实现。首先,把登录功能实现,因为比较基本,这里不一一赘述,因为用户表中的type是外键,就是角色表中的rid主键,就意味着用户只要登录上去就可以得到用户是什么角色,接下来的工作就是根据角色查出来这个角色在菜单表里面可以有什么操作,这里的菜单表也是权限

2021-07-03 16:16:39 1298 2

原创 新手的HashMap源码分析(jdk8)与jdk8和jdk7的区别

Map接口的实现类:HashMap底层结构:哈希表jdk7:数组+链表jdk8:数组+链表+红黑树简单源码分析:HashMap中维护了Node类型的数组table当HashMap创建对象时,只是对loadFactor(加载因子)初始化为0.75;table还保持默认值null当第一次添加时,将初始table容量为16,临界值为12(容量*加载因子)每次添加调用putVal方法:1.先获取key的二次哈希值并进行取与(&)运算,得出存放位置2.判断该存放位置上是否有元素,如果没有直

2021-02-24 12:51:42 170

原创 Set接口的特点,遍历方式,两个实现类HashSet和TreeSet(定制排序,自然排序)

小白自学第二天(感觉一遍不太行,后期还有回顾),回头写这个也没什么好写的,东西很少,list接口的实现类LinkedList大学都学过了,底层结构就是双向链表。简单总结一下List常用的三个实现类,如果考虑线程安全问题: Vector不考虑线程安全问题:查找较多 :ArrayList (底层结构:可变数组)增删较多:LinkedList(底层结构:双向链表)还是来一点没学过的比较干Set接口的特点:1.不允许重复,至多一个null2.无序(插入和取出的顺序不一致),没有索引Set

2021-02-21 21:14:26 748 1

原创 list接口的实现类:ArrayList

底层结构:可变数组jdk8:ArrayList中维护了Object[ ] elementData ,初始量为0.第一次添加时,将初始elementData的容量为10再次添加时,如果容量足够,则不用扩容直接将新元素复制到第一个空位上,如果容量不够,会扩容到1.5倍。jdk7:ArrayList中维护了Object[ ] elementData ,初始量为10 ,添加时,如果容量足够,则不用扩容直接将新元素复制到第一个空位上,如果容量不够,会扩容到1.5倍。jdk7和jdk8的区别:jdk7相当于

2021-02-20 19:59:57 161

原创 list接口的特点和方法,遍历方式

list接口的特点#ArrayList第一.有序(插入和取出的顺序一致的),原因:有一个整数索引记录了插入的位置。第二:允许重复@list特有方法add(object)增加remove(index)按值定索引删除,要按内容删除的话‘装箱’就可以set(index,object)改indexof(object)查add(index,object)插入get(index)获取遍历方式再原有的基础上多了一种,不难想出有一个整数索引记录了位置,所以,可以用普通for和遍历数组一样遍历。三种代码

2021-02-20 19:55:22 226

原创 用户输入I love you计算机输出you love I @split的用法

这个有很多种方法 我的仅供大家参考!之所以能这样输出是分清楚“分隔符“ 是什么让他们分开 然后倒序输出即可

2019-06-12 15:28:57 1516

原创 C语言排序之冒泡法(起泡法)

C语言排序之冒泡法(起泡法)@C语言排序之冒泡法(起泡法)冒泡的本质还是两两比较,第一次把最大或最小的选出来,第二次把老二选出来,这样的话就会少比一次,就这样循环下去就行啦,无非就是循环的嵌套,下面是我做的是实例,如果想把顺序返的话,就把if表达式的>改为<即可。...

2018-11-08 22:21:43 8943 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除