自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-12-30 22:05:23 870

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

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

2024-12-20 16:41:25 524

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

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

2024-12-16 23:05:45 366

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

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

2024-10-31 15:40:11 408

原创 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 268

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

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

2024-10-29 15:58:15 267

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

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

2024-10-24 18:00:56 536

原创 阿里云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 230

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

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

2024-10-15 17:32:49 674 1

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

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

2024-10-15 17:31:39 606

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

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

2024-10-15 17:30:46 513

原创 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 724

原创 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 515

原创 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 766

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

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

2024-10-14 15:06:05 724

原创 锁等待超时 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 713

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

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

2024-09-30 15:46:40 606

原创 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 869

原创 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 423

原创 Jdk动态代理源码

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

2024-09-25 10:48:48 960

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

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

2024-09-20 16:09:17 400

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

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

2024-09-16 00:00:32 1127

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

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

2024-09-15 23:56:00 666

原创 base64和字符串的转换

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

2024-09-04 22:57:16 906

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

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

2024-09-02 23:26:22 1029

原创 后端兼容app新旧版本的功能

在开发中,有时需要对 app的新版本和旧版本,做不同的处理。可以根据版本号判断。新版本app交互有变化时,同一个接口在 不同版本可能要返回不同的数据。如果不区分新旧版本,有可能会导致旧版本app 不可用。比如 旧版本1.2.1有一个功能是跳转 微信,到了新版本修改了 app的交互,变成跳转 微信小程序,如果不区分处理,旧版本就没法使用了。

2024-08-20 23:05:01 336

原创 AES加密解密常用的代码示例

加密模式,有 ECB模式 和 CBC 模式等等,ECB 不需要 iv偏移量,而CBC需要。Hutool 的 AES, 默认加密方式为ECB ,默认的填充方式为 PKCS5。填充方式,有 PKCS5 、PKCS7、NoPadding。输出格式,可以有 16进制的 Hex ,或者是 Base64。如果不确定,可以使用 在线加密解密的网站,判断是哪一种模式。非对称加密是指加密和解密使用不同的密钥的加密算法。对称加密是指加密和解密使用相同的密钥的加密算法。AES是 对称加密。

2024-08-19 23:15:04 681

原创 java.net.UnknownHostException: Failed to resolve after 2 queries

UnknownHostException 说明这是无法识别的 host。需要加上 host。可以看到没有丢包,并且 abc.com 对应的 网址为 11.22.33.44。打开 cmd ,使用 ping,看网络是否正常。比如 网址为 abc.com ,

2024-08-19 23:01:58 614

原创 MongoDb常用代码及配置

MongoDB不需要建表,直接插入数据就会建表。日期用 ISODate() 转换。@Document 指定表名。

2024-08-19 22:56:45 386

原创 feign性能配置调优

最近在使用 feign 时,有时会出现连接异常/阻塞的情况,对 feign 的配置进行了简单的调优。替换了 feign 的 client, 并调整了连接数。

2024-08-16 00:01:13 617

原创 系统设计:推送通知/消息

需要制定一个通知模板,发送给用户的通知,是什么格式的,包括 唯一key、标题、内容、最后更新时间、创建时间、创建人、是否删除等。包括: push服务商的消息id 、状态 、类型、通知是否发送成功、失败的次数、推送时间、通知的json字符串。通知的内容,通常是有一些相同的格式,对属性进行替换,可以制定一些占位符,比如。如果是要求推送一定要成功的,可以用数据表写入推送的通知记录。包括 用户id,推送的类型,是否选择接收通知等。通知模板、用户信息、通知设置、设备信息。推送的类型,比如:通知、邮件、短信等。

2024-08-14 23:29:45 457

原创 java中正则表达式的运用及示例

{n}表示n次,{n,}表示至少n次。中括号内的-表示范围。[0-9]表示数字0到9中的一个,[0-9]+表示至少一个数字。\d表示一个整数,\d{4}表示4个整数,\d+表示任意个整数。\s表示一个空白字符(如空格、制表符、换页符等等),\s+表示任意多的空白字符。比如.*表示任意个非换行符\n的字符。\d{4}-\d{2}-\d{2}表示年月日,比如2016-05-05。[A-Za-z]表示一个任意字母。[A-Za-z]+表示任意多个字母。[]表示或. 如[afg]表示一个为a或者f或者g的字母。

2024-08-07 21:56:47 1135

原创 Spring源码(10)--Transactional注解的源码

方法路径: org.springframework.jdbc.datasource.DataSourceTransactionManager#doGetTransaction。方法路径: org.springframework.jdbc.datasource.DataSourceTransactionManager#doBegin。包括 :begin(开启事务) 和commit(提交事务)、rollback(回滚事务)这是 Transactional 事务的核心代码,使用了 AOP。

2024-08-02 23:10:54 528

原创 Spring源码(8)--Spring实例化的策略

Spring实例化的策略有几种 ,可以看一下 InstantiationStrategy 相关的类。

2024-07-30 23:39:39 476

原创 使用Lombok和建造者模式简化代码

在项目开发中,我们经常需要构建对象。常见的做法有getter/setter,或者构造器构建对象。也可能写了一个参数非常冗长,传参特别容易出错的构造方法。

2024-07-27 11:44:41 321

原创 业务开发常用的开关

或者是逻辑复杂,开发环境造数据麻烦时,也可以配置开关,把前置条件关掉,方便验证数据,也方便测试。某些关键的容易变更的逻辑,加上一个开关。如果要关上开关,就修改为 false。不需要的逻辑,可以及时用开关关掉。需要的时候,打开开关。

2024-07-27 11:44:11 363

原创 BigDecimal代码示例

在平常开发中,如果涉及到计算,要求准确的精度,比如单价*数量=总价之类的计算,那么得用到BigDecimal。###初始化比如那么有可能这个BigDecimal会从0.06变成0.059999999,传入double类型来初始化本身就是不精确的。

2024-07-27 11:42:43 242

原创 mysql分库分表 sharding-jdbc 5.0的代码实现 (二)

分库策略的类,该类必须实现 StandardShardingAlgorithm 接口,且类对应的Component注解名称为 preciseShardingTableAlgorithm./*** 分库策略* StandardShardingAlgorithm<Integer> 后面的泛型,需要跟分库字段保持一样的类型**/@Slf4j/*** 主库别名*//*** 分库策略,按用户编号最后一位数字对数据库数量取模。

2024-07-27 11:27:48 481

原创 mysql分库分表 sharding-jdbc 5.0的代码实现

它表示的是 分表策略的类,该类必须实现 StandardShardingAlgorithm 接口.且类对应的Component注解名称为 preciseShardingTableAlgorithm./*** 分表策略**/@Slf4j/*** 分表数量*//*** 分表策略* @param tableNames 所有表名* @param preciseShardingValue 精确分片值,包括(columnName,logicTableName,value)

2024-07-27 11:24:58 329

原创 java8多线程的lambda

()里面是函数的参数,中间是箭头, {}是函数的代码块,{}包含了函数的执行以及返回结果。lambda表达式,实际上就是匿名函数。

2024-07-27 10:17:23 349

空空如也

空空如也

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

TA关注的人

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