- 博客(11)
- 收藏
- 关注
原创 用GZIPOutputStream流压缩出现H4sIAAAAAAAAAA==
最近使用redis时发现里面有些值过大,当频繁访问时导致redis的网络带宽拉满,影响系统性能,减少多余的字段之后依然觉得过大,所以决定使用压缩值的方式,把对应的对象压缩之后再存到redis里面,取出来时再解压,但在使用GZIPOutputStream压缩过程中发现了一个问题,如下所示:压缩完的值为H4sIAAAAAAAAAA==,拿这个值解压之后报错,这很明细是一个错误的压缩值,经过查阅资料(查询google,国内网站搜索不到答案)发现,只要在执行result = new sum.misc.BASE64E
2022-06-15 16:01:50
9212
1
原创 postgresql:operator does not exist: text[] && character varying[]
一种字符串转集合的写法:打印的sql在navicat上运行正常:经过调查发现mybatis把string_to_array识别成了text[] ,把array[#{0}]识别成了character varying[],所以导致二者没法直接相等,所以在后面加多一个::text[]把不同格式转换成相同格式,修改成如下代码后成功运行:本文解决方案参考原文链接:https://blog.csdn.net/GodSure0914/article/details/116123770...
2022-06-06 11:47:38
2951
原创 beyond compare代码比对工具
使用beyond compare可对比两个版本的代码之间的差异,一般可用来查看新版本与旧版本之间改动了那些文件(当然不仅仅是代码比对,还可以用于任意两个文件夹之间的比对),下面记录下使用此工具的操作:1、只保留需要对比的文件:在我们代码比对的时候,很多时候只需要比对java文件(或者class文件)、xml、配置文件等常见的改动,很多文件比如静态资源等基本上是不需要比对的,所以这时可以选择过滤一些文件,点击过滤的图标,在弹出框把一些不需要比对的文件过滤掉如我图上的过滤条件就是把*.gif、
2022-05-06 14:47:59
18303
原创 数据库explain执行计划解读
在要执行的sql前面加explain可以显示其sql的执行计划,由此可得知该sql执行了那些操作、执行操作的开销、是否使用索引等,下面将介绍执行计划的参数解读。先在sql前面加explain,执行就会出现以下内容:列说明:id列:执行算子的编号(id相同,从上执行到下;id不同,id大的先执行,如上面图的id都不同,所以执行顺序为6、5、4、3、2、1)operation列:执行算子的名称E-rows列:算子估计的输出行数E-memory列:算子估算的内存使用量E-w
2022-04-08 10:37:23
1411
原创 用户线程、守护线程
Java中有两类线程:Daemon Thread(守护线程) 、User Thread(用户线程)二者区别点:只要当前JVM实例中存在任何一个非守护线程还没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。例如GC (垃圾回收器)就是守护线程的典型应用,当需要进行垃圾收集时,字节码执行引擎就会启动守护线程去进行垃圾收集。除此之外,平时创建的线程可以设置setDaemon属性为true即为守护线程。注意点:1、 thread.setDaemon(tru
2022-03-08 11:47:32
405
原创 记mysql相关存储引擎、数据结构
索引是一种数据库高效获取数据的排好序的数据结构。一、数据结构:Mysql使用的数据结构是B+树,是一种在B树的基础上改造的数据结构,二者之间的区别在于1、B树的每个结点都存储了key和data,B+树的data存储在叶子节点上。节点不存储data,这样一个节点就可以存储更多的key。可以使得树更矮,所以IO操作次数更少,查找速度更快。2、B+树的所有叶结点构成是一个有序链表并用指针连接(双向指针),可以提高范围查询的速度,而B树节点之间没有用指针连接。二者结果如图所示B树:.
2022-02-15 16:13:05
1229
原创 redis常见问题及解决方案
redis的性能并不受CPU的运行速度,影响redis性能的是网络带宽和内存大小。redis常见问题及对应解决方案:一、缓存穿透:就是查询一个压根就不存在的数据,即缓存中没有,数据库中也没有解决方案:使用布隆过滤器,把数据先加载到布隆过滤器中,访问前先判断是否存在于布隆过滤器中,不存在代表这笔数据压根就不存在。缺点:布隆过滤器是不可变的,可能一开始过滤器和数据库数据时一致的,后面数据库数据变了,或变多或变少,而对应的布隆过滤器的数据也要改变,这时会比较麻烦。二、缓存击穿:数据库中
2022-02-15 16:11:10
5348
原创 记一次项目中跨系统的日志补偿实现事物一致性
所在项目是一种以Activity流程引擎为业务支撑技术,即通过走流程的方式完成对业务数据的评估、会签、审批、发布,当然实际节点不止这几个以及可以进行反向走流程、子流程等一系列的业务诉求,在拆解为微服务之前,这是一个很庞大的单体项目,介于各种原因拆解为多个微服务,各个微服务之间的数据、操作依赖使用接口调用完成业务诉求,还拆分出了一个公共组,用于维护公共数据、实现公共功能,其中启动流程相关的就是在公共组,因为各个模块(微服务)都有用工作流,所以没必要每个子系统都写一套,更没必要都有一套存储流...
2022-02-15 16:09:10
430
原创 基于redis实现分布式锁
谈到给代码加锁、代码同步问题,我们都会想到synchronized或者lock,这两种加锁机制虽然可以解决同步问题,但是这种锁是属于JVM级别的,只能适用于单体架构,而分布式应用一般都是部署多台服务器上也就是有多个JVM,这时synchronized或者lock就没有办法解决,比如一个电商系统里面某个方法要对某件商品进行减库存,这个系统部署在多台服务器上,即使加上了synchronized锁,这时两个人买这个商品同时进来减库存,基于负载均衡可能会出现两个人的减库存请求访问在两个服务器上...
2022-02-15 16:07:58
973
原创 记springBoot的常见注解与约定大于配置
springBoot中,依据约定大于配置的原则(很多东西都是不变的为什么还要配置呢)摒弃了传统spring框架许多繁琐的配置xml,降低了项目搭建的复杂度,所以在springBoot中有许多约定,一些常见的如下:1、Maven的目录结构。默认resources文件夹是存放资源配置文件;默认编译后生成的class文件都放在targe下面。2、springBoot默认的配置文件必须是application命名的.yml文件或者是.properties文件3、application.yml中默认属性。
2022-02-15 16:07:12
448
原创 spring使用三级缓存解决循环依赖简介
循环依赖一般是指两个类中互相注入彼此,这种情况下如果两个类都要作为bean放到spring容器里,则都要进行bean的生命周期从而在执行属性填充(依赖注入)时就会报错,因为进入了死循环,好在spring使用了三级缓存解决了这个问题,但如果是构造函数的注入即便是spring也不能解决。在讲解spring如何解决相互依赖之前先了解这个三级缓存到底是什么,其实说到底这三级缓存就是三个map集合。图中的singletonObjects就是一级缓存,一个初始化大小为256的Concurre
2022-02-15 16:06:25
320
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