自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 状态机设计模式,实现一个自动售货机的状态机

心血来潮写一篇关于状态机的文章,在学习状态机模式的时候最被熟悉的例子应该是自动售货机,所以就用自动售货机来写一篇状态机的文章吧。首先分析自动售货机的状态,初步设计状态有初始化、商品选择中、出货中,有投币、退钱、锁定商品、出货成功事件,根据这几个状态和事件,设计了如下初步状态机图。状态机图如上,接下来进入编码阶段。首先要确定的就是某个状态能处理哪些事件,某个状态收到某个事件可以去到哪个状态。开始状态只可以进行投币操作去到商品选择状态。商品选择状态只能锁定商品去到出货中状态或者重新回到商品选择状态.

2021-07-27 14:29:23 2410

原创 RabbitMQ客户端消费者是单线程消费的吗?顺带分析RabbitMQ客户端源码解释什么是网络协议

下面是RabbitMQ客户端消费者的基本示例。public class Receive { private final static String QUEUE_NAME = "hello"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); f

2021-03-18 23:10:16 3987

原创 JVM配置错误,每分钟几十次的Full GC和老年代的64个字节

然后这64个字节需要进行非常多次的年轻代GC才能触发被占满的情况,没有被占满之前是无法触发每分钟几十次的Full GC的,然后我们在进行JVM配置的时候会进行多次重启很难触发老年代被占满的条件,另外在第一轮压测的时候是在所有压测场景(包括连续进行24小时以上请求)完成之后架构组才通知我们换用高配机器,所以后续研发调整JVM配置的时候只是在JVM配置调整之后进行了短时间的高并发压测导致后续的压测场景其实是不全的所以没有发现问题。

2023-06-30 14:19:07 114

原创 简单的异步事件聚合

异步事件聚合模型

2022-12-29 14:46:49 176 1

原创 内存泄漏导致GC超时

最近忙着做新的项目,主要是负载对老系统进行重构,但是现在每天大概会收到上百条老系统生产环境的GC超时告警,生产环境是GC时长超过2秒会告警,而且随着时间的推移,部分实例的GC时长已经接近3秒,一个是天天收到告警比较烦,二个是比较好奇为什么会出现这么频繁的GC告警。系统的话大概是一个日均百万级别呼叫量的呼叫中心,查看了一下生产环境的部署情况,产生GC告警的服务大概部署了40个实例,默认Parallel Old老年代垃圾回收器目前老年代大小600M左右,按道理来说是不应该产生如此多的GC告警的,一个生产环境对一

2021-07-16 10:41:01 777

原创 JDK ReentrantLock可重入锁和AbstractQueuedSynchronizer队列同步器源码解析

队列同步器AbstractQueuedSynchronizer,是用来构建锁或者其他同步组 件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。同步器是实现锁(也可以是任意同步组件)的关键,在锁的实现中聚合同步器,利用同步器实现锁的语义。可以这样理解二者之间的关系:锁是面向使用者的,它定义了使用者与锁交互的接口(比如可以允许两个线程并行访问...

2020-05-04 22:39:54 303

原创 使用Xshell连接服务器慢的解决方法

使用如下命令查看服务器配置cat /etc/ssh/sshd_config | grep UseDNS如果配置的是yes直接修改对应选项为no之后执行如下命令systemctl restart sshd解释:如果配置的选项是yes服务器在收到连接请求后会试图通过客户端的IP反向查询出域名,这个反向查询如果不能立即成功就会造成等待一段时间再想客户端确认。...

2020-04-25 23:07:10 3322 1

原创 对称加密、非对称加密以及它们在HTTPS和Linux免密登录中的应用

1.密码体制模型在密码学中,一个密码体制或密码系统是指由明文、密文、密匙、加密算法和解密算法所组成的五元素。密文是指未经过任何变换的原始消息,通常用m(message)或p(plaintext)表示。所有可能的明文有限集组成明文空间,通常用M或P表示。 密文是指明文加密后的消息,通常用哪个c(ciphertext)表示。所有可能的密文有限集组成的密文空间,通常用C表示。 密匙是指进行加...

2020-04-25 23:02:50 684 1

原创 Tomcat正常启动但是出现断断续续无法访问的情况,三次握手的时候服务器不回复ACK的处理方法记录

最近因为无法到职场办公,所以在家使用VPN远程办公,在这期间其中一个测试环境遇到这样一个问题,服务器部署了tomcat的docker服务,访问tomcat服务的时候总是间歇性出现无法访问的情况,在排除业务代码这一个因素后,一开始以为可能是因为最近在家办公人数较多,公司做了某些网络限制或者vpn有问题,但仔细思考过后觉得应该又其它原因,因为其它测试环境没有出现这样的问题。之后再tomcat部署的服务...

2020-02-29 19:42:44 824

原创 FreeSWITCH基于源代码安装实践

FreeSWITCH官方文档中已经提供了相当简单的部署方案,详细见FreeSWITCH官方文档,但是由于网络原因,安装很难进行,我这里没有成功过,所以这里做一个使用源代码安装的实践记录。1.安装环境FreeSWITCH的安装环境为一台干净的阿里云CentOS服务器。2.安装FFmpeg安装此环境用于编译mod_av,如果嫌安装麻烦可以注释掉mod_av模块的编译,不安装FFmpeg...

2019-12-31 00:24:36 623

原创 在Windows主机上使用VirtualBox基于Minikube搭建本地Kubernetes学习环境

本文主要讲述如何在Windows主机上搭建出一个Kubernetes学习环境。1.VirtualBox虚拟机安装首先使用VirtualBox创建一个基于CentOS的虚拟机(CentOS镜像下载地址),安装虚拟机的过程不再说明,注意虚拟配置设置内存2G以上,CPU核数2核及以上,否则可能导致无法运行Kubernetes服务。之后可以配置一下虚拟机的网络,添加网络地址转换和桥接网卡连接方法,...

2019-11-29 00:21:40 715

原创 使用JDBC实现动态的多数据源

// 继承自javax.sql.DataSourcepublic class DynamicDatasource implements DataSource { // 采用线程变量存放当前使用的数据库,如果不设置使用默认数据库 public static ThreadLocal<String> CURRENT_DATABASE=new ThreadLocal&lt...

2019-06-17 23:12:07 3947 7

原创 JDBC实现生成指定连接的数据库的建表语句(根据外键排序)和根据建表语句创建指定名称的数据库

在采用分库方案实现多租户的时候可能会遇到需要程序根据指定库的表结构创建一个新库的场景,这个功能使用JDBC的API实现并不复杂。// 常量private static final String SHOW_CREATE_TABLE_SQL="SHOW CREATE TABLE";private static final String DROP_TABLE_SQL="DROP TABLE I...

2019-06-16 14:32:31 640

空空如也

空空如也

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

TA关注的人

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