自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ShardingJdbc分表分库在开发中应用

1、如何使用2、如何开发3、高级特性

2021-12-19 13:30:28 831

原创 通过Canal+Kafka将Mysql数据同步到ElasticSearch

首先说下我们的技术选型,在业务库的选择上,我们选择了灵活方便的mysql,通过强大的分表分库中间件,我们能够轻松构建百库百表的巨大mysql集群,并且实现了不错的TPS。但是运营的瓶颈就显现出来,我们需要通过各种各样的条件来查询我们的订单交易,通过我们搭建的分表分库的mysql集群很难满足要求。ElasticSearch凭借着不错的搜索性能,完美满足了我们的业务要求,那么如何将数据从mysql同步到es,就是我们今天要说的课题。原理:数据流方向:mysql->canal->kafka-e

2021-12-18 17:26:37 3355

原创 Java项目的缓存方案

做什么样的缓存方案能做到代码和性能的最佳平衡?

2021-09-12 22:42:03 2716

原创 如何排查Java项目Cpu飙升到100%

在这种情况下,通过上述的步骤排查,会发现该进程内有部分线程CPU占用过高,其他线程一般,这部分占用过高的线程就是GC线程。2、用top -Hp pid 查看进程里每个线程的CPU占用量,获取占CPU最多的那个线程的ID,转为16进制,得到操作系统线程的ID。这种情况下,CPU一般不会太高,而是每个线程都有一定的升高,属于正常现象,这个时候的解决办法就是水平拓展负载均衡。3、再通过jstack -l pid打印线程堆栈,然后查找上述线程id的线程执行情况,进而找到代码。

2023-07-24 23:44:49 1204

原创 Window安装虚拟机

虚拟机安装好后,我们可以在CentOS上安装 jdk、python、ruby、tomcat、activemq、rabbitmq、jira、jenkins、gitblit、nginx、redis、redis cluster、influxdb、grafana等软件。19、进入/etc/sysconfig/network-scripts文件夹,拷贝一份ifcfg-lo并命名为ifcfg-eth0。GATEWAY="192.168.0.1" //网关,与宿主计算机一致。

2023-07-24 23:41:01 1742 1

原创 Spring事务传播机制-操作版

大家好,Spring事务传播机制大家应该都知道,不管是平时的工作还是备战面试,都会被问到,很多时候我们都跟背八股文一样背这个规律,但是却没有实践过,今天我打算用一个实践的操作来跟大家一起温习一下这些事务传播机制。首先我们知道事务传播机制分为以下几种事务传播级别 含义 外层有事务 外层无事务 备注 REQUIRED 默认事务级别 加入外层事务 新建一个事务 SUPPORTS 支持当前事务 加入外层事务 以非事务方式运行 .

2022-03-21 00:10:11 542

原创 普罗米修斯(prometheus)应用

普罗米修斯是一套开源的监控系统,可以监控啥呢?如下:linux服务器开源软件,如redis、mysql你自己写的项目一、安装go语言环境官网地址:https://golang.org下载:wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz下载完毕后,解压 tar -zxvf go1.11.2.linux-amd64.tar.gz配置环境变量:vim /etc/profile在最后添加export GO

2022-03-20 14:13:46 2058

原创 SkyWalking链路追踪实践

1、什么是链路追踪随着微服务架构的兴起,原本一个应用程序里的功能被分为了若干个小程序,互相之间使用http进行调用,当用户发起一个请求的时候,可能需要调用很多个接口才能完成想要的功能,服务之间的调用相对比较复杂,并且如果链路上一个服务出现问题或超时,都会形成导致接口调用失败。随着服务越来越多,我们对调用链的分析会越来与复杂,因此我们就需要使用一些工具来帮助我们完成这些工作。2、常用的链路追踪技术Cat、Zipkin、PinPoint、SkyWalking3、SkyWalking介绍..

2022-03-20 11:16:47 2576

原创 SpringBoot项目API文档解决方案-Knife4j

