![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 54
ะัี潪ิื
这个作者很懒,什么都没留下…
展开
-
PostgreSql和Oracle的事务机制区别以及对程序的影响
PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction block原创 2024-01-28 23:11:51 · 1471 阅读 · 1 评论 -
OAuth2.0认证服务搭建记录
配置OAuth2.0代码结构1、依赖准备 <!--spring security的依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </depend原创 2022-05-26 20:27:29 · 804 阅读 · 0 评论 -
JDB的使用
本文已参与「新人创作礼」活动,一起开启掘金创作之路。背景在本地开发的时候一版遇到问题都是通过debug去排查调试,如果在测试环境有问题需要调试,那么就可以采用JDB的方式,其实idea等开发工具debug的原理也是这个。前提是要指定debug端口。所有的操作都要先打断点1、线上程序使用jdbjdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=例如:jdb -connect sun.jvm.hotspot.jdi.SAP原创 2022-05-22 23:21:16 · 2178 阅读 · 0 评论 -
一种简单的热部署方式结合动态编译实现java文件热替换
前言日常开发中常常遇到这样的场景:1、测试环境查证问题,想加日志来辅助查证,之前人们都是使用塞包的方式。使用这种方式还得重启,一些应用启动耗时也比较久。2、测试环境联调,一些数据测试环境不一定造的出来,需要后台写死,这种如果采用提交代码的方式,复杂程度大,也容易被带上线,风险高。如何解决:一、初级阶段:采用代码热更新的方式,这种如果只是涉及一些添加日志,或者在方法内部做一些微小的改动,那么可以采用jvm提供的Instrumentation接口,通过该接口可以实现初级的热部署。例如:publi原创 2022-05-20 15:04:44 · 494 阅读 · 0 评论 -
华为OD面试之旅
本文已参与「新人创作礼」活动,一起开启掘金创作之路。前言最近疫情在家,想着复习复习面试一下,看看有没有新机会。先后面试了华为OD车部和华为OD HarmonyOs部,以下是我面试OD的全部历程。1、笔试20220215。笔试是使用牛客的笔试系统,三道题,基本上做出来两道就可以通过。其中一道是如下题目,其他两道题目忘记了。给定一组非负整数nums,重新排列它们每个数字的顺序(每个数字不可拆分)使之组成一个最大的整数.2、综合测评(性格测试)20220224综合测评主要是一些考察性格相关原创 2022-05-02 21:54:12 · 5537 阅读 · 5 评论 -
一种分库分表的实现方式 --基于脚本
背景在我的自动化测试平台中,有一个录制测试案例的功能,会把测试环境上外围渠道调用的接口出入参全部记录在一张表里,在平台刚投入使用时没什么问题,但是随着使用时间的增长,表里的数据越来越多。虽然是每个月系统会定时清理一次过期案例,但是案例仍然会有很多,严重影响系统性能。这个时候我考虑到了做分表来处理单表数据量超级大的问题。思路由于平台的持久层采用的Mybatis框架,所以制定分表策略时,我首先想到的是使用插件在执行sql时动态的替换掉表名,那么新表名怎么来的呢?参考公司自研框架的实现思路,采用Lua脚本原创 2022-05-01 22:18:58 · 449 阅读 · 0 评论 -
热度排行榜实现方案(java基于LRU算法的实现方式)
背景:突发奇想在我的小平台上添加一个文件下载排行榜,类似于百度的热搜(如下图)。方案使用LRU算法实现,该方案就是在内存中维护一个双向链表。将页面准备展示的排行榜的最小名次(例如:上图中的15就是最小名词)作为链表的固定长度,将前台每次下载的文件名称都插入到链表的头部,如果插入的内容超过链表的长度,则把链表的尾节点删除,用以保证链表的长度不变,这样就自然的形成了一个排行榜,最新的下载永远在前边。代码实现:1、Node节点package com.cz.commons.rank;/** *原创 2021-09-23 20:51:08 · 3385 阅读 · 0 评论 -
springboot中使用反射遇到的问题(报ClassNotFoundException)
背景:idea中正常启动的项目今天想部署到Liunx主机上试试,结果在打包为jar之后,使用java -jar XX启动时,有一个处始终包ClassNotFoundException,我多次将jar包解压了查看,确认包里是有这个类的。最终在代码中搜索这个类在哪里使用发现这个类是被另一个依赖的模块反射创建的,而报错也发生在了反射那里。经过多次百度,最终确定是类加载机制导致的。报错原因:在idea中使用的是AppClassloader加载的类,而打包为jar之后,是使用的URLClassLoader,这样原创 2021-08-28 18:20:10 · 798 阅读 · 0 评论 -
联想搜索实现方案(java基于字典树算法的实现方式)
1、背景最近我的自动化测试平台(PostGirl)上有一个小需求:用户在知识库的搜索框输入关键字,下方自动显示出以该关键字开头的词汇。实现效果类似百度的联想搜索(见下图)。2、方案一开始我的实现思路是使用redis的zset来实现。通过zadd添加元素。搜索的时候使用zrank获取到关键字的位置,然后通过zrange 得到所有以关键字开头的词汇,最后进行展示。核心代码如下: // 1、将关键字存储到redis中,用于后续输入联想功能 jedis.zadd("search",0,word.ge原创 2021-07-12 16:22:07 · 5470 阅读 · 12 评论 -
小工具:根据insert语句,自动生成delete语句
前言:工作中在项目上线的时候经常会提交一些insert脚本,同时还得提交一份回退脚本,如果量少的话还可以手动去写回退语句,如果量大的化,那工作量就会很大。所以开发了一个工具用来生成delete语句。完整代码(https://gitee.com/chengzhi2/parser)1、依赖外部jar包 <dependency> <groupId>com.github.jsqlparser</groupId> <artif原创 2021-06-04 10:44:25 · 710 阅读 · 0 评论 -
分享一个替换复杂json串中的节点值或者key-value值的方法
前言最近在开发一个自动化回归接口的工具,需要将调用接口返回的出参报文和预设的报文进行比对,但是出参中有一些比如so_nbr或者返回操作时间的字段,这些字段每次调用都是不一样的,那么如果直接比对的话肯定是不通过的,所以需要将不重要的字段替换为其他固定的字符,比如我这里把这些会产生随机数据的字段全部替换为字符串“ignore”,这样比对下来的结果就是正确的。所以我写了一个工具类用于替换嵌套很深且复杂的json串的工具方法,如下:package com.cz.json;import com.googl原创 2021-03-18 09:35:52 · 3927 阅读 · 2 评论 -
MyBatis分页插件
前言最近再写一个工具,正好用到了分页的功能,之前考虑直接使用网上开源的分页插件com.github.pagehelper,但是想到之前看松哥的视频,里面有一个自己开发mybatis插件的一节,所以就参考着写了一个自定义的插件,如下:1、分页插件核心代码** * 自定义分页插件 * @program: PostGirl-panent * @description: PageInterceptor * @author: Cheng Zhi * @create: 2021-03-12 18:35原创 2021-03-15 09:40:24 · 140 阅读 · 0 评论 -
jmeter从数据库中获取参数实现接口压测
说明:该案例是我在实际使用中的一个案例:数据库保存了调用记录和调用入参报文,所以我为了模拟真实的接口调用情况,直接把调用记录拿到然后再批量请求一次,达到压测效果,所以我的测试过程大体分为以下几个过程:1、连接数据库、2、查询接口记录表中的所有记录数,用来定义我的循环次数,3、获取调用的入参报文 4、将入参报文组织成真正的请求报文。1、连接数据库1.1添加一个数据库连接1.2 配置数据库连接2、查询数据库2.1、添加jdbc请求2.2、设置查询语句:获取总条数,目的是用来定义后面的循环原创 2021-03-02 16:34:31 · 587 阅读 · 0 评论 -
java使用POI实现excel文件的导入和导出(通用方法)
说明:1、文件导出功能:通过反射获取实体类的属性名和属性值,写入文件是第一行为属性名,从第二行开始为属性值,调用时只需传入一个任意实体集合(List)即可。2、文件导入功能文件导入功能需要定义一个实体类用于接受解析excel后的内容。package com.cz.excel;import com.cz.model.TestCase;import org.apache.poi.hpsf.DocumentSummaryInformation;import org.apache.poi.hpsf原创 2021-03-01 12:52:56 · 1326 阅读 · 6 评论 -
数据库表同步的三种方法
1、前言:最近项目准备上线,要先做一下并行,所以要把调用接口的请求 请求到生产环境的同时也请求到并行环境。我刚开始,写了一个程序,多线程去生成数据库(接口有记录表,记录请求报文)取到请求报文,然后再拼接成curl请求命令,请求到并行环境,结果跑了没半天就差点儿把生产数据库搞挂。原因是,我的程序每五分钟调用一次,调用会获取11个数据库连接,结果因为生产上数据量大,五分钟没有处理完成,另一个调度就调起来了,这样一下午累积下来,产生了上百个连接,生成cpu飙到了%90以上,触发了告警,领导收到了告警短信才发现了原创 2021-01-19 10:01:52 · 10382 阅读 · 0 评论 -
第一次认真阅读HashMap
前言: 之前一直有被问道hashMap,自己回答的也是模棱两可,因为以前一直没有阅读过源码,只是网上百度,看别人写的一些文章,看了过几天就记不住了,平时使用的时候也只是使用,并不会去关注他的底层实现,对hashMap的一些性能也没有深入了解。今天就记录一下阅读hashMap源码的过程。一、如何使用idea阅读JDK源码1、下载的jdk一般都自带一个源码包。以我自己的为例D:\Java\JDK\jdk1.8\date2、检查idea是否引入源码包:第一次使用红框位置应该是两个个.zip压缩包原创 2021-01-09 15:24:34 · 101 阅读 · 0 评论 -
com.sun.proxy.$Proxy2 cannot be cast to java.sql.Connection异常解决
错误如图:代码如图:原因: 在使用动态代理增强Connection连接对象的close方法时报错,但是之前使用mysql驱动没问题,更换为ojebc8时报如上错误,原因时由于数据库驱动不同,Connection.class.getInterfaces()返回的结果也不同,它返回的是一个Class[]数组,然而此数组的第一个元素必须是Connection才能把创建的代理类转为Connection对象,否则就会报错。解决方法: 将Connection.class.getInterfaces(原创 2021-01-02 13:48:13 · 545 阅读 · 0 评论 -
通配符的匹配很全面, 但无法找到元素 ‘cache:annotation-driven‘ 的声明报错
1、报错描述通配符的匹配很全面, 但无法找到元素 ‘cache:annotation-driven’ 的声明2、解决方法命名空间:xmlns:cache=“http://www.springframework.org/schema/cache”缺少命名空间对应的文件信息http://www.springframework.org/schema/cachehttp://www.springframework.org/schema/cache/spring-cache.xsd完整配置如下:.原创 2020-11-05 20:14:38 · 480 阅读 · 0 评论 -
postMan使用方法
1、普通传参代码:请求方式:结果:2、需要获取token信息的请求代码:请求方式:结果:3、带有实体的请求方式,后台为@RequestBody代码:请求入参:结果:原创 2020-11-04 23:13:58 · 89 阅读 · 0 评论 -
通过反射调用接口的方法
前言之前使用公司的框架,业务使用到的一般就是Action→ServiceImpl→Business模式,其中业务逻辑主要写在Businsess中,这个里面有一段和常用但是一直不知道原理是什么,就是下面这段;User user = this.getDao().getBean(UserDao.class).selectUserByUserId(20201031001L);几乎每天都在用但一直没有仔细去理解为什么这么做。今天在写自己的小项目遇到一个问题,刚好就和这个有关,然后就去看了一下。1、背景我自己原创 2020-11-01 20:37:09 · 3004 阅读 · 0 评论 -
ThreadLocal
1、前言运行了n年的代码,现在要在原有逻辑上加一段,这一段主要逻辑就是要兜取一个配置表,然后其他方法判断如果有数据在这个配置表中,那么过滤掉,这个我的设计方案是,将查询配置表得到的结果存放在一个全局变量中List中,后续哪里用到只需判断在不在List中即可,当然也有其他方法,比如,通过方法传参,在每个调用到的方法中都新增一个参数List,但是这样设计改动大,如果修改到的方法其他地方也有调用那么需要全量修改。2、实现过程 // 用于存储AD.FILT_DISPLAY_BILL_ITEM符合条件的数据原创 2020-10-28 10:17:52 · 110 阅读 · 0 评论 -
重新认识泛型
昨天在使用Arthas进行热部署试验时发现个问题:通过jad命令反编译.class文件后生成的源代码(.java文件)进行细微的修改后再次编译却编译失败,通过查看编译失败的日志,发现报了类型转换错误的异常,将.java文件复制到eclilpse中发现报错的地方是这样写的这样写肯定是会报错的啊,但是我原本的代码明明不是这样写的呀,为什么呢??原来在代码编译成.class的时候会进行泛型擦除,只保留了原始类型。程序运行时会自动强转。但是使用idea反编译的.class 文件为什么会正常显示泛型信息呢?原创 2020-10-18 15:46:09 · 147 阅读 · 0 评论