自定义博客皮肤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开发

原创 Spring的@EnableAsync与@Async使用详解

@EnableAsync的javadoc @EnableAsync可以让Spring启用异步方法执行,就跟在xml中配置task:* 效果是一样的。它可以跟@Configuration结合,让整个Spring环境启用基于注解的异步处理: @Configuration @EnableAsync pu...

2020-05-23 14:31:49 37 0

原创 Spring-Boot-Starter-AOP源码解析

打开spring-boot-starter-aop的jar包: 里面一个类也没有,只是在pom中添加了几个依赖: <dependencies> <dependency> <groupId>org.springframework.boot&l...

2020-05-18 13:24:06 31 0

原创 SpringAOP使用详解

https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#aop-ataspectj 几个AOP相关的概念 Aspect: 在SpringAOP中,切面就是一个普通的类,然后...

2020-05-10 16:40:57 35 0

原创 Spring的@Import注解详解

首先看下@Import的javadoc文档: Provides functionality equivalent to the element in Spring XML. Allows for importing @Configuration classes, ImportSelector ...

2020-04-26 13:34:33 35 0

原创 mockbatis-spring-boot-starter重复造轮子

前面两篇文章我们介绍了mybatis-spring-boot-starter的使用入门和源码解析,源码当中还是有很多地方值得我们去学习的,这篇文章我们就来实现一个自己的mockbatis-spring-boot-starter,回顾一下这里面的知识点。 我们今天要实现的效果是这样的: //类似于@...

2020-04-21 09:39:00 71 0

原创 MyBatis-Spring-Boot-Starter源码解析

我们以MyBatis-Spring-Boot-Starter:2.1.2为例,首先打开mybatis-spring-boot-autoconfigure:2.1.2,找到spring.factories: # Auto Configure org.springframework.boot.auto...

2020-04-17 16:35:23 46 0

原创 MyBatis-Spring-Boot-Starter扫盲

springboot集成mybatis 非常简单,只需要两部: (1)添加依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-...

2020-04-03 13:56:52 102 0

原创 SpringBoot的@Configuration扫盲