一、为何要写接口文档很多程序员都会写API,但不是每个程序员都会写API文档,也不是每个程序员都能写好API文档,很多人其实并不看重文档的编写,这其实是错误的,文档是我们不同工种(开发、测试)之间交流的主要参考,如果你文档不写或者写的不好,那么会多非常多无效的沟通,不知道你有没有遇到过,你的一个枚举字段没有文档说明,每个人都要来问一下,你这个枚举有多少有效值,你是不是很烦躁,你的同事比你更烦躁,如果你详细的写好了,每个人看你的文档就能看懂,没有人再来打扰你,如果每个人都把文档写好了,整个公司便会少很多无

2022-03-19 21:45:53 1371

原创 非常实用的参数验证框架

Hi,大家好,在我们Java猿进行项目开发的时候,写接口是我们最常做的事情,接口的参数校验,这个是一个很不起眼,但是做的不好,代码会非常冗余难看的事情,今天给大家分享一个框架,其实大家很常见的框架:hibernate-validator,接下来说说我在想项目里如何使用的。首先引入依赖 <dependency> <groupId>org.hibernate</groupId> <artifactI

2022-03-19 21:09:27 1077

原创 Java常用的序列化框架

什么时候需要序列化?当你程序里的对象要存储到硬盘或者通过网络传输的时候,你的对象就需要序列化成二进制字节数组。那么,序列化对我们的程序到底有多大影响,如何判断一个序列化框架的好坏?我们一般从如下几个方面来评定一个序列化框架的优劣。1、序列化反序列化的速度--直接影响了程序的性能。2、序列化后字节流的大小--可能会占据你更多的带宽,特别是外网带宽很贵。3、是否跨平台跨语言--影响了你程序的拓展性。接下来我想介绍一下我常用的三种序列化方式。一、Jdk序列化二、Json序列化三、P

2021-12-18 15:08:23 4977

原创 吐槽Java里那些不怎么样的框架

开发这么多年,遇到了许多优秀的框架,灵活高效,犹如一把利器,让我们的工作变更简单,甚至有一点点快乐。但是不排除有些框架,用了还不如不用,下面盘点一下,欢迎大家来喷:一、MyBatis Generator这个框架可以按照配置为我们自动生成mybatis对应的mapper.xml、实体以及dao文件,在早起我们还需要自己写mapper文件时,的确是开发者的一个福音,可以节省我们很多时间来写一些无用的增删改查的dao层代码,这个框架本身没有问题,但是却不适合项目用,很难管理。在我们开发过程中,很难做到

2021-12-15 21:34:04 689

原创 记一次tmp目录被写满导致服务器崩溃的产线事故

今天在产线报警群报出了我们某个服务失去响应的情况,打开跳板机登录发现果然登录不上了。开始排查问题,这个问题已经不是第一次了,时间也很固定,每天9点多开始,初步定位是定时任务引起,看xxl-job面板,发现确实有两个定时任务是9点开始执行的。经过与运维沟通,确定是tmp目录(我们只有3.6G写满导致),开始检查代码,发现的确有很多指定了/tmp目录的代码,而且定时任务产生的文件非常大且多,最终导致服务器失去了响应。在我们开发过程中,我们应该尽量少用tmp目录,在开发过程中我们指定其他位置。当我们用

2021-11-22 13:33:55 1414

原创 Zookeeper可视化工具-Web版本

在我们开发过程中,Zookeeper是我们最常用的基础组件之一,我们需要经常与其进行交互,特别是开发测试环境,我们经常需要查看Zookeeper上的数据,但是其本身并没有提供UI供我们使用,只提供了命令,不直观,晦涩。市面上有不少人自己做的UI工具,今天我给大家推荐一款Web版的Zookeeper可视化工具-->zkuigithub地址:https://github.com/DeemOpen/zkui下载下来后,直接mvn clean package打成jar包新建一个目录:将zk

2021-10-12 16:40:00 806

原创 SpringBoot项目如何完成初始化工作

