自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Java:mysql-Date字段映射java.sql.Date日期偏差14个小时

Java:mysql-Date字段映射java.sql.Date日期偏差13个小时,估计是时区的问题。观察到Java程序日志的时间是正常的,因此怀疑mysql的时区问题。 1)先检查mysql时区 show variables like "%time_zone%"; 返回...

2020-05-25 11:07:38 26 0

原创 Java并发处理CountDownLatch应用

CountDownLatch概念 一种同步辅助程序,允许一个或多个线程等待在其它线程中执行的一组操作完成。 使用给定的计数初始化CountDownLatch。由于调用了倒计时方法,await方法将阻塞,直到当前计数达到零,然后释放所有等待线程,并立即返回await的任何后续调用。这是一个一次性...

2020-05-18 17:11:23 20 0

原创 perf性能分析工具命令简单实用

perf性能分析工具命令简单实用 参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/

2020-04-01 17:39:49 125 0

原创 Redis删除大集合操作(Lists,Sets)

Redis删除大集合操作(Lists,Sets),如果使用del命令,可能会导致redis卡死。毕竟redis是单线程执行的,遇到删除大数据命令,这个命令就会卡住,无法处理其他命令。 方案一:先rename,再用脚本逐批删除 ...

2020-03-30 17:41:44 151 0

原创 Java:上传代码库导maven仓库mvn deploy命令

通过mvn命令部署 maven package:打包到本项目,一般是在项目target目录下 maven install:打包会安装到本地仓库 maven deploy:将打包的文件发布到远程仓库(私服),提供其他人员进行下载依赖 maven配置 这个文件位于conf/setting.xm...

2020-03-05 15:59:47 73 0

原创 Java:CloseableHttpClient处理gzip接口没有释放连接问题

CloseableHttpClient使用了连接池,业务上遇到了org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool异常,这里显示连接池大小不够了。当时并发并不是很...

2020-03-05 10:58:13 124 0

原创 Java:google guava缓存存储原理分析

google guava缓存结构 1)LocalCache.Segment(继承了可重入锁,有多少个Segment取决于设置的并发级别) 2)java.util.concurrent.atomic.AtomicReferenceArray(第一层Java的原子对象数组,没有使用到CurrentH...

2020-02-28 10:59:06 108 0

原创 Java:google guava缓存穿透原理分析

google guava缓存穿透使用ReentrantLock(可重入锁)实现,当某个key在缓存中失效并执行回源,其他线程将会阻塞,直到回源完成。 1)ReentrantLock管理 LocalCache中包含内部类Segment,该类继承了ReentrantLock static cl...

2020-02-27 13:50:27 127 0

原创 Java:orika-mapper对象深复制工具

Orika是一个Java Bean映射框架,它递归地将数据从一个对象复制到另一个对象。它在开发多层应用程序时非常有用。 为什么要使用对象映射? Orika可以用来简化一个对象层和另一个对象层之间的映射过程,避免各种手动编写创建对象和复制属性的方法。 Orika目标是构建一个全面、高效和健壮的...

2020-02-24 18:21:37 166 0

原创 Java:spring Value注解用法详解

Value注解是字段或方法/构造函数参数级别的注释,用于分配参数的默认值表达式。我们可以使用@Value注释读取spring环境变量和系统变量。 语法: @Value("Default DBConfiguration") private String defaultNam...

2020-02-06 14:48:43 258 0

原创 Java使用Builder模式构造实例

构建Java实例通常有几种方式,1)通过构造方法创建,2)通过JavaBeans模式的getter/setter构建。一般情况下这2种方式没有什么问题,但是当参数非常多的时候,就会不够友好。 1)通过构造方法创建 当成员非常多的时候,会导致构造函数参数非常多,甚至部分成员是可选的时候,将会导致...

2020-01-23 13:29:11 115 0

原创 服务器上tomcat进程突然终止问题排查

服务器上tomcat进程突然终止问题排查 1)检查是否shell进程终止导致tomcat终止(排除) 由于使用./catalina.sh start启动tomcat,启动后tomcat的父PID为1,因此不会由于shell断开而终止 2)tomcat进程是否被kill掉(排除) 查询tom...

2020-01-16 21:00:08 326 0

原创 Java8 Stream,List转Map遇到key冲突问题-java.lang.IllegalStateException: Duplicate key

在使用Stream把List转化为Map的时候,抛出了java.lang.IllegalStateException: Duplicate key异常,原因在于生成Map的key出现冲突。 查看如下代码: 当我们根据猫的名字创建名称Map的时候,发现有2个相同的cat2,导致了产生Illega...

2020-01-10 13:45:30 244 0

原创 tomcat9开启远程调试功能

