自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 简单聊聊世界难题-分布式事务

分布式事务可以说是在分布式架构系统中,比较棘手的问题了.如果根据业务场景制定相应的事务,如利用消息的事务最终一致性解决方案,XA等2PC强一致方案等等.今天就列举一下相关解决方案;1.根据同步结果保证事务注:该种方式适用于单一的调用其他服务,利用业务执行顺序,根据同步结果保证事务 12345678 @Transactional@PostMappingpublic R test() { mapper.delete(); //将

2020-10-10 14:58:06 229 1

原创 RXA-Thanos是一个SpringCloud 分布式事务解决方案

Rxa-ThanosRXA-Thanos是一个SpringCloud 分布式事务解决方案,基于Redis框架发布订阅方式通信,汲取了XA两阶段提交和最大努力一阶段提交等思想,倾向于强一致性事务.目前处于完成功能阶段,等待进一步测试优化及重构;1.集成方式:基于Redis,所以需要引入相应依赖 123456789 <dep...

2020-04-06 17:55:45 291

原创 基于Redisson的分布式锁,声明式注解方式,

Lock-Thanos基于Redisson的分布式锁,声明式注解方式,git地址,喜欢请留星星###一.功能:支持可重入公平锁,可重入非公平锁,写锁,读锁支持注解声明式设置参数自定义错误处理###二.引入项目:1 引入pom参数: <dependency> <groupId>com.kakuiwong</grou...

2020-03-31 19:26:30 470

原创 Encrypt-Thanos (springboot,springcloud http传输加解密框架,灭霸特别版 jdk1.8+支持)

Encrypt-Thanos (springboot http传输加解密框架,灭霸特别版 jdk1.8+支持)一.功能介绍springboot,springcloud项目快速开启前后端数据传输加密提供多种加密方式(对称,非对称),支持自定义加密方式集成简单,一个@EnableEncrypt注解即可开启全局加密规则,并支持@SeparateEncrypt类级别或方法级别细粒度控制...

2020-02-23 14:39:31 1210

原创 springcloud集成springsecurity oauth2 实现服务统一认证,应该是很简单的教程了~

#重构项目,整理maven父子结构,改善认证及资源服务器配置,增加注释更清晰好理解~#2019.11.4 新增自定义返回token数据;#2019.11.5新增自定义登陆及授权页面(没有前后端分离,其实这种小页面也没必要分离出去)1.项目结构服务名 端口号 备注 auth 8082 认证服务器 mechant 8081 ...

2019-11-07 16:46:39 25742 23

原创 gateway集成阿里Sentinel后,控制台如何根据url动态限流

gateway网关集成Sentinel后,控制台默认限流是根据服务进行的,默认为资源名为ReactiveCompositeDiscoveryClient_服务名称,如下图:所以限流都是根据整个服务进行的,那么如何像单机一样根据url分组限流呢;有两种方式:1.通过初始化配置:@Configurationpublic class SentinelInitUrlConfig { @PostConstruct public void doInit() { lo

2022-02-13 18:01:43 1156

原创 转移阵地到自建博客~

此后不更新csdn了,点我跳转~

2021-11-19 15:38:06 213

原创 介绍下热部署神器-JRebel

奇怪了,发文字版总是被驳回...

2021-10-27 13:54:35 242

原创 小团队小体量单体架构下利用Jenkins的构建部署

使用到的工具有中间件有Jenkins,Gitlab,Maven等...由于小团队,并且业务系统相对访问量不大,所以需要易于管理好用的一套构建部署流程;以下是我做过的一套流程,仅供参考(以下案例为针对Java语言项目);1.测试服务器:测试中频繁的接口修改,前后端联调;平时可以在局域网中互联各自开发电脑联调,或者后端远程测试服务器联调;所以针对于这类场景,使用本地脚本的方式直接上传部署测试服务器更加的灵活方便,具体流程如下:1)本地进行构建打包2)编写脚本,直接进行上传部署项目(T

2021-10-20 10:01:11 243

原创 SpringMVC+Junit 遇到找不到servlet相关bean问题

增加注解@WebAppConfiguration,执行在web环境运行;@ActiveProfiles("test")@WebAppConfiguration@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration({"classpath*:/spring/*.xml"})

2021-10-11 15:40:57 168

原创 关于HttpServletRequest,记录日志引发的问题

前言:今天跟安卓同学闹了点小不愉快,他在测试安卓TV端的时候,突然发现接口报错于是问我.但是我看到其报错接口并未改动,并且运行公众号H5端接口正常,于是产生了分歧;出问题原因:为了记录详细日志,配置了全局过滤器记录JSON信息,于是继承HttpServletRequestWrapper重写了一些逻辑,下面说明具体细节;1.我直接将过滤器的chain.doFilter(request), response)方法中的request继承HttpServletRequestWrapper重写了逻辑:p

2021-09-30 20:13:52 770

原创 神器Arthas!!!

直接起个标题,用起来~

2021-09-17 16:28:08 70

原创 Linux 一些常用操作

一.设置账号(以张三为例):#此时会自动创建出/home/zhangsan的家目录,如果没有则在命令中使用-museradd zhangsan#此时会自定义指定家目录并生成目录useradd -d /user/zhangsan -m zhangsan以上两种情况会生成用户的同时,生成同名的用户组,如需生成时指定用户组,可以用以下命令,但是该用户组必须已创建存在;useradd -g mygroup zhangsan删除用户#加上-r则一起删除用户家目录userdel..

2021-09-16 14:32:29 415

原创 Linux下找到占用最高的文件夹或文件

1.查询磁盘占用情况df -h2.查看哪个目录占用空间大du -s /* | sort -nr3.查看当前目录下文件夹大小du -h --max-depth=14.如果通过以上方法没有找到问题所在,那么可以使用 lsof | grep deleted 命令,看看是否删除掉的文件仍然被进程占用而没有进行实际删除.找到占用文件很大的进程,停止进程。之后重新启动....

2021-09-09 16:39:36 1192

原创 MySQL之order by 数字或RAND函数(数据顺序随机)

1.后面加上数字SELECT C1,C2,C3 FROM T ORDER BY 1如上,意思是按照所查询的第几个字段进行排序;2.后面加上RAND()

2021-08-31 10:20:19 2140

原创 MySQL中文转拼音相关函数

1.转为全拼 新建数据库:SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for t_base_pinyin-- ----------------------------DROP TABLE IF EXISTS `t_base_pinyin`;CREATE TABLE `t_base_pinyin` ( `code_` int(25.

2021-08-25 11:46:24 562

原创 协程是什么,简单的说

协程底层也是一个线程池来维护执行,只是将原来的多线程执行方法书写方式,更加同步化;将异步任务存储在用户态应用数据结构中,然后由语言来控制执行,并保存其各个的执行栈;用少数的线程执行大量的异步任务,类似golang底层封装了io及网络等操作,碰到block及busy的操作,直接将其挂起执行其他协程任务;与线程池的不同是,线程池只是复用线程,将任务存储在数据结构中,但是碰到io等操作只能将线程挂起,切换到其他线程,无法做到少数线程处理大量io等操作任务;...

2021-08-24 15:09:34 146

转载 JVM实际内存占用超过Xmx的原因,设置Xmx的技巧

前言不知道大家在开发过程中有没有遇到过类似的问题,明明通过JVM参数-Xmx4g设置了最大堆内存大小为4g,但是程序运行一段时间后发现占用的内存明显超过了8g,却并没有出现内存溢出等问题,那是什么东西占用了额外的内存空间呢?一、背景1.通过free -g查看服务器内存使用情况2.通过ps查看java进程项目启动命令为:java -Xmx6g -Xms6g - -XX:+UseG1GC -jar /home/pgcp/pgcp-0.0.1-SNAPSHOT.jar3..

2021-08-22 18:22:08 7198

原创 关于GC的年轻代及老年代

以下摘自一段博客内容:有许多现成的调优经验的介绍。Charlie Hunt写的《Java Performance》一书里有很详细的介绍。中文版就快出了,敬请关注。其中涉及GC调优的部分在过往的JavaOne里也有session介绍过。请搜这个标题:"Step-by-Step: Garbage Collection Tuning in the Java HotSpot™ Virtual Machine"不过那种很具体的现成经验毕竟是别人在他们见过的环境里沉淀下来的,并不一定适用于所有情况。所以怎样的

2021-08-22 18:10:07 197

原创 线上一个字体工具引发的内存泄漏问题

这个是怎么发现的呢,虽然没有引发OOM,但是自从我接手这个项目以后,前期都是改bug,写新需求,最近疫情在家,并且新做的小程序等待审核的期间,发现了个线上问题;发现每隔一段时间,一般是一两周,线上的堆内存就逐渐增大,虽然很缓慢的增长,但是使用jmap -heap命令查看到老年代也是越来越大,以往的gc没有起作用,正常来说内存占用应该是从部署逐步上升到保持一个稳定的水平。1.使用命令获取jvm内存dump:jmap -dump:format=b,file=10339.hprof 10339.

2021-08-15 14:34:49 370

原创 JAVA8之parallelStream()并行流的正确用法

1.因为是并行流,所以所涉及到的数据结构,需要使用线程安全的,比如listByPage.parallelStream().forEach(str-> { //使用线程安全的数据结构 //ConcurrentHashMap //CopyOnWriteArrayList //等等进行操作 });2.默认优先用在CPU密集型计算中,这里有的人就说了,用在IO密集比如HTTP请求啊什么的这种耗时高的操

2021-07-16 11:00:00 5726

原创 ELK继续分析V2EX(我自己搬运我自己)

1.目的:是将v2ex.txt导入到ES中分析,通过kibana呈现;现在Elastic Stack有好多好用的工具,这次用到的是:Filebeat=>采集文本文件=>Logstash=>进行JSON转换=>ES=>存储=>Kibana=>图标呈现2.拉取镜像:这次根据官网使用最新版本7.6.23.创建文件及响应映射文件夹4.快速编排单机模式:docker-compose.ymlversion: '2'services: es:

2021-07-15 13:48:39 217

原创 MySQL之字段为null

这次在公司中改前人留下的代码,是一个已购课程的分页列表,结果出现了显示不全的问题;涉及到的问题其实很简单,但是又是很容易发生的,记录一下:1.我们都知道,MySQL建议我们在创建表字段的时候,默认值尽可能的使用 非null,一个好处是提升查询速度避免无法使用索引优化,另一个就是使用中容易产生不必要的问题;2.当某一个字段,其中有的值为null时,如果我们使用了 != 这种查询条件时,由于null的特殊存在,它是没法参数 != 的计算的,无法返回 true还是false;所以是无法返回结果的,所以查询条

2021-07-15 10:14:54 1337

原创 FastJson参数IgnoreNonFieldGetter引发的问题

先定义一个类: static class JsonTest1 { private String name2; public String getName() { return name2; } public void setName(String name) { this.name2 = name; } }然后写个测试: static class JsonTes

2021-06-22 18:00:00 2047 1

原创 Mybaits导致cpu占用高

1.后台系统,线上cpu占用高,查看发现fullgc频繁;2.经过MemoryAnalyzer分析,发现org.apache.ibatis.scripting.xmltags.DynamicContextContextMap和org.apache.ibatis.builder.SqlSourceBuilderContextMap和org.apache.ibatis.builder.SqlSourceBuilderContextMap和org.apache.ibatis.builder.SqlSourceB

2021-06-16 14:59:29 1006

转载 同步/异步/阻塞/非阻塞/BIO/NIO/AIO

网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来。常规的误区假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据。如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTTP响应,然后继续往下执行。这个时候你问别人,刚刚代码发起的这个请求是不是一个同步请求,对方一定回答是。这是对的,它确实是。但你要问它为什么是呢?对方一定是这样回答的,“因为发起请...

2021-05-25 10:27:00 69

原创 jmockdata 简化测试用例,自动填充对象变量数据

引入依赖: <dependency> <groupId>com.github.jsonzou</groupId> <artifactId>jmockdata</artifactId> <version>${jmockdata.version}</version> </dependency>使用方法:TestUser user = JMockD.

2021-05-20 10:27:53 206

原创 Spring集成Ehcache和Redis,使用@Cache注解方式实现缓存

1.配置Redis//使用jackson序列化value public Jackson2JsonRedisSerializer jackson2JsonRedisSerializer() { Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new Ob.

2021-05-19 10:57:45 272

原创 MySQL进行分区操作(一些限制);

一、查看MySQL是否支持分区1、MySQL5.6以及之前版本show variables like '%partition%';2、MySQL5.7show plugins;二、分区表的分类与限制1、分区表分类RANGE分区:基于属于一个给定连续区间的列值,把多行分配给分区。LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。HASH分区:基于用户定义的表达式的返回值来进行选择的分区,.

2021-05-17 18:09:32 2694

原创 MySQL查询语句执行顺序

例子: select distinct s.id from T t join S s on t.id=s.id where t.name="Yrion" group by t.mobile having count(*)>2 order by s.create_time limit 5;1:from第一步就是选择出from关键词后面跟的表,这也是sql执行的第一步:表示要从数据库中执行哪张表。实例说明:在这个例子中就是首先从数据库中找到表T2:join onj...

2021-05-17 16:00:11 585 1

原创 MySQL存储表情包,终极解决方法

又遇到这个问题,很基础的问题,直接上解决方法;1.修改mysql配置文件my.cnf 编码配置2.修改库编码3.修改表编码4.修改列编码5.修改数据库连接地址characterEncoding=UTF-86.使用数据库连接池则使用初始化执行参数spring.datasource.connectionInitSqls = "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;"...

2021-05-16 18:58:24 145

转载 jstat命令使用(JDK1.8)

概述jstat命令可以查看堆内存各部分的使用量,以及加载类的数量。命令的格式如下:jstat [-命令选项] [vmid] [间隔时间/默认单位是ms毫秒] [查询次数]注意:jdk版本是jdk1.8详述详细格式可以输入jstat -help命令查看:[root@root ~]# jstat -helpUsage: jstat -help|-options jstat - [-t] [-h] [ []]Definitions: An opti

2021-05-14 15:46:38 698

转载 数据库连接池

数据库连接池设置数据库连接池几乎所有的商业应用都有大量数据库访问,通常这些应用会采用数据库连接池。理解为什么需要连接池,连接池的实现原理,系统架构和性能目标对于写出正确、高效的程序很有帮助。这些概念可用于系统运行参数的配置,同时对于理解并发和分布式处理也很有帮助。通用一点来说,一个有经验的工程师面对任何问题都会试着回答三个问题:为什么,是什么,怎么做。了解为什么可以明白问题的真正目的,有助于开放思路和避免无用功。是什么则回答问题的本质概念,是正确答案的保障。怎么做则给出可重复的问题解决思路,使得

2021-05-14 11:40:23 612

原创 线上服务器cpu占用高

线上服务器负载很高,于是常规操作;1.top 获取占用cpu最高进程PID2.top -H -p 17532 获取该进程占用最高的线程TID17536 root 20 0 8806416 3.9g 13400 R 90.5 24.9 36:21.95 java 17539 root 20 0 8806416 3.9g 13...

2021-05-14 10:39:56 135

原创 SQL优化之数据排名

今天看慢SQL日志,发现一个获取用户排名问题的日志如下:SELECT rankNo FROM ( SELECT userId,( @rowNum := @rowNum + 1 ) AS rankNo FROM wf_member,( SELECT ( @rowNum := 0 )) b ORDER BY studyTime DESC ) c WHERE userId = 123该Rank函数方式耗时主要是对全表数据进行了排序,并且该字段没有索引,比较慢;.

2021-05-12 10:58:07 211

原创 Springboot使用Redis集群模式(cluster)宕机自动切换

1.使用Lettuce增加以下配置即可,也可代码方式设置:相比jedis客户端,lettuce是netty的实现方式,支持客户端多线程操作,是线程安全的;spring: redis: lettuce: pool: max-active: 10 max-idle: 10 min-idle: 1 max-wait: -1 cluster: refresh: adapt

2021-05-10 14:23:09 2341

原创 新公司业务,发现一种新的微信授权登录方式....

前言,以前做过微信的小程序开发登录,以及扫码登录方式;简单回顾一下以前的方式吧(如果没记错的情况下):(1)小程序:通过前端wx.login()可以直接获取到code,然后请求后端获取appid或者进行登录等,比较简单;(2)扫码登录这个比较麻烦点了,其实理解了其中的oauth协议的code方式,能拿到code,也就跟小程序那个一样了.其中不同的就是前端的code是通过指定重定向地址通过传参过来的;扫码也是一样,前端是vue写的,当时我给前端的解决方案是,当然首先在公众平台指定白名单路径

2021-04-26 15:17:14 89

原创 最近从docker-compose切换到了rancher,真好玩...

以前是很早在公司测试环境玩的是jekins+docker-compose这一套单机测试,推正式代码到gitlab直接自动构建发布部署;以前就听说过rancher,最近玩了玩简直不要太简单入手;现在可以jekins+rancher,改成手动推送到私建镜像仓库后,直接在rancher发布,并支持扩容;有时间梳理一下过程;...

2021-04-13 14:42:09 309

原创 面试小记之海量订单

今天去面试了,问到关于每天入库百万订单的问题,其中关于存储来说,暂时分析如下:面试官说他们目前一年有几百亿的订单量,当然这个是怎么统计的先不管;如果使用mysql无疑对数据库性能是一个挑战,可能用到的技术就是各种分库分表一类的,但是面对这么海量的数据,我想还是存放在分布式数据库比较合适,例如使用hbase来存储订单;那么当前的解决方案是这样:1)mysql只负责充当一个支持强事务的中转数据库;负责下单到完成订单整个流程的参与者,依靠事务特性保证数据的一致性;2)将历史订单或者是已经不需要

2021-03-09 14:22:17 229

原创 高可用架构之keepalived

一般的小公司,单体项目为了避免单体故障,可以直接购买阿里云的slb服务,实现负载均衡高可用.其背后原理其实新增了一套负载均衡服务器,然后分发到后端各个服务器上;(四层协议分发使用lvs,七层使用自己封装的nginx);但是此时负载均衡如果不设计高可用,单点故障就依然存在,所以用上了keepalived,使用漂移虚拟IP的方式,来避免;(其中相同的vip在不同主机中是主从的存在,使用权重值来划分)网上大多是两种方案:主从(其中一台机器歇着)和主主(同时可以使用);主从方式:A和B机器使用相

2021-02-25 18:28:24 105

空空如也

空空如也

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

TA关注的人

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