@Configuration注解标识的类中声明了1个或者多个@Bean方法,Spring容器可以使用这些方法来注入Bean,比如: @Configuration public class AppConfig { //这个方法就向Spring容器注入了一个类型是MyBean名字是myBean的B...

2020-03-28 10:30:08 144 0

原创 MySQL-MyBatis-Tinyint填坑

先看下表结构: mysql> show create table user \G *************************** 1. row *************************** Table: user Create Table: CREATE TA...

2020-03-11 22:39:43 289 0

转载 为什么Mongodb索引用B树,而Mysql用B+树?

来源:https://zhuanlan.zhihu.com/p/107228878 引言 好久没写文章了,今天回来重操旧业。 今天讲的这个主题,是《面试官:谈谈你对mysql索引的认识》,里头提到的一个坑。 也就是说,如果面试官问的是,为什么Mysql中Innodb的索引结构采取B+树?这个问题时...

2020-03-04 14:50:09 119 0

原创 MongoDB-Query

1.Document查询 来自:Query Documents 准备数据: db.inventory.insertMany([ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" },...

2020-02-23 12:48:46 31 0

原创 spring-data-mongodb是如何给collection创建索引的?

从spring-boot-autoconfigure开始 堆栈如下: 大致的逻辑梳理一下:系统启动的时候,spring-boot-autoconfigure根据spring.factories找那个配置的MongoDataAutoConfiguration去加载mongodb相关...

2020-01-17 15:35:01 407 0

原创 maven-resources-plugin的一些有趣的事

今天遇到一个很奇怪的问题,程序要输出特定字体的文字,因此把字体库放到了项目的resources下面,但是程序一加载字体库就报错: java.awt.FontFormatException: bad table, tag=1196445523 indicating 然后就各种查,后来才发现,当把字...

2019-11-15 10:11:23 86 0

转载 SpringBoot多Profile如何优雅打包?

原文在这里: SpringBoot多Profile如何优雅打包? 一般项目的结构都是类似下面这种,有多个profile: 其中,我们需要在application.yml中设置一个active的profile,如下: spring: profiles: active: dev 这种...

2019-09-03 19:47:07 319 0

转载 前后端分离如何做SSO单点登录?

原文在这里: 前后端分离如何做SSO单点登录? 在前面的文章中单点登录系统SSO是如何实现的?我们实现了一个简单的单点登录,但是那里面有几个问题:一个是全局的token是在url中明文传递的,如果把这个url分享出去,任何人都可以使用这个token,还一个问题,现在的很多系统都是前后端分离的,我...

2019-08-31 09:52:25 4727 0

原创 idea集成protobuf

idea集成protobufidea安装protobuf插件编写pom.xml编写proto文件,用idea插件生成源码测试 idea安装protobuf插件 编写pom.xml <protobuf-java.version>3.5.1</protobuf-java.versi...

2019-08-27 14:04:47 599 0

转载 G1日志格式详解

原文在这里: G1日志格式详解 从jdk9开始,G1已经是默认的垃圾收集器了,G1的一个非常重要的功能是它能够控制GC的停顿时间同时还不影响吞吐量(你可以设置期望的最大停顿时间)。 随着G1变成默认的收集器,它的使用变得越来越常见和广泛了,为了调优G1的性能我们必须要了解G1的日志格式。需要注意...

2019-07-30 08:23:14 544 0

转载 监控系统CPU、内存、IO利器之-SAR

原文在这里: 监控系统CPU、内存、IO利器之-SAR SAR全称是System Activity Report,它主要就是用来搜集、保存系统的CPU、内存、IO使用情况。SAR可以直接在命令行使用,也可以把输出结果保存到日志文件中。 本文将介绍SAR在CentOS7上使用的一些例子,如果你的系...

2019-07-26 08:36:46 76 0

转载 JVM的GC停顿时间过长该怎么处理?

原文在这里: JVM的GC停顿时间过长该怎么处理? 应用运行过程中是不希望出现长时间的GC停顿的,因为这会影响服务的可用性,导致用户体验变差,甚至会严重损害一些关键的应用程序。本文将会列出可能导致GC停顿时间长的一些原因和解决方案。 1.对象创建的速度过高 如果应用创建对象的速度非常高,随之而来...

2019-07-24 19:10:35 2426 0

转载 JVM出现连续的FullGC该怎么办?

原文在这里: JVM出现连续的FullGC该怎么办? FullGC是垃圾回收过程中一个非常重要的事件。当发生FullGC的时候,垃圾收集器为了回收更多的垃圾对象,它会从JVM的所有内存中回收垃圾(Young、Old、Perm、Metaspace)。FullGC有很多个步骤,有些步骤需要暂停所有的...

2019-07-22 08:17:46 800 0

转载 如何解决内存泄露?

原文在这里: 如何解决内存泄露? JVM总共会抛出8种类型的OutOfMemoryError,其中5种是发生在堆中的,包括:Java heap space、GC overhead limit exceeded、Requested array size exceeds VM limit、Permg...

2019-07-18 11:20:14 506 0

转载 应用的性能相关的指标有哪些?

原文在这里: 应用的性能相关的指标有哪些? 现如今连天气都可以预报,那么通过技术手段来预测应用的性能和可用性是否可行呢?预计未来20分钟总可以吧?能否预计出来未来20分钟以内应用可能会发生内存溢出、CPU负载飙升、应用崩溃?很不幸大部分时候都无法预测。这主要因为我们主要是关注应用的内存使用率、C...

2019-07-15 19:42:12 166 0

转载 GC日志中real时间比user+sys时间长该如何处理?

原文在这里: GC日志中real时间比user+sys时间长该如何处理? GC日志中会详细的记录每一次GC事件所花费的时间信息,每一个GC事件所花费的时间都会以’user’、‘sys’、'real’3个维度来记录,这3个时间是什么意思呢?他们之间有什么区别? 1.real time:G...

2019-07-12 10:45:15 666 0

转载 GC日志中sys时间比user时间长该如何处理?

原文在这里: GC日志中sys时间比user时间长该如何处理? GC日志中会详细的记录每一次GC事件所花费的时间信息,每一个GC事件所花费的时间都会以’user’、‘sys’、'real’3个维度来记录,这3个时间是什么意思呢?他们之间有什么区别? 1.real time:GC事件整个...

2019-07-10 08:28:48 231 0

转载 OutOfMemoryError内存溢出相关的JVM参数

原文在这里: OutOfMemoryError内存溢出相关的JVM参数 JVM提供了很多处理内存溢出的相关参数,本文主要来讲解下这些参数,当你遇到内存溢出的时候可能会对你非常有帮助,这些参数主要有: 1.-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPa...

2019-07-09 08:36:07 404 0

转载 开启String去重XX:+UseStringDeduplication的利与弊

原文在这里: 开启String去重XX:+UseStringDeduplication的利与弊 首先来看下由JDK开发组研究得出的一组有趣的统计数据: 1.java应用内存里面的字符串占比大概是25%。 2.java应用内存里面的字符串有13.5%是重复的。 3.字符串的平均长度是45。 由于存...

2019-07-03 13:02:02 1540 0

转载 Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思?

原文在这里: Eclipse MAT 里面的SHALLOW HEAP和RETAINED HEAP是什么意思? MAT是一款非常强大的JVM内存映像分析工具,对分析内存相关的问题非常有用,MAT报告中对对象大小的描述有两个相关的概念: 1.SHALLOW HEAP 2.RETAINED HEAP ...

2019-07-01 09:02:12 390 0

转载 为什么不推荐启用UseGCLogFileRotation来记录GC日志?

原文在这里: 为什么不推荐启用UseGCLogFileRotation来记录GC日志? 很多小伙伴在记录GC日志的时候都喜欢使用UseGCLogFileRotation这个参数,比如: -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/h...

2019-06-28 14:07:23 1270 0

转载 32位JVM和64位JVM该如何选择?

原文在这里: 32位JVM和64位JVM该如何选择? 32位JVM和64位JVM有一些显著的不同,同时也还有一些细微的差异,本文将以问答的形式给大家说明一下。 1.开发应用之前是否需要深入理解32位和64位JVM的区别? 如果你的应用对性能要求并不是特别及其的严格,那么你可以忽略他们的区别。二者...

2019-06-27 13:18:12 347 0

转载 缓存穿透与布隆过滤器BloomFilter那些事

原文在这里: 缓存穿透与布隆过滤器BloomFilter那些事 很多小伙伴在面试的时候都会被问到类似这样的问题:如何解决redis的缓存穿透问题?以用户登录为例来说,浏览器传递过来用户名和密码,服务端首先是根据用户名去查cache,如果有直接返回,如果没有再去查DB,如果查到回写到cache并返...

2019-06-20 13:08:05 599 0

转载 如何用redis做活跃用户统计-HyperLoglog

原文在这里: 如何用redis做活跃用户统计-HyperLoglog 网站经常有这样的需求:统计日活用户数,有哪些实现方式呢? 第一种做法:用redis的set集合。 用户登录以后,把用户id添加到redis的set中,set会自动进行去重,类似于这样: 127.0.0.1:6379> s...

2019-06-17 18:00:04 1386 4

转载 单点登录系统SSO是如何实现的?

原文在这里: 单点登录系统SSO是如何实现的? 所谓单点登录就是在A系统登录以后,跳转到B系统,此时可以直接访问B系统的资源,而不需要二次登录,目前这种需求已经非常普遍了,那么背后是怎么实现的呢?本文将用一个实际的例子来给大家详细的讲解下。 准备工作 (1)准备3个域名来模拟3个站点,www.s...

2019-06-13 19:12:29 217 0

转载 如何用redis正确实现分布式锁?

原文在这里: 如何用redis正确实现分布式锁? 先把结论抛出来:redis无法正确实现分布式锁!即使是redis单节点也不行!redis的所谓分布式锁无法用在对锁要求严格的场景下,比如:同一个时间点只能有一个客户端获取锁。 首先来看下单节点下一般redis分布式锁的实现,其实就是个set: 加...

2019-06-10 19:40:33 1797 2

转载 你真的会用String吗(4)-intern看JVM内存结构变化

原文在这里: 你真的会用String吗(4)-intern看JVM内存结构变化 上一篇你真的会用String吗(3)-关于字符串拼接中我们提到了String.intern()方法,本篇我们就来详细的看下这个方法是干嘛的。首先来看下jdk8中这个方法的注释: When the intern met...

2019-06-06 14:38:28 79 0

转载 你真的会用String吗(3)-关于字符串拼接

原文在这里: 你真的会用String吗(3)-关于字符串拼接 Java开发的同学估计都知道至少是听说过:在开发中一般不建议用+来做字符串拼接,如果有字符串拼接的需求可以用StringBuilder来代替,因为String是不可变的,而StringBuilder是可变的,用StringBuilde...

2019-06-05 08:54:29 149 0

转载 你真的会用String吗(1)-关于replace

原文在这里: 你真的会用String吗(1)-关于replace 先看下这段代码的输出结果是什么: public static void main(String[] args)throws Exception { String src = "aa|bb|cc"; ...

2019-06-03 09:20:56 186 0

转载 你真的会用Enum吗(4)-集成SpringBoot

原文在这里: 你真的会用Enum吗(4)-集成SpringBoot 自定义Enum共有四篇,本篇为第四篇。前面我们已经实现了把浏览器的参数映射成自定义的枚举,并且把枚举保存到数据库,本篇来看下如果是SpringBoot该如何来做。 测试代码还是跟之前的一样,就不重复发了,请参考:你真的会用Enu...

2019-05-27 13:26:05 731 0

转载 你真的会用Enum吗(3)-集成Mybatis

原文在这里:你真的会用Enum吗(3)-集成Mybatis 自定义Enum共有四篇,本篇为第三篇。前面一篇你真的会用Enum吗(2)-集成SpringMVC我们实现了把浏览器传递的参数反序列化成我们自定义的枚举,同时可以把枚举序列化成字符串输出给浏览器,本篇我们来看下,如何使用Mybatis把自...

2019-05-24 09:36:56 183 0

转载 你真的会用Enum吗(2)-集成SpringMVC

原文在这里:你真的会用Enum吗(2)-集成SpringMVC 欢迎加关注: 自定义Enum共有4篇,本篇为第二篇。上一篇我们自定义了通用的枚举类你真的会用Enum吗?,本篇我们来看下我们自定义的枚举类如何与SpringMVC进行集成。 我们想实现这样的效果: @RequestMapping(va...

2019-05-23 14:16:54 388 0

转载 你真的会用Enum吗?

关于自定义Enum总共有4篇,本篇为第1篇,后面会继续介绍如何集成SpringMVC、如何集成Mybatis和SpringBoot。 JDK从1.5开始新添加了枚举类Enum,用起来也比较简单,比如我们要定义一个Week的Enum: public enum Week{ MONDAY, ...

2019-05-21 09:01:39 140 0

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