<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weixin_39195030的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_39195030</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_39195030]]></copyright><item><title><![CDATA[项目敏感词脱敏如何实现]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/141157504</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/141157504</guid><author>weixin_39195030</author><pubDate>Tue, 13 Aug 2024 10:33:02 +0800</pubDate><description><![CDATA[因为我的项目是基于 Spring Boot 开发的，因此可以利用 Spring Boot 自带的 Jackson 自定义序列化实现，在 JSON 进行序列化渲染给前端时，进行脱敏。脱敏工具类支持用户 ID、中文姓名、身份证号、座机号、手机号、电子邮件、银行卡号等脱敏数据类型，基本覆盖了常见的敏感信息。如果使用的序列化是 Fastjson 而不是默认的 Jackson，你可以创建一个自定义的。这里以最常用的替换为例进行介绍，这也是我的项目用到的方法。脱敏工具类的脱敏规则是隐藏掉信息中的一部分关键信息用。]]></description><category></category></item><item><title><![CDATA[Springboot整合ShardingJdbc实现分库分表方案]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/140429674</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/140429674</guid><author>weixin_39195030</author><pubDate>Mon, 15 Jul 2024 10:22:37 +0800</pubDate><description><![CDATA[shardingsphere-jdbc-core-spring-boot-starter 5.2.1中使用snakeyaml版本1.33 spring-boot-starter-web使用snakeyaml版本2.2 2.2中删除了Representer和SafeRepresenter的无参构造器，因此导致了该异常。关于搭建过程中遇到的问题（shardingsphere-jdbc-core-spring-boot-starter 5.2.1）2、在每个数据库各创建三个分表。3、创建mapper。]]></description><category></category></item><item><title><![CDATA[Redis只能做缓存？太out了！]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/137454164</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/137454164</guid><author>weixin_39195030</author><pubDate>Sun, 07 Apr 2024 10:14:59 +0800</pubDate><description><![CDATA[大多数业务系统，跑在redis上，这是很多一直使用MySQL做业务系统的同学所不能想象的。看完了上面的介绍，相信你能够对redis能够实现的存储功能有个大体的了解。打开你的社交app、游戏app、视频app，看一下它们的功能，能够涵盖多少呢？我这里要强调的是，某些数据，并不是一定要落地到RDBMS才算安全，它们并不是一个强需求。那既然redis这么厉害，为什么还要有mysql、tidb这样的存储呢？关键还在于业务属性上。]]></description><category></category></item><item><title><![CDATA[Spring Boot + Lua = 王炸！]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/137248124</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/137248124</guid><author>weixin_39195030</author><pubDate>Mon, 01 Apr 2024 21:55:25 +0800</pubDate><description><![CDATA[springboot嵌入lua脚本，实现程序的高性能]]></description><category></category></item><item><title><![CDATA[记一次生产事故排查]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/135455084</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/135455084</guid><author>weixin_39195030</author><pubDate>Mon, 08 Jan 2024 13:59:47 +0800</pubDate><description><![CDATA[dubbo负载问题导致的线上异常]]></description><category></category></item><item><title><![CDATA[关于log4j的那些坑]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/135281033</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/135281033</guid><author>weixin_39195030</author><pubDate>Fri, 29 Dec 2023 01:14:49 +0800</pubDate><description><![CDATA[另发现，工程日志路径打印异常问题，表现为打印日志路径及文件名称异常，后详细排查了target目录，发现是由于配置文件中占位符未替换导致的，由于工程基于profile，因此我们通过修改pom文件中对应profile的build情况便可解决。至此，我们便弄明白当工程必须存在两个log4j配置文件时，文件的加载情况如何。背景：工程中同时存在log4j.xml&log4j2.xml。（为何这么加载，暂且留个疑问，等下回再去剖析，感觉略深）此时工程实际使用的日志文件为log4j.xml。经验证，问题至此已全部解决。]]></description><category></category></item><item><title><![CDATA[SpringBoot Admin升级boot等组件版本后无法监控微服务]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/126044833</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/126044833</guid><author>weixin_39195030</author><pubDate>Fri, 29 Jul 2022 10:04:11 +0800</pubDate><description><![CDATA[spring-cloud-consul在v3.0.0（不包含M1等版本）及之上，meta数据获取不再兼容tags，因此使用该版本的cloud在于admin集成时，若监控服务存在context-path或者自定义的健康检查路径等，由于admin定义meata属性key均包含"."字符，因此大概率均会出现监控异常问题（推测结论，未完整验证所有版本）。到此，该问题排查基本结束，定义为spring-boot-admin与spring-cloud-consul版本兼容性问题。.....................]]></description><category></category></item><item><title><![CDATA[RocketMq closeChannel: close the connection to remote address[] 排查记录]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/125977702</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/125977702</guid><author>weixin_39195030</author><pubDate>Mon, 25 Jul 2022 17:06:34 +0800</pubDate><description><![CDATA[由于对netty了解并不太深刻，且name-server服务正常，目前没有分析出是何种情况触发了channel的close事件，后续将在进一步完善netty及rocketmqnetty等相关知识后再做进一步的分析。关于版本问题，由于服务client使用4.7.1版本，nameserver使用4.5.0版本，尝试降低本地版本，日志问题依然存在。由于该日志不影响服务及业务，暂时我们可以通过屏蔽该日志去解决，您可在您的log4j.xml中新增如下配置。close()方法，因此会触发上述日志的打印。...]]></description><category></category></item><item><title><![CDATA[Consul API接口详解]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/124734139</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/124734139</guid><author>weixin_39195030</author><pubDate>Thu, 12 May 2022 16:27:41 +0800</pubDate><description><![CDATA[consul的主要接口是RESTful HTTP API，该API可以用来增删查改nodes、services、checks、configguration。所有的endpoints主要分为以下类别：








	kv - Key/Value存储
	
	
	agent - Agent控制
	
	
	catalog - 管理nodes和services
	
	
	health - 管理健康监测
	
	
	session - Session操作
	
	
	acl - ACL创建和管理
	
	
	event ]]></description><category></category></item><item><title><![CDATA[一次线上MySQL分页事故，搞了半夜...]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/124466731</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/124466731</guid><author>weixin_39195030</author><pubDate>Thu, 28 Apr 2022 09:43:05 +0800</pubDate><description><![CDATA[目录


	背景
	
	
	分析
	
	
	数据模拟
	
	
	测试
	
	
	解决方案
	
	
	小结
	


今天给大家分享个生产事故，一个由于 MySQL 分页导致的线上事故，事情是这样的～



背景



一天晚上 10 点半，下班后愉快的坐在在回家的地铁上，心里想着周末的生活怎么安排。



突然电话响了起来，一看是我们的一个运维同学，顿时紧张了起来，本周的版本已经发布过了，这时候打电话一般来说是线上出问题了。



果然，沟通的情况是线上的一个查询数据的接口被疯狂的失去理智般的调用，这个操作直]]></description><category></category></item><item><title><![CDATA[关于MYSQL group by语句查询优化]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/121798976</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/121798976</guid><author>weixin_39195030</author><pubDate>Wed, 08 Dec 2021 19:25:37 +0800</pubDate><description><![CDATA[1、如果对 group by 语句的结果没有排序要求，要在语句后面加 order by null；

2、尽量让 group by 过程用上表的索引，确认方法是 explain 结果里没有 Using temporary 和 Using filesort；

3、如果 group by 需要统计的数据量不大，尽量只使用内存临时表；也可以通过适当调大 tmp_table_size 参数，来避免用到磁盘临时表；

4、如果数据量实在太大，使用 SQL_BIG_RESULT 这个提示，来告诉优化器直接使用排序算法]]></description><category></category></item><item><title><![CDATA[别再用 kill -9 了，这才是微服务上下线的正确姿势！]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/119246785</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/119246785</guid><author>weixin_39195030</author><pubDate>Fri, 30 Jul 2021 14:22:10 +0800</pubDate><description><![CDATA[对于微服务来说，服务的优雅上下线是必要的。

就上线来说，如果组件或者容器没有启动成功，就不应该对外暴露服务，对于下线来说，如果机器已经停机了，就应该保证服务已下线，如此可避免上游流量进入不健康的机器。

优雅下线

基础下线（Spring/SpringBoot/内置容器）

首先JVM本身是支持通过shutdownHook的方式优雅停机的。


Runtime.getRuntime().addShutdownHook(newThread(){
@Override
publicvoid...]]></description><category></category></item><item><title><![CDATA[慢SQL治理分享]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/119245821</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/119245821</guid><author>weixin_39195030</author><pubDate>Fri, 30 Jul 2021 13:44:20 +0800</pubDate><description><![CDATA[一 为什么要做这个事情



1 什么是慢SQL？



这里指的是MySQL慢查询，具体指运行时间超过long_query_time值的SQL。



我们常听常见的MySQL中有二进制日志binlog、中继日志relaylog、重做回滚日志redolog、undolog等。针对慢查询，还有一种慢查询日志slowlog，用来记录在MySQL中响应时间超过阀值的语句。



大家不要被慢查询这个名字误导，以为慢查询日志只会记录select语句，其实也会记录执行时间超过了long_query_time设定..]]></description><category></category></item><item><title><![CDATA[消息幂等（去重）通用解决方案，真顶！]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118992733</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118992733</guid><author>weixin_39195030</author><pubDate>Thu, 22 Jul 2021 10:17:00 +0800</pubDate><description><![CDATA[消息中间件是分布式系统常用的组件，无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为，消息中间件是一个可靠的组件——这里所谓的可靠是指，只要我把消息成功投递到了消息中间件，消息就不会丢失，即消息肯定会至少保证消息能被消费者成功消费一次，这是消息中间件最基本的特性之一，也就是我们常说的“AT LEAST ONCE”，即消息至少会被“成功消费一遍”。

举个例子，一个消息M发送到了消息中间件，消息投递到了消费程序A，A接受到了消息，然后进行消费，但在消费到一半的时候程序重启了，这时候这个消息并没有标记]]></description><category></category></item><item><title><![CDATA[阿里终面：为什么 SSD 不能当做内存用？]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118784638</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118784638</guid><author>weixin_39195030</author><pubDate>Fri, 16 Jul 2021 09:17:45 +0800</pubDate><description><![CDATA[在回答这个问题之前我们先去某东上逛一圈。

输入“SSD”随便找到销量比较高的一项，在商品详情页上有这样的描述：





注意图片上显示的规格，读速高达 3.5GB/s，真实情况下稍差点（尤其是随机读写），但也不会很离谱，可以看到，这个速度是非常快的，基本秒传高清电影的水平。

那么问题来了，既然现在的 SSD 读取速度这么快，那么可以把 SSD 当做内存来用吗？

要想回答这个问题，我们先来看看内存的速度。



速度差异

当前采用第四代 DDR 技术的内存，其带宽基本上能到 20GB - 30GB ]]></description><category></category></item><item><title><![CDATA[Gateway网关使用不规范，同事加班泪两行~]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118726209</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118726209</guid><author>weixin_39195030</author><pubDate>Wed, 14 Jul 2021 14:05:42 +0800</pubDate><description><![CDATA[Spring cloud gateway是替代zuul的网关产品，基于Spring 5、Spring boot 2.0以上、Reactor, 提供任意的路由匹配和断言、过滤功能。

笔者公司之前有系统也使用了Spring cloud gateway做为后台应用访问的网关，采用的版本信息为：

组件
			版本
			其他
		spring boot
			2.1.7.RELEASE
			
		spring cloud
			Greenwich.SR2
			
		spring cloud gateway
]]></description><category></category></item><item><title><![CDATA[Java工程定时执行Full GC（每隔1h）]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118553127</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118553127</guid><author>weixin_39195030</author><pubDate>Wed, 07 Jul 2021 18:12:12 +0800</pubDate><description><![CDATA[运维侧反馈阿里云ARMS监控显示服务频繁执行Full GC，且执行曲线很规律。查询gc.log日志文件显示Full GC有规律的每1h执行一次，且通过System.gc()显示触发。

通过开发环境验证此问题。

1、安装arthas查询是谁调用了System.gc

https://github.com/alibaba/arthas/issues/20



可以看到该方法是由sun.misc.GC创建GC Daemon线程调用。



执行jstack pid 也可以佐证。

（关于这块目前仍然不是很清]]></description><category></category></item><item><title><![CDATA[有没有字节工牌，Java并发安全的根本原因都得懂]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118144916</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118144916</guid><author>weixin_39195030</author><pubDate>Wed, 23 Jun 2021 10:06:05 +0800</pubDate><description><![CDATA[引言

并发问题一直是Java领域的高阶问题，要想掌握它不仅需要了解JVM的内存模型，更需要对计算机底层硬件有深入的理解。本文主要探讨下Java并发安全问题的根源所在，通过对根源问题对探究，加深对于Java并发安全的理解。



并发安全问题分析



我们都知道程序猿编写的代码都是跑在具体的硬件架构上面的，只是目前的高级语言系统屏蔽了很多底层硬件细节。但是如果想要对于并发问题有深入的理解，还是需要对底层计算机硬件系统的细节有更多的了解。因此要想分析并发安全问题的根本原因，我们需要从问题现象出发，刨根问..]]></description><category></category></item><item><title><![CDATA[一次 Nacos 的踩坑记录！]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118144462</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118144462</guid><author>weixin_39195030</author><pubDate>Wed, 23 Jun 2021 09:55:17 +0800</pubDate><description><![CDATA[转载自微信公众号《程序猿DD》

问题发现

就在这周，我接到 MSE Nacos 用户的反馈，说线上 Nacos 不可用，服务都下线了，日志里面也是一堆报错，我下意识以为线上炸了，赶紧上线排查。本文主要记录这次问题的排查过程，以及解决方案。

首先看用户反馈的报错，日志如下：



并且用户反馈业务日志也出现了大量的服务地址找不到的报错，说明 Nacos 服务都下线了。

我立刻查看了服务端的监控，发现用户的 MSE Nacos 集群并无异常，cpu/内存等指标有下降，并没有异常行为，排除了服务端异常的可]]></description><category></category></item><item><title><![CDATA[记一次因 Redis 使用不当导致应用卡死 bug 的排查及解决！]]></title><link>https://blog.youkuaiyun.com/weixin_39195030/article/details/118143959</link><guid>https://blog.youkuaiyun.com/weixin_39195030/article/details/118143959</guid><author>weixin_39195030</author><pubDate>Wed, 23 Jun 2021 09:49:52 +0800</pubDate><description><![CDATA[文章转载自微信公众号《程序猿DD》

首先说下问题现象：内网sandbox环境API持续1周出现应用卡死，所有api无响应现象
刚开始当测试抱怨环境响应慢的时候 ，我们重启一下应用，应用恢复正常，于是没做处理。
但是后来问题出现频率越来越频繁，越来越多的同事开始抱怨，于是感觉代码可能有问题，开始排查。
首先发现开发的本地ide没有发现问题，应用卡死时候数据库，redis都正常，并且无特殊错误日志。开始怀疑是sandbox环境机器问题（测试环境本身就很脆!_!）
于是ssh上了服务器 执行以下命令
top
.]]></description><category></category></item></channel></rss>