- 博客(25)
- 收藏
- 关注
原创 关于WebFlux不支持application/x-www-form-urlencoded
最近在实现gateway网关自动刷新功能碰到的一个坑,在使用RestTemplate调用refresh端点时,会调用WebFlux的方法org.springframework.web.reactive.result.method.annotation.AbstractMessageReaderArgumentResolver#readBody方法中,如果Content-Type是application/x-www-form-urlencoded类型,就会抛出异常:...
2020-07-14 19:32:31
1326
原创 dockerfile-maven-plugin buildArgs参数踩坑
近期项目开发过程中使用到这个插件,同组小伙伴使用-Ddockerfile.buildArgs=JAR_FILE.hamster-server/target/hamster-server-1.1.0.jar直接指定jar,未通过pom的形式,发现报错,查看源码得知buildArgs类型为Map:参数读取的时候org.apache.maven.plugin.PluginParameterExpressionEvaluator#evaluate(java.lang.String, java.lang.Clas
2020-07-07 15:10:43
3125
原创 ZooKeeper领导者选举源码分析
前言: 大家都知道领导者选举有四种算法,其中三种已经被弃用了,所以本文只针对快速领导者选举算法进行讲解,通过阐述ZooKeeper(下文简称zk)领导者选举原理及源码阅读,带大家由浅入深的了解zk领导者选举原理。正文:一、领导者选举原理 大家在平时生活中肯定碰到过不少关于投票选举的事情,能对于你选择造成影响的主要因素无外乎两个: 1:你跟别人的人际关系。...
2020-03-06 17:11:57
1724
9
原创 关于ConcurrentSkipListMap的几点见解
之前看了ConcurrentSkipListMap的源码,未做总结,今天做个总结,关于ConcurrentSkipListMap其实网上有很多文章,博主今天就不通篇大论,挑些精简的来说。 首先跳表中维护一层时,即值存在level1时的底层数据结构为:当添加第二个元素时,通过抛硬币算法算出!=0时,这里我们只考虑加了一层level,底层数据结构的演化为:其实这张...
2019-12-04 00:21:47
472
原创 git原理及git对象详解
首先,要理解git底层原理必须知道git的三个对象:blob、tree以及commit,所有对象存储在.git\objects路径下blob对象,在add操作后生成,记录的是文件的内容,文件名为文件内容的hash值,需要注意的是如果文件内容一样只会有一个blob文件显示,如果文件没内容也不会生成blob对象。 tree对象,在commit操作后生成,tree对象包含blob对象,如果文件...
2019-10-16 16:58:37
492
原创 java实现简单的本地缓存
/** * @author : hilite * @version : 1.0 * @Title : LocalCache * @Description : * @date : 2019/9/18 * @CopyRight : Copyright (c) 2015-2019 All Rights Reserved. * @Compony : hilite.cn Inc. */p...
2019-09-18 18:37:12
3131
原创 基于redis实现的BloomFilter
众所周知,google的guava框架实现了BloomFilter,guava的BloomFilter和redis的bitMap都是基于位图算法的,所以redis也可以实现BloomFilter,并且相对于BloomFilter,redis的数据存在三方redis服务器上的,并不像guava的BloomFilter是存在本地的,这对于内存损耗及分布式系统来说显然是不适合的,所以今天分享一个基于...
2019-09-09 17:33:16
3570
原创 Redis缓存三大问题解析
1.缓存粒度控制通俗来讲,缓存粒度问题就是我们在使用缓存时,是将所有数据缓存还是缓存部分数据?缓存粒度问题是一个容易被忽视的问题,如果使用不当,可能会造成很多无用空间的浪费,可能会造成网络带宽的浪费,可能会造成代码通用性较差等情况,必须学会综合数据通用性、空间占用比、代码维护性 三点评估取舍因素权衡使用。2.缓存穿透问题缓存穿透是指查询一个一定不存在的数据,由于缓存不命中,并且...
2019-09-09 16:49:36
350
原创 记一次配置nginx反向代理遇到的坑
过程描述:前端在测试环境部署了node.js,为了满足node.js的跨域名请求,把所有请求前缀加上了/api,并通过nginx反向代理路由到我们项目的地址。由于需要部署多个不同端口的应用,所以反向代理需要满足不同的请求路径,代理到不同端口的应用上。 于是,配置了两个upstream:然后配置了一个server:发现第二个代理的地址请求不到,报404,网上查了半天资料也...
2019-08-20 19:41:39
1424
原创 mysql MVCC随笔
MVCC(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用READ COMMITTD、 REPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程。这里必须引入两个概念:版本链和ReadView。 版本链:对于使用InnoDB存储引擎的表来说,它的聚簇索引记录中都包含两个必要的隐藏列(...
2019-08-09 10:18:54
247
原创 你们不了解的spring注入方式及mybatis对其的使用
前言 在看博主这篇文章之前,请大家思考一个问题:spring@Autowired和@Resource这两个注解是干嘛用的?很多人会回答,@Autowired是通过byType注入属性的,@Resource默认使用byName注入,也可以使用byType方式注入,在你们眼里可能觉得这两个注解就是Spring开启不同注入方式的方法,不使用这两个注解或者不在xml中配置的话就不能注入,但...
2019-01-08 16:52:42
329
原创 Mybatis一级缓存失效原因详解
前言 1、mybatis整合spring,一级缓存会失效,mybatis会在每次查询之后自动关闭sqlSession。2、二级缓存多线程共享,开启方式(注解)@CacheNamespace或者在xml文件中开启,开启方式为<settingname='cacheEnabled'value='true'/>3、二级缓存有一个很大的坑,缓存是针对命名空间而言的,也就是说如果你...
2019-01-03 16:37:19
6262
原创 Mybatis打印sql(不使用xml)
前言 博主在刚开始做开发的,对于mybatis如何打印sql完全不理解,看到网上全是通过xml来配置打印sql,因为之前博主全是使用javaConfig配置mybatis信息,所以觉得为了打印sql加单独加一个配置文件十分的麻烦,网上大部分又是千篇一律的推荐使用xml,所以博主就在官网找不依赖配置文件打印sql的方法,现在分享给大家。 正文 我们直接看mybatis官...
2019-01-02 15:20:54
1522
1
原创 spring5日志新特性详解
前言 大家都知道spring一直使用jcl作为日志框架,但是spring5在jcl的基础上自己做了优化,整理成了spring-jcl,接下来我就跟大家详细说一下spring5跟spring4的日志框架到底有何不同。 正文 首先在项目中引入spring4和log4j的依赖,发现打印出来的日志是log4j的日志。 <dependency> ...
2018-12-29 17:33:27
2280
原创 带你轻松掌握Java混乱日志体系
前言 在漫长的进化史中,java日志组件由刚开始的jul衍生出各式各样的日志框架,首先先列举一些常用的日志组件:jul、jcl、log4j、slf4j....接下来我们着重对这几个日志框架使用进行分析,先po这些框架的工作流程图: 正文。 1.JUL(java.util.logging) 总所周知,Java自带了一套日志组件--JUL,可不引入J...
2018-12-29 16:29:51
231
原创 关于几种单例模式的介绍
关于单例模式,需要解决三个方面的问题(1)线程安全问题。(2)性能问题。(3)懒加载(资源占有问题)。关于下面几种方式的缺点,除了DCL,HOLDER和枚举单例模式其他只做简单描述,具体可自行了解。懒汉式:锁粒度过大,影响性能,串行执行影响效率,会引起阻塞。饿汉式:无懒加载DCL(double-check-locking)由于懒汉式锁粒...
2018-11-06 15:56:49
228
原创 关于两次序列化,json字符串多出\的问题
遇到很多次这种问题了,做个记录。 当你调dubbo服务或者给前端返回json字符串时,需要序列化,再进行传递,如果json字符串经过两次序列化,会在各个属性前多出\,特别要注意的是@ResponseBody这个标签,会在你给前端返回json字符串时自动序列化,从而出现上述问题,解决办法当然可以让你调用的服务直接给你返回一个对象而不是json字符串,另外一种是自己动手用JSON.pars...
2018-10-23 16:36:41
7642
原创 java二进制数原码补码反码,运算符 与(&)、非(~)、或(|)、异或(^)及位运算总结
看过博主另一篇文章--Java集合--HashMap,对里面使用的运算符及位运算不是很清楚的童鞋可以看下这篇文章,对理解hashMap源码很有帮助,自己也可以在程序中写写,逼格绝对满分!!! 大家都知道一个字节是8个二进制数,一个int是四个字节,所以一个int数据为32个二进制数(原码),本文所有运算都是基于二进制,十进制转二进制不清楚的可以自行百度,废话不多说,我们一个个来...
2018-10-09 18:10:03
347
原创 HashMap源码剖析
本文分析HashMap中的put()以及resize()方法,首先看一下它的属性:/** * The default initial capacity - MUST be a power of two. */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /...
2018-09-30 18:00:24
132
原创 关于SpringBatch的一个大坑(step id重名)
博主今天碰到springbatch的一个大坑,记录下来与大家分享。 前几天博主的同事离职了,离职前写了一个springbatch还款的跑批,然后公司还款日,用户账户余额异常,看了好几次日志,发现没问题,这是springbatch的第一个坑,看日志不能直接看,要通过内置表自己查!!!!关于springbatch持久化表结构大家可以自行百度。 大家都知道,如果注...
2018-09-29 15:48:53
4028
原创 关于xxl-job两台机器时间或者时区不同的问题解决。
把xxl-job的admin跟执行任务的程序通过分布式部署的话,两台机器时间差必须在三分钟之内。如果超过三分钟会导致执行器无法调用任务,但是执行器地址还是会注册到的。另一个坑也是关于两台机器时间的问题,如果两台机器是跨时区的,要保持机器时区和db时区保持一致,要不然也会有问题。...
2018-09-05 11:52:05
4386
原创 SpringBatch的封装配置及其运用(结合spring scheduler进行调度)
Spring Batch官网介绍:A lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems.(一款轻量的、全面的批处理框架,用于开发强...
2018-08-29 18:07:03
2519
转载 java的几种对象(PO,VO,DAO,BO,POJO,DTO)解释
一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DT...
2018-08-01 10:14:16
1638
原创 redis分布式锁的实现方式
前言:分布式锁的实现方式一般有三种,1:基于数据库的乐观锁。2:基于redis的分布式锁。3:基于zk的分布式锁,本文主要介绍第二种实现,由于以前一直是单机写笔记,所以第一次写有写的不好的地方欢迎大家指正。 网上对于redis分布式锁的实现各有不同,今天分享的这种,不确定是不是最好的,但是个人觉得最易懂,好了废话不多说,贴公司的例子跟改造后的写法。//错误例子public...
2018-07-13 11:55:19
2295
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人