自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

睁眼看世界

两个黄鹂鸣翠柳,我连对象都没new!

原创 SpringBoot+Druid+MyBatis实现多数据源

我们使用动态的方式进行多数据源的配置,更加灵活方便。 1. 配置文件 spring: datasource: druid: one: type: com.alibaba.druid.pool.DruidDataSource driver-cl...

2020-03-18 22:17:51 323 0

原创 Redis实现延迟队列

延迟队列,顾名思义它是一种带有延迟功能的消息队列。那么,是在什么场景下我才需要这样的队列呢? 1. 背景 我们先看看以下业务场景: 当订单一直处于未支付状态时,如何及时的关闭订单 如何定期检查处于退款状态的订单是否已经退款成功 在订单长时间没有收到下游系统的状态通知的时候,如何实现阶梯式的同步订...

2020-03-16 00:20:15 197 0

原创 SpringBoot使用validation数据校验

1. 前言   简述JSR303/JSR-349,hibernate validation,spring validation之间的关系。JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,...

2019-03-10 18:34:49 2803 0

原创 [MySQL高级](七) MySQL主从复制及读写分离实战

1. 简介   随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部...

2018-05-26 16:43:19 7395 21

原创 [MySQL高级](六) 锁机制

1. 概述 1.1 定义   锁时计算机协调多个进程或线程并发访问某一资源的机制。   在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访...

2018-05-24 18:04:03 8355 23

原创 [MySQL高级](四) 索引优化之索引失效

1. 前言   索引的建立是为了让我们更加高效快速的查询出结果,但是,要想充分利用起索引,我们首先要解决的最大问题就是要避免索引失效,下面我们来一起通过实例来探讨造成索引失效的情况,并通过优化SQL查询语句来避免索引失效。   ➤ 准备工作:、 创建数据表SQL CREATE TABL...

2018-05-22 17:42:31 1713 18

原创 [MySQL高级](三) 索引分析