1)tomcat启动配置 修改bin/setenv.sh文件导入如下变量 export JPDA_ADDRESS=0.0.0.0:8000 启动tomcat命令,启动完成后可以使用netstat命令查看8000端口的情况,如果端口被监听,则证明启动成功 ./catalina.sh jpda...

2020-01-08 17:46:07 216 0

原创 Java,使用不可改变集合-unmodifiable

Java,使用不可改变集合-unmodifiable 适用于一些枚举集合的配置,例如部门数据,在应用整个生命周期,部门列表应该是不能变更的。 import java.util.Collections; import java.util.HashMap; import java.util.Ma...

2020-01-08 11:15:47 68 0

原创 logback.xml配置导入spring无法启动:ch.qos.logback.core.joran.spi.JoranException: I/O error occurred while par

报错信息 Caused by: java.lang.IllegalStateException: Could not initialize Logback logging from classpath:logback-spring.xml at org.springframework.boo...

2019-12-02 16:14:06 389 0

原创 SQL error: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value问题解决

SQL error: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value 针对如下SQL:'0000-00-00 00:00:00' for column 'begin_ti...

2019-11-28 11:37:35 1306 0

原创 logback异步日志AsyncAppender配置

日志记录会消耗性能,但当出现问题的时候,日志又能够帮助我们快速解决问题。那么如何提高打日志的性能呢?在使用logback的时候,推荐使用AsyncAppender异步记录日志。 1)logback设置AsyncAppender 要注意AsyncAppender异步记录ILoggingEvent...

2019-11-26 14:01:49 900 0

原创 INSERT ... ON DUPLICATE KEY UPDATE导致数据库主键不连续问题

业务中发现某个表的主键ID不连续,而且这个业务并没有删除操作,难道被黑了?后来检查了代码,发现使用了INSERT ... ON DUPLICATE KEY UPDATE,发现了问题所在。 原因在于,当使用INSERT ... ON DUPLICATE KEY UPDATE时,无论是执行INSER...

2019-10-25 10:52:27 128 0

原创 ImageIO.read(InputStream)返回null问题

ImageIO.read(InputStream)返回null问题 问题背景 在上传图片的时候,ImageIO.read(InputStream)能够正常读取图片,代码如下 //org.springframework.web.multipart.MultipartFile uploadFi...

2019-10-23 14:50:05 1933 0

原创 解决使用BufferedImage内存溢出的问题OutOfMemoryError: Java heap space

业务上有一个缩放图片的操作使用了BufferedImage,但是经常发现生成图片失败。查看日志显示OutOfMemoryError: Java heap space,内存溢出错误。通过获取javahprof来分析,发现大部分内存被BufferedImage占用。难道生成缩略图后,没有自动释放? ...

2019-09-30 15:16:26 1734 10

原创 java-使用spring mvc输出图片

由于展示某些图片数据需要权限验证,因此不能直接访问图片资源。因此,使用spring mvc输出图片中遇到一个问题。 刚开始使用以下方式返回图片的字节,然而发现response.setContentType("image/png");并没有生效,返回的Response中type...

2019-09-18 10:54:42 29 0

原创 Java:本地缓存之google guava cache 使用之数据清理

现实中,不可能把所有的数据全部放到内存中。您必须决定:什么时候不值得保留缓存条目?guava提供了三种基本类型的数据驱逐:基于缓存对象数量的驱逐、基于时间的驱逐和基于引用的驱逐。 基于缓存对象数量的驱逐 如果你的缓存对象数量不应该增长超过一定的大小,只需使用CacheBuilder.maxim...

2019-09-11 15:36:20 493 0

原创 Java:本地缓存之google guava cache使用

缓存在各种各样的系统中都非常有用。例如,当一个值的计算或检索成本很高时,您应该考虑使用缓存。 缓存类似于ConcurrentMap,但不完全相同。最基本的区别是,ConcurrentMap将所有添加到其中的元素持久化,直到它们被显式删除。另一方面,缓存通常被配置为自动收回条目,以限制其内存占用。...

2019-09-10 18:31:52 238 0

原创 记一次tomcat程序CPU占用高排查-backgroundProcessorDelay参数

一个简单的spring-boot mvc服务放在tomcat中执行,虽然服务器配置比较低,但是访问量不大,一般没什么太大问题。服务部署后,即使没有任何访问量,每隔10s发生一次young gc,并且CPU使用率长期大于10%。 明明没有访问量,到底发生什么? 使用top -H -p查询繁忙线程...

2019-09-10 11:33:23 1005 0

原创 Java多线程:Thread基础(一)

Java的多线程基于Thread,我们先看看Thread的继承关系 public class Thread implements Runnable 可以看到Thread基础了Runnable接口,Runnable接口仅仅有run方法,用于实现线程逻辑。 启动线程-start方法 启动线...

2019-08-02 18:17:06 54 0

