自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王瑞的博客

平凡不时与我们相遇,终有一天,放下日复一日和循规蹈矩,赦免自己的孤独...

原创 JUC---AbstractQueuedSynchronizer解析(JDK13)
原力计划

java.util.concurrent包系列文章 JUC—ThreadLocal源码解析(JDK13) JUC—ThreadPoolExecutor线程池源码解析(JDK13) JUC—各种锁(JDK13) JUC—原子类Atomic*.java源码解析(JDK13) JUC—CAS源码解析(J...

2020-04-06 23:23:39 156 0

原创 JUC---ConcurrentHashMap源码解析(JDK13)
原力计划

一、Map家族 本篇只分析ConcurrentHashMap的源码。HashMap就简略带过,但是必须先明白了HashMap的相关原理再来了解ConcurrentHashMap更好。 Map是我们工作中用到最多的数据结构,key-value形式。看看整个Map家族 HashMap,根据键值的h...

2020-04-06 11:46:04 61 0

原创 SpringCloud 整合 TX-LCN分布式事务框架

微服务兴起,分布式事务也成为亟需解决的难题,业界解决方案很多,今天介绍一个我目前觉得最好用的TX-LCN。 官网地址:http://www.txlcn.org/zh-cn/ 一、TX-LCN介绍 TX-LCN由两大模块组成, TxClient、TxManager,TxClient就是你自己...

2019-09-01 23:37:17 1246 2

原创 Docker Dockerfile打包SpringBoot项目为镜像并部署

前面学习了Docker,今天来打包个项目Demo测试一下Docker在实际生产环境的使用。 先找一个你本地能运行的SpringBoot项目 安装了Maven(这里用Maven构建jar包) 安装了Docker环境 官方文档Spring Boot with Docker 修改项目的主p...

2018-08-29 16:10:53 20813 2

原创 JMT - 自研JVM性能监控与调优系统(一)

公司的项目后台实现采用的Java。系统中存在很多后台任务。线程池,队列,缓存也是遍布整个系统。平常测试的时候也因为一些OOM导致程序无法响应请求。还因为某些基础库的问题导致CPU错误,导致程序挂掉。 脑子里就冒出个想法,想设计一个基础库,能监控系统中的线程池,队列,缓存的内存使用情况,记录关键方法...

2020-05-31 22:07:45 15 0

原创 Java应用/JVM宕机排查步骤

相信大家都遇到过,自己的Java应用运行一段时间就宕机了或者响应请求特别慢。这时候就需要我们了来找出问题所在了。绝大部分都是代码问题导致的。 一、服务宕机 如果是服务宕机,发生致命问题导致进程已经死掉了,那么已经访问不了了,通常都是CPU问题引起的,程序一般会自己生成javacore文件,一般生...

2020-05-24 00:02:30 48 0

原创 JVM内存模型及垃圾收集器介绍
原力计划

一、JVM的内存模型 Metaspace:Class、Package、Method、Field、字节码、常量池、符号引用等 CCS:32位指针的Class,没开启短指针压缩的话不会有这个。-XX:+UseCompressedClassPointers CodeCache:JIT编译后的本地代码,...

2020-05-23 23:11:21 48 0

原创 JVM调优参数大全及G1GC调优
原力计划

一、JVM常见参数 1、标准参数 -verbose:class 打印每个class信息 -verbose:gc 打印每次gc信息 2、非标参数 -X -Xloggc:filename 设置GC log文件的位置 -Xloggc:log/gc.log -Xms大小 设置堆的初始化大小 -Xmx20...

2020-05-23 23:00:04 107 0

原创 JVM---jstack分析Java线程CPU占用,线程死锁
原力计划

本文章主要演示在Windows环境,Linux环境也差不多。 一、分析CPU占用飙高 首先写一个Java程序,并模拟一个死循环。让CPU使用率飙高。CPU负载过大的话,新的请求就处理不了了,这就是很多程序变慢了甚至不能访问的原因之一。 下面是我这里的Controller,启动程序之后,开多个请求...

2020-04-19 15:27:58 81 0

原创 CentOS 安装 Docker

版本 查看当前版本:cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 安装一些必要的系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm...

2020-04-15 22:47:24 45 0

原创 JUC---多线程下控制并发流程(JDK13)
原力计划

一、概览 控制并发流程的工具类概览 二、CountDownLatch 倒数计数器,倒数结束之前,一直处在等待状态,直到计时结束,此线程才能继续工作 唯一的构造方法 // 传入倒数计数数量 public CountDownLatch(int count) { if (count &l...

2020-04-06 17:49:19 94 0

原创 JUC---并发队列源码解析(JDK13)
原力计划

一、并发队列 先看全家福 并发队列又分为阻塞队列与非阻塞队列 实现了BlockingQueue的就是阻塞队列,最下层左边5个。队列满的时候放不进去,队列空的时候null都取不出来,会阻塞。 最右边2个就是非阻塞队列。 以* Deque结尾的是双端队列,头和尾都能添加和删除。双进双出。一般使用...

2020-04-06 15:51:01 77 0

原创 JUC---CopyOnWriteArrayList源码解析(JDK13)

一、CopyOnWrite*系列 CopyOnWriteArrayList和CopyOnWriteArraySet​也是常用的并发集合类。​他们支持并发的读写​。线程安全的。不过有它的缺点。 本篇就分析下CopyOnWriteArrayList的原理和源码。CopyOnWriteArraySet​...

2020-04-06 13:32:22 111 0

原创 JUC---CAS源码解析(JDK13)

本篇介绍什么是CAS。 一、什么是CAS? 我认为某一个变量在内存的值是A,如果是的话,我就把它设置为B。如果不是的话,就不修改了。典型的乐观锁思想。避免多人同时修改出错。 CAS方法有3个参数,内存值V,预期值A,要修改为的值B。仅当V=A时,才将内存值修改为B。否则什么都不做。最后返回现在的...

2020-04-05 19:56:36 43 0

原创 JUC---原子类Atomic*.java源码解析(JDK13)

一、什么是原子类 不可分割性 一个操作是不可中断的,在多线程下也可以保证 相比于锁,原子变量可以把竞争资源缩小到变量级别,粒度更细。 通常情况下比锁的效率更高,但是在高度竞争的情况下性能更低。 以AtomicInteger为例,看看它的方法 int get();//获取到当前值 int get...

2020-04-05 19:13:15 125 0

原创 JUC---各种锁(JDK13)

本篇偏概念性,附带部分源码。 常用的锁 常用的2种加锁方式synchronized和Lock。 synchronized的缺点 效率低,试图获得锁时不能设定超时,不能中断一个正在试图获得锁的线程 不够灵活,加锁和释放的时机单一,每个锁仅有单一的条件(某个对象) 无法知道是否成功获取到锁 Loc...

2020-04-05 17:26:45 54 0

原创 JUC---ThreadPoolExecutor线程池源码解析(JDK13)

线程池的组成 线程池管理器 -> thread-pool 工作线程(线程池中在运行的线程)-> t0,t1,t2…t9 任务队列-> blocking-queue 任务接口(task)-> 队列中的task1,task2… Executor 顶层接口,只有一个 ex...

2020-04-01 23:18:35 64 0

原创 JUC---ThreadLocal源码解析(JDK13)

ThreadLocal -> 线程本地变量 强调同一个请求内(同一个线程内)不同方法间的共享 让某个需要用到的对象在线程间隔离(每个线程都有自己独有自己独立的对象) ThreadLocal的优点 达到线程安全 不需要加锁 提高执行效率 高效利用内存 节省开销 避免传参的麻烦 Thre...

2020-03-30 23:08:04 47 0

原创 SpringBoot2.2.X 集成 Elasticsearch 7.4

SpringBoot2.2.X 整合集成 Elasticsearch 7.4! 不贴代码了。源码点这里 : 源码仓库 。觉得可以的点个star哟。 核心 采用池管理+对象工厂,池参数->ElasticSearchPoolConfig,Es连接工厂->ElasticSearchPool...

2020-03-15 20:37:06 863 0

原创 Gradle构建多模块SpringBoot项目

Gradle构建多模块SpringBoot项目 直接贴源码:https://github.com/MistraR/gradle-multi-module.git gradle-multi-module 在README.md和源码注释中说的很详细了,这里就不展开了。 依赖: 加载结果: ...

2020-02-23 14:22:26 413 0

原创 SpringDataJPA多表联合查询

相信大家都用过jpa,jpa继承CrudRepository和PagingAndSortingRepository接口之后,在简单的单表查询中,不管是使用自带的findAll(),saveAll等方法还是利用jpa的方法命名规范进行jpql查询,jpa使用起来快的一撇。然而在进行复杂查询时,需要继...

2020-02-20 15:03:12 190 0

原创 采用ConcurrentLinkedQueue实现生产者,消费者模型

生产者,消费者模型在我们实际开发过程中经常用到。就用ConcurrentLinkedQueue来实现个简单的Demo。 一、介绍 ConcurrentLinkedQueue 是单向链表结构的无界并发队列。从JDK1.7开始加入到J.U.C的行列中。使用CAS实现并发安全,元素操作按照 FIFO...

2020-02-17 22:22:10 138 0

原创 高可用分布式系统架构图

最近画了张分布式系统架构图,请教下各位小伙伴,不足之处还望指出来。

2019-09-18 16:24:00 780 0

原创 SpringBoot 整合 Netty + Websocket 实现NIO通信

最近项目中需要用到长连接服务,特地整合Netty+Websocket。我们系统需要给用户主动推送订单消息,还有强制用户下线的功能也需要长连接来推送消息 一、准备工作 Netty的介绍就看这里:https://www.jianshu.com/p/b9f3f6a16911 必须要理解到一些基础概念,...

2019-09-07 18:13:32 824 0

原创 为Logback日志添加唯一追踪ID

平常在测试的时候,不容易定位报错信息,这个时候给日志加上唯一的追踪ID,查找日志的时候就非常方便了。 像这样: 每个请求打印的日志都会有不同的ID,哪个请求出错,根据ID来定位日志就行了。这个ID还会返回给前端,前端发现报错让后台找原因的话只需要给个ID,后台开发人员就能根据 ...

2019-08-08 21:33:44 2144 3

原创 Java服务端对接支付宝支付,付款,退款,查看支付信息

史上最简单Java服务端对接支付宝支付教程,前端为APP。 一、支付业务流程 官方开发文档:https://docs.open.alipay.com/204/105297/ 下单时前端请求后台获取支付字符串 后台接收到请求支付字符串的请求,先处理自己的业务(生成待支付订单),然后根据支付配置...

2019-08-08 10:33:04 1258 0

原创 Spring Cloud Alibaba 之服务注册 Nacos

从2018年10月31日起,Spring Cloud Alibaba正式入驻了Spring Cloud官方孵化器。到2019年8月1日 在 Alibaba 仓库发布第一个毕业版本。历经快1年的时间 ,Spring Cloud Alibaba正式毕业。相信大家都用过Netflix公司开源的微服务系列...

2019-08-04 17:41:41 399 0

原创 SpringBoot 整合 阿里云OSS对象存储服务

今天来整合一下SpringBoot和阿里云OSS对象存储服务。 一、配置OSS服务 先在阿里云开通对象存储服务,拿到AccessKeyId、AccessKeySecret。 创建你的bucket(存储空间),相当于一个一个的文件夹目录。按业务需求分类存储你的文件,图片,音频,app包等等。创建...

2019-07-16 10:13:00 2168 3

原创 Linux/CentOS 搭建 Jenkins 持续集成服务

为了方便持续集成,快速开发部署,用Jenkins还是比较多的,演示一下CentOS环镜快速搭建Jenkins服务。 1.查看本机系统环境 $ lsb_release -a 这是我的版本 LSB Version: :core-4.1-amd64:core-4.1-noarch Distribut...

2019-07-04 16:43:26 269 0

原创 Session,Cookie,Token

Session 由于HTTP协议是无状态的协议,大多数情况下服务端都需要知道请求是哪个用户,Session简单说就是用来标识用户请求的,拿着SessionId去访问,告诉服务器我是谁。Session是存放在服务端的,客户端有的只是SessionId。 sessionid是一个会话的key,浏览器...

2019-05-05 12:20:39 198 0

原创 同步、异步、阻塞、非阻塞

同步和异步关注的是消息通信机制,针对应用程序来,关注的是程序中间的协作关系 同步:执行一个操作后,必须等待返回结果,然后才继续执行后续的操作 异步:执行一个操作后,不必等待返回结果,可以去执行其他的操作,然后等待通知再回来执行刚才没执行完的操作(比如回调函数通知) 阻塞和非阻塞关注的是程序在等...

2019-05-05 11:03:57 206 0

原创 @ControllerAdvice全局异常处理

Exception,分为运行时异常(RuntimeException)和非运行时异常 可查的异常(checked exceptions): Exception下除了RuntimeException外的异常 不可查的异常(unchecked exceptions):RuntimeException及...

2019-04-25 17:38:01 1365 0

原创 Restful HTTP API 设计

1、地址(Https) API前缀记得分版本 https://example.com/api/v1 2、以Http动词定义操作 GET(SELECT):从服务器取出资源。获取单个资源,分页列表等等 POST(CREATE):在服务器新建一个资源 PUT(UPDATE):在服务器更新资源,更新资...

2019-04-24 16:52:29 456 0

原创 JsonWebToken(JWT)设计方案

Json web tokens :官网 What? - JsonWebToken是什么 请求访问后台,后台需要知道你是谁吧?Token就是一个令牌,每次请求后台都带上它,说明你是谁,并且可以携带一些你的信息。Token是后台根据你配置的算法,还有密钥,编码生成的,最后在通过base64加密返给请...

2019-04-24 11:29:40 1450 0

转载 彻底搞懂WebSocket原理

知乎上看到一个说WebSocket原理的。感觉很通俗易懂,就转过来了。 一、websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算) 首先HTTP有 1.1 和 1.0 之说,...