索引分析 1. 单表 1.1 建表SQL CREATE TABLE `article` ( `id` int(10) NOT NULL, `author_id` int(10) DEFAULT NULL, `category_id` int(10) DEFAULT N...

2018-05-21 18:04:48 612 13

原创 [MySQL高级](二) 索引简介

1. 概述   数据库除了数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。简而言之,索引是帮助MySQL高效获取数据的数据结构,是“排好序的快速查找数据结构”。   一般来说,索...

2018-05-21 12:00:28 796 12

原创 [MySQL高级](一) EXPLAIN用法和结果分析

1. EXPLAIN简介 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 ➤ 通过EXPLAIN,我们可以分析出以下结果: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实...

2018-05-21 09:41:23 50503 36

原创 将Token添加到请求头Header中

概述   在使用JSON Web Token作为单点登录的验证媒介时,为保证安全性,建议将JWT的信息存放在HTTP的请求头中,并使用https对请求链接进行加密传输,效果如下图所示: 问题 1.由于项目是前后端分离的,不可避免的就产生了跨域问题,导致Authorization始终...

2018-02-22 17:38:21 162650 85

原创 Java 的强引用、弱引用、软引用、虚引用

1、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下: // 强引用 Object o = new Object(); 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠...

2020-02-29 10:38:07 113 0

原创 Java 反射

…… 文章目录1.概述1.1 什么是反射1.2 为什么要使用反射2. Class类的介绍3. 反射的使用3.1 通过反射获取构造方法并使用3.2 获取成员变量并调用3.3 获取成员方法并调用3.4 通过反射运行配置文件内容3.5 通过反射越过泛型检查4. 反射的应用 …… 1.概述 1.1 什么是...

2019-04-15 20:24:15 227 0

原创 Result对象 + 统一异常处理

1. 错误异常码设计 1.1 统一异常码接口定义 /** * 统一异常码接口定义 * * @author 王洪玉 * @date 2018/11/11 */ public interface ExceptionEnum { /** * 获取异常编码 * ...

2019-02-25 16:50:57 647 0

原创 反射

…… 1.概述 1.1 什么是反射 1.2 为什么要使用反射 2. Class类的介绍 3. 反射的使用 3.1 通过反射获取构造方法并使用 3.2 获取成员变量并调用 3.3 获取成员方法并调用 3.4 通过反射运行配置文件内容 3.5 通过反射越过泛型检查 4. 反射的应用 ...

2018-08-26 19:36:49 272 1

原创 生产环境禁用Swagger

1. 打包环境的属性值来禁用 1.1 在属性文件中配置变量 #Swagger开关 SWAGGER.ENABLE = true 1.2 在配置类中设置开关 @Value("${SWAGGER.ENABLE}") private boole...

2018-08-05 19:27:59 1684 2

原创 Java操作RabbitMQ队列

1. 新建项目 1.1 引入pom <dependency> <groupId>com.rabbitmq</groupId> &l...

2018-07-28 19:23:41 6823 7

原创 log4j.properties 详解与配置步骤

1. log4j.properties例子 ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log...

2018-07-22 18:48:06 207 6

原创 Jackson 时间格式化

Jackson是SpringMvc官方推荐结合的,下面来说说其中一个注解,就是@JsonFormat 。 1. JsonFormat使用 1.1 添加到属性的getter方法上 @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss"...

2018-07-16 08:49:34 501 5

原创 zookeeper集群搭建及选举模式

1. zk集群搭建 1.1 zk集群,主从节点,心跳机制(选举模式) 1.2 zk集群搭建注意点 配置数据文件 myid 1/2/3 对应server.1/2/3 通过 ./zkCli.sh -server [ip]:[port]检测集群是否配置成功 1.3 zooke...

2018-06-30 15:38:15 2278 55

原创 zookeeper基本特性及linux客户端操作

1. session的基本原理 客户端与服务端之间的连接存在会话 每个会话都会可以设置一个超时时间 心跳结束,session过期 session过期,则临时节点znode会被抛弃 心跳机制:客户端向服务端的ping包请求 2. zk常用命令行操作 通过./zkCli.sh打开zk的...

2018-06-24 19:44:13 774 11

原创 分布式系统概念与zookeeper简介

1. zookeeper简介 中间件,提供协调服务 作用于分布式系统,发挥其优势,可以为大数据服务 支持java,提供java和C语言的客户端api 2. 分布式系统 很多台计算机组成的一个整体,一个整体移植对外并且处理同一请求 内部的每台计算机都可以相互通信(rest/rpc) ...

2018-06-18 09:59:26 220 13

原创 [Redis学习] Redis持久化对于故障恢复的意义

本文以单机部署为例进行介绍。 1. 生产环境中Redis启动前的配置 生产环境中,要把redis作为一个系统的daemon进程去运行的,每次系统启动,redis进程一起启动。 1.1 Redis各文件目录设置 redis的解压目录下,进入utils目录中,找到redis_init_scr...

2018-06-04 11:28:28 1063 12

原创 [Redis学习] Redis持久化—RDB和AOF

1. 简介   Redis支持RDB和AOF两种持久化机制,持久化功能有效的避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。首先我们介绍RDB、AOF的配置和运行流程,以及控制持久化的相关命令,如bgsave和bgrewriteaof。其次对常见持久化问题进行...

2018-06-04 10:11:55 481 7

原创 [Redis学习] 初识Redis

1.Redis特性   Redis是基于内存的Key-Value型高性能的NoSQL数据库。Redis之所以受到如此多公司的青睐,必然有之过人之处,下面关于Redis的8个重要特性。 1.1 速度快   正常情况下,Redis执行命令的速度非常快,下面我们分析一下Redis速度快的原因。...

2018-06-03 16:43:51 428 6

原创 [MySQL高级](五) 查询截取分析

1. 查询优化 1.1 永远小表驱动大表 小表驱动大表的理解我们可以通过下面的java代码来理解一下: // 第一种循环的方式 for(int i = 0;i < 5;i++){ for(int j = 0;j<1000;j++){ } } ...

2018-05-24 11:06:00 777 13

原创 [CentOS7环境搭建](七)安装RabbitMQ

安装Erlang 因为RabbitMQ是以Erlang语言编写的,所以我们首先需要安装Erlang 访问官网:http://www.erlang.org/downloads 下载源码包,如下所示: 使用WinSCP上传到CentOS7服务器上的/usr/local目录 执行以下命令 ...

2018-05-15 18:04:00 412 9

原创 [Java高并发编程](七)单例模式

本博客根据《Java多线程编程核心技术》和《实战高并发程序设计》总结整理 概述   单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。在java中,这样的行为能带来两大好处: 对于频繁使用的对象,可以...

2018-05-12 18:07:59 463 6

原创 [Java高并发编程](六)ThreadLocal

本篇博客结合其他优秀博客和《实战Java高并发程序设计》总结而来,讲解ThreadLocal的博客再网上有很多,但是大家的说法都五花八门,我这个菜鸡也是十分懵逼,我也只能根据书中所讲结合大家比较赞同的优秀博客进行总结学习,不当之处还望指正,不胜感激! 1. ThreadLocal的简...

2018-05-10 21:48:12 217 5

原创 [菜鸟学JVM](二)垃圾收集器

概述   在上篇博客中我们介绍了Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确...

2018-05-09 12:04:06 151 4

原创 [菜鸟学JVM](一)Java内存区域

本博客根据《深入理解Java虚拟机》整理总结   Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。JVM所管理的内存将会包...

2018-05-08 15:28:07 202 4

原创 Visual Studio Code 好用的插件

插件截图: 这里面有主题背景的插件,有自动列出文件路径的插件,有调试ts的工具,有文件图标的插件,还有一些我也不知道干啥的,,,反正挺好用的插件。...

2018-05-05 09:49:44 393 4

转载 CenterOS7——使用yum命令报错Could not retrieve mirrorlist

错误 CentOS7 yum时出现“Could not retrieve mirrorlist 验证yum是否正常安装 yum --help 结果显示yum已经正常安装了!!那就可能是我的网卡没能跟随操作系统启动!!! 验证配置resolv.conf是否配置 vi /e...

2018-05-03 11:59:19 11860 7

转载 [Java高并发编程](五)CountDownLatch、CyclicBarrier、Semaphore

原文链接:http://www.cnblogs.com/dolphin0520/p/3920397.html   在JUC包中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch、CyclicBarrier和Semaphore,这篇博客我们来一起学习这三个...

2018-05-03 10:52:14 189 4

原创 maven 阿里云中央仓库

当Maven下载jar在私服上也没有的时候,就会从中央仓库下载,下的少还好说,当你下jar包就用了半个多小时就实在忍无可忍了,听说有阿里云中央仓库镜像,赶紧来试试。 在maven的settings.xml文件中添加如下配置; <mirror> &...

2018-04-30 20:08:10 125 5

原创 [Java高并发编程](四)Lock的使用之ReentrantReadWriteLock读写锁

本博客根据《Java并发编程的艺术》学习整理而来   在之前我们提到的ReentrantLock可重入锁等锁基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读...

2018-04-30 08:32:11 240 7

原创 [Java高并发编程](三)Lock的使用之ReentrantLock可重入锁

本篇博客根据《实战Java高并发程序设计》和《Java多线程编程艺术》整理   并发控制是并发程序必不可少的重要手段,在之前的博客中介绍的synchronized关键字就是一种最简单的控制方法。它决定了一个线程是否可以访问临界区资源。同时,Object.wait()和Object.not...

2018-04-29 15:48:04 146 11

转载 [Java高并发编程](二)原子类

本篇博客由本人根据众多优秀的博客文章和书籍整理而来,参考的博客链接请看文章最下方,为尊重参考博客的原创作者,特标为转载。 前言   Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用...

2018-04-28 14:51:38 137 13

原创 [Java高并发编程](零)前言

概述   为了更好的支持并发程序,JDK内部提供了大量实用的API和框架。   本系列博客,将主要学习和总结这些JDK内部的功能,其主要分为四大部分:    学习有关同步控制的工具,在这里,我们将学习到更加丰富多彩的多线程控制方法 学习JDK的并发容器,这些容器专为并行访问所设计,绝对是...

2018-04-26 15:58:09 142 14

转载 [Java高并发编程](一)理解CAS

本篇博客根据众多优秀的博客文章整理而来,参考的博客链接请看文章最下方 前言   在java语言之前,并发就已经广泛存在并在服务器领域得到了大量的应用。所以硬件厂商老早就在芯片中加入了大量直至并发操作的原语,从而在硬件层面提升效率。在intel的CPU中,使用cmpxchg指令。   ...

2018-04-26 15:23:26 642 13

转载 [Java 多线程技术](八)线程池的使用

前言   在我们使用线程的时候就去创建一个线程,这样实现起来非常方便,但是会有一个问题:   ☛ 如果并发的线程量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁的创建线程会大大降低系统的效率,因为频繁的创建和销毁线程是需要时间点的。   那么有没有一种办法使得线程可以复用,就...

2018-04-23 16:03:00 260 14

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