原创 Java并发编程 ReentrantLock可重入锁 - 防止缓存穿透

ReentrantLock是一个可重入且独占式的锁,它具有与使用synchronized监视器锁相同的基本行为和语义,但与synchronized关键字相比,它更灵活、更强大,增加了轮询、超时、中断等高级功能。 参考:https://docs.oracle.com/javase/8/docs/a...

2019-07-26 11:28:43 102 0

原创 Java并发编程 Synchronized及其实现原理

Synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。 Synchronized的作用主要有三个 1)确保线程互斥的访问同步代码。即保证了一个代码块在同一时间仅有一个线程可以执行。 2)保证共享变量的修改能够及时可见,保证了原子性 3)有效解决重排序问题...

2019-07-25 20:35:52 34 0

原创 spring boot ControllerAdvice注释对filter抛出的异常不生效的问题解决

之前做了一个简单的登录验证,使用了Filter实现,返回内容是直接写死在Filter里面。今天为了统一返回,想通过抛出异常方式,使用ControllerAdvice进行返回。结果是不行的,ControllerAdvice无法获取到Filter的异常。 原因: 请求进来 会按照filter ...

2019-07-05 11:47:29 1686 2

原创 Java Eclipse Memory Analyzer(MAT)内存泄漏报告

Java Eclipse Memory Analyzer(MAT)内存泄漏报告 一、通过jmap命令,获取目标程序的dump 例子: jmap -dump:live,format=b,file=heap.bin <pid> 二、打开Eclipse Memory Analyze...

2019-07-03 14:33:42 169 0

原创 spring-boot中配置hikari连接池属性

事件起因与一个简单应用经常发生Young GC,甚至在没有请求量的情况下也经常发生GC (Allocation Failure),后来使用mat工具进行分析,发现mysql连接相关的class居然占了40%+堆内空间。才发现spring boot的连接池大小没有配置,默认是10个连接,但实际上该应...

2019-07-02 17:18:17 8177 0

原创 Java Log4j和Log4j2的区别

Java Log4j和Log4j2的区别 一、核心JAR包 log4j核心包:log4j:log4j:[version] 而log4j2的核心包有2个: org.apache.logging.log4j:log4j-core:[version] org.apache.logging.log...

2019-06-28 19:01:56 1446 0

原创 shadowJar:archive contains more than 65535 entries.问题解决

在打fat-jar包的时候,如果包的文件数量大于65535 或者文件大小大于4G,会出现这个错误。这时,只需要添加zip64 true就可以解决 shadowJar { dependencies { } zip64 true } 参考链接:https://docs.g...

2019-06-28 17:00:15 695 1

原创 eclipse 安装sonarLint-4.1插件

eclipse 安装sonarLint-4.1插件 一、安装插件 Help->Eclipse Marketplace->搜索sonar,安装sonarlint 4.1 二、使用sonarLint-4.1插件 右键点击项目,选择“sonar lint”,点击“Analyze”...

2019-06-24 15:48:49 463 0

原创 Java,csv格式字符串判断子串是否存在快速方法

问题:数据库中保存了一批用csv格式存储的数据,在使用的时候,需要判断str是否包含在csv中。 这个问题有2个解决方案:一种是采用字符串包含判断,另一种是通过把csv数据拆分为String[]数组,再逐个判断 实现的代码如下: package com.bytrees.utils; im...

2019-06-18 14:12:33 390 0

原创 java gc日志内容分析-YoungGC-FullGC

环境版本,Java1.8,GC日志参数 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -XX:+Print...

2019-06-15 23:15:55 560 0

原创 tomcat9线程配置-server.xml

tomcat9线程配置-server.xml 一、不使用线程池 <Connector port="8080" //监听的端口 protocol="HTTP/1.1" redirectPort="8443" ...

2019-06-15 22:42:34 496 0

原创 Java序列化和反序列化问题

Transient 关键字 transient修饰符仅适用于变量,不适用于方法和类。在序列化时,如果我们不想序列化特定变量以满足安全约束,那么我们应该将该变量声明为transient。执行序列化时,JVM会忽略transient变量的原始值并将默认值保存到文件中。因此,transient意味着不...

2019-06-12 20:05:58 161 0

原创 Spring中 javax.annotation.Resource注解用法

其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入。然而Spring也同时支持该种注解。 @Resource默认按 byName 自动注入,由J2EE提供。 @Resource有两个中重要的属性:name和type ,而Sp...

2019-06-10 14:34:03 491 0

原创 大数据:hive安装部署手册

本文档介绍如何设置和配置单节点hive安装,以便使用hive快速执行简单操作。版本:3.1.1 参考链接:https://cwiki.apache.org/confluence/display/Hive/GettingStarted 安装 前提,必须显安装和部署hadoop,并添加HAD...

2019-05-21 18:34:01 81 0

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