Java
Java
阿里巴巴首席技术官
NULL
展开
-
class org.bouncycastle.jcajce.provider.asymmetric.edec.BCXDHPublicKey cannot be cast to class 支付问题
今天在 Jdk17 环境下接入 支付工具包 com.egzosn pay-java-wx ,竟然无法启动。经过我不断的尝试终于解决了,心情舒畅了。同样的代码却在 jdk8 中正常启动。原创 2024-08-25 11:36:07 · 393 阅读 · 0 评论 -
RabbitMQ 发送消息 绕过系统配置的 消息转换器方法
所以问题来了,系统目前已经集成好了, 都是用的 JSONB,这也是统一的配置。所以,直接就是看发送消息的源码,convertAndSend 方法,这里具体是哪里使用到了配置的消息转换器,消息转换器何时何以参加?起初想的是再弄一套配置,也就是 rabbitmqTemplate,这套配置就不配 JSON 的消息转换器了。不再走下面的消息转换了。我负责的系统需要与其他系统交互,需要我将消息发送到 MQ 上,其他系统监听消息。遇到问题,两个系统的发送消息格式都是不一致的,所以这个地方是需要协商打通的。原创 2024-01-03 14:05:44 · 771 阅读 · 0 评论 -
IDEA debug 时不阻塞程序
即可只阻塞当前线程,而不是全部线程。将每个断点的挂起方式改为 线程。原创 2023-10-28 17:40:22 · 292 阅读 · 0 评论 -
Java 中的不同参数类型
是不是还傻傻分不清参数配置到底怎么写,写在哪个位置,那么这篇文章就让你学会。打开 IDEA 的 Run Configuration,可以看到以下参数配置。原创 2022-12-11 21:49:25 · 1267 阅读 · 1 评论 -
ShardingSphere- JDBC ,自定义SQL查询不出数据问题解决
问题现象:使用Mybatis写了一段SQL,数据库可以查询出来,但是通过代码查却为null。解决方法:ShardingJDBC....原创 2022-10-08 13:12:07 · 3722 阅读 · 2 评论 -
一次解释器模式的实际使用
不过好在,我找到一本书,叫做《秒懂设计模式》,终于理解了。学会了解释器模式,现在开始改造代码,首当其冲的难点在于如何定义表达式,如何定义终结表达式与非终结表达式。这段代码看起来... 很直观,简单,但是却不易维护,没有扩展性。其实可以发现,区间属于复合运算,就是左区间 和 右区间 的运算。一个个分析,对于这半个区间,特点就是一个符号 + 一个数值。好的,首先画一幅只有自己能够看懂的图,来帮助自己梳理逻辑。我先把数据拆分下,如上所示,每个表达式都用的分号;对于给定表达式,一个个来看,首先第一种 0 和 1。原创 2022-09-07 16:31:11 · 514 阅读 · 1 评论 -
Base64编码原理
base 64、base 32、base 16 编码建议标准 https://www.ietf.org/rfc/rfc4648.txtBase64是基于64种字符的编码算法,即将数据使用64种字符表示,编码后的Base64字符串长度 通常为原来的3-4倍。(补充:Base32就是32个字符,Base16就是16个字符,为了能在Http get 参数方式传输,有了变体URLBase64,主要是将符号=和+换成了其他字符,因为这些字符在url有特殊的意义,不能直接,所以做了替换) 即如下表,例如数字0(十进制原创 2022-06-26 15:07:36 · 2929 阅读 · 0 评论 -
系统流量预估、架构设计方案
QPS预估每日页面浏览次数 pv = ( 总用户量 * 20% ) * 每天大致点击次数峰值时间qps =( pv * 80% )/ (每天秒数【86400】 * 20%) * (冗余系数【一般2-5】)80%的请求在20%的时间里架构配置各个组件并发能力基线值LVS 10W qps Nginx 5w qps MQ 10w qps SpringCloudGateWay 5k qps Tomcat 1k qps MySQL 1.5k qps...原创 2022-05-19 21:14:22 · 1052 阅读 · 0 评论 -
JVM调优实践
首先肯定要配置好gc日志-XX:+PrintGCDetails 打印gc日志-XX:+PrintGCDateStamps 打印日志时间戳-Xloggc:D:\log\gc\gc-%t.log 将gc日志存储在指定位置-XX:+UseGCLogFileRotation 开启gc日志分割(避免单个gc文件太大)-XX:NumberOfGCLogFiles=14 gc文件分割数量(如果超过则覆盖写)-XX:GCLogFileSize=100M 单个gc日志文件大小(超过则新开文件)原创 2022-05-26 09:51:41 · 455 阅读 · 0 评论 -
ThreadLocal内存泄漏问题讲解
一、首先回顾一下内存泄漏是什么:内存泄漏是指:程序已经不再使用某字段、某对象。但是却无法回收掉它占用的内存。两个关键点:不再使用 并且 无法回收二、为什么ThreadLocal会发生内存泄漏问题?2.1 问题发现以下是整体结构ThreadLocal就相当于一个访问工具类,通过操作ThreadLocal对象的方法 来操作存储在当前线程内部的ThreadLocalMap里的值ThreadLocalMap是一个哈希数组,key为ThreadLocal对象,Value为一个Objec原创 2022-04-09 18:03:11 · 2790 阅读 · 3 评论 -
ES ElasticSearch Connection reset by peer问题解决
问题现象程序隔一段时间不操作后,再请求es就会报错Connection reset by peer,之后连续几次操作都正常问题原因报这个错的原因是 因为服务端已经关闭了链接,但是客户端还在使用这个链接那为什么会出现这个问题?有以下两个问题组成1. 为什么服务端会关闭链接?服务器会有TCP的Keepalive 经过一段时间如果没有操作就会自动断开连接功能linux查看超时时间默认为两小时# 查看超时时间(单位秒)cat /proc/sys/net/ipv4/tcp_原创 2022-01-09 21:39:30 · 9619 阅读 · 11 评论 -
SpringMVC有的参数接收不到解决方法
问题现象前端明明传了字段, 但后端就是接收不到!!!但是同对象的其他字段都能接收到我接收不到数据的字段是vA vC vE经过一番查阅后, 得知!JavaBean有个规范说明如何从set get方法推导出字段名的举个例子普通的字段比如是 name, 那他的set get就是 setName, getName : 首字母大写第二个举例字段 vA : 当第一个字母小写, 第二个字母大写时, set get 就是 setvA getvA这时首字母不再大写...原创 2021-08-03 18:25:23 · 2230 阅读 · 2 评论 -
Lombok的SneakyThrows注解
@SneakyThrows注解的目的是为了消除 捕获 受检查异常的 样板代码使用@SneakyThrows前使用@SneakyThrows后异常去哪里了?代码编译后 该方法如下被lombok捕获了, 来看看它是怎么写的下面是关键代码再进去上一步泛型传了个RuntimException, 对于Javac来说, 它的受检查异常变为了RuntimeException, 所以编译通过了虽然传了一个RuntimeException, 但实际...原创 2021-07-13 15:12:33 · 1604 阅读 · 0 评论 -
SpringBoot MybatisPlus教程 简洁没有废话!
点个赞 点个关注吧1. MybatisPlus 简介MybatisPlus是基于Mybatis的封装, Mybatis的加强版, 加强了什么呢? 内部使用动态代理 自动生成增删改查操作如果使用Mybaits 就得需要手动实现 增删改查sql, 效率低还容易出错!MybaitPlus可以和Mybatis同时使用, 对于复杂sql, 可用继续写xml。且对于调用者来说用法都是统一的!下面直接看看怎么用2. 环境配置在SpringBoot2下使用引入依赖<dependency>原创 2021-06-28 22:12:33 · 515 阅读 · 2 评论 -
SpringBoot Zookeeper 实现 分布式自增主键
内容摘自黑马1. 加入依赖: zookeeper的java客户端<!-- curator ZK 客户端 --><dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.2.0</version></dependen.原创 2021-06-19 22:26:04 · 413 阅读 · 2 评论 -
记录一次Mybatis字段映射bug查询记录
出现问题的是这一段代码报错的原因很简单, 就是数据库id字段为varchar, 而mybatis将它映射到了int类型于是我就查了查我的对象, 发现确实是String, 哪里来的int?再次比对, 数据库与对象完全对应 没有发现问题于是开启了我的debug源码之旅...看见木有, 是通过构造器确定字段类型的, 因为对象里显式定义了构造器, 导致无参构造器被覆盖好家伙 加个午餐构造器就行了...原创 2021-05-27 16:16:12 · 227 阅读 · 0 评论 -
[设计模式] 命令模式
1. 命令模式解耦请求与实现2. uml原创 2021-04-26 15:09:55 · 82 阅读 · 1 评论 -
[设计模式] 责任链模式
1. 使用场景多个对象可以处理同一请求, 但具体是哪个对象处理是由运行时动态得出的 可动态指定一组对象处理请求 在不明确接收者的时候, 向多个对象中的一个提出请求2. UML原创 2021-04-24 21:15:16 · 93 阅读 · 1 评论 -
SpringBoot 报错 Unrecognized field
增加配置类/** * @author SUN * @date 2021/4/23 */@Configurationpublic class JsonConfig { @Bean public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){ ObjectMapper objectMapper = new ObjectMapper(); // 反原创 2021-04-23 11:21:08 · 1179 阅读 · 0 评论 -
[设计模式] 策略模式
1. 使用场景针对同一类型问题, 有多种处理方式 , 每一种都能独立解决问题需要自由切换算法的场景需要屏蔽算法规则的场景2. UML原创 2021-04-20 22:13:46 · 76 阅读 · 0 评论 -
[设计模式] 模板模式
1. 模板模式使用场景但完成一个操作具有固定的流程时, 由抽象固定流程步骤, 具体步骤交给子类实现一次性实现算法不变地方, 将变化留给子类实现各子类公共代码抽出来 集中在父类中2. UML...原创 2021-04-20 22:02:05 · 65 阅读 · 0 评论 -
[设计模式] 委派模式
1. 委派设计模式不属于GoF的23种设计模式代理模式注重任务过程委派模式注重任务结果使用场景需要编排多个服务之间的调用 需要实现表现层与业务层的松耦合2. UML类图原创 2021-04-18 20:33:33 · 72 阅读 · 0 评论 -
[设计模式] 桥接模式
1. 桥接模式 使用场景在抽象和具体实现之间增加更多灵活的场景2. UML图原创 2021-04-18 20:23:18 · 70 阅读 · 0 评论 -
[设计模式] 适配器模式
1. 适配器将一个类的接口变成客户端所希望的另一个类的接口2. 类适配器通过继承实现3. 对象适配器接口适配器原创 2021-04-17 20:57:09 · 71 阅读 · 0 评论 -
[设计模式] 组合模式
1. 组合模式使用场景当子系统与其内各个对象层次呈树形结构时,可以使用组合模式让子系统内各个对象层次的行为操作具备一致性2. 透明组合模式3. 安全组合模式原创 2021-04-17 20:42:57 · 107 阅读 · 0 评论 -
[设计模式] 享元模式
1. 享元模式是什么?享元模式解决了系统类太多问题, 像一种对象池, 共享细粒度对象, 将多个对同一对象的访问集中起来2. UML类图享元工厂传入的外部状态不改变享元对象内部状态, 只改变享元方法行为...原创 2021-04-15 22:49:21 · 63 阅读 · 0 评论 -
[设计模式] 装饰器模式
1. 装饰器定义指不改变原有对象基础上, 动态的给一个对象添加些额外的职责2. UML类图原创 2021-04-15 22:19:52 · 135 阅读 · 0 评论 -
[设计模式] 门面模式
1. 门面模式使用场景某个类操作步骤繁琐, 便可使用门面模式, 具体步骤是新建一个类, 封装成一个方法来调用复杂类的多个方法, 对于调用者来说就会非常简单工具类, 第三方库的封装就是门面模式2. UML类图3. 优点1. 简化了调用过程2. 更好的划分层次3. 减少依赖, 松散耦合4. 缺点1. 不符合开闭原则2. 违反单一职责...原创 2021-04-12 21:50:18 · 80 阅读 · 0 评论 -
[设计模式] 代理模式
1. 代理模式应用场景当无法或 访问某个对象 存在困难时, 可以通过代理对象间接访问2. 代理模式UML类图3. 动态代理动态体现在生成对象的时候 是动态的, 不是事先编译好的4. 代理模式优点1. 代理对象与真实对象进行分离2. 增强目标对象功能...原创 2021-04-12 21:39:23 · 71 阅读 · 0 评论 -
SpringBoot 全局异常 不生效 解决方法!
解决思路, 看请求的堆栈流程, 都经历了哪些组件起初全部失效, 无法进入全局异常中, 所以无法找到正常的堆栈流程后来 发现 若是在App主类中 定义接口, 倘若报错, 便可走入全局异常处理中百思不得其解, 首先研究了一遍正常的流程, 看看底层的Spring都经历了那些类, 接口 , 处理这个异常以下是本应走的正常流程但是在错误的接口中, 却惊奇的发现走入了CGLib中, 奇怪之际, 之后的debug路线进入了我的@Around Aop中, 便以解惑原来 @Around真的很.原创 2021-04-12 16:13:59 · 4881 阅读 · 1 评论 -
[设计模式] 建造者模式
建造者模式与工厂模式的区别1. 简单对象使用工厂, 复杂对象使用建造者2. 建造者模式更加注重方法的调用顺序, 工厂更加注重创建对象3. 关注点不一样, 工厂模式只要把对象创建出来就可以了, 建造者模式还要知道组成的部件建造者模式UML类图...原创 2021-04-11 21:12:51 · 71 阅读 · 0 评论 -
[设计模式] 原型模式
使用场景1. 创建对象成本较大(耗费CPU,网络资源等)2. 创建对象过程复杂3. 系统中存在大量该类的对象UML类图原型模式的实现在jdk中自带了 Cloneable接口 , 我们无需自己创建了, 实现该接口后 重写Object的clone方法即可Object拥有自带的clone, 这个clone是浅克隆 , clone方法方法的实现是基于2进制内存的拷贝, 效率非常高浅克隆: 复制了值类型的字段, 却没有赋值引用对象如果需要深拷贝, 可以使用序列化..原创 2021-04-11 20:47:25 · 126 阅读 · 0 评论 -
微信开放平台解密时遇到 InvalidKeyException: Illegal key size?
原文https://www.cnblogs.com/xiaopotian/p/10151326.html下载下来两个jar包链接: https://pan.baidu.com/s/1uY19yfOS7_O9mus1bQEhKQ 提取码: e3e6将解压后的两个jar包复制进这个目录下进行覆盖即可!原创 2021-04-08 13:13:15 · 159 阅读 · 0 评论 -
请选择好日志系统
这几天做了个微信好友机器人, 用到的技术是 itchat4, 讯飞语音首先这个itchat4j, 下载的demo项目 运行正常, 但是整合到我的业务项目中时就运行不起来了!为啥?? 报错了 因为itchat4j使用的是具体日志实现类, 和我的日志环境不一样了 !!! 经过改源码的一波操作后, 终于整合进来了, 这是我第一次改改源库的源码, 感觉还好, 还加了些我需要的功能, 重新打包, 放进项目后, 终于运行了......搞了很久我又接了讯飞语音同样一个问题! 日志框架冲突! 系统的Sp原创 2021-04-05 10:36:55 · 111 阅读 · 0 评论 -
[设计模式] 单例模式
单例模式是啥?单例模式是 一个类在任何情况下都只有一个实例, 并提供一个全局访问该实例的地方什么时候用?该对象不需要存在多份实例的时候类图一种安全的实现方式原创 2021-03-28 20:46:51 · 118 阅读 · 0 评论 -
[ 设计模式 ] 工厂模式
工厂模式解决了什么问题???一个类的构建过程复杂繁琐 使用了工厂模式, 对复杂对象的创建就变得规范, 可维护对调用着来说 也变得简单了工厂模式有三种实现方式一. 简单工厂/静态工厂方法简单工厂模式 不属于23种设计模式中产品种类相对较少的情况下使用在Java Calender中就有简单工厂模式体现根据不同的语言 创建不同的日历java.util.Calendar#createCalendar二. 工厂方法模式工厂方法把类的实例化推迟到子类中进行...原创 2021-03-28 20:19:19 · 90 阅读 · 2 评论 -
七大软件架构设计原则
1. 开闭原则开放扩展 关闭修改, 强调用抽象构建框架, 用实现扩展细节2. 依赖倒置原则高层模块不应该依赖底层模块, 二者都应依赖其抽象抽象不能依赖细节, 细节应该依赖抽象就可以降低类与类间的耦合3. 单一职责一个类/方法 只做一件事4. 接口隔离原则使用多个专门的接口, 而不全部依赖于总接口, 客户端不应该依赖它不需要的接口5. 迪米特法则一个对象对其他对象保持最少的了解6. 里是替换原则子类可以替换父类的功能, 但不能改...原创 2021-03-27 20:28:41 · 199 阅读 · 0 评论 -
UML 类图 教程讲解 非常易懂!
以下是我理解的UML如有不对 请指出! 教程绝对不墨迹, 针对常混乱的组合 聚合 关联专门做了通俗的解释目录1. 定义一个类2. 继承3. 实现4. 组合5. 聚合6. 关联关系7. 依赖关系1. 定义一个类2. 继承3. 实现4. 组合组合表示整体与个体的关系整体与个体拥有一样的生命周期 :整体死 个体也死比如像String里的char[] 数组, String死了 char也就死了5. 聚合聚合表示整体与个体的关...原创 2021-03-27 15:58:21 · 639 阅读 · 0 评论 -
微信公众号网页 微信小程序 语言聊天功能实现 Vue前端到Java后端
我要做的功能是 微信公众号网页和微信小程序可以互发语音消息功能微信对两者都提供了语音功能对于微信公众号网页录音文件的编码方式为 amr对于微信小程序则支持 mp3等等以下是微信小程序支持的格式说明 文档地址https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html所以有个坑是需要统一编码! 切不可直接使用amr格式, 因为小程序不支持播放!如果项目已.原创 2021-03-20 21:56:32 · 1626 阅读 · 0 评论 -
接口幂等性思考
之前一直未注意接口幂等的重要性, 现在才发觉多么重要要是再多注意一点 就会少一些意想不到 或不该的bug对于幂等的实现也是非常简单, 讲讲我的思路写个AOP, 拦截post接口, 因为post一般都是修改的意思, 所以在项目中 要约定 使用查询不能使用get请求, 否则会进入幂等逻辑判断中在aop中, 获取方法的形参 进行 hash编码, 然后存在redis中或其他的容器中, 约定一下吧, 在3秒内不能重复请求 同一方法签名或url下hash编码重复就算作重复请求当然这只...原创 2021-03-18 15:32:46 · 153 阅读 · 0 评论