2019-04-08 11:39:40 185 0

原创 Java生成随机邀请码

Java生成随机10位不重复邀请码 public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.println(create...

2019-02-19 15:53:19 655 0

原创 SpringBoot整合Shiro实现用户登录认证和权限鉴定

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数...

2019-01-22 23:17:47 2128 0

原创 Dubbo、Zookeeper、SpringBoot实例

一、背景: 摘自Dubbo官网:http://dubbo.apache.org 当流量非常低时,只有一个应用程序,所有特性一起部署,以减少部署节点和成本。此时,数据访问框架(ORM)是简化CRUD工作负载的关键。 当流量增加时,添加单片应用程序实例并不能很好地加速访问,提高访问效率的方法之一是...

2018-12-24 15:06:13 1538 1

原创 RPC初体验之 gRPC Java 简单实例

关于RPC远程过程调用,分布式架构下不同服务之间调用越来越紧密,对调用效率,可靠性,可用性要求越来越高。RPC就是在此环境下应运而生的。需要结合服务注册中心一起使用。Eureka,Zookeeper,Consul,Etcd等等。 客户端,服务端,RPC之间的通讯: 一个服务自己可以是客户端同时...

2018-11-27 17:10:36 2023 0

原创 Etcd尝鲜之Mac安装Etcd,配置Etcd可视化页面Etcd Browser

一、Etcd 类比于Zookeeper,开源的、分布式的键值对数据存储系统,主要用来做配置共享、服务的注册和发现。高可用,强一致性。内部采用 Raft 协议作为一致性算法选举leader,保证集群数据不丢失 每个 etcd cluster 都是有若干个 member 组成的,每个 member 是...

2018-11-27 00:05:01 7799 5

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