自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (3)
  • 问答 (2)
  • 收藏
  • 关注

原创 Restful API实践(三)RestTemplate使用详解

1 概述通过上一篇文章(Restful API实践(二)SpringBoot项目接口设计示例)我们对SpringBoot项目Restful API接口的定义进行了详细地总结,这里我们就需要来看一看如果使用RestTemplate来消费这些接口。2 创建RestTemplate在项目中我们通常在项目启动的时候就在Spring容器中创建一个RestTemplate的bean,在需要的时候我...

2018-08-31 16:18:26 8407 1

原创 Restful API实践(二)SpringBoot项目接口设计示例

1 概述通过上一遍文章(Restful API实践(一)设计要点)我们对Restful API的设计要点进行了详细地介绍,面对现在SpringCloud框架和微服务的火爆,现在我将SpringBoot中常用到的接口类型的设计进行总结。2 GET接口get请求通常表达获取某种资源。(1)获取多个资源。针对多个资源的获取我们可以使用url中的名词为复数形式进行标记为获取多个,具体示例如...

2018-08-31 15:02:50 4796

原创 Restful API实践(一)设计要点

1 概述针对目前项目中使用的前后端分离开发,越来越感觉到API设计的重要性,而不好的API设计通常让使用者通过URL无法明确知道这个URL到底是干什么用的,并且会显得设计混乱,在此将使用Restful风格设计API进行总结,并对在SpringBoot中具体实现Restful API的设计给出一定示例。2 Restful API设计使用Restful API是一种面向资源的设计风格,因此...

2018-08-30 12:39:23 1208

原创 JUC--CountDownLatch源码分析(基于JDK1.8)

1 概述前面一篇文章()我们对CountDownLatch进行了简单的介绍,并对CountDownLatch的使用使用了例子展示,那么这一篇文章我们就要来看一看CountDownLatch底层到地是怎么实现的。2 UML类图注意上图仅仅展现了类关系,针对类内部的结构没有进行展示,从上面我们可以猜测CountDownLatch的内部功能的实现又和AQS这个玩意脱不了干系,多半又是通过...

2018-08-27 17:28:03 278

原创 JUC--CountDownLatch简介和使用

1 概述在我们的项目开发当中,我们通常会遇到这样的问题,一个线程的执行要等到其余几个线程执行完成才能开始,这种情况我们怎么办呢?这里就可以使用到我们JUC下面的并发工具类CountDownLatch。2 示例import java.util.Random;import java.util.concurrent.CountDownLatch;import java.util.co...

2018-08-27 10:19:36 315

原创 SpringBoot--RSA自动加密解密工具

1 概述在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),这里针对SpringBoot搭建的项目,博主根据SpringBoot自动配置的原理写了一个RSA自动加密工具,实现自动加密返回数据、解密传入数据并映射成json。2 项目结构上图的项目结构其实和SpringBoot--自动配置Demo实现的项目结构基本一...

2018-08-25 14:03:32 10990 7

原创 SpringBoot--自动配置Demo实现

1 概述上一篇文章(SpringBoot--自动配置原理解析)我们学习了SpringBoot自动配置的原理,对自动配置到底是怎么回事进行了详细地学习,那么现在我们就需要自己来实现一个自动配置的功能,以加深自己对自动配置的了解与认识。2 工程结构首先直接上工程结构的截图:我们来看一下我们的pom文件里面需要添加的一些内容。<?xml version="1.0" enc...

2018-08-24 18:30:47 1478

原创 SpringBoot--自动配置原理解析

1 概述我们都知道使用SpringBoot的强大功能之一就是能够进行自动配置。可以利用自己的自动配置功能来实现对Redis和MongoDB等的自动配置。那么SpringBoot的自动配置是怎么实现的呢?现在我们就从程序启动的入口来看看自动配置的具体实现。2 实现详解首先我们来看程序启动类。@SpringBootApplicationpublic class Applicatio...

2018-08-24 18:12:32 684

原创 时间复杂度

1 算法的效率算放效率的评估主要是通过时间复杂度和空间复杂度来评价。 时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。 空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。在我们的现实项目中,针对时间复杂度的研究比空间复杂度的研究更多,更有意义,因为时间复杂度直接影响到程序的执行效率和相应速度,所以我们常说的复杂读如果没有特别说明,指的就是时...

2018-08-24 14:07:36 1189

原创 JUC--ReenTrantLock学习(三)源码分析之释放锁

