自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows安装docker 遇到的容器间通信以及容器和宿主机通信相关问题

问题1在练习docker运行spring cloud项目的时候,我打算用两个容器运行eureka和config服务,使用docker-compose运行镜像,配置文件如下version: '3'services: eureka: image: eureka# restart: always tty: true container_name: eureka network_mode: "host" environment: - TZ=As

2020-05-27 10:48:42 1862

原创 springboot druid mybatis 多数据源配置和事务处理

目录参数配置数据源数据库名称等基础配置数据库1数据库2事务参数配置spring: datasource: # 使用阿里的Druid连接池 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver druid: paperpushsystem: url: username: password:

2020-05-23 16:56:19 1981

原创 CPU缓存与伪共享

计算机使用缓存机制加快io速度。缓存一般是由缓存行(cache line),一般一行有64字节,读取数据时一次将之后的64字节加载带缓存行,下次可以先从缓存行中获取数据,命中的话可以提高读取速度,未命中时从上一级缓存获取,直到从内存中获取。但是也会存在缓存竞争,如果CPU1与CPU2的L1缓存相同,那么他们需要竞争该缓存的使用权,如果CPU1修改了L1缓存,那么会使得CPU2的L1缓存失效...

2020-04-12 17:30:42 322

原创 字符串截取