有时候,我们在做项目的时候,总有一些需求是要在项目启动的时候完成一些初始化的工作,完成这些项目的时机:有时候是容器启动前:如果没有完成这些准备工作可能会导致我们提供的服务出错。有时候是容器启动后:这些初始化工作可能比较耗时,会影响我们提供服务。总结下来,我们可以采用如下两种方式来实现:① 项目启动前完成数据加载package chen.huai.jie.springboot.init.config;import lombok.extern.slf4j.Slf4j;import o

2021-10-11 14:44:21 352

原创 SpringAop切面执行顺序实践

用过SpringAop的人都知道,这玩意是非常的强大,可以实现我们很多横切面的功能,包括Spring自己的很多东西,比如事务(@Transactional)和缓存(@Cacheable)等功能的实现都是依赖于切面,那么一个方法被多个切面注解修饰后,切面的执行顺序到底是什么样的?如果改变Spring里已有切面的执行顺序,我们下面来一一实践一下。一、自定义切面的执行顺序定义两个切面注解@AopOne @AopTwo写两个切面的逻辑package chen.huai.jie.springboot

2021-09-23 12:18:17 2164

原创 Mysql事务隔离级别-操作版

Mysql是我们程序员日常工作中接触最为频繁的数据库,深入掌握Mysql的基本使用和进阶知识,对我们只有好处没有坏处。今天给大家带来的是Mysql的事务隔离级别讲解,我会附带我的所有操作截图。先贴一下我今天用到的命令:-- 读未提交SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;-- 读已提交SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;-- 可重复读SE

2021-09-22 20:41:50 247

原创 基于Redis的排行榜系统

上个月做了一次营销活动,活动大概是分成两个队,用户可以随意加入战队,通过不断做任务来提高自己的战力值,提升自己战力值的同时也会提升所在队伍的战力值,在不断PK的过程中,队伍和具体用户的战力值及排名信息是在不断变化的,承蒙组织厚爱,把这个光荣的任务交给了我,经过对比,我最终选择了redis的zset来做我们本次排名机制的技术方案。但是我们的活动忽略了一个很重要的东西,就是在相同的战力值下,如何确定二级排名,由于产品意识到这个问题较晚,最终没有实现,一是项目已经提测,无法承担改动的风险,二是时间真的不够。虽

2021-09-17 19:26:18 322

原创 分布式锁实现方案-Java版

在开发过程中,为了解决线程安全问题,我们引入了锁,lock或者synchronized,但是随着微服务的流行,进程级别的锁已经不满足我们的要求了,我们需要分布式锁来保证我们的业务逻辑正常进行,分布式锁一般有三种方案。首先我们思考一下,分布式锁需要满足我们哪些要求,我盘点了一下:1、互斥性:同一时刻只能有一个线程持有锁。2、防死锁:程序崩溃或者任何其他问题,不能导致锁无法释放。3、续期问题:业务没有执行完毕,锁不能提前释放,否则会失去锁的意义。4、加锁和解锁必须是同一个线程,不能因为某些原

2021-09-17 14:44:31 357

原创 如何优雅地提交事务后发送MQ消息

记得以前我做过一个需求,当时我做的项目负责管理公司所有的用户信息和机构信息,里面有一个细节,就是增删改查用户的接口都需要发送MQ消息以便可以通知下游项目(他们可能依赖这个做一些缓存的清理),直到有一天,一个开发小哥找到我,我才知道我在项目里埋了一个雷,我把保存数据的操作和发送MQ消息的操作都封装在了@Transactiona 修饰的方法里了,这导致了一个很明显的问题,就是事务还没有提交,我的消息就发送出去了,然后下游收到通知后又来调用我的接口获取最新的信息,结果发现获取的信息依然没有变化。后来我就用了下

2021-09-17 12:20:01 2185 4

原创 压力测试-Jmeter

压力测试是我们工作中经常会遇到的问题,特别是高端的职位,越是需要有更高的要求。

2021-09-14 00:06:37 5872 2

空空如也

空空如也

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

TA关注的人

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