自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘本龙的专栏

个人邮箱:3089008201@qq.com. 技术交流群:684457529

转载 zookeeper与etcd的对比

背景 最近在看到Pachyderm的介绍时,看到作者拿YARN和Kubernetes做类比,拿Zookeeper和etcd做对比。YARN和Kubernetes的类比还相对比较好理解,毕竟他们都有资源管理和调度的职能,只不过YARN上运行的对象是JVM,而Kubernetes上运行的是容器。但是拿...

2020-11-25 12:04:14 3 0

转载 手撸一致性hash算法

一、一致性Hash(Consistent Hashing)原理剖析 引入 一致性哈希算法是分布式系统中常用的算法。一致性哈希算法解决了普通余数Hash算法伸缩性差的问题,可以保证在上线、下线服务器的情况下尽量有多的请求命中原来路由到的服务器。 在业务开发中,我们常把数据持久化到数据库中。如果需要读...

2020-11-24 16:57:02 12 0

原创 手撸LRU算法

使用javaAPI java 的LinkedHashMap可以实现LRU算法,LinkedHashMap 本身内部有一个触发条件则自动执行的方法:删除最老元素(最近最少使用的元素)。我们只需要通过参数控制数据排序逻辑和数据删除规则就行了。 LinkedHashMap源码中有这么一个注释: <...

2020-11-24 16:15:36 19 0

转载 LVS介绍及工作原理图解

一、LVS简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,官方站点是:http://www.linuxvirtualserver.org。现在LVS已经是Linux标准内核的一部分,在Linux2.4内核以前,使用LV...

2020-11-23 11:33:13 19 0

原创 spring3升级到spring4.3

项目中有一个外购的老的系统,使用的spring3,太老了,也不符合公司安全要求,固将其升级为spring4。这里就记录一下修改内容。 升级spring版本 <spring.version>3.2.18.RELEASE</spring.version> 升级到 <sp...

2020-11-17 14:14:43 34 0

转载 数据库连接池到底应该设多大?

数据库连接池的配置是开发者们常常搞出坑的地方,在配置数据库连接池时,有几个可以说是和直觉背道而驰的原则需要明确。 1万并发用户访问 想象你有一个网站,压力虽然还没到Facebook那个级别,但也有个1万上下的并发访问——也就是说差不多2万左右的TPS。那么这个网站的数据库连接池应该设置成多大呢?结...

2020-11-10 20:30:50 41 0

原创 java设计模式之访问者模式