提供字符串截取的一些工具方法,防止中文、表情符等编码出现乱码情况。按字符长度截取 /** * @param beginIndex 起始位置 * @param characterNum 字符个数 * @param str 原始文本 * @Author WangJie * @Description 截取n个字符,可以处理表情符号...

2020-03-31 14:38:50 354

原创 java使用mangodb进行多条件组合查询

and or组合查询构造BasicDBObject BasicDBList andList = new BasicDBList(); BasicDBObject groupCond = new BasicDBObject(); groupCond.put("conversationID","GROUP" + groupId); ...

2020-03-24 10:02:47 1080

原创 获取接口或父类的类型和类型变量的类型

原理通过类对象的genericSuperclass与getGenericInterfaces获取父类或接口类型。强转为泛型参数类ParameterizedType通过ParameterizedType的getActualTypeArguments方法获取所有的泛型参数类型代码构造需要的类public class SampleTest { interface A<T&g...

2019-12-02 13:52:47 324

原创 Java调用ffmpeg实现视频转gif、webp动图

java调用ffmpeg 实现视频转动图

2019-11-07 18:07:39 2158 1

原创 使用fastjson以numberLong为例对MongoDB查询结果反序列化

mangodb中记录的数据为{ "_id" : ObjectId("5d3ac7a9c7cf3e3da8343961"), "createTime" : NumberLong(1564133289504), "isPopup" : true, "level" : NumberInt(55), "type" : NumberInt(1), ...

2019-07-26 20:22:00 2461

原创 Java 8新特性:时间工具类

文章目录获取时区字符串转时间时间格式化输出与Date的转换与时间戳的转换时间调整到特定某天时间间隔获取时区//获取时区 @Test public void getZone(){ //默认时区 ZoneId zoneId = ZoneId.systemDefault(); System.out.println(zoneId.toSt...

2019-05-30 13:50:09 453

原创 ThreadLocal源码分析

原理每个Thread实例会有自己的ThreadLocalMap实例,ThreadLocal的set(value)方法会获取当前线程,把value存储到线程自己的ThreadLocalMap中,也就实现了线程之间的隔离:每次涉及到ThreadLocal的操作,实际上都是线程在操作自己的副本,线程之间不会共享ThreadLocal实例中的value值。所以ThreadLocal适用于在多线程环境,变...

2019-04-15 16:24:00 126

原创 利用注解+RequestBodyAdvice实现http请求内容加解密

注解主要用来指定那些需要加解密的controller方法,实现比较简单@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface SecretAnnotation { boolean encode() default false; boolean decode() def...

2019-03-20 11:09:22 7641 2

原创 ReentrantReadWriteLock源码解析

原理共享锁(读锁)与独占锁(写锁)锁互斥读锁获取资源时,其他线程可以读锁获取资源,可重入。写锁获取资源时,只有获取写锁的线程可以再次加锁即锁重入。获取写锁的线程还可以获取读锁,写锁释放即锁降级。源码ReentrantReadWriteLock源码ReentrantReadWriteLock中有ReadLock和WriteLock,使用时新建ReentrantReadWriteLo...

2019-03-08 19:05:38 153

原创 数组实现队列,阻塞队列

今天做了一个笔试题,使用数组实现一个队列。现在记录一下当时的实现,之后再对这个实现进行改造升级。/** * @program: read-write * @description: 数组实现队列 * @author: WangJie * @create: 2019-03-03 21:45 **/public class MyQueue&amp;amp;amp;amp;amp;lt;T&amp;amp;amp;amp;amp;gt; { private ...

2019-03-03 22:29:43 401 1

原创 this引用逸出

逸出:某个不应被发布的对象被发布发布:使对象在作用域之外的代码中被使用。例如get()获得对象或者将new出的对象放到外部集合中。《Java并发编程实战》3-2节中提到this隐式逸出,并给出了示例代码:public class ThisEscape { public ThisEscape(EventSource source) { source.registerLi...

2019-02-01 16:51:02 600

原创 理解volatile的保证可见性与不保证原子性

可见性编译器重排序指令执行机制CPU只对寄存器中的数据进行计算,为了加快寄存器和内存的数据交换,会有一个缓存区,寄存器与缓存区交换速度更快。数据从缓存区写回内存中这个动作由系统决定。所以会存在某一数据被修改,却没有被立即同步到内存中,导致其他线程拿到的值是过期值。而加了volatile则相当于告诉计算机将这个值立即写回内存,对其他线程可见。不保证原子性volatile字段可以保证线程拿到...

2019-01-29 20:04:42 680

原创 延迟初始化的两种方式 《Effective Java》摘抄

对静态域使用延迟初始化 public class FieldType{ private static class FieldHolder{ static final FieldType field = computeFieldValue(); } static FieldType getField(){ ...

2018-12-17 17:19:13 255 1

原创 倒计数锁存器 Countdown Latch 《Effective Java》摘抄

倒计数锁存器是一次性的障碍,允许一个或多个线程等待一个或多个其他线程来做某些事情。CountDownLatch的唯一构造器带有一个 int类型的参数,这个参数是指允许所有在等待的线程被处理之前,必须在锁存器上调用countDown方法的次数。//多个任务执行时间计时 public static long time(Executor executor,int concurrency,f...

2018-12-17 15:41:59 194

原创 《Java 并发编程实战》信号量 Semaphore 摘抄

计数信号量用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。计数信号量还可以用来实现某种资源池,或者对容器施加边界。/** * @description: 可设置边界容量的阻塞容器 * @create: 2018-12-15 16:51 **/public class BoundeHashSet&amp;lt;T&amp;gt; { private final Set&amp;...

2018-12-15 17:07:41 159

原创 使用docker+WordPress快速搭建个人博客

编写docker-compose.yml文件version: '3.0'services: wordpress: restart: always tty: true container_name: wordpress image: docker.io/wordpress #绑定到宿主机80端口 ports: - "80:80" ...

2018-11-21 15:18:04 1035

原创 事务学习笔记

spring事务传播机制PROPAGATION_REQUIRED默认方式,A方法调用B方法,B设置为PROPAGATION_REQUIRED,如果A有事务,则B使用A的事务,若A无事务,则B新建事务。PROPAGATION_SUPPORTSA方法调用B方法,B设置为PROPAGATION_SUPPORTS,如果A有事务,则B使用A的事务,若A无事务,则B也无事务。PROPAGATION...

2018-11-19 21:19:44 196

原创 spring boot2配置redis缓存,缓存使用Jackson2序列化

pom配置&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;spring-boot-starter-data-redis&amp;lt;/artifactId&amp;gt;&am

2018-10-17 19:10:46 3853 3

原创 RabbitMQ double ack 报错

报错信息:16:50:10.134 ERROR 17788 --- o.s.a.r.c.CachingConnectionFactory : Channel shutdown: channel error; protocol method: #method&amp;lt;channel.close&amp;gt;(reply-code=406, reply-text=PRECONDITION_F...

2018-09-21 17:05:24 8076 4

原创 jasypt对配置文件加密解密

使用https://blog.csdn.net/cts529269539/article/details/79024436运行运行时配置解密秘钥 在idea中运行 命令行启动和docker中运行参见 https://www.cnblogs.com/zz0412/p/jasypt-001.html...

2018-09-04 20:09:02 7915 4

原创 lambda表达式之CompletableFuture

最近阅读了java 8实战和java 8 函数式编程两本书,并参照书中的例子进行了编程练习,代码放在了GitHub上。对stream流的串行,并行,和一些流的操作函数进行了实操。也都是比较容易上手的。不过对于CompletableFuture类的使用,书中对其方法和应用讲的较为简单,自己在实际应用中遇到好多新的需求,经常需要再查资料来解决,现在把它们记录下来,加深印象。何时使用Comple...

2018-08-21 11:30:00 1370

原创 java线程池优化,不再使用Executors创建线程池

今天在使用之前的线程池工具的时候,阿里的代码规范插件提示不要这样创建线程池。看了插件做出的说明决定将线程池工具改为如下:import com.google.common.util.concurrent.ThreadFactoryBuilder;import java.util.concurrent.*;/** * * 线程池不允许使用Executors去创建,而是通过Thre...

2018-08-08 13:13:51 3934

原创 WebMvcConfigurationSupport、WebMvcConfigurerAdapter、WebMvcConfigurer

今天运行一个工程时候发现突然发现以前写的Jackson配置全局过滤值为null的字段的类失效了。这个配置类代码如下:@Configurationpublic class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper...

2018-07-26 21:32:30 4301

原创 java web 处理response返回数据

工作的时候遇到一个需求,同样的接口返回给App端的json数据需要将数值型改成字符型,而之前传给网页端的比如一些分页数据、时间戳、id等是数值的。 于是打算加一个拦截器拦截请求,在controller执行完后,如果是传给App端就把json做一下转换。看一下拦截器的postHandler方法 @Override public void postHandle(HttpSe...

2018-07-23 22:03:47 25830 1

转载 Java UUID

Java UUID目录简介 作用 组成 Java UUID 生成  简介:UUID含义是通用唯一识别码 (Universally Unique Identifier),是一个软件建构的标准,也被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment,...

2018-07-23 17:59:21 180

原创 Java线程池ExecutorService

ExecutorService扩展了Executor并添加了一些生命周期管理的方法。一个Executor的生命周期有三种状态运行、关闭和终止。 Executor创建时处于运行状态。当调用ExecutorService.shutdown()后,处于关闭状态,isShutdown()方法返回true。这时,不应该再向Executor中添加任务,所有已添加的任务执行完毕后,Executor处于

2018-07-22 23:30:32 278

原创 Java中的UUID

UUID 的目的,是让分布式系统中的所有元素,都能有唯一的标识,而不需要透过中央控制端来做标识。如此一来,每个人都可以建立不与其它人冲突的UUID。在这样的情况下,就不需考虑数据标识建立时的名称重复问题。 UUID uuid = UUID.randomUUID();详细介绍链接

2017-08-01 19:46:51 168

原创 Spring学习笔记-IOC

Spring学习笔记

2017-07-26 16:25:17 171

原创 String常量池

看《深入理解Java虚拟机》时发现一段有意思的代码://jdk 1.8 String str1=new StringBuilder("计算机").append("软件").toString(); System.out.println(str1.intern()==str1);//true String str2=new StringBuilder("ja").append("

2017-07-18 16:28:23 192

原创 二维数组的作为函数形参的地址传递

template void fun(Type* v,Type** m)在调用的时候fun(v,(int**)m);

2016-04-14 23:59:04 1838 3

空空如也

空空如也

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

TA关注的人

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