自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 系统稳定性治理

【代码】系统稳定性治理。

2025-06-23 20:54:58 736

原创 接口性能优化

Redis的execute(),详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/134366504。Redis的管理操作,详情见: https://blog.youkuaiyun.com/sinat_32502451/article/details/134366490。数据表的批量处理,详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/148350849。MQ做异步,还有重试机制。

2025-05-31 12:27:38 1151

原创 java使用Mysql批量更新(不存在就插入,存在就更新)

先逐个查询,需要插入的放到一个insertList中进行批量插入,需要更新的放到另一个updateList中进行批量更新。mysql 数据不存在则插入,存在则更新,可以用 INSERT ON DUPLICATE KEY UPDATE实现。详情见: https://www.cnblogs.com/expiator/p/14417061.html。详情见: https://www.cnblogs.com/expiator/p/17220668.html。这样查询时,只需要查出最新日期/版本号的数据就可以了。

2025-05-31 12:16:45 394

原创 Mybatis批量插入,批量更新

useGeneratedKeys="true"表示自动产生主键id,而keyProperty="id"表示主键对应的对象属性为id。而且主键对应的这个Person对象的属性"id" (也可以是别的命名,比如personId之类的), 最好设置成String类型的,不然可能会出错。这里不使用 @Param注解,那么在xml文件中的collection就默认为 “list”。在批量插入前,需要先做判空处理。Mapper如下:Service如下:批量插入或者批量更新如果需要先判断,不存在就

2025-05-31 12:14:36 464

原创 线程池的线程数设置

最好使用自定义线程池ThreadPoolExecutor,控制好最大线程数、阻塞队列长度,避免OOM。详情见: https://www.cnblogs.com/expiator/p/17140760.html。

2025-05-31 11:44:07 768

原创 耗时统计--StopWatch

但是如果有三四个功能,那反复地用 System.currentTimeMillis(),就会比较麻烦。prettyPrint():非常有用的方法。不仅可以统计出总的耗时,还可以显示出各个任务的耗时。在 apache、guava、spring的包里面,都有 StopWatch。start(String taskName) :指定任务名称,开始统计。StopWatch(String id) :构造方法,初始化。getTotalTimeMillis():统计出总耗时。在做性能优化的时候,耗时统计非常有用。

2025-05-31 11:35:45 277

原创 xxl-job快速创建复制任务

xxl-job的任务调度中心,点击【任务管理】, 输入 任务名称 后, 点击 【操作】 – 【复制】,可以快速复制任务。任务运行是否成功,以及错误日志,在【调度日志】中查看。

2025-05-28 23:13:38 282

原创 Notepad++替换前后字符,保留中间的文本内容

比如,要替换两个 ** 为 ###, 保留**之间的文本内容。以下的字符都是特殊字符,要匹配的话,需要加上斜框\作为转义。这里的 \1 表示中间的文本内容。

2025-04-13 16:23:55 780

原创 电商及支付的业务知识

代售是指一种商业模式,在这种模式下,销售方(通常称为代理商或经销商)并不直接购买商品的所有权,而是代表制造商或供应商销售产品,并在销售完成后将款项转交给制造商或供应商。比如天猫,提供了撮合买卖双方交易的平台,天猫代收订单款项,订单完成后,再付款给商家,通过交易拿取一定比例的佣金。订单系统,管理订单类型、订单状态,收集关于商品、优惠、 用户、收货信息、支付信息等一系列的订单实时数据,进行 库存更新、订单下发等能力。支付方式,用于支付订单的几种几种在线支付方式,如微信支付,支付宝,快捷支付等。

2025-02-28 17:18:43 238

原创 kafka入门(八):kafka分区分配策略

不仅可以任意选用Kafka提供的3种分配策略,还可以自定义分配策略来实现更多可选的功能。自定义的分配策略必须要实现 org.apache.kafka.clients.consumer.internals.PartitionAssignor接口。

2025-02-18 11:53:27 821

原创 intellij idea 项目突然报红,无法识别类和对象

比如,原来的项目是 /myProject/work ,可以建一个 /myProject/work-A,在这里面引入项目。一般是 maven 依赖没有解决,或者是idea缓存的问题,重新清缓存有可能影响到其他的项目。intellij idea 项目突然报红,无法识别类和对象,在父级文件夹,下面重新建一个文件夹,再重新clone 项目。