定义 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。 优缺点 访问者(Visi...

2020-10-14 17:35:06 57 0

原创 java设计模式之状态模式

状态模式的定义与特点 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 模式的结构 状态模式包含以下主要角色。 环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来...

2020-10-14 16:47:35 39 0

原创 JIT实时编译优化带来的问题:几千次异常以后取不到错误信息了

问题 public static void main(String[] args) { BigDecimal value1 = new BigDecimal("0.0000"); BigDecimal value2 = new BigDecimal("...

2020-09-30 11:29:55 72 0

原创 RocketMQ事务消息实现原理

文章目录概述RocketMQ事务消息实现原理RocketMQ事务消息流程概要RocketMQ事务消息设计事务消息优缺点优势缺陷注意 概述 在之前文章seata(一) 分布式事务解决方案汇总中介绍了十来种分布式事务的解决方案或理论,其中有一个是事务消息。rocketmq是支持事务消息的,本文将介绍r...

2020-09-22 16:22:51 561 3

原创 seata(一) 分布式事务解决方案汇总

概述 分布式事务是老生长谈的话题了,过去也一直没有很好的解决办法,没有很方便使用的架构。不过现在阿里开源了seata, 笔者正在学习中,顺便记录一下笔记。 本文先来梳理一下目前流行的分布式事务的各种解决方案,以及他们的对比分析。 什么是分布式事务 事务: 由一组操作构成的可靠的独立的工作单元,...

2020-09-19 19:47:48 188 0

原创 CreateProcess error=206, 文件名或扩展名太长

欢迎关注本人公众号 近期接手一个老项目,启动报错:CreateProcess error=206, 文件名或扩展名太长 这是因为Windows命令行支持的字符串长度有限制。Linux不会有这个问题。 如果你是使用的gradle的bootrun方式启动,那么可以参考gradle官方文档 来解决这个...

2020-07-20 21:12:49 2694 2

原创 seata(二) 分布式事务框架seata1.3 AT及XA模式实例演示

欢迎关注本人公众号 概述 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 本文先将官方实例跑起来,看看运行效果,值后在对其原理和源码进行分析。 下载...

2020-07-06 14:28:19 1585 3

原创 mysql8.0.20安装教程

欢迎关注本人公众号 mysql8 的安装先比较之前的版本复杂了一些,下面就一步一步安装。 下载 到 mysql官网 下载最新版本的mysql 下载完成后解压,并新建my.ini文件 my.ini 文件配置 my.ini文件内容: [mysqld] # 设置3306端口 port=3306 #...

2020-07-03 16:26:59 379 0

原创 docker/k8s(1):docker安装使用

依赖 docker使用 安装docker 使用yum安装最新版本docker yum install docker 查看docker版本 [root@localhost ~]# docker version Client: Version: 1.13.1 API version...

2020-07-01 17:46:55 234 0

原创 transmittable-thread-local:解决线程池之间ThreadLocal本地变量传递的问题

欢迎关注本人公众号 概述 当InheritableThreadLocal遇到线程池:主线程本地变量修改后,子线程无法读取到新值 一文中介绍了InheritableThreadLocal的问题:主线程变量修改后,子线程无法取到的问题。 阿里开源的transmittable-thread-local...

2020-06-30 21:26:28 817 0

原创 当InheritableThreadLocal遇到线程池:主线程本地变量修改后,子线程无法读取到新值

欢迎关注本人公众号 之前已经介绍,InheritableThreadLocal可以在子线程创建的时候,将父线程的本地变量拷贝到子线程中。 那么问题就来了,是只有在创建的时候才拷贝,只拷贝一次,然后就放到线程中的inheritableThreadLocals属性缓存起来。由于使用了线程池,该线程可...

2020-06-30 20:39:23 828 0

原创 InheritableThreadLocal:子线程继承父线程的本地变量

欢迎关注本人公众号 概述 ThreadLocal可以保存一些变量仅供当前线程使用,其他线程不可见。 实际工作中可能会由于任务复杂,父线程创建几个子线程并发致性任务,那么父线程的本地变量如何传递到子线程呢? 答案是使用InheritableThreadLocal。 代码实例 public stat...

2020-06-30 20:15:48 518 0

原创 ThreadLocal 内存泄漏 代码演示 实例演示

欢迎关注本人公众号 阅读本文前请先阅读: ThreadLocal内存泄露原因分析 不使用ThreadLocal 下面这段程序创建了一个有5个线程的线程池。 每个线程致性都申请5M大小的堆空间。 public class MyThreadLocalOOM1 { public static ...

2020-06-30 19:47:29 690 9

原创 ThreadLocal内存泄露原因分析

欢迎关注本人公众号 背景知识 引用 Object o = new Object(); 这个o,我们可以称之为对象引用,而new Object()我们可以称之为在内存中产生了一个对象实例。 当写下 o=null时,只是表示o不再指向堆中object的对象实例,不代表这个对象实例不存在了。 强引用 ...

2020-06-30 17:59:49 818 1

转载 google aviator:轻量级Java公式引擎

文章目录常用的方法官方文档简介包依赖使用手册执行表达式使用变量exec 方法调用函数自定义函数编译表达式访问数组和集合三元操作符正则表达式匹配变量的语法糖nil 对象日期比较大数计算和精度字面量表示运算类型转换和提升decimal 的计算精度强大的 seq 库两种运行模式调试信息语法手册数据类型操...

2020-06-30 15:44:14 858 0

原创 如何让发布丝般顺滑
原力计划

欢迎关注本人公众号 文章目录欢迎关注本人公众号前言概述环境说明 前言 笔者在过去几年的工作中, 曾负责管理过多个项目,最高也负责过几百万日活的项目,十几人的研发团队,在工作中也总结了一些项目管理经验,参与制定了一些规范,提升团队的整体效率,保障服务的高可用。接下来笔者会将过去的一些经验进行总结,...

2020-06-11 21:32:21 231 0

原创 java自定义类加载器并观察类卸载过程
原力计划

欢迎关注本人公众号 文章目录欢迎关注本人公众号概述代码实现 概述 之前我写了篇博客: java自定义类加载器实现类隔离 ,里面介绍了如何自定义类加载器实现了类隔离。 通常情况下,在JSP,OSGI及其他一些支持热替换的库,都是需要进行类的卸载回收的,否则类在替换后,老的类就没用了但是还在内存中...

2020-06-11 19:49:45 322 0

原创 spring boot 全局统一日志打印

欢迎关注本人公众号 概述 本文以使用spring boot或者springmvc为例。 微服务之间调用,或者controller接收请求时,为了方便排查问题,通常会将入参与出参(返回值)打印出来。 为了简化代码,这里使用AOP统一处理日志的打印。 由于比较简单,废话不多说,直接上代码: @Asp...

2020-06-05 16:52:16 799 0

原创 不要以为你用了BigDecimal后,计算结果就一定精确了

欢迎关注本人公众号 异常再现 大家应该都已经知道,涉及到金钱的计算应该使用BigDecimal,没有使用BigDecimal的已经被开除。 但是使用了BigDecimal后计算结果就一定是精确的吗?未必。 看下面测试 BigDecimal a = new BigDecimal(1.01); ...

2020-05-26 17:52:21 323 1

原创 spring boot 2.1学习笔记【十九】使用spring validation实现全局参数校验
原力计划

概述 本文介绍在Spring Boot中实现对controller请求的数据进行全局校验。 JSR303/JSR-349: JSR303是一项标准,只提供规范不提供实现,规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,位于javax.validation.const...

2020-05-09 10:53:56 445 0

原创 rabbitmq 事务消息

文章目录AMQP 事务消息confirm 事务消息生产者纯异步操作 rabbitmq支持两种模式的事务消息: AMQP confirm AMQP 事务消息 代码比较简单,开启事务txSelect,提交txCommit,回滚txRollback。 实例: 生产者 public class S...

2020-02-21 16:08:59 602 0

原创 rabbitmq消息可靠性之消息应答与持久化

文章目录消息应答ack持久化 消息应答ack 前面介绍了rabbitmq有两种ack模式 自动ack:消息从rabbitmq队列中发送给消费者则从队列内存中删除该消息。此时如果消费者宕机等原因未来得及消费完消息,则该消息丢失。 手动ack:消费者在去确定消费完消息以后再ack,rabbitmq服...

2020-02-19 22:06:43 279 0

原创 rabbitmq 7种队列实现java版

文章目录搭建maven项目引入依赖创建连接简单队列消息生产者消息消费者 搭建maven项目 引入依赖 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-clie...

2020-02-19 21:02:59 358 0

原创 rabbitmq用户及vhost配置

文章目录用户添加用户配置virtual hosts授权用户访问vhost 用户 上一节我们是通过guest用户登录的,但是实际工作中肯定不能以该账户使用,通常是会设置多个账户供不同的业务方使用。 下图中可以看到guest是administrator权限。 添加用户 我这里作为演示,添加一个adm...

2020-02-19 20:12:20 571 0

原创 windows10安装rabbitmq

文章目录安装Erlang安装rabbitmq 安装Erlang 由于rabbitMQ是Erlang语言编写的,所以要先安装Erlang语言环境,与安装java类似。 rabbitmq官网安装教程:https://www.rabbitmq.com/install-windows.html。 官网已...

2020-02-19 19:32:28 423 0

原创 java11:NoClassDefFoundError: javax/activation/MimetypesFileTypeMap

文章目录错误描述解决办法 错误描述 在 netty4.1实现http文件服务器 一文中我们有使用到javax.activation.MimetypesFileTypeMap。但是java9+对Java实行了模块化处理,有一些模块没有默认加载,所以在使用这些模块时,需要我们主动的引入。 错误信息:N...

2020-02-16 18:51:44 791 0

原创 Netty实现聊天室

文章目录 本文内容基于上一篇博客 netty实现WebSocket协议,一些基本使用请参考该博客。 本例实现的功能: 有新成员加入时,群广播消息,欢迎加入 有成员退出时,群广播消息,退出 每个成员都可以发送消息,消息广播给群内的每个人 完整的服务器代码如下: package com.examp...

2020-02-13 16:09:19 807 0

原创 netty实现WebSocket协议

文章目录WebSocket协议服务端开发客户端运行测试全双工 WebSocket协议 一般web应用都是使用的HTTP协议。HTTP协议有以下特点: 支持客户端-服务端模式 使用简单:只需要知道服务端URL,携带参数发送请求即可 支持多种传输数据类型,由消息头中content-type标识 无状...

2020-02-11 11:48:49 888 0

转载 网关基于Netty 在Http 协议的实践

文章目录网关基于Netty 在Http 协议的实践http编解码Head 请求ByteBuf 释放,防止内存泄漏引用计数PoolThreadCache连接池连接复用接入端用Netty完全异步Tomcat 做容器Netty 实现 网关基于Netty 在Http 协议的实践 我们网关现在完全基于net...

2020-02-10 20:54:23 474 0

原创 netty4.1实现http文件服务器

概述 netty版本:4.1.45 使用netty搭建一个简单的文件服务器,使用HTTP协议对外提供服务。 如果文件不存在,返回403响应码。如果是文件夹,以超链接展示,如果是文件,支持下载。 服务器编码 /** * netty http 文件下载 服务器 */ public class ...

2020-02-10 20:30:49 436 1

原创 netty实现HTTP服务器

文章目录概述HTTP服务器代码实现验证 概述 目前主流的Java web服务器还是采用springboot+Tomcat来实现的,底层还是基于servlet开发的。servlet不是异步的,所以性能并不是很理性,无法满足当下的快速服务器的要求。 目前spring5已经实现了基于reactor的we...

2020-02-10 15:07:07 300 0

原创 Mac升级系统后,idea中Git无法使用:xcrun: error: invalid active developer path

Mac升级了最新的系统,idea右下角提示Git无法使用的错误。完整错误信息: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library...

2020-02-10 10:34:47 302 0

原创 Mac安装protobuf

Mac上安装软件通常使用brew来安装,类似于Linux平台上的yum. 本文使用brew安装protobuf 两条命令: brew install protobuf protoc --version

2020-02-09 11:53:17 206 0

原创 mac 安装 brew(homebrew)

brew是MacOS上的包管理工具。类似RHEL/CentOS上的yum或者Ubuntu上的apt-get一样。 确认你的Mac电脑安装了ruby: ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-dar...

2020-02-09 11:47:35 695 0

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