9 loophome

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 4k+

Java:随机数生成Random和ThreadLocalRandom

Random和ThreadLocalRandom都能够生成随机数,以下2个例子都能生成0-99内的数据数RandomRandom的构造函数会生成一个随机数生成器。每次调用构造函数生成的随机数种子都不一样。nextInt方法:返回下一个均匀分布的伪随机整数,合计共2的32次方的整数值。ThreadLocalRandomThreadLocalRandom是线程相关的,调用ThreadLocalRandom.current()会返回当前线程的ThreadLocalRandom对象。Thread

2020-06-12 16:51:31

Java:java.util.Map compute用法(compute,computeIfAbsent,computeIfPresent)

java.util.Map compute用于计算指定键映射的值(如果键没有映射时,值为null)。应用场景,向Map的键映射的字符串后连接新的字符串。map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))如果函数返回空值,则移除映射(如果最初不存在映射,则保持不存在)。如果函数本身抛出异常,则该异常将被重新引发,并且当前映射保持不变。compute提供了3个方法方法 场景 compute 无论是否

2020-06-03 11:20:38

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

Java:mysql-Date字段映射java.sql.Date日期偏差13个小时,估计是时区的问题。观察到Java程序日志的时间是正常的,因此怀疑mysql的时区问题。1)先检查mysql时区show variables like "%time_zone%";返回结果system_time_zone CST2)什么是CSTmysql在5.7版本默认的时区为.美国中部时间 Central Standard Time (USA) UTC-06:00,跟中国的UTC+08:00正好相差.

2020-05-25 11:07:38

Java并发处理CountDownLatch应用

CountDownLatch概念一种同步辅助程序,允许一个或多个线程等待在其它线程中执行的一组操作完成。使用给定的计数初始化CountDownLatch。由于调用了倒计时方法,await方法将阻塞,直到当前计数达到零,然后释放所有等待线程,并立即返回await的任何后续调用。这是一个一次性现象——计数不能重置。如果需要重置计数的版本,请考虑使用CyclicBarrier。倒计时锁存器是一种通用的同步工具,可用于多种目的。使用计数1初始化的倒计时锁存器用作简单的开/关锁存器或门:调用倒计时的线程在

2020-05-18 17:11:23

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

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

2020-04-01 17:12:21

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

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

2020-03-30 17:41:44

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

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

2020-03-05 15:59:47

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

CloseableHttpClient使用了连接池,业务上遇到了org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool异常,这里显示连接池大小不够了。当时并发并不是很高,为什么遇到这个问题呢?后来发现接口使用了gzip压缩,如果对方关闭了gzip就没有问题。这里展...

2020-03-05 10:58:13

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

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

2020-02-28 10:59:06

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

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

2020-02-27 13:50:27

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

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

2020-02-24 18:21:37

Java:spring Value注解用法详解

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

2020-02-06 14:48:43

Java使用Builder模式构造实例

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

2020-01-23 13:29:11

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

服务器上tomcat进程突然终止问题排查1)检查是否shell进程终止导致tomcat终止(排除)由于使用./catalina.sh start启动tomcat,启动后tomcat的父PID为1,因此不会由于shell断开而终止2)tomcat进程是否被kill掉(排除)查询tomcat的catalina.out日志,未发现有终止的日志,比如INFO [Thread-6] or...

2020-01-16 21:00:08

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

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

2020-01-10 13:45:30

tomcat9开启远程调试功能

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

2020-01-08 17:46:07

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

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

2020-01-08 11:15:47

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.boot.logging.logback.LogbackLoggingSystem.loadConfigur...

2019-12-02 16:14:06

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_time' at row 1 begin_time的类型为TIMESTAMP解决方案:1)根本解决:修改逻辑,'000...

2019-11-28 11:37:35

logback异步日志AsyncAppender配置

日志记录会消耗性能,但当出现问题的时候,日志又能够帮助我们快速解决问题。那么如何提高打日志的性能呢?在使用logback的时候,推荐使用AsyncAppender异步记录日志。1)logback设置AsyncAppender要注意AsyncAppender异步记录ILoggingEvents,它仅充当事件分派器,因此必须引用另一个appender才能执行任何有用的操作。<con...

2019-11-26 14:01:49

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。