1 概述通过前面一篇文章(JUC--ReenTrantLock学习(二)源码分析之获取锁)我们已经学习了ReenrantLock获取锁的相关知识,这里我们将要学习ReenTrantLock释放锁的内容。下面我们直接开始源码的学习。2 源码分析首先,我们依然来看一下释放锁unlock的调用流程。(1)unlock public void unlock() { ...

2018-08-23 16:59:22 339

原创 JUC--ReenTrantLock学习(二)源码分析之获取锁

1 概述前面我们学习了ReentrantLock的用法以及与synchronized的比较(详情请参考这篇文章:JUC--ReenTrantLock学习(一)简介与使用),同时也对AQS有了初步掌握,我们知道AQS是JUC里面大部分工具实现的基础类,并且使用了模板方法模式了实现JUC工具类。现在我们就开始对ReenTrantLock的源码进行学习。首先我们还是来看一下ReentrantLo...

2018-08-23 14:16:27 342

原创 RabbitMQ学习笔记(一)简介

1、概述RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,也称之为面向消息的中间件。RabbitMQ中间件是用高性能、可伸缩性而闻名的Erlang语言编写而成的。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。官网地址:http://www.rabbitmq.com2、 AMQPAMQP是一个面向消息...

2018-08-22 22:09:11 189

原创 JUC--ReenTrantLock学习(一)简介与使用

1 概述对java多线程编程有一定掌握的同学肯定知道synchronized关键字来实现对共享对象的加锁。synchronized关键字加锁无法对所进行手动加锁和释放,并且容易造成死锁。那么有没有一种工具类能够实现手动加锁和释放呢?并且针对获取锁的操作我们可以在一定时间如果无响应就返回呢?当然有,这就是我们接下来要提到的ReenTrantLock。2 ReentrantLock实现简介...

2018-08-21 11:50:12 517

原创 JUC--AQS源码分析(三)阻塞和唤醒线程

1 概述上一篇文章 JUC--AQS源码分析(二)同步状态的获取与释放,我们学习到了同步状态的获取与释放的源码,并且对线程的阻塞和唤醒有了一个初步的了解,这里我们进行深一步的分析。2 阻塞我们知道在获取线程同步状态失败的时候,会将线程加入到CLH同步队列,并且进行自旋等待。而在自旋等待方法acquireQueued中我们可以看见需要再次进行获取同步状态,如果获取同步状态失败则需要判断当...

2018-08-17 10:57:53 564

原创 JUC--AQS源码分析(二)同步状态的获取与释放

1概述上一遍文章JUC--AQS源码分析(一)CLH同步队列我们了解了CLH同步队列的结构,以及同步队列的入列和出列。那么通过这篇文章我们将了解到同步状态的获取和释放。当然这里针对同步状态的获取和释放就需要区分共享模式和独占模式。通过查看AQS的源码我们可以发现AQS中使用了模板方法模式(针对模板方法模式我们可以查看Java设计模式--模板方法模式)。AQS提供了大量的模板方法,主要分成三...

2018-08-15 11:48:29 517

原创 Springboot+poi上传并处理百万级数据EXCEL

1 Excel上传针对Excel的上传,采用的是比较常规的方法,其实和文件上传是相同的。具体源码如下: @PostMapping(value = "", consumes = "multipart/*", headers = "content-type=multipart/form-data") public Map<String, Object> addBl...

2018-08-14 19:44:47 9344 9

原创 Java设计模式--模板方法模式

1 定义定义一个算法中的操作框架,而将算法中的一些步骤进行抽象,使这些步骤延迟到子类中去实现,从而实现子类不改变算放结构就可以重定义算法的某些特定步骤。2 类图及实例通过定义的描述我们知道了模板方法模式中的抽象类有一些模板方法,这些模板方法中会调用一些基本方法(抽象方法),而这些基本方法的实现就交给了子类来完成。具体代码实现如下:/** * 抽象父类 */abstr...

2018-08-14 10:50:54 305

原创 JUC--AQS源码分析(一)CLH同步队列

1 概述了解过JUC的源码,我们就可以知道JUC下面很多工具的实现都是依靠AQS,而AQS中用于保存等待线程的队列就是CLH。CLH是一个FIFO的队列。队列的每一个节点都是一个Node对象。当前线程获取同步状态失败的时候就会进入CLH队列。而当同步状态被释放的时候会通知首节点再次去获取同步状态。2 Node节点首先我们来看看Node节点的实现到底是怎么回事,源码如下:stati...

2018-08-13 14:29:27 1021

原创 volatile与内存屏障

1、概述通过Java高并发--volatile的使用和原理这篇文章,我们了解到volatile关键字其实就两个作用:(1)保证变量的可见性。(2)防止指令重排。而针对变量的可见性我们知道是读volatile变量的时候直接从内存中读,而写volatile变量的时候直接写入内存。那么重排序呢?2重排序2.1定义所谓重排序是指编译器和处理器为了提高程序的执行效率,在不违背happens-...

2018-08-13 09:30:44 5029 1

Mybatis--SQL解析流程图

此图用于展示Mybatis的SQL解析的具体流程,包含了SqlSession和Mapper动态代理对象的获取步骤。通过查阅此图可以对Mybatis的SQL解析流程有一个清晰的认识。

2018-11-02

Xshell+Xftp

使用时直接解压,并打开使用必读.txt文件查看使用方法。

2018-06-06

JAVA面向对象之继承

Java编程语言,对于面向对象中继承的使用

2015-09-13

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

TA关注的人

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