自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(342)
  • 资源 (5)
  • 收藏
  • 关注

原创 HIVE,SparkSql和Presto对比

HIVE,SparkSql和Presto对比

2022-05-05 14:42:53 587

原创 JAVA keytool工具使用,生成证书

keytool -genkeypair [OPTION]...keytool.exe -genkeypair -keysize 2048 -validity 365 -keyalg RSA -dname "CN=localhost" -keypass pass123 -storepass pass123 -keystore local.jks参考命令生成密钥对选项:-alias <alias> 要处理的条目的别名-keyalg <...

2021-07-20 10:50:37 483

原创 Comparators should be “Serializable“ (squid:S2063)

A non-serializable Comparator can prevent an otherwise-Serializable ordered collection from being serializable. Since the overhead to make a Comparator serializable is usually low, doing so can be considered good defensive programming.不可序列化的比较器可以防止可序列化的有

2021-07-12 16:36:05 369

原创 Netty服务端option配置SO_REUSEADDR

SO_REUSEADDR提供如下四个功能:SO_REUSEADDR允许启动一个监听服务器并捆绑一个端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在(TIME_WAIT)。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。 SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。 SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。 SO_RE

2021-07-08 18:29:31 1426 1

原创 解决springboot,单元测试启动ApplicationRunner问题

在执行单元测试时,ApplicationRunner被意外启动,导致了Netty服务器被初始化,单元测试无法执行的问题。解决方案:通过设置ApplicationRunner对应Bean的Profile解决对应组件添加注解:@Profile("!test")单元测试添加注解:@ActiveProfiles("test")...

2021-07-07 16:59:17 1661 1

原创 mysql重置root密码

1)修改my.cnf配置,找到[mysqld]添加skip-grant-tables,重启mysql即可。注意此时登陆mysql均不需要任何账户验证,注意访问环境。2)重置密码flush privileges;set password for root@localhost=password('你的密码');3)移除my.cnf中的skip-grant-tables,重启mysql...

2021-05-20 22:26:40 119

原创 Java:base64处理

Java:base64处理包含3种,java.util.Base64已经集成在Java中,不需要额外引入新的包应用场景 Encoder Decoder 普通base64 Base64.getEncoder() Base64.getDecoder() RFC4648 URL安全(如果需要包含在URL中使用) Base64.getUrlEncoder() Base64.getUrlDecoder() RFC4648_URLSAFE 媒体类.

2021-01-21 21:32:45 382

原创 centos开启swap内存交换区

我的服务器是阿里云的服务器Centos7。CPU为1G,内存1G。平时访问速度也还可以,内存是少是少了点,但基本还是够用。今天用top看了cpu及内存使用情况,发现free的内存已经只有10多M了,发现阿里云的centos7默认居然没有swap空间。赶紧加入swap。1、创建用于交换分区的文件dd if=/dev/zero of=/mnt/swap bs=1M count=1024...

2020-10-16 23:46:04 528 1

原创 Java应用线程池配置例子

Java应用线程池配置例子一)使用Executors工厂创建线程池Executors为我们提供默认的执行策略名称 说明 newSingleThreadExecutor 创建一个单线程的线程池。线程池使用无界队列,保证任务顺序执行。 newCachedThreadPool 创建一个线程池。该线程池根据需要创建新的线程,调用execute将重用已构造的线程,如果没有可用的线程,将会创建一个新的线程并加入到线程池中。默认60秒未使用的线程将被终止并从池中删除。 newFi

2020-09-01 11:42:40 255

原创 gradle plugin 400 bad request问题处理

现象,gradle无法加载任何插件,任何依赖包,即使设置了阿里云代理也不行。打开--stacktrace,发现所有请求均是400,但是用浏览器打开是可以加载的。解决方案:打开gradle的配置目录,一般位于用户目录的.gradle/gradle.properties移除下面4行即可systemProp.https.proxyPort=80systemProp.http.proxyHost=mirrors.neusoft.edu.cnsystemProp.https.proxyHost

2020-07-27 11:39:29 443

原创 Jackson反序列化json字符串到java对象对Object类型和抽象类处理

Jackson反序列化json字符串到java对象对Object类型和抽象类处理1)java对象的属性为Object,将会转化为LinkedHashMappublic class ObjectTest { private static final Logger logger = LoggerFactory.getLogger(ObjectTest.class); @Test public void objectTest() throws JsonProcessingException {

2020-07-24 14:03:48 1600

原创 Java:随机数生成Random和ThreadLocalRandom

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

2020-06-12 16:51:31 416

原创 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 862

原创 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 464

原创 Java并发处理CountDownLatch应用

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

2020-05-18 17:11:23 253

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

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

2020-04-01 17:39:49 1172

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

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

2020-03-30 17:41:44 1777

原创 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 1243

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

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

2020-03-05 10:58:13 1889 2

原创 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 756

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

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

2020-02-27 13:50:27 1128

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

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

2020-02-24 18:21:37 1311

原创 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 5297

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

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

2020-01-23 13:29:11 1259

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

服务器上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 3920

原创 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 2794

原创 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 1298

原创 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 506

原创 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 3260

原创 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 23141

原创 logback异步日志AsyncAppender配置

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

2019-11-26 14:01:49 17866 1

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

业务中发现某个表的主键ID不连续,而且这个业务并没有删除操作,难道被黑了?后来检查了代码,发现使用了INSERT ... ON DUPLICATE KEY UPDATE,发现了问题所在。原因在于,当使用INSERT ... ON DUPLICATE KEY UPDATE时,无论是执行INSERT操作,还是UPDATE操作,都会导致auto increment自增1测试实验1)建立...

2019-10-25 10:52:27 778

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

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

2019-10-23 14:50:05 9839 1

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

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

2019-09-30 15:16:26 15031 14

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

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

2019-09-18 10:54:42 722

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

现实中,不可能把所有的数据全部放到内存中。您必须决定:什么时候不值得保留缓存条目?guava提供了三种基本类型的数据驱逐:基于缓存对象数量的驱逐、基于时间的驱逐和基于引用的驱逐。基于缓存对象数量的驱逐如果你的缓存对象数量不应该增长超过一定的大小,只需使用CacheBuilder.maximumSize(long)。缓存将尝试逐出没有被经常访问的数据。逐出操作会在对象数量接近限制的时候发生。...

2019-09-11 15:36:20 3503

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

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

2019-09-10 18:31:52 2304

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

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

2019-09-10 11:33:23 4752 1

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

Java的多线程基于Thread,我们先看看Thread的继承关系public class Thread implements Runnable可以看到Thread基础了Runnable接口,Runnable接口仅仅有run方法,用于实现线程逻辑。启动线程-start方法启动线程需要调用start方法。备注,不要使用run方法,run方法仅仅是执行Runnable实例中的ru...

2019-08-02 18:17:06 151

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

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

2019-07-26 11:28:43 479

Eclipse的SVN插件:SVN1.6.10

Eclipse的SVN插件(版本1.6.10),适用于EPP3无法自动安装软件

2015-03-09

c++游戏编程基础

描述使用c++进行windows游戏开发,内容简单,容易上手,是初学者不错的选择!

2012-12-15

PHP高级程序设计_模式、框架与测试.pdf

高级php程序设计的教程,包括常用的设计模式,框架等,让初学者进一步了解php开发

2012-10-29

空空如也

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

TA关注的人

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