- 博客(69)
- 资源 (13)
- 收藏
- 关注
原创 SpringCloud组件Ribbon的IRule的问题排查
SpringCloud组件Ribbon的IRule负载均衡策略实现中遇到的问题以及排查
2023-10-10 16:01:24 1297 1
原创 SpringBoot之Conditional自动配置类是否加载调试工具类
基于应用环境中的变量是否匹配或者类是否加载来决定该配置类是否被加载,或者再引入一些第三方star的时候,不确定某些配置类是否被加载,但是又不是特别好调试。基于此写了一个判断该配置是否加载的工具类,如果没有被加载,则会打印其未被加载的原因。这样你在需要加载某些配置类的时候,能够清楚知道没有被加载的原因。
2022-11-17 10:34:01 637 1
原创 实战之ClassLoader动态加载插件无法回收引用排查
类加载器引用无法回收的问题实战排查,通过Jprofile对引用进行追踪和排查思路。
2021-12-28 16:05:19 1153 6
原创 基于SpringBoot版本的Java注解驱动页面增删改查的渲染的开源应用
基于Ruoyi脚手架、AVue等框架集成而来,非常适合低代码开发,秩序定义Java注解来告知引擎渲染方式,集成大部分组件。
2021-12-02 14:40:20 155
原创 实战spring-boot-starter-websocket之断网心跳续期实践
业务中需要应用到Websocket长连接进行数据传输,由于服务使用的是Zuul1.0版本,对ws协议支持较弱,后续尝试使用了spring-boot-starter-websocket来完成的。关于怎么集成的话网上有非常多的文章了,我就不多费口舌了。我们目前实现的功能是可以通过WebSocket调用接口发送埋点,另外还需要监听用户离开的事件为这个埋点画上一个终止访问时间。目前测试下场景有:小程序进程杀死主动退出后台挂起【会认为退出,重新唤醒则连接】横跨页面断线重连直接断网前4点触发了任意操作
2021-11-30 14:46:55 2851 3
原创 jvm-sandbox实战之windows调试
由于jvm-sandbox目前只提供了shell脚本来进行运行安装部署,对于mac电脑比较方便,但是windows的方式的话比较痛苦,走了很多弯路,慢慢深入了解之后发现windows的方式也是可以去做的。1. 下载安装包细看sandbox提供的一些脚本可以发现,其实脚本里的内容就是想把本地的项目结构打包成:├── bin│ ├── attach-pid.sh│ ├── sandbox.sh│ └── z-demo.sh├── cfg│ ├── repeater-config.
2021-11-15 11:06:43 1285 1
原创 基于jvm-sandbox IDEA Debug 调试
还是以官方的案例来串联这个流程:先编写一个有问题的类,并启动通过agent暴露一个端口,通过IDEA来监听这个端口。然后在启动jvm-sandbox的插件,通过端口回调给IDEA监听进行源码调试2.1 编写dmeo/** * 报时的钟 */public class Clock { // 日期格式化 private final java.text.SimpleDateFormat clockDateFormat = new jav
2021-11-10 11:05:08 1108
原创 jvm-sandbox实战之编写简单案例
还是以官方的案例来串联这个流程:先编写一个有问题的类,并启动通过agent暴露一个端口,通过IDEA来监听这个端口。然后在启动jvm-sandbox的插件,通过端口回调给IDEA监听进行源码调试2.1 编写dmeo/** * 报时的钟 */public class Clock { // 日期格式化 private final java.text.SimpleDateFormat clockDateFormat = new jav
2021-11-08 10:27:43 1154
原创 实战Spring之通用自定义注解处理器
实战Spring之注解处理器需求场景有时候我们希望定义一个特定的注解,被注解打标过的方法能够被代理,完成一些特定的操作。当然我们可以通过Spring的切面去完成比如:@Around(value = "execution(* com.xxx.xxx.xxx.dao..*(..))")但这种方式感觉还是太麻烦了,我们希望像事务注解@Transaction 一样,打上标记就会被代理,不需要定义各种表达式切面。另外简单点、通用点、好理解一点。。。另外简单点、通用点、好理解一点。。。另外简单点、通用
2021-09-28 11:10:54 708
原创 实战Spring之解释器模式对应的Expression表达式
推荐语雀观看视角,让文章体验更好推荐语雀观看视角,让文章体验更好推荐语雀观看视角,让文章体验更好应对及其复杂的表达式计算,善于对语法进行分析拆解重组。当我们需要实现一个加减乘除的计算方法之后,你会如何去做?比如 : **3+2*6+5-2*2-1-1-1-1-1-1-1-1+2/2=?**乘法和除法是需要先计算结果的。加法和减法需要从左到右依次处理最后得到结果我们先来看下Spring中的解释器使用方式:import org.junit.Test;import org.springf
2021-09-14 15:20:48 411
原创 排列组合:将实体的属性设置重组
需求描述:根据给定的每个字段的所有值进行排列组合得到一个唯一条件的实体对象。比如:Model中有A\B\C三个字段:A字段可能的值是1,2,3B字段可能的值是4,5,6C字段可能的值是1,2,5这个时候需要根据ABC三个字段的值进行重组,得到一个唯一属性的Model。比如:Model1 : A -> 1,B->4,C->1Model2 : A -> 1,B->4,C->2Model3 : A -> 1,B->4,C->5Mo
2021-07-28 17:11:24 175
原创 SpringBoot小技巧之启动加速
相信大家使用Spring的时候每次重启都是一个很头疼的问题,随着应用规模越来越大,类越来越多,启动的速度非常慢,下面分享一个通过懒加载的方式让应用加速启动。Started UserServiceApplication in 38.37 seconds (JVM running for 40.383)我们目前的应用启动可能要花费接近40秒的样子,每次调试都很头疼,当然可以安装一些Jrebel 的方式热部署,但那个插件有很多乱七八糟的问题。原理是将所有的bean都设置为Lazy模式,当需要用到的时候,
2021-06-24 16:59:13 1182
原创 Arthas排查命令实时操作程序代码的总结分享
日常开发中,总会遇到一些莫名其妙的问题,这些问题在服务器上出现的概率可能很低,本地环境难以复现,这个时候阿里开源的[Arthas](https://github.com/alibaba/arthas)就派上用场了,可以基于实时运行的应用进行排查,不必每次打日志,重启等掉头发的操作;
2021-06-15 14:57:22 1228
原创 基于SpringBoot实现简易版登录功能
通常我们做一个后台系统,不可避免的需要做一些安全性的拦截,但是又不想做的太过麻烦,只要能够通过帐号密码登录基本上就差不多了,还可以拓展一些特定密钥免登录小功能。今天给大家示范一个基于SpringBoot的实现的基本步骤:功能:登录登出token免登录构建基础配置项1. 注册拦截器@Configuration@EnableWebMvc@ComponentScan(basePackages = {"扫描你的controller地址"})public class MvcConfigBe
2021-06-08 11:11:33 520 3
原创 开源点评CAT使用问题经验分享
目前公司应用美团CAT的时候遇到的一些问题总结并且分享一下,有的是配置问题,有的是使用问题,给大家列出来给遇到问题的小伙伴一些排查的思路.问题列表:1. Sorry, the message is not there. It could be missing or archived.之前写的排查文章,不过版本升级已经修复了。可能和客户端的本地队列满了有关系,这里可以从CAT的心跳[hearbeat]报表里面去查看,主要指标名称是: client-send-queue Info这里需要注意的是
2021-05-31 11:46:36 1109
原创 Mysql隔离级别之MVCC的ReadView的理解
Mysql的隔离级别分为: 读未提交、读已提交、可重复读、串行读比较常用的两种分别是读已提交、可重复读,那么Mysql是如何保证多个事务读取一条数据的隔离性的?undo Log当我们读取一条被其他事务变更的数据时,会在undo Log中产生一条变更前的日志.这个日志可以专门用于回滚。我们大概来看一下这个日志的大概结构:前面三个字段属于变更前的,另外:trx_id : 代表是哪个事务编号修改的。需要注意的是该编号是严格按照递增顺序产生的。比如1、2、3、4、5roll_pointer.
2021-05-27 19:08:18 2993 8
原创 阿里云Mongodb出现异常Prematurely reached end of stream原因
最近一个业务上线的时候涉及到mongodb,这个服务占用了7台服务器。上线的时候会有一小段时间发生com.mongodb.MongoSocketReadException: Prematurely reached end of stream但是这个异常只有几个服务器有,几个服务器是好的。(很重要的线索)一时间没有思路,网上说是连接空闲时间太长被回收了客户端没有感知。单纯的我差点就信了个邪。无意间发现阿里云文档有描述过该问题:阿里云DataWorks文档瞬间想起了是不是和白名单有关系,遂逐个
2021-04-22 16:44:28 1768
原创 SpringBoot动态过滤自动配置的类
有时候我们引入SpringBoot的Start组件的时候,默认就根据SPI机制加载了相应的自动配置的类;比如通过META-INF下的spring.factories,来读取你需要默认引入的自动配置的类;但是有时候你不想要这些功能,简单一点来说就是在启动类中过滤掉该类@SpringBootApplication(exclude = {KafkaConsumerConfig.class})这样启动的时候容器就会排除该类。但是有时候要求可能会稍微复杂一点,比如我需要通过一个开关配置或者自定义规则来决定
2021-04-21 15:47:05 598
原创 Spring面试题之循环依赖的理解
最近面试的时候发现很多人会问Spring是如何解决循环依赖的,虽然知道是通过三级缓存去解决的,但是也仅仅只是知其然,不知其所以然,抱着学习的心态还是好好捋一捋:三级缓存是如何解决循环依赖的?为什么是三级缓存?二级缓存行不行?有什么好的方式可以避免构建IOC的时候产生循环依赖?循环依赖的场景这个场景其实分为很多种:简单一点场景: A -> B -> A复杂一点的场景:A 依赖 B,CB依赖AC依赖A在我们业务逻辑越来越复杂的时候,难免因为层级过深导致这种场景出现,但是
2021-03-29 11:23:54 289
原创 java中的CAS原子性操作
概念CAS(compare and swap),比较和交换,是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性以及中断的不可预知性产生的数据不一致问题。 该操作通过将内存中的值与指定数据进行比较,当数值一样时将内存中的数据替换为新的值现代的大多数CPU都实现了CAS,它是一种无锁(lock-free),且非阻塞的一种算法,保持数据的一致性1.java中的原子性操作1.1java如何实现原子性操作的在java中通过锁和循环cas
2021-03-20 17:05:47 385
原创 IDEA 空间不足导致无法打开排查思路
IDEA 无法打开之后的排查思路最近电脑重装过,C盘进行格式化了,导致工具装好之后,第二天打不开IDEA了,直接弹出一个MetaspaceSize溢出了。反正就是无法进入主界面,整个一片黑。这个时候我们第一步应该做什么?1. 查看错误日志这个是很关键的,毕竟光盯着屏幕发呆会显得很呆~错误日志应该从哪里去看呢?一般从IDEA的安装目录中是看不到的,我的WIN10是在:C:\Users\用户文件夹\AppData\Local\JetBrains\IntelliJIdea2020.2\log你如
2021-03-12 14:18:08 496
原创 HashMap之Hash解读
HashMap基础源码阅读最近又看了一下hashMap的源码,发现了一些之前没有关注到的内容,比如Hash为什么要这么设计?后续的很多功能都会基于这个Hash算法进行延伸,比如扩容等等,今天重新再来认识一遍hash的算法。首先展示代码:// 构建hashstatic final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}//
2021-02-28 13:19:24 420 1
原创 基于模版方法模式优化if、else的思路
平常在公司看到很多业务逻辑的代码可能就是if/else各种判断,虽然也有一些设计模式能够解决一些问题,但是感觉都不是特别好用。刚好这次有个场景比较符合这个命题来聊一下如何去实践的.先说一下场景吧:目前有些场景需要基于BinLog的变化去做一些业务变更操作,比如有一些表字段中冗余了各种名称,希望这些源表发生变更的时候,能够顺带更新冗余字段表中的值。随着一些表的数据越来越大,一些表关联让SQL越来越慢,目前是希望压缩数据,所以数据发生变化了需要实时通知某些业务。还有一些最终一致性的业务基于阿里云
2020-12-11 19:45:11 264 1
原创 纯干货:死循环线程居然不执行了?
最近弄了一个新的应用,专门用来收集一些应用数据作参考以及问题排查定位的,但是上线一段时间之后出现了一个非常非常诡异的问题。问题描述收集器采用异步化,启用了一个独立的线程专门收集各个服务发送过来的数据进行消费。刚开始上线的时候数据能够按时进来,但是一个诡异的事情发生了,每隔一段时间该线程不消费了。这是大概代码:while (true) { try { // 数据消费逻辑 -> 插入数据库 } catch (Throwable e) { logger
2020-11-30 15:50:38 1005 2
原创 基于阿里云DTS数据订阅binlog应用实践功能开发
基于阿里云的DTS封装最近公司需要应用订阅阿里云RDS相关的binlog,基于阿里云提供的案例subscribe_exampleale演化而来,重构成了SpringBoot、并且升级了相应的jar包,避免了很多版本上面带来的坑,还新增集成了新的客户端kafka、后续会考虑redis等等。另外还将binlog进行统一格式化封装。后续还会加强的功能点:消费位点的更新(目前位点是基于kafka同步,可以做到容灾切换)消息流转的监控消费情况延迟丢失重复消费业务数据处理情况表操作类
2020-10-16 16:24:55 1563
原创 纯干货:内存溢出通过Jprofile排查思路以及实践总结
嘀嘀嘀~新鲜出炉的线上bug已到账,请注意查收!!!最近忙的头都抬不起来,都没有机会和bug好好说说话;这不线上的bug已经及时赶到,还是内存溢出的。头疼的一批,业务都还没搞完,线上的调用第三方的服务惨遭毒手。从服务的log日志上来看是出现了内存溢出,首先分析该服务上一次发布的内容,嗯!和自己有关(MMP~~)。但是没有引入什么大组件,仅仅只是新接入了几个访问第三方的接口,按照常理来说应该不会出问题。好了,既然是内存溢出,那肯定是有大对象出现,这时候看看服务器CPU,1000% 好家伙~通过.
2020-09-25 18:15:33 1988 5
原创 Redis应用实践之资源抢占的思考
Redis应用实践之资源抢占的思考场景描述实现思路抢占过程代码片段总结场景描述如果在某个应用中写了一个轮训的定时任务,每30秒执行一次。在集群模式下(假设3台),就相当于3台应用都会执行这个定时任务,这个时候问题就来了:如何保证只有一个节点获得执行权限,其他节点处于备胎状态。一旦获得执行权限的节点挂掉了,从其他备胎节点挑选一个负责执行。接下来带着这些思考如何通过redis去实现实现思路抢占过程通过setnx来抢占该key的值。k = key ,value = ip_时间戳如
2020-08-22 12:03:42 378
原创 Zuul网关优化实践之token校验
公司最近要上线一个活动功能,由于后端这边的安全等级非常低,用户编号都是通过接口明文传输,稍微懂点技术的都可以利用请求监控拿到请求的URL和参数,由于之前都是赶业务需求,导致后端整体安全性偏低了,所以趁着这次redis也在应用中,所以决定在zuul中加入一个token授权功能,来缓解一下别人非法模拟其他用户编号来请求刷数据。利用redis + token来实现单点登录实现思路Filterzuul一共有: pre、route、post、error 四种类型的拦截器,分别对应的时机为开始前、执行中、执行后
2020-08-20 18:38:59 1446
原创 Zuul网关优化实践之限流
为了防止网关过量负载请求,很多时候会要根据实际的情况对接口进行限流。zuul本身是没有提供限流的功能的,但是你也可以根据它提供的filter自己去做限流,当然也可以使用人家已经写好了的限流组件去集成,因为资源有限,自研成本会很高,所以还是采取集成别人的功能来做,然后根据看一下人家的代码和自身业务做结合去达到最终的目的。需求功能全局的限流特定URL限流、希望是可配置。有些业务复杂,耗费资源的需要单独配置限流规则。可以做个类似于防重提交的功能比如1秒内某个接口只能点击一次。开源限流
2020-08-17 11:55:33 1274 3
原创 Mysql的备份和恢复与迁移
Mysql的备份和恢复参考文章xtrabackup安装# 下载文件wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm# 安装文件yum install -y percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm # 查看是
2020-07-08 13:54:59 278
原创 Mysql 不同实例的表结构字段对比实践
两台实例如果需要进行表结构对比时,一旦涉及的表过多或者字段过多,对比起来非常麻烦。这时候沿用Mysql SQL问题mysql Illegal mix of collations for operation UNION 排查解决思路来完成这部分的对比。这里拿表字段举例先从主库information_schema库中将表COLUMNS 导入到需要对比的库中。这里需要注意导出成sql文件的时候,记得将TEMPORARY这个关键字去掉,这个代表临时表的意思。临时表会导致看不到任何东西。这个时候对比库
2020-06-23 16:44:04 385
原创 Mysql SQL问题mysql Illegal mix of collations for operation UNION 排查解决思路
最近在做数据库的迁移的时候发现一个查询SQL执行不了,发生异常:mysql Illegal mix of collations for operation 'UNION’头挺大,一番搜索发现是表字段的字符集的问题。但是联想到我们出错的这个SQL :select count(1) from (select ns.name,ns.sex,pa.mobile,pa.dynamicList,pa.createdList,pa.created dynamicTime,s.regist_time,s.sou
2020-06-19 17:13:32 1469
原创 SpringJdbcTemplate 批量新增返回自增编号功能
因为业务上有些功能是希望批量新增的数据能够返回对应的自增主键,单条的JdbcTemplate实现很简单,但是批量的话,可能需要稍微改造一点点。因为我们的框架内部是在jdbctemplate上封装了一点点,所以就这一部分上加入了通用的批量添加功能,和批量修改隔离开。/*** 批量返回新增结果** @param sql 要执行的SQL* @param parameterSource 参数对象* @return* @throws SQLException*/priva
2020-05-13 14:59:04 620 2
原创 Spring好用的功能点:ApplicationEvent监听器
Spring整个体系包含着很多有意思的功能点,有可能你还不知道,自己手动去实现一套,不仅麻烦而且耗费时间,可以多了解了解探索发现Spring很多已经弄好的功能点。ApplicationListener做什么?用来监听所修饰的数据,一旦有该类型的数据推送过来,立马被监听到,并且做自己的业务处理有什么用?它有点类似MQ的推送订阅。比如我们有个主流程登录完了之后可能需要发某个短信。我们可以...
2020-04-22 15:26:45 594
原创 纯干货:大对象导致FullGC频繁的原因及实践思路
今天在检查线上环境的时候,发现了在2分钟内出现了2次FullGC。虽然对线上功能影响不是很大,但还是想一探究竟。线上监控得到的信息:可以看到从短时间内有了2次GC,从13次直接飙到15次。然后看了下老年代的堆情况:可以看到这两次分别从620M直接下降到了400M然后又下降到了200M的样子。脑海中的直觉应该是出现了大对象的感觉,因为老年代的堆是650M。达到620M触发GC,可能是...
2020-03-21 15:46:16 5709 1
原创 纯干货:线上出现fullGC次数很多的排查思路以及实践总结
最近线上发布了一个版本,导致full gc次数忽然就上去了,虽然对线上业务造成的影响还不是很大,但是为了以防万一还是对这个问题做了相关排查。GC命令排查一开始还是从堆的变化开始:# 查看每秒的堆发生的变化以及gc的次数jstat -gcutil pid 1000相关参数:s0 : Heap上的 Survivor space 0 区已使用空间的百分比s1 : Heap上的 S...
2020-03-16 20:47:26 4507 3
原创 Java读写锁ReentrantReadWriteLock之锁降级案例
之前了解读写锁的时候,只知道读读共享,读写互斥。当线程先获取到写锁,然后再去获取读锁时,接着再释放写锁。这个过程叫做锁降级。如果当前线程先获取读锁,然后再去获取写锁,这个时候会出现死锁的情况。这个时候小脑袋瓜就开始嗡嗡作响了。锁为什么能够降级,却不能够升级?在什么场景下会出现锁降级的情况?问题1 : 锁为什么能够降级,却不能够升级?首先读锁可以被多个线程持有,但是写锁同一时刻只能...
2020-03-09 19:28:18 1019 3
下载安装MinGW-w64详细步骤(c/c++的编译器gcc的windows版,win10真实可用)免安装版本
2023-10-25
percona-xtrabackup-24-2.4.9-1.el7.x86_64.zip
2020-07-08
MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip
2020-03-21
nginx-rtmp-win32-master.zip 基于流服务传输的nginx
2017-01-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人