2025-01-22 11:36:14 239

原创 数据结构的基础知识

​。

2025-01-22 10:40:25 692

原创 支付宝支付报错 ACQ.ACCESS_FORBIDDEN

第三方应用调用接口,需要第三方应用先添加接口对应的功能包,再检查 app_auth_token 对应商家账号是否有签约。或者接口调用过程中,突然无法使用,建议检查是否签约已失效,如何签约以及续签可查看 如何签约流程。详情见: https://opendocs.alipay.com/support/01raue。详情见: https://opendocs.alipay.com/support/01raue。商户调用接口,未签约接口权限或者添加功能,建议详见商户如何确认完成签约。

2024-12-30 22:05:23 1509

原创 feign 针对某一个特定接口设置超时时间

服务消费者需要传多一个 options参数,就是 new Request.Options(connectTimeout, readTimeout)详情见: https://blog.youkuaiyun.com/sinat_32502451/article/details/136884349。如果是当前feign所有接口的超时配置,需要在 @FeignClient 的 configuration 属性中设置。服务消费者需要传多一个 options参数,就可以设置特定接口的超时时间。跟其他的生产者接口一样格式。

2024-12-26 17:33:51 232

原创 支付宝开放平台及支付宝开发文档

关键字: 接口加签方式 ,或者是: 设置密钥加签方式、支付宝公钥、私钥。可以查找 接口加签方式、设置密钥加签方式。如果找不到文档,可以通过关键字搜索。

2024-12-20 16:41:25 733

原创 sql优化--mysql隐式转换

如果是比较简单的数字,比如 字符串型的字段应该传 ‘1’ ,结果传了 1, 导致隐式转换,不走索引,那直接将 1 修改为 ‘1’ 就可以了。比如数据表中 user_status 的字段类型是字符串, 如果参数传入了一个整型数字,这样会有 隐式转换。在SQL中,隐式转换是数据库自动进行的类型转换,隐式转换可以帮助我们处理不同类型的数据。比如,数据表的字段是字符串类型的,传入一个整型的数据,也能够运行sql。CAST( ‘2’ AS SIGNED ) ,表示将’2’转换为数字。

2024-12-16 23:05:45 451

原创 java项目启动报错

如果项目里有多个服务,A服务依赖了B服务,A服务启动报错:找不到符号,那有可能是A服务依赖的类在B服务中, 而B服务却没有install/deploy ,部署安装一下 B服务,再重新引入 A服务的maven依赖。Target文件里面,放着java编译后的文件 ,就是class结尾的文件,还有其他的配置文件,比如properties文件 、xml文件 等。项目启动,读取不到 resource下面的配置文件 ,或者是读取到错的配置文件 ,可以多看看Target里面的配置。缺少的配置或文件,就复制的同事的。

2024-12-10 23:43:27 600

原创 模板方法模式的代码实践示例

算法结构是: 固定的步骤 commonStep --> 可变的步骤 step1 --> 可变的步骤 step2 (当然也可以是其他的顺序,根据实际情况处理) ,可以看到,子类1(示例中的template1) 和 子类2 (示例中的template2) 都有固定的步骤 commonStep,在不改变算法结构的情况下,子类1 和 子类2 重新定义算法的某些步骤 step1、step2。子类不能改变算法结构,但是可以重新定义算法的某些步骤。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。

2024-10-31 15:40:11 437

原创 mysql 使用时需要注意的

数据表设计,详情见: https://blog.youkuaiyun.com/sinat_32502451/article/details/133068084。详情见: https://cloud.tencent.com/developer/article/2285766。MYSQL分页查询时没有用ORDER BY,数据量大的时候,有可能会出现数据重复。如果没有默认值,必须设置一下历史数据,用UPDATE更新历史数据中新增字段的值。因为历史数据是不存在这个新增字段的,查询做字段映射时会报错。join 越多,查询越慢。

2024-10-30 15:54:02 283

原创 雪花算法生成唯一id的工具类

【代码】雪花算法生成唯一id的工具类。

2024-10-29 15:58:15 431

原创 系统稳定性--QPS过高

