- 博客(33)
- 资源 (5)
- 收藏
- 关注
原创 jacoco插桩源码,看这一篇就够了
jacoco的插桩是一个大家都知道的事情,但是其具体实现是怎样的,怎样干预其过程呢?就需要我们对源码进行解读。
2023-11-11 13:38:24
3074
原创 jacoco多版本报告合并
jacoco提供了一个merge命令可以给我方便的合并代码无变更时的报告,但是一旦代码发生变化,则无法通过jacoco进行直接合并,原因在《》中已经说明,那么针对一次功能测试,势必会进行多轮,每一轮针对变更的数据进行覆盖率增量报告,这是没有什么问题的,但是对于一些需求可能需要展示整个测试的覆盖报告,怎么将变更类的报告也进行合并呢?这就是本文讨论的问题。
2023-08-04 12:24:42
4363
18
原创 intellij 编辑器内性能提示
IntelliJ IDEA已经出了最新版的2023.2,最耀眼的功能无法两个编辑器内性能提示AI Assistant 已经尝试过了是限定功能,因为是基于open ai,所以限定的意思是国内无法使用,今天我们主要介绍是编辑器内性能提示IntelliJ Profiler功能很早就已经有了,他的主要功能是分析代码性能,不需要安装插件,是IntelliJ的内置功能,但是一般人用的比较少,因为结果不是特别方便看(如下图),但是有了编辑器内性能提示。
2023-07-28 14:35:22
1778
原创 SonarQube Api调用指南
好几年前写过一篇sonar api调用的文档,很多人看,但是当时写的比较简陋,很多小伙伴在下方留言,也答应过一些小伙伴些一篇示例,本文主要目的是一篇扫盲贴。
2023-05-08 11:18:52
3241
原创 jacoco dump基于k8s的实现
虽然能从一定程度解决问题,但是这样生成报告的节奏就会被打断,就不能随时生成报告了,这里提供一种解决方式。当我们使用k8s部署服务后,应用实例将会无状态话,用户不再去关心实例的ip,端口等信息,service自动会帮我们做负载均衡等操作,pod不会暴露出ip和端口等信息给集群外部访问,这样对我们的dump操作带来了困难。通过以上手段就可以主动去dump出想要的数据,当然更好的方式是判断exec文件是否存在,或者还在写入中,等写入完成再去获取文件,这个操作也可以通过shell去完成,本文只是提供一种实现方案。
2023-04-28 13:38:28
1786
原创 使用GraalVM实现java调用python脚本
通过查阅资料,找到了一种可行的方案,首先我们了解下什么是GraalVMGraalVM 是一款基于 Java 虚拟机 (JVM) 的新型全栈虚拟机,由 Oracle 公司开发和维护。GraalVM 除了支持 Java 语言之外,还支持多种编程语言,如 JavaScript、Python、Ruby、R 等。高性能:GraalVM 基于 JIT (Just-in-time) 编译技术,在运行时动态生成本地代码,可以显著提高程序的性能。
2023-03-31 14:31:00
2396
原创 java调用groovy如何避免OOM
这里还有一点需要说明的是,我们缓存的key是以脚本md5后的字符串为key,当我们的脚本中存在变量时,因为变量值不一样而导致脚本不一样从而生成新的缓存是积极浪费的。不幸的是CallSiteClassLoader无法回收,groovy也没有提供removeClassPath的方法,我们只能另辟蹊径去处理这个了,好在平台使用jar包调用的地方不多,虽然不能完全避免发生OOM的可能,但是将其尽发生可能的时间拉长,是我们需要解决的问题。我们先来看一下执行一段普通脚本(没有引入jar包)的类加载器的变化。
2022-12-20 11:43:34
1324
原创 jacoco单测报告怎么同步到sonarqube
这里我们看看配置的两个关键点,当生命周期test-compile,即单测编译时触发jacoco的初始化,当生命周期verify时就对jacoco报告进行生成。sonarqube支持多种代码覆盖率的报告展示,最常用的当属jacoco报告,那么jacoco的报告怎么同步到我们的sonarqube中呢?使用上就是这么简单,当然在集成上也会有一些坑,比如springboot运行junit5会出现无法触发的问题等。此命令会触发单测,verify命令会触发报告,然后通过。
2022-11-24 11:35:45
1877
原创 java调用python的方法
目前系统接到一个需求,希望平台能支持运行python脚本,而我们的平台是由java编写的,所有我们需要预言出我们最终的实现方案
2022-08-26 14:30:04
4075
原创 记一次线上sql问题排查
type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range >
2022-06-15 10:00:29
420
原创 记一次Spring注解Component无法将类添加到spring容器
一次使用模板方法模式,刷刷刷两个类写好@Componentpublic abstract class SceneRunAbstractHandler { /** * 获取当前类型的执行 * * @return 类型标识如custom_run,env_run */ public abstract String getType(); public abstract void customRunConf(SceneRunQueryDto
2022-05-26 17:45:10
1126
原创 树状结构表结构和功能设计
在我们开发过程中经常会遇到各种组织树结构,比如我们的公司人员结构,权限资源的管理,等等。而我们这些数据落到表里面是以一条条数据构成的,我们存储资源时按照一条条存储是非常简单的,但是在操作资源构建树的时候往往会碰到很多问题,下面我们以一条实例来探讨组织树资源的表结构设计和功能点。表结构设计(以mysql为基础)我们要设计一个树状结构的数据存储,第一反应是在表里面加一个parent_id这肯定没有错,我们通过数据的id和parent_id就能组装成整个的树结构,但是比如我们的需求往往不是这么简单,比如我
2022-02-17 20:40:16
1554
1
原创 单元测试工具预研
商业工具:AgitarOne似乎是该领域最大的参与者。 还有一个30天的试用版和名为JUnit Factory的免费Web界面。例如,此处对工具的用法进行了独立审查。AgitarOne的测试生成主要集中在回归测试上。(申请免费试用需要企业邮箱,还需要走申请流程,没有申请成功)免费工具:EvoSuite赢得了SBST(基于搜索的软件测试)13届单元测试生成竞赛以及SBST 17届单元测试生成竞赛的冠军。存在该工具的Eclipse插件,Web界面和命令行版本。 有记录的回归标准,测试生成了分
2021-12-21 20:33:24
14881
1
原创 微服务下权限校验方案
微服务权限校验方案欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mark
2021-10-13 10:56:42
1631
2
原创 jacoco之java api调用
我们在使用jacoco的时候,除了使用命令行的方式,可能需要把jacoco的方法嵌入到我们应用程序,自定义一些步骤,有很多小伙伴对这种调用方式很迷惑,这里简单demo,供大家参开下,具体api的方法可以参考官网环境准备我们使用api的方式使用jacoco,首先需要知道我们要做什么动作,比如我们需要生成报告1.引入jacoco core和report包(如果需要使用增量,请使用我的代码编译出的包)这里有个小问题是,core打包的时候是排除了依赖包的,所以我们这里需要将core的依赖包重新引用下
2021-08-26 15:53:14
2282
原创 jacoco 增量方案使用说明书
鉴于上篇jacoco增量覆盖率实践实现了差异代码获取和jaocco二开后,很多咨询我的是测试的小伙伴,对java可能不太熟悉,想要直接使用又赶脚稍许迷茫,所以又写下这边文章来帮助迷茫中的小伙伴拉 组件说明 首先说明一下实现此增量方案所依赖的组件原生jacoco知识 code-diff服务 jacoco二开cli包首先你需要了解jacoco的实现步骤,知道单元测试覆盖率和功能测试覆盖率,而我们通常讲的增量覆盖率一般讲的也是功能测试覆盖率其实单元测试和功能测试其实分别对应jacoco的o
2021-05-27 12:41:42
7804
26
原创 设计模式实战
使用设计模式消除if/else欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何
2021-04-18 21:38:26
693
2
原创 intellij代码审查space
Intellij 2021.1版本作为一个大版本迭代,新增了很多功能,如协同开发,code reviews,支持jdk16等等作为一个程序猿,对于代码审查这种东西一直头疼,之前也接触过gerrit等工具,但是感觉还是操作比较蛋疼,intellij作为一个代码神器,既然有了这种功能必须得尝鲜,下面由我带领大家领略space的风采1. 首先确保你的intellij版本为2021.1space CodeCode Reviews从这个版本开始自带space插件,如果低版本需要自己去插件中心安装此插件![插
2021-04-09 21:03:02
1555
原创 jacoco的多次代码提交merge分析
jacoco的merge命令主要用来合并dump生成的exec文件,具体实施场景为分布式集群环境时由于覆盖请求负载到不同的机器上产生多个exec文件后我们再做merge操作,从何获取到代码的整体覆盖率,具体操作如下图所示:但是官方明确了,只有相同代码生成的exec文件才能做merge操作,那么如下场景我们需要怎么做呢?比如说:项目发测了,第一轮测试dump生成了exec文件后面又进行了两轮测试,从而生成了三份exec文件,而我想查看本次整体测试的代码覆盖率怎么办呢,jacoco官方不知道
2021-03-19 17:35:49
7270
12
原创 Spring源码编译
很多小伙伴在研究spring源码时直接卡在了源码编译过程中,不是慢就是少报,反反复复搞几天,从兴致勃勃到不了了之,本文旨在道明spring源码的核心问题点,帮助大家成功编译成功。首先,从github下载spring源码,根据你的需求下载版本https://github.com/spring-projects/spring-framework.git接着执行一下操作:1.将gradle-bin指向本地的包,不然它每次回去国外下载,超级慢,版本请与源码保持一致,gradle版本之间很多不兼容..
2021-03-10 10:40:11
574
3
原创 jacoco增量覆盖率实践
Jacoco增量覆盖率说明能找到这里,说明对jacoco的原理和使用有了一定的了解,而我写这边文章主要是网络上基本没有完整文档加代码的jaocco增量覆盖说明,所以我想分享些东西让需要这方面的人快速去实现自己想要的功能,那么如果想实现增量代码覆盖率需要做到哪些工作呢?(格式难看到这里看http://note.youdao.com/s/6gM8ONX3)大家在网络上找到的实现方式无外乎三种获取到增量代码,在jacoco进行插桩时判断是否是增量代码后再进行插桩,这样需要两个步骤,一是获取增量代码,二
2021-01-14 15:46:01
24100
22
原创 maven版本自动管理方案
在我们的devops系统中,包管理一向都是一个非常头疼的问题,如果涉及到自研基础包,如common等,更是束手无策,往往让开发自己维护,在snapshot包向release包晋级的过程中,除了要修改应用本身的版本号,还需要修改依赖包的版本号,此过程涉及到pom修改,代码提交,代码构建上传至nexus等等操作,那么我们能不能通过系统自动完成这些操作呢?当然是可以的如图所示,我们一般需要在sit环境测试完毕后需要将snapshot包向release包晋级,我们主要针对这个过程进行详细讲解首先,我们.
2020-08-04 21:41:41
1394
2
原创 maven release操作
在我们开发过程中,测试已经测试完,我们需要将snapshot包转成release包,以前我们往往是这样操作的1.修改pom的版本号为release,然后mvn deploy2.提交代码,并打tag3.修改代码版本为snapshot加1这些操作非常繁琐,而且容易出错,特别是在maven多模块中,更是头疼,那么有没有简单的操作呢?当然有,我们需要用到mvn releasemvn release:preparemvn release:rollbackmvn release:p...
2020-07-29 22:26:19
11241
原创 Jenkins pipeline 共享库最佳实践
一、jenkins 共享库介绍jenkins共享库主要的作用就是将pipeline的具体实现封装成方法,可以方便不同的Jenkinsfile调用,就像java里面的guava工具包,一次封装,到处使用首先我们看看共享库的结构(root)+- src # Groovy source files| +- org| +- foo| +- Bar.groovy # for org.foo.Bar class+- v
2020-07-17 08:57:15
4712
3
原创 maven打包到nexus
一、介绍maven提供了很多丰富的插件,其中有一个就是maven deploy,具体介绍,大家可以查看官网http://maven.apache.org/plugins/maven-deploy-plugin/deploy-mojo.html二、使用那么如何将代码编译,打包,上传到neuxs呢?首先,我们需要对maven进行配置,这段配置的意思是配置了一个名字叫release-test-environment的仓库,其代码仓地址为https://192.168.1.1:8081/repo
2020-07-15 15:38:45
1102
原创 java实战小技巧
Java作为一个生态庞大的语言,在开发过程中,有很多封装好的类或者工具可以给我们提供事半功倍的效果,本文主要总结了开发过程中的一些小细节,通过一些小技巧来提升我们的开发效率,另本文档内容基于jdk1.8。java的空判断java的common包或者spring的org.springframework.util都封装了我们可以直接使用的字符串或集合空判断,一般开发可以统一一种方式进行空判断,可以增加团队代码的可读性和课维护性当然,既然提到了jdk1.8,那自然绕不开Optional当我们想判断一
2020-05-17 16:32:46
386
原创 Sonarqube 安装配置
首先安装好sonarQube1.本项目采用sonar的6.7.1版本,由于sonar不同版本的rest接口差异性比较大,请不要随意变更版本。(7开头版本不支持mysql,请安装postgresql)2.请记录好sonar管理员账号密码,后续需要配置,一般使用admin账号目前开发测试环境sonar http://10.86.42.196:9000 admin admin123预发布环...
2020-04-15 15:45:42
786
原创 Intellij插件推荐
在我们开发过程中,经常会遇到各种各样的问题,同时我们可能需要借助一些工具来帮我们解决这些问题,所谓工欲善其事必先利其器,且君子性非异也,善假于物也,所以我这边给大家推一波Intellij的插件1.RestfulToolkit在Restful大行其道的当代,怎么能少了RestfulToolkit的存在,有时候前端告诉我们一个结果报错了,贴给我们url,我们需要通过url找到具体的Contro...
2020-03-06 10:57:18
281
原创 JVM虚拟机垃圾回收CMS和G1的区别
CMS和G1的区别是我最近在面试过程中经常被问到的一个问题,虽然能答出几点出来,但是自己并不太满意,网上关于两者的对比也没有特别完善的文章,于是打算记录下这篇文章首先我把答案给出来,然后再去分析为什么会这样 CMS G1 JDK版本 1.6以上 1.7以上 ...
2020-01-10 17:00:31
2510
6
原创 策略模式
最近工作都很浮躁,也没怎么看书和学习,觉得这样不好,最近慢慢梳理一下学习的东西,温故知新,废话不多说,下面我们开始讲第一个设计模式——策略模式记得head first设计模式有这样一句话,策略模式就是一种组合的方案,将接口和抽象类组合在一起从而解决代码不灵活和代码重复的问题,“有一个比是一个好”这样来说,我们都学过面向对象设计,万物皆对象(当然不是指女票),一个对象有很多属性,比如说人,有...
2019-04-12 17:00:41
115
原创 sonarQube的Api调用总结
最近公司开发涉及到对Sonar获取数据和创建用户等操作,Sonar为我们提供了web Api,同时,在sonar5.x版本之前还贴心的为我们提供了sonar-ws-client,但是由于之后版本迭代比较快,接口差异大,sonar-ws-client在较新的版本中已不在适用。 有人说官网上不是提供了Api么,是的,我们需要自己再封装一下,本帖为扫盲贴,大神请绕道,首先在适...
2018-07-12 09:14:21
23862
28
原创 java字符串连接符号+解密
相信很多人和我一样,在刚开始编写java程序时,只要出现字符串连接的地方直接一个“+”,觉得简单,方便,省事。后来随着编码越来越多,阅读的书籍也越来越广,开始知道,在一些环境下使用StringBuilder(jdk1.5之前是StringBuffer,StringBuffer是线程安全的,但是在普通情况下使用反而会导致性能急剧下降)的效率会比高,相信大家查阅资料都可以知道,java编译器经过编译后...
2018-03-28 14:16:17
3994
原创 SpringBoot2.0接入quartz
SpringBoot的出现给我们带来了很多方便,基本上可以基于注解解决掉所有的配置,但是正因为它的迅速迭代,相关文档跟不上,所以有很多坑需要我们去踩,下面将给大家介绍Spinigboot2.0版本对接Quartz任务。首先我们来了解一下spring常用的任务框架:1.Spring Schedule2.QuartzSpring Schedule是Spring自带的任务框架,简单说他就是一个简化版本的...
2018-03-21 11:27:33
15387
5
maven+springmvc+mybatis+ajax实现增删查改和登录
2014-03-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人