自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IT小跟班

着重于后端,略知些前端,双管齐下才是真

  • 博客(46)
  • 资源 (5)
  • 收藏
  • 关注

原创 Java线程池七个参数详解

java多线程开发时,常常用到线程池技术,这篇文章是对创建java线程池时的七个参数的详细解释。从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue、threadF...

2019-04-23 11:14:33 278815 45

原创 Jackson将json串转成List或Map等集合

Jackson将json串转成List、Map等集合时,需要保证集合内的元素泛型不能丢失。方法一每次都需要构建TypeReference参数,比较麻烦,也不够美观,因此不推荐这种方式。方法二写好工具类后,封装好JavaType参数,即可直接使用了,推荐此方法方法二:(推荐)...

2022-06-07 15:51:35 4306 1

原创 Hexo博客icarus主题定制篇

本文基于Hexo和Icarus4.1.1版本,对博客主题定制过程做一个记录。在icarus4.0版本中,主题npm方式安装的话,本地将不会有主题相关的文件,需要定制的话,可以通过修改node_modules中的对应文件来完成。虽然方法不是很优雅,但是暂时也找不到解决方法。定制CDN由于总所周知的原因,默认的CDN可能会被墙掉,造成网站打开速度极慢。我们可以找到_config.icarus.yml,将CDN改成如下:providers: cdn: loli fontcdn: loli

2020-12-22 19:27:12 3043 39

原创 SpringBoot 异步线程间传递上下文

SpringBoot异步线程间传递上下文需求实现启用异步功能配置异步配置任务装饰器完工需求SpringBoot项目中,经常使用@Async来开启一个子线程来完成异步操作。主线程中的用户信息需要传递给子线程实现启用异步功能在启动类里加上@EnableAsync注解@EnableAsync@SpringBootApplicationpublic class Application {}配置异步新建一个配置类,实现AsyncConfigurer接口,并重写getAsyncExecutor方法

2020-12-11 09:59:04 4241

原创 简述JVM内存模型中的五大分区

JVM内存模型,主要包含五个区域。其中线程共享:方法区和堆,线程私有:虚拟机栈、本地方法栈和程序计数器方法区方法区是用来存储被Java虚拟机加载的类信息,常量,静态变量,运行时常量池等。在jdk8以前,方法区中定义了永久代。因为使用永久代来实现了方法区,所以被描述为堆的一个逻辑部分。但是它确是“非堆”,只是设计堆中的收集器 扩展到了方法区而已。在jdk8的时候,永久代被替换成了元空间(Metaspace)。这样做的好处有以下原因:Metaspace使用的是本地内存字符串常量池存在永久代中,容易出

2020-05-13 10:34:44 811

转载 CAP定理

CAP定理简介BASE理论ZK与CP、Eureka与AP简介CAP定理指的是一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。一致性(C):分布式系统中多个主机之间是否能够保持数据一致的特性。即当系统数据发生变更后,各个主机中的数据仍然处于一致的状态。可用性(A):系统提供的服务必须...

2020-01-09 09:27:30 239

原创 【JDK源码学习】HaspMap扩容操作

HashMap的扩容是学习HashMap源码的重中之重,面试中经常被问到。本文就以实例的方式,解析HashMap的扩容过程,以及JDK1.8和1.7的扩容操作的区别一、什么时候HashMap会扩容调用HashMap的put方法时,如果当前的数组(HashMap的底层数据结构就是数组)为null,或者数组的长度大于阈值(数组长度*负载因子)时,会发生扩容。数组为null时,会扩容成默认长度或...

2019-10-10 16:44:33 378 1

原创 SpringBoot跨域问题CORS解决

前后端分离的项目中,接口和页面往往部署中不同的服务中,这个时候就是出现跨域的问题。如果是SpringBoot项目,可以采用下面两种方式来解决跨域问题。一、全局配置(推荐)@Configurationpublic class CorsMappingConfig implements WebMvcConfigurer { @Override public void add...

2019-06-28 12:12:52 1576

原创 【JDK源码学习】HashMap源码分析

HashMap在日常开发中使用频率相当频繁,面试中也会经常被问到。这个java中常用的集合类之一,学习下其源码很有必要。本文会分析HashMap的数据结构、构造函数,常用方法put、get,扩容,链表与红黑树互转。一、静态属性/*** 默认初始容量 - 必须是2的幂*/static final int DEFAULT_INITIAL_CAPACITY = 1 << ...

2019-06-12 20:59:57 155

原创 SpringBoot全局配置日期类型参数Date自动绑定,返回结果自动格式化

网上的说法有很多,但都不太全面,本文是通过自己实践后,总结出来的处理方式。自定绑定和自动格式化是两种不同的处理,所以需要针对这两个进行配置,以springboot自带的jackson为例一、接收参数自动绑定1、配置一个String转Date的转化器public class StringToDateConverter implements Converter<String, Da...

2019-05-31 12:19:49 6586

原创 【JAVA设计模式】工厂模式详细解读之工厂方法模式

工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类创建型模式。工厂方法模式是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接...

2019-05-28 13:57:29 235

原创 【JAVA设计模式】工厂模式详细解读之简单工厂模式

工厂模式可以分为三类:1、简单工厂模式(Simple Factory)2、工厂方法模式(Factory Method)3、抽象工厂模式(Abstract Factory)这三种模式逐步抽象,并且更具有一般性。在设计模式分类中都属于创建型模式。创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。为了使软件的结构...

2019-05-28 13:36:15 173

原创 【JDK源码学习】JDK中的CAS操作及ABA问题如何解决

一、解释CAS的全称是compare-and-swap,即比较和交换。虽然看起来的先比较再交换,无法保证原子性,其实其利用的是底层硬件,是一条CPU的原子指令,是线程安全的。jdk中的juc包中的线程安全性,都是基于CAS实现的。其处理过程是:CAS操作需要输出两个数值,其一是旧值(操作前的值),其二是新值,在操作期间先比较一下旧值是否发生的变化,如果没有变化,则用新值替换旧值,否则不交换。...

2019-05-13 14:02:18 889

转载 RocketMQ中Topic、Tag如何正确使用

一、概念1、Topic:消息主题,通过 Topic 对不同的业务消息进行分类。2、Tag:消息标签,用来进一步区分某个 Topic 下的消息分类,消息队列 RocketMQ 允许消费者按照 Tag 对消息进行过滤,确保消费者最终只消费到他关注的消息类型。Topic 与 Tag 都是业务上用来归类的标识,区分在于 Topic 是一级分类,而 Tag 可以说是二级分类,关系如图所示。...

2019-04-28 16:23:57 48645 1

原创 缓存穿透、缓存击穿、缓存雪崩及解决方案

系统中常常用Redis来做缓存,极大的提升了系统性能和效率,但同时也存在一些问题。其一是数据一致性问题,严格意义上来讲,只要用到缓存,那就会有一致性问题,这是无解的。另一个问题就是本文要讲的缓存穿透、缓存击穿、缓存雪崩,不仅仅局限于Redis,其他方式实现的缓存,也存在着三个问题。一、缓存穿透缓存穿透是指,用户在查询一个数据库肯定不存在的数据时,这时的返回结果的null,结果不会存入缓存。...

2019-04-23 11:32:16 367

原创 【JAVA设计模式】单例模式之七种常见写法分析

简介单例模式是一种常见的设计模式,其定义是单例对象的类,在虚拟机中只运行一个实例存在。在多线程环境下,应该提供一定的机制,确保只会产生一个实例一、饿汉式--静态变量(推荐)public class MySingleton1 { private static MySingleton1 instance = new MySingleton1(); public sta...

2019-04-17 17:09:29 228

转载 常用的分布式事务解决方案

转载请注明出处:https://blog.csdn.net/u010425776/article/details/79516298众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的...

2019-04-17 11:51:39 211

原创 JVM之GC垃圾回收机制

学习JVM中的垃圾回收机制,就是要弄清楚下面三个问题1、哪些内存需要被回收2、什么时候回收这些内存3、如何回收这些内存针对以上三个问题,逐个分析一、哪些内存需要被回收垃圾回收器在判断一个对象是否需要被回收时,有两种算法1、引用计数法给每个对象添加一个引用计数器,每当有一个地方引用这个对象时,计数器加1,当引用失效时减1。当对象的引用计数器为0时,就代表这个对象可以被...

2019-04-08 14:08:52 179

原创 Linux(CentOS 7.2)下设置Nginx开机自动启动

CentOS 7以上使用Systemd进行系统初始化的,服务文件已.service结尾。现在要设置nginx开机自动启动,如果使用yum安装的nginx,安装是会自动创建nginx.service服务,我们直接使用如下命令即可设置成开机自动启动[root@localhost ~]# systemctl enable nginx.service1、创建nginx.service如果是...

2019-04-04 16:36:18 965

原创 HashMap容量和负载因子

HashMap底层数据结构是数组+链表,JDK1.8中还引入了红黑树,当链表长度超过8个时,会将链表转成红黑树,以提升其查找性能。那么,给出一个<key, value>节点,HashMap是如何确定这个节点应该放在具体哪个位置呢?(以JDK1.8为例)final V putVal(int hash, K key, V value, boolean onlyIfAbsent,bo...

2019-03-29 10:17:22 6638 2

原创 JVM之详解类加载器与双亲委派模型

类加载器类加载器就是根据指定全限定名称,将class文件加载到JVM内存中,转为Class对象。JAVA中的类加载器有下面这四种:1、启动类加载器(Bootstrap ClassLoader):负责加载Java的核心库(<JAVA_HOME/lib>)中的类,用原生C++写的,并不集成自java.lang.ClassLoader;2、扩展类加载器(Extensions Cl...

2019-03-28 17:39:00 224

原创 springboot日志框架log4j2配置

pom.xmlSpring Boot 默认的日志框架是logback,改用log4j2的话,需要改写pom,web项目中需要排除spring-boot-starter-logging,再自行添加spring-boot-starter-log4j2依赖。<dependency> <groupId>org.springframework.boot</grou...

2019-03-27 13:57:21 695

原创 springboot基于AOP实现操作日志记录

一、需求在开发系统时,尤其是后台管理系统,几乎每一个操作,都要求记录其操作日志。二、实现如果在每一个操作结束之后,都加上一个记录日志的操作,那样代码会非常臃肿,耦合度高、代码可读性差,维护难。本例中,采用AOP来实现日志记录功能,一个注解即可实现同样的效果。1、新建一个注解SysLogPoint,用于标识需要记录日志的切面package com.yclouds.common....

2019-03-27 12:12:29 4773 3

原创 springboot基于拦截器实现登录权限拦截

一、需求系统中,除登录接口/login以外,其他所有接口,必须用户登录后才能访问。二、实现创建一个拦截器,拦截除/login以外的所有请求,校验用户是否已登录,如果已登录,则放行,否则拦截请求,给出未登录信息提示。创建LoginInterceptor类,实现HandlerInterceptor接口,重写preHandle方法package com.yclouds.servic...

2019-03-26 15:21:29 4176

原创 springboot基于过滤器实现接口请求耗时统计

Spring Boot中实现一个过滤器相当简单,实现javax.servlet.Filter接口即可。下面以实现一个记录接口访问日志及请求耗时的过滤器为例:1、定义ApiAccessFilter类,并实现Filter接口@Slf4j@WebFilter(filterName = "ApiAccessFilter", urlPatterns = "/*")public class ...

2019-03-26 14:42:28 8417

原创 【JAVA设计模式】代理模式之Cglib代理

前两篇博文中讲到静态代理和动态代理都要求目标对象实现一个接口,但在日常开发中,有时候目标对象只是一个单独的对象,并没有实现任何接口,这种情况下,上述两种代理方式都无法使用,应该使用以目标对象子类的方式实现代理,这种方法叫做Cglib代理。Cglib代理也叫做子类代理,它是在内存中构建一个子类对象,从而实现对目标对象功能的扩展。Cglib是一个强大的高性能的代码生成包,它可以在运行期扩展java...

2019-03-26 09:56:34 272

原创 【JAVA设计模式】代理模式之动态代理

为解决静态代理中,类多、维护难的问题,有了动态代理动态代理有以下特点:1、代理对象不需要实现接口2、代理对象的生成,利用了JDK自带的API,动态的在内存中构建代理对象(需要我们指定创建代理对象/目标对象实现的接口类型)3、动态代理也叫做JDK代理、接口代理JDK中实现代理只需要使用Proxy.newProxyInstance方法public static Object ...

2019-03-25 18:25:26 120

原创 【JAVA设计模式】代理模式之静态代理

代理(Proxy)是一种设计模式,是访问目标对象的另一种方式,在不改变目标对象的提前下,完成对目标对象的扩展。这里用到了JAVA设计原则--开闭原则:对扩展开放,对修改关闭。举个例子来说明代理的作用:假设我们需要邀请以为歌手来唱歌,我们并不需要直接去联系具体歌手,而是去联系该歌手的经纪人,来达到同样的目的。这里的歌手就是一个目标对象,他只负责唱歌,而其他的琐事,则有代理对象(经纪人)来完成...

2019-03-25 17:51:14 181

原创 基于Jackson的JSON工具类封装 JsonUtils

直接上代码,都有注释,一看就懂,完全满足日常开发需求import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.core.type.TypeReferenc...

2019-03-20 16:38:39 4868

原创 validation自定义注解校验枚举类型

一、定义一个校验注解,类似于@NotNull @Size等等那样/** * 枚举校验注解 * * @author ye17186 * @version 2019/3/6 15:53 */@Target({ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(Retention...

2019-03-06 17:03:28 7257

原创 HashMap和ConcurrentHashMap在jdk1.8中的优化

1、jdk1.8之前,其数据结构为数组加链表。jdk1.8之后的优化,其数据结构变成了数组+链表+红黑树当链表上的结点过多时,查询一个结点,在jdk1.8之前,需要遍历整个节点,效率为O(n)。而在jdk1.8中,如果结点达到阈值TREEIFY_THRESHOLD(默认为8)时,会将链表结构转成红黑树结构,这样再查询时,如果数组的first结点是树结构,则采用树的查询算法,效率为O(logn)...

2019-03-06 14:36:16 1748 2

原创 MySQL中索引失效的N种情况

下面的示例,现场演示了具体有哪些情况会出现索引失效。例:表结构及数据如下:select * from tb_user;show index from tb_user;建立了username、age、gender的联合索引1、全值匹配我最爱,最左前缀要遵守where条件中,联合索引时一定要遵从最左前缀原则,一旦跳过某一列,其后的索引将会失效。当然,全值匹配的效率是最...

2019-03-06 11:15:31 758

原创 自定义@RestController用以简化与@RequestMapping的联合使用场景

在实际开发中,我们经常使用@RestController/@Controller+@RequestMapping来标注一个Controller@RestController@RequestMapping("/test")public class TestController { ...}在这里,每次都需要开发者写两个注解,比较麻烦。下面就对它进行自定义封装,以后只需要写一个...

2019-03-05 10:34:51 1739 1

原创 spring boot集成发送邮件

本例中将发送邮件封装成了工具类,在业务代码中可以随时随地的调用,十分方便一、pom中加入mail的依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId>&lt...

2019-03-04 17:45:30 591

原创 spring boot 多线程并发执行定时任务

Spring Boot默认情况下,所有定时任务会在一个线程中去执行,下面看测试代码,定义了三个测试Job:@Component@Slf4jpublic class TestJob { @Scheduled(cron = "0/3 * * * * ? ") public void job1() { log.info("do job1 start"); ...

2019-03-01 15:26:18 6228 7

原创 关于@schedule任务前,下次是否启动实测

首先给出结论:上次未结束,下次任务不会启动。它会自动顺延到任务结束后的,下一个周期触发。测试:1、开始定时任务@Scheduled(cron = "0/3 * * * * ? ")public void run() { int sleep = new Random().nextInt(10); log.info("say sleep: {}s", sleep);...

2019-03-01 14:36:49 1890

原创 spring boot 自定义@EnableXXX功能

在springboot中,我们开启一项功能是,常常用到@Enable***注解,例如@EnableAsync、@EnableCaching等等。下面我们来自己实现一个该功能。一、定义一个我们需要装配的功能/** * @author ye17186 * @version 2019/3/1 11:31 */public class MyConfiguration { @Be...

2019-03-01 11:46:09 2316

原创 Spring Boot 异步调用@Async

JAVA中可以自己创建线程等多种方式来实现异步调用,在spring3.0中,引入了@Async注解,让开发者能够更方便的实现异步效果。下面来看看再SpringBoot中如何正确的使用异步调用。一、启动类中,使用@EnableAsync注解开始异步功能@SpringBootApplication@EnableAsyncpublic class YCloudsServiceDemoApp...

2019-03-01 11:13:31 424

原创 @RequestMapping简化写法之@GetMapping和@PostMapping等注解

@RequestMapping在spring早期版本中一直存在,我也一直在使用。不过在Spring 4.3中,引入了@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping,用来帮助简化常用的Http方法映射,并更好地表达了被注解方法的语义。以@GetMapping为例,从其源码中可以看出,它其实是一个组合注解,是@Re...

2019-02-28 14:18:47 1211

原创 Nginx常用操作命令

1、启动Nginxnginx -c /path/to/nginx.conf2、停止Nginxnginx -s stop3、修改配置文件后,重新加载配置nginx -s reload

2019-02-28 10:51:59 480

IDEA社区版SpringBoot插件Spring Assistant

idea社区版2019.3.5后,不再支持Spring Assistant插件了。本资源是辛苦找来了,目前完美用在最新的社区版(2021.2.3版)

2021-11-02

PicGo-2.2.2.zip

Typora的完美搭档,可直接上传图片到各种图床。为解决GitHub下载慢的问题,所以将资源上床到这里,解压缩之后,双击exe文件,即可安装,可以完美的配合Typora来实用,具体实用方法,我后面在出一个教程

2020-05-30

Google Guide Style

Google推荐的代码风格,支持IDEA、Eclipse等多种开发工具。支持java、c/c++、python等多种语言

2019-04-17

我个人使用的常用idea设置

个人常用的idea配置,下载后直接Import-Settings即可使用,代码风格用的是Google Style

2019-02-28

空空如也

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

TA关注的人

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