Java
文章平均质量分 56
Java
HumorChen99
learn more and more,持续更新文章,快关注我。
展开
-
新版报表系统(明细报表、看板、数据大屏)方案&介绍
现有报表系统采用直连业务数据库多表关联查询方式实现,速度慢,性能差,非常多报表打开慢或者白屏,需要数十秒,导出数据时经常失败,等待时间长,无法导出数据,在多人同时导出时甚至整个报表系统崩溃。点击导出excel后可在下载中心查看到该任务正在导出,导出完成后会弹窗提示导出完成,前往下载中心点击下载报表数据Excel文件。新版报表系统采用数仓方案搭建并开发实现,性能好,报表秒开,导出稳定快速,界面美观,筛选数据方便。新版报表系统支持开发数据大屏,在双十一、618等重要活动可直接制作大屏查看活动数据。原创 2024-09-05 10:37:47 · 397 阅读 · 0 评论 -
数据仓库技术选型方案文档
Flink CDC 是 Flink 的子项目,是 Flink 的一组原连接器,用于 CDC 从不同数据库接收/更改数据,Flink CDC 将 Debezium 集成为引擎,异步或数据更改,因此 Flink CDC 可以充分使用和发挥 Debezium 的能力,并且可以无缝对接 Flink 使用其 SQL API 和 DataStream API 的能力,最终写入各种数据源。它基本能够满足各种数据分析类的场景,并且随着数据体量的增大,它与Spark、Impala、Kylin对比,优势也会变得越为明显。原创 2024-09-03 18:20:32 · 3065 阅读 · 0 评论 -
Flink CDC MySQL数据同步到Doris表同步配置生成工具类
【代码】Flink CDC MySQL数据同步到Doris表同步配置生成工具类。原创 2024-08-30 13:51:06 · 507 阅读 · 0 评论 -
java maven项目如何分析循环依赖并使用maven helper插件排查排除依赖
java maven项目如何分析循环依赖并使用maven helper插件排查排除依赖原创 2024-08-07 14:28:37 · 260 阅读 · 0 评论 -
项目中引入RedisTemplate和Redisson时RedisTemplate无法使用zset问题(栈溢出stackOverflow)深入源码分析解决
项目中引入RedisTemplate和Redisson时RedisTemplate无法使用zset问题(栈溢出stackOverflow)深入源码分析解决原创 2024-08-02 11:17:58 · 1022 阅读 · 0 评论 -
java springboot Reflections工具扫描项目中带有某个注解的方法(类似@SpringBootApplication扫描各种注解)
java springboot Reflections工具扫描项目中带有某个注解的方法(类似@SpringBootApplication扫描各种注解)原创 2024-08-01 18:55:47 · 338 阅读 · 0 评论 -
MybatisPlus 不建议使用默认saveBatch/saveOrUpdateBatch,插入数据时性能差、有长事务、锁、键冲突问题(深入源码分析)
因此你可以想象到在大量数据使用这个方法执行保存或更新的时候,n条记录要执行则会查这n条记录主键ID的记录出来(如果数据的主键ID有值),查一条然后更新一条,要是一千万条那得啥时候去啊,而且开启了事务,你的更新操作是会上锁的,于是这个事务会占用大量锁资源。判断的时候会判定这个数据对象的主键ID字段是否为空或者根据这个主键ID去表里查这个数据出来看查出来的数据对象是不是空(没必要查出整行记录的,直接用count不好吗)字段1=values(字段1),字段2=values(字段2)(字段1,字段2,…原创 2024-07-30 16:57:01 · 847 阅读 · 0 评论 -
Java开发工具、插件备忘录
Java开发工具、插件备忘录原创 2024-07-19 10:46:07 · 664 阅读 · 0 评论 -
springboot nacos的各种注解、手动操作监听配置变化(监听指定DataId/监听任何变化)
由于我写的这个是基础包-权限中需要监听某些配置,给路径白名单,方便发布后出问题能及时修复权限拦截问题,但是操作nacos时是操作项目所在nacos配置,因此无法在使用指定DataId这种方式去监听变化并实现加白逻辑,需要监听任何配置文件变化。这个是用来监听某个dataId的配置发生变化的,发生变化时执行方法,并把最新值作为参数传入。nacos提供的注解,用于注入一个配置值,使用表达式定位。这个注解是用在类上的,标明该类要注入nacos里的配置。@Value是spring提供的注解,注入值。原创 2024-07-18 14:51:37 · 1131 阅读 · 0 评论 -
利用位运算实现一个整数保存32、64种0/1状态,状态可修改(例如实现首次登录奖励等操作)
实际使用中我们可能经常需要存储这个用户是否领取过新手奖励、首次充值奖励等操作状态,我们不会每次都给这个用户加一个字段或者建个表保存这个0/1的状态信息,我们一般使用位运算实现,给用户设置一个状态字段(字段类型用整数、长整数都可以,字段类型有多少位就支持存储多少个状态),字段默认值是0,对状态存储的整数进行位运算,实现状态的增删改查,例如一个整数,有4字节,32个位,因此可以存储32个状态,每个状态占1个比特。接口 IBitStatus。原创 2024-07-17 14:59:45 · 197 阅读 · 0 评论 -
MybatisPlus 多数据源 @DS 选择深入源码理解原理
数据源的确定,数据源的选择都已经知道了,我们看下数据源的加载,在自动配置类里有个DynamicDataSourceProvider我们点进去看其实就是个保存数据源名称和数据源包装对象的map罢了。前面我们看到拦截器是实现MethodInterceptor实现的,那拦截的是哪些方法呢,我们看源码里的自动配置类,我们去看每个框架的时候都可以从关键功能或者自动配置文件去作为入口,在里面我们可以看到有个DynamicDataSourceAnnotationAdvisor,动态数据源注解通知,我们看源码里怎么写的。原创 2024-07-10 14:41:12 · 691 阅读 · 0 评论 -
步步深入SpringMvc DispatcherServlet源码掌握springmvc全流程原理
我们看下这个是怎么注册的,搜索RequestMappingHandlerMapping的使用,找到这个地方注入的,WebMvcAutoConfiguration,这个类在spring-boot-autoconfigure-2.2.3.RELEASE.jar这个包里先创建了RequestMappingHandlerMapping对象,再塞入拦截器等组件。原创 2024-06-27 17:38:40 · 931 阅读 · 0 评论 -
MySQL 7种Join的定义&图解&示范&结果(所有join类型)
笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}原创 2024-06-26 18:31:47 · 2422 阅读 · 0 评论 -
JAVA 注解搜索工具类与注解原理讲解(获取方法、类、实现接口、注解上的注解上所有的某个注解,继承的注解也支持)
JAVA 注解搜索工具类与注解原理讲解(获取方法、类、实现接口上所有的某个注解,继承的注解也支持),基于Spring的AnnotatedElementUtils工具,支持从当前类、父类、接口搜索(支持限制最大深度),支持传入搜索配置、启用缓存。可解决注解定义在注解上(A注解上定义了B注解,拿到B注解)、类上、接口上、继承的类、接口上获取不到的问题。原创 2024-06-19 11:46:56 · 541 阅读 · 0 评论 -
java 对象实际占用内存大小预估工具类ObjectSizeUtil
java 对象实际占用内存大小预估工具类ObjectSizeUtil ,返回对象占用预估字节数,返回字节数对应格式化后的字符串(xx Kb)依赖了lombock和hutool,项目不用这个可以去掉日志,稍微改写一下。原创 2024-06-18 11:04:25 · 422 阅读 · 0 评论 -
spring启动时执行一些代码的7种方式讲解&代码示范
本文全面探讨了Spring Boot启动阶段执行初始化操作的几种常见方法,包括监听事件、实现接口以及使用注解等多种策略,具体如下:监听ApplicationContext事件:通过实现ApplicationListener接口,监听ContextRefreshedEvent事件,可在Spring容器初始化完成后执行初始化逻辑。这种方式适用于需要在所有Bean加载完毕后进行全局性初始化操作的场景。原创 2024-06-14 15:34:48 · 1003 阅读 · 0 评论 -
springmvc 全局异常处理器配置的三种方式&深入底层源码分析原理
springmvc 全局异常处理器配置的三种方式&深入底层源码分析原理,配置全局异常处理器的三种方式,实现接口HandlerExceptionResolver并配置到WebMvcConfigurer,注解@ExceptionHandler原创 2024-06-11 22:34:03 · 1233 阅读 · 0 评论 -
java debug断点的时候其他线程还在跑吗?断点是怎么实现的?(断点调试原理讲解)
Debug断点调试的时候其他线程全部会被挂起,Debug的时候将被断点的行字节码替换为了特殊标识,并在Debug BreakPoint管理器中保存了这行原本的代码字节码是啥,触发断点的时候会发出断点事件、挂起所有线程,实践了也确实是这样。所以在设置断点的时候,jvm做的事情,就是根据断点对应的方法和字节码的位置,找到设置断点的位置,然后把正常的字节码替换为0xca,并保存好原来的字节码用于恢复。平时我们都会使用IDE进行Java的断点调试,你是否有去思考过,为什么我打下一个断点,程序就会停下来?原创 2024-06-03 20:25:58 · 1154 阅读 · 1 评论 -
Java程序排查问题利器之Btrace
BTrace是Java的安全可靠的动态跟踪工具。他的工作原理是通过 instrument + asm 来对正在运行的java程序中的class类进行动态增强,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数、返回值、全局变量和堆栈信息等,并且做到最少的侵入,占用最少的系统资源。正如上面描述的一些特性,所以btrace一般是用来排查生产环境jvm问题的一款利器,使用它不用再担心应用程序的日志打的不够全,不够细,也不用为了排查问题一遍遍的重启程序。原创 2024-06-03 19:32:16 · 925 阅读 · 0 评论 -
springcloud Feign调用拦截器(统一处理拷贝请求头实现透传信息、内部调用鉴权、打印feign调用)
实现接口 feign.RequestInterceptor 并注入到IOC容器即可生效。原创 2024-06-03 10:40:39 · 635 阅读 · 0 评论 -
Arthas火焰图分析应用性能
1、什么是火焰图火焰图(Flame Graph)是一种用于可视化性能分析的图表,最初由Brendan Gregg开发。它主要用于分析CPU使用情况和函数调用堆栈。火焰图以图形的形式展示了函数调用的层次结构和时间分布,可以帮助开发人员快速定位应用程序中的性能瓶颈和热点。在火焰图中,每个矩形代表一个函数,矩形的宽度表示该函数在采样中出现的频率或占用的CPU时间,矩形的高度表示函数的调用深度。火焰图的顶部是应用程序的入口函数,底部是最深层次的函数。原创 2024-05-23 16:58:36 · 2503 阅读 · 0 评论 -
个人收藏-Java轻量权限框架sa-token(很不错,gitee 46k star/ github16K star)
基本上你想要有的权限功能它都支持了,看完文档就会用了。原创 2024-05-23 15:59:44 · 875 阅读 · 0 评论 -
在线训练场killercoda推荐(arthas、k8s在线训练,国外免费的)
刚在玩火焰图,看到arthas跳去的是一个训练的网站,分享记录下,方便下次用。参考博客介绍killercoda。原创 2024-05-22 17:29:49 · 339 阅读 · 0 评论 -
Redis GUI桌面客户端首推Another Redis Desktop Manager(最好用)
🚀🚀🚀 更快、更好、更稳定的Redis桌面(GUI)管理客户端,兼容Windows、Mac、Linux,性能出众,轻松加载海量键值AnotherRedisDesktopManager简介地址AnotherRedisDesktopManager国内Gitee下载地址。原创 2024-05-22 16:59:02 · 569 阅读 · 0 评论 -
JWT 介绍、token结构、示范代码与性能测试
JWT,全称是Json Web Token, 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;数据格式声明类型,这里是JWT签名算法,自定义我们会对头部进行base64加密(可解密),得到第一部分数据用户身份信息(注意,这里因为采用base64加密,可直接解密,因此不要存放敏感信息)tokenID:当前这个JWT的唯一标示注册声明:如token的签发时间,过期时间,签发人等这部分也会采用base64加密,得到第二部分数据。原创 2024-05-17 09:29:41 · 827 阅读 · 0 评论 -
maven deploy项目发布到中央仓库GPG签名失败signing failed: No secret key
maven deploy项目发布到中央仓库GPG签名失败signing failed: No secret key,在我执行命令打包项目到中央仓库时失败。gpg: signing failed: No secret key原创 2024-05-12 02:53:05 · 420 阅读 · 0 评论 -
jmeter 指定QPS压测接口
压测开始后qps按我的配置要求逐渐稳定到了10qps当你配置更高的qps时,会受限制于线程数、服务器每秒能接受的请求数、限制的qps、网络吞吐量等,取瓶颈最小值,可以根据实际需要不断修改参数压测。原创 2024-04-22 16:30:31 · 1104 阅读 · 0 评论 -
MySQL 列数据跨表拷贝,一句SQL快速将表A每条记录的某些字段拷贝到表B每条记录的某些字段(A、B表通过ID等字段对应)
新建了一张表B,需要从现有的A表的拷贝一部分字段过来,他们每行有个ID字段能一 一对应,做冗余数据。UPDATE t_b INNER JOIN t_a ON t_b.id = t_a.id SET t_b.c1 = t_a.c1, t_b.c2 = t_a.c2 ;原创 2024-04-16 16:41:29 · 402 阅读 · 0 评论 -
nacos服务器挂了之后springboot/springcloud服务会挂吗?不会挂(顺便深入源码分析nacos配置中心客户端核心功能实现)
看源码第一步找到maven依赖展开,看看文件夹、文件名,粗略过一遍有些啥文件如果你有直接调用源码里的方法就直接通过方法进去看怎么实现的如果没有直接用某个方法,那就去看目录、相关文件逐步分析理解。原创 2024-04-12 10:51:12 · 1243 阅读 · 0 评论 -
积木报表Excel数据量大导出慢导不出问题、大量数据导不出问题优化方案和分析解决思路(优化前一万多导出失败,优化后支持百万级跨库表导出,已开源)
原积木导出有两种导出,直接导出和大数据导出(大数据导出是做了优化去掉了一些样式之类的,性能更好)实测中发现原积木大数据导出性能:1万条数据导出耗时30秒,1.5万条耗时1.5分钟导出失败,数据超过一万条后经常导出失败,还会导致容器实例探活失败/内存撑爆重启异步+自实现导出功能优化方案导出性能:34.6万条数据一次导出耗时2.5分钟,导出时快速返回空数据文件,避免页面死等不可用,导出后的表格是在线OSS的文件URL直接每个人都可以快速下载,可随时多次下载。原创 2024-04-07 14:20:40 · 1651 阅读 · 3 评论 -
SpringCloud Hystrix 服务熔断、服务降级防止服务雪崩
如果达到最大并发请求数,请求会被拒绝。引发第三方重试不断调用我们接口,这个接口又会调用其他接口,在突发大流量时会引发雪崩,且雪崩积攒的重试流量会把刚滚动启动的实例(实例有探针发现持续两次不响应ping就会滚动重启实例,起一个新的,回收旧实例)又打垮,因此需要加入服务熔断、服务降级,让系统将无法消化的流量直接熔断返回报错,让服务不被阻塞住。Hystrix,英文意思是豪猪,全身是刺,刺是一种保护机制。处理调用的线程池核心线程一个,任务队列长度为10,超出的请求会被熔断打回,在执行和队列里的请求没事,正常执行。原创 2024-04-03 15:57:47 · 1313 阅读 · 0 评论 -
【深入日志打印】log.error(“你好{}“, “世界“, e);只有一个占位符是否会打印后面多出的参数呢?(详细跟进源码讲解调试分析)
直接在try里弄一个除以0的报错,然后打印日志,日志字符串里只设置了一个占位符,传2个参数过去,是否会打印两个参数呢?原创 2024-03-27 10:37:59 · 1325 阅读 · 0 评论 -
java 线上生产问题排查思路,jvm内存溢出实例重启原因排查生产实战
项目组线上生产环境不定期的发生内存爆满然后实例重启,实例发布上线后实例内存不断增长最后维持在百分之九十多,十分危险。因此我参与到了排查中,本篇博客将记录排查过程和思路。原创 2024-03-18 20:55:06 · 1698 阅读 · 0 评论 -
java 两个Dto对象有字段数据不一致可Objects.equals方法却返回了一致?(问题分析与结论)
可以从字节码看到,对父类做了equals比对!你可能和我一样会去对比两个类的差别,最开始的类有@FieldNameConstants注解,后面的没有,但是测试过后,这个加或不加都不影响维持现状,另一个就是base类是否在一个目录下,这个测试了仍然不影响。运行代码得到的结果,是不是有点懵,明明pageNo这个字段的值一个是1,一个是10,为啥equals还能相等呢?到此,你弄懂了为啥这两个对象equals会返回相同,解决办法是加注解声明equals方法要比较父类的equals。我也懵了啊,再去看看字节码。原创 2024-03-18 09:54:49 · 341 阅读 · 0 评论 -
java springmvc/springboot 项目通过HttpServletRequest对象获取请求体body工具类
【代码】java springmvc/springboot 项目通过HttpServletRequest对象获取请求体body工具类。原创 2024-02-27 16:41:13 · 1244 阅读 · 0 评论 -
java Excel导出依赖技术选型mark
不要使用apache poi(性能差,占用内存大,比阿里的大好几倍的内存),应该使用阿里的easyexcel(性能好,占用内存少)原创 2024-02-21 10:18:23 · 280 阅读 · 0 评论 -
原创java开源项目发布maven全球中央仓库详细过程示范和遇到的问题解决办法
打包好的依赖项第一步 注册sonatype账号地址:https://issues.sonatype.org/secure/Signup!default.jspa看不懂英文的兄弟请用chrome网页翻译账号注册之后似乎还有个邮箱认证把,有的话去邮箱里打开认证通过链接。账号密码一定要记住了,保存好,并且最好是复杂的密码,后面还需要用到的。地址:https://issues.sonatype.org/secure/Dashboard.jspa去创建问题,地址:创建问题项目选择:Community原创 2024-02-20 11:01:58 · 976 阅读 · 2 评论 -
maven项目javadoc生成文档过程乱码解决办法
打包的时候javadoc乱码。或者弄一个系统变量也可以的。修改文件编码为utf8。原创 2024-02-19 16:11:31 · 331 阅读 · 0 评论 -
Unable to make field private JavacProcessingEnvironment$DiscoveredPro报错解决办法
maven项目打包报错Unable to make field private com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors com.sun.tools.javac.processing.JavacProcessingEnvironment.discoveredProcs accessible: module jdk.compiler does not "opens com.sun.tools原创 2024-02-19 13:51:17 · 2772 阅读 · 2 评论 -
redis redisson报错 Unsupported protocol问题原因和解决方案
redisson没对老版本协议做兼容处理,一旦你升级版本就出现不兼容协议就这样报错了~不对老版本协议做兼容措施,有点憨八龟~原创 2024-02-02 11:03:49 · 1518 阅读 · 0 评论