QPS 过高,会导致系统的连接数不够用,等待的请求会越来越多,CPU有可能会一直飙升,最后甚至导致服务挂掉。如果是使用 k8s容器,QPS过高,没有连接数可用,那么k8s的探针检测到失败,也会导致服务挂掉重启。后端服务常用的web应用服务器 tomcat, 默认的连接数只有200个。如果有日志打印,可以在阿里云上,根据接口的关键词,统计接口的访问量。当服务出现异常的次数过多,或者失败率过高时,可以进行熔断,快速失败。可以在 Grafana 中找出指定时间内 QPS 过高的接口。

2024-10-24 18:00:56 739

原创 阿里云k8s pod容器重启的分析

Readiness probe failed 详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/139837250。OOM dump文件分析,详情见:https://blog.youkuaiyun.com/sinat_32502451/article/details/137092200。点击"日志",选择"显示上个容器退出时的日志"。点击"事件",可以看到 容器重启的原因,包括 OOM、Readiness probe failed 等。

2024-10-15 18:01:00 381

原创 arthas常用命令(五)--heapdump 、jvm

heapdump , 类似 jmap 命令的 heap dump 功能。arthas-output 是arthas 生成到项目中的文件。dump.hprof 是自定义的 dump 文件名称。

2024-10-15 17:32:49 1023

原创 Arthas常用的命令(三)--monitor、jad 、stack

方法拥有一个命名参数 [c:],意思是统计周期(cycle of output),拥有一个整型的参数值。用来监视一个时间段中指定方法的执行次数,成功次数,失败次数,耗时等这些信息。,比如 Demo类,就是 *.Demo。作用:输出当前方法被调用的调用路径。监控指定类中方法的执行情况。可以看到反编译后的代码。

2024-10-15 17:31:39 677

原创 Arthas常用的命令(二)--trace

trace 命令只会 trace 匹配到的函数里的子调用,并不会向下 trace 多层。可以用正则匹配路径上的多个类和函数,进行多层 trace。

2024-10-15 17:30:46 925

原创 Arthas启动与常用的命令(一)-- dashboard、watch

当遍历深度,修改为 2后,显示如下,可以看到 入参数是 1 (也就是下文的 @Integer[1] ), 返回结果的@ArrayList 也能看到list 里面具体的数值(也就是下文的 2,2,2,19,29,47)。在使用 Intellij Idea 进行调试时,有时会用watch() 查看变量的值,arthas的 watch命令作用类似,而且更加强大。选择 java 进程,输入对应的序号,比如 1,然后按Enter,就可以了。-x参数,指遍历深度,默认为1,如果无法查出数值,可以尝试加大遍历深度。

2024-10-15 17:28:20 802

原创 Windows、Linux 安装arthas

详情见官方文档: https://arthas.aliyun.com/doc/quick-start.html。下载地址:https://arthas.aliyun.com/doc/download.html。shift+右键,选择 “在此处打开PowerShell窗口”。当然,也可以使用cmd打开。在本地新建文件夹arthas,下载后直接解压到该文件夹。接下来就可以使用 arthas 的各种命令了。为了演示方便,直接用Windows版。

2024-10-15 17:18:41 687

原创 arthas常用命令(四)-- thread

TIMED_WAITING(超时等待):该状态不同于WAITING,它可以在指定的时间后自行返回。WAITING: 等待, TIMED_WAITING: 105, TERMINATED: 终止。CPU 100%时,可以通过arthas的这个命令,来排查是哪些线程对应的代码导致的问题。NEW: 新建, RUNNABLE: 运行中, BLOCKED: 阻塞,输入thread,双击 tab,可以看到 thread 相关的所有命令。找出CPU占用最高的线程后,可以通过线程id,打印堆栈。示例:展示等待状态的线程。

2024-10-15 17:10:47 1024

原创 Windows设置静态IP地址

添加某些权限(如防火墙等)、白名单,需要提供IP,如果是动态IP,一旦IP变了,权限可能会受影响。开发联调时,静态IP地址不会经常变,方便调试。静态IP地址不会变化,不会影响权限。静态IP地址(又称固定IP地址)。

2024-10-15 11:01:52 418

原创 微信支付的文档及常见问题

服务商模式是指针对市面上一些中小型且没有开发能力的商户,由已在微信支付官方注册入驻的系统开发商或解决方案提供商协助这些商户完成入驻,开发及日常运营工作的模式。普通商户模式是指商户自行开发系统来对接微信支付进行交易,微信支付将资金直接结算到商户的结算账户,商户给用户提供支付服务。详情见:https://pay.weixin.qq.com/docs/partner/development/glossary/mode.html。JSAPI支付、APP支付、H5支付、Native支付、小程序支付等。

2024-10-14 15:06:05 859

原创 锁等待超时 com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded;

在出现锁等待时,会根据参数 innodb_lock_wait_timeout(默认50s)的配置,判断是否需要进行timeout的操作,如果等待时间超过了设置的时间就会报错。当等待时间超过innodb_lock_wait_timeout设置值时,会产生“LOCK WAIT”事务。innodb_lock_wait_timeout 默认为50,可以尝试调大一些,等待时间变长,就不会触发锁等待超时。Innodb_row_lock_time_max:从系统启动到现在等待最长的一次所花的时间;大事务转成多个小事务。

2024-10-09 11:48:07 960

原创 Spring源码(15) -- Aop动态代理之 Enhancer

源码: org.springframework.cglib.core.AbstractClassGenerator#createtry {//获取类加载器//双重检查锁, 设置 ClassLoaderData。并设置缓存。// 生成对象throw ex;

2024-09-30 15:46:40 685

原创 Spring源码(14) -- Aop动态代理CglibAopProxy

源码: org.springframework.aop.framework.CglibAopProxy.CglibMethodInvocation#CglibMethodInvocation。源码: org.springframework.aop.framework.CglibAopProxy#getProxy(java.lang.ClassLoader)被 net.sf.cglib.proxy.Enhancer 类调用的回调接口都会继承 Callback 接口。

2024-09-27 14:14:30 918

原创 Spring源码(13)--AOP 连接点及通知的方法调用的源码

代码: org.springframework.aop.framework.CglibAopProxy.CglibMethodInvocation#invokeJoinpoint。代码: org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor。代码: org.springframework.aop.framework.ReflectiveMethodInvocation#proceed。这些代码也可以看看。

2024-09-27 11:34:50 442

原创 Jdk动态代理源码

newProxyInstance() 方法返回指定接口的代理类实例,该代理类将方法调用分派给指定的调用处理程序(InvocationHandler)。为什么调用代理对象的方法,就会调用自定义的 MyInvocationHandler 中的 invoke()方法?实际上调用的是父类Proxy的 InvocationHandler h 的 invoke()方法。Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。示例中加入以下代码,会保存代理产生的类文件,方便查看。

2024-09-25 10:48:48 989

原创 SpringBoot Admin调整类的日志级别

点击 “日志” – “日志配置” ,输入类名,即可调整 这个类的日志级别。进入 SpringBoot Admin ,通过服务名称, 找到服务后。

2024-09-20 16:09:17 428

原创 Spring源码(12)-- Aop源码

Advice 抽象类。AOP的基类,包装 AspectJ切面的Advice方法。代码: org.springframework.aop.aspectj.AbstractAspectJAdvice#invokeAdviceMethodinvokeAdviceMethod() 这个方法,调用的频率非常高。// 通过JoinPoint(连接点),调用各种 Advice 方法。try {// 调用 advice 方法。

2024-09-16 00:00:32 1153

原创 Spring源码(11)--Spring AOP及动态代理的基础知识

CGLb采用底层的字节码技术,可以为一个类创建子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。位信息,所以Spring所提供的增强接口都是带方位名的,如BeforeAdvice(前置增强)、通过Advice(增强)描述横切逻辑和方法的具体织入点(方法前、方法后、方法的两端等)。Spring AOP就是负责实施切面的框架,它将切面所定义的横切逻辑织入切面所指定的连。之所以需要两种代理机制,很大程度上是因为JDK本身只提供接口的代理,而不支持类的代理。

2024-09-15 23:56:00 684

原创 base64和字符串的转换

【代码】base64转换为字符串。

2024-09-04 22:57:16 1092

原创 Spring源码(9)--FactoryBean简介

FactoryBean 是一个工厂对象,用于创建和管理其他 Bean 的实例。FactoryBean 接口定义了一种创建 Bean 的方式,它允许开发人员在 Bean 的创建过程中进行更多的自定义操作。通过实现 FactoryBean 接口,开发人员可以创建复杂的 Bean 实例,或者在 Bean 实例化之前进行一些额外的逻辑处理。此接口在框架中大量使用,例如用于AOP的org.springframework.AOP.framework.ProxyFactoryBean。

2024-09-02 23:26:22 1047

空空如也

空空如也

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

TA关注的人

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