自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java下载多个网络文件并压缩成压缩包保存到本地

开发票的时候远程会返回发票的url,因为一个订单可能不止一张发票,因此需要下载多个远程发票文件并压缩成压缩文件。

2025-03-06 17:38:44 321

原创 springboot集成jackson-dataformat-xml实现发送XML请求和XML响应参数处理

最近在做发票相关的业务,需要对接第三方进行开发票等一系列操作,对方的系统是较老系统,需要采用XML的请求方式。

2025-02-24 22:00:00 514

原创 java.lang.NoClassDefFoundError:com/fasterxml/jackson/databind/AnnotationIntrospector$XmlExtensions

项目需要对接一些老系统,需要采用XML的形式传递参数,因此引入jackson进行序列化,实现bean和xml之间的相互转换。原本以为之前已经有jackson了就不需要引入依赖了,但似乎并没有JacksonXmlRootElement注解,因此引入依赖。引入以下依赖:在实际执行中遇到找不到类的情况,最后发现是因为出现了版本冲突,项目已经集成了jackson2.11.3,而jackson-dataformat-xml也是jackson家族的一员,因此在版本上需要保持一致。把版本号改成2.11.3就可以了。

2025-02-24 21:15:00 336

原创 Redis进阶使用

Redis的大key问题本质上是Redis的key对应的值太大了,比如字符串类型的值到了5M或者集合类型数量集合内元素量达到了5000.

2025-02-15 23:54:16 897

原创 图片生成Prompt编写技巧

该场景是从略微升高的角度拍摄的,鸡尾酒和其他物品在完美无瑕的黑色光滑桌面上全反射,以完美的清晰度反映了上面的场景。灯光从左侧稍微向后排列,投射出柔和的亮点和阴影,展现出鸡尾酒的纹理表面、玻璃杯上复杂的凝结和液体中精致的气泡。相同的景色,从不同的角度去看都会有不一样的体验,可以尝试补充视角来增强效果。例如想要表达宏伟的建筑,可以考虑广角镜头,想要整体的风光,也可以考虑鸟瞰图,还有特写镜头。例如一条狗,可以加上体型、颜色、种类,一条黄色的很可爱的小小个的中华田园犬。比如随风摆动的发丝,正在跳过围栏的小猫。

2025-01-20 11:00:15 828

原创 Java中的深拷贝与浅拷贝探究(利用反射+泛型实现深拷贝工具类)

为了降低演示的代码量,实体类属性的get,set等方法通过lombok的Data注解实现。要引入lombok注解,项目需要是maven项目才行。普通项目还是手动写get,set等方法吧。想直接看深拷贝工具类实现的点这里。安装插件:idea左上角,文件/设置/插件,搜索lombok然后下载。

2025-01-18 22:47:42 733

原创 Spring事务传播机制示例验证

REQUIRED事务传播级别下,父子共用事务,随便一个回滚都会导致整个事务回滚。REQUIRES_NEW事务传播级别下,父事务和子事务是完全互相独立的事务,不会互相影响。NESTED事务传播级别下,父事务和子事务存在影响关系,父事务回滚,子事务一定也回滚;子事务回滚,如果父事务正确处理子方法的异常,则父事务不会回滚。在某些场景下,如果子方法是用来处理一些不太重要的内容,希望这些子方法抛异常不会影响主流程,主流程回滚会回滚这些子方法,则可以考虑给这些子方法使用NESTED传播机制,例如日志打印。

2025-01-08 20:00:23 697

原创 SpringBoot集成E签宝合同签署服务

因为业务需要和购买课程的学员签署合同,因而需要引入E签宝进行合同签署。根据官方指南,主要的接入流程分为生成合同和发起签署。但个人认为应该分成创建合同模板,生成合同,发起合同签署三步。这里的生成合同和发起签署应该都归属于发起签署。

2024-12-26 20:15:00 698

原创 微服务网关初体验

创建过滤器类,实现GlobalFilter,Ordered接口,加组件注解。order的值越小,优先级越高。

2024-12-18 18:00:06 718

原创 Java中的对称加密与非对称加密:基本原理、选型及应用

信息安全在当今数字化时代的重要性不言而喻,它不仅是个人隐私保护的坚固防线,也是企业稳健运营和国家安全稳定的基石。随着信息技术的飞速发展,数据安全风险日益凸显,加密技术应运而生,成为维护信息安全的关键手段。加密技术,简而言之,就是通过特定算法和密钥将明文数据转换为难以解读的密文,确保数据在传输和存储过程中的机密性、完整性和真实性。

2024-12-10 22:36:34 766

原创 docker容器化部署springboot项目

Dockerfile是用来构建docker镜像的文本文件,是一个由一条条构建镜像所需的指令和参数构成的脚本文件。

2024-11-24 22:02:24 1249

原创 刷算法题时遇到的一些不常用但好用的API

3.使用DecimalFormat尝试将浮点数四舍五入取整数,发现如果默认的四舍五入在遇到4.5的时候得到的结果是4而不是5.需要手动设置预估位的进位规则。其他的如5.5,则可以正常进位到6。9.实际笔试中,一些比较难的算法题,想要写出适用于全部场景的代码会比较难,这个时候可以考虑根据场景去写某些场景的结果,这样可以确保能获取一定数量的分。7.遇到很像动规,但有没法同时考虑两边的时候,可以先只考虑一边,有可能需要两边分别算然后再合在一起。1.需要统计数据,同时希望数据是排序的,可以使用TreeMap结构。

2024-11-22 14:45:42 174

原创 Springboot整合Prometheus+grafana实现系统监控

下载官网。

2024-11-12 20:45:00 1434

原创 ACM模式下Java读取控制台输入注意事项及输出规范化

在ACM模式下。需要我们去接受输入的参数,一般是使用Scanner去读取控制台输入的参数System.in。不熟悉的情况下,很容易出现问题,针对常见的问题做一个总结。

2024-11-01 20:15:00 1677

原创 Java实现数据去重的几种方案及其去重原理

之前就有写过实现根据对象的某个字段去重的一个方案,利用Java8的流,不过实际上使用的还是TreeSet。不过,当时对于这个去重原理没有过多深究,只是想着Set结构天生就是去重的,今天再次用到,稍微了解一下原理。

2024-10-30 20:15:00 2114

原创 性能测试——Jmeter实战

应用程序处理请求所需的时间,反映应用程序对请求做出响应的速度。可以使用System.currentTimeMillis()或JMX来测量。:应用程序每秒处理的请求数量,衡量应用程序处理能力的关键指标。可以使用JMeter或ApacheBenchmark进行压力测试来测量。:包括CPU使用率、内存使用量以及垃圾收集(GC)时间等,这些指标反映应用程序对系统资源的占用情况。可以使用Java Management Extensions(JMX)或jstat命令来监控这些指标。

2024-10-27 21:21:58 1218

原创 如何保证系统的高并发,高性能,高可用

假如令牌桶大小设置为100,那么在极限情况下,可能100个请求是同时进来的,这样在接下来的时间里,系统内的请求数会超过100,因为令牌桶还会一直往桶里发放令牌。设置令牌滚轮的最大令牌数量,这就是系统内当前有的令牌数,每次请求进来就获取一个令牌,请求处理完成就将令牌放回滚筒,这样可以保证接口内最多只有设置的最大请求数任务在跑,也能更好地利用系统性能。实现自动扩展机制,在流量高峰期自动给流量大的服务增加新的服务器实例,流量低谷时期自动减少实例,从而支持大规模并发访问,且节省成本。

2024-10-22 22:45:00 1055

原创 centOS部署Jenkins实现项目可持续自动化部署

个人看的是尚硅谷的视频,跟着实战,但因为视频是21年的,所以很容易出现jenkins插件不适配问题。因而个人直接用较新版的jdk和jenkins.sudo su。

2024-10-16 22:45:00 1800

原创 centOS实用命令

至此,jdk切换完成。

2024-10-15 22:45:00 509

原创 Java中常见的等待唤醒机制及实践

在Java中,有一个JDK维度的等待唤醒机制。Object类的wait和notify,notifyAll需要在synchronized同步代码块内并且对象必须获取到锁才能调用。否则会抛IllegalMonitorStateException异常。当线程在尝试获取锁时失败,会被封装成节点(Node)并加入到等待队列中,进行同步等待。等待队列底层是一条维护着头尾指针的Node节点链表。

2024-10-08 22:45:00 753 1

原创 利用腾讯云流媒体从0到1实现直播功能

先说一下直播的大概流程。最简单的流程是主播将直播的画面音频等推流到流媒体服务,然后观众从流媒体服务器拉流来观看。

2024-09-16 15:39:04 692 1

原创 MySQL高级功能-窗口函数

最近遇到需求,需要对数据进行分组排序并获取每组数据的前三名。一般涉及到分组,第一时间就是想到使用group by对数据进行分组,但这样分组,到最后其实只能获取到每组数据中的一条记录。在需要获取每组里面的多条记录的时候,就实现不了了。就算能实现,也得用上比较复杂的SQL嵌套或者业务层实现。

2024-09-12 21:00:00 688

原创 Maven常用打包命令简述

微服务项目之间经常会互相导入其他项目模块,如果还没有生成过依赖,或者新增了类,接口,一般需要用install打包到本地仓库,本地启动才能找到依赖。这个命令会执行package命令的全部操作,之后在本地maven仓库生成该项目的依赖。package:打包项目,这个命令会执行compile命令的全部操作,除此之外还会在target目录生成打包的项目,jar或war。deploy:将本项目打包成依赖,并将依赖打包到本地仓库并推送到远程maven仓库。在实际项目开发中,会经常使用maven的一些命令。

2024-08-20 16:28:53 358 1

原创 ThreadLocal源码分析

ThreadLocal 在 Java 中是一个非常有用的工具类,它提供了线程局部变量的功能。这意味着每个使用该变量的线程都会有一个该变量值的副本,该副本独立于其他线程的变量副本。通过这种方式,ThreadLocal 解决了多线程环境中数据共享和隔离的问题,避免了在并发环境下因数据共享而导致的复杂同步问题。

2024-07-18 19:45:00 1011

原创 MySQL数据库查询索引失效场景

如下图,如果o.id和op.order_id的编码方式不一样的话,索引会失效,并且这个索引失效通过查看执行计划看不出来.加了分组之后,order_no和school_customer_id都是有建索引的。或者两个字段都查的时候也走索引,两个字段都查的时候,SQL执行器会优化查询顺序的.或者尽量让两次排序都用同一个表的字段,这样可以建联合索引让排序也能走索引.LIKE查询的时候如果左侧使用%或者_,索引会失效.但如果查询联合索引左侧的idCard则会走索引。但如果左侧是具体的值,则还可以走索引.

2024-07-16 21:45:00 453

原创 基于Redisson实现分布式锁

B实例的锁和A实例没有关系,那么进入B实例的请求也会获取到锁,然后进入方法。比如redis,redis内部是单线程的,把锁放在redis,这样就可以多个实例共用一个锁。如下图,76.77的key是一样的,从打印的时间上看,两次打印时间相差了5秒,说明后者被阻塞。分布式锁是相对于普通的锁的。普通的锁在具体的方法层面去锁,单体应用情况下,各个进入的请求都只能进入到一个应用里面,也就能达到锁住方法的效果。另一种是通过定义key的参数名,在切面获取方法参数的参数名进行对比,一样的就是所需的参数。

2024-07-01 15:01:35 864

原创 重构观看记录模块——全量拉取直播录播观看记录并统计时长

原有的拉取直播录播观看记录的代码设计复杂且冗余严重,并且在和第三方技术人员沟通中得知录播的实际观看时长应该直接用第三方接口提供的duration,因为观看录播,进入房间之后如果不播放是不会统计实际观看时长的,因此离开时间减进入时间一般不等于duration。目前存在转班的功能,转班的时候会把原来的课表作废掉,然后按照新转的班型去生成新的课表。可以在更换手机号的时候把历史的属于该学员的手机号更换成新的手机号,但这又引出了重新拉取观看记录的时候观看记录匹配不上的问题(第三方的直播观看记录不提供记录唯一标识)。

2024-06-03 16:00:01 715

原创 多线程场景下,因工具类静态方法内使用静态变量导致的数据异常问题

知道在多线程场景下使用共享变量要注意,没留意到工具类里面也可能会有隐藏的坑,下次使用多线程的时候得更加注意才行。

2024-05-16 22:45:00 839

原创 springboot整合rabbitmq的不同工作模式理解

前提是已经安装并启动了rabbitmq,并且项目已经引入rabbitmq,完成了配置。不同模式所需参数不同,生产者可以根据参数不同使用重载的convertAndSend方法。而消费者均是直接监听某个队列。不同的交换机是实现不同工作模式的关键组件.每种交换机类型都有其特定的路由和分发策略。一些概念queue:队列这是最基本的模式,包含一个生产者和一个消费者和一个队列bean。生产者发送消息到指定队列,消费者从该队列中接收消息。如下图:生产者P往queue发送消息,消费者C消费queue里的消息。

2024-05-08 22:19:23 951 1

原创 基于canal监听MySQL binlog实现数据增量同步

canal的数据增量同步底层就是利用MySQL的主从同步机制实现的。将canal伪装成master的一个slave节点,向master节点发起dump协议,master节点在接收到dump协议之后,就会将binlog日志推送给canal,canal拿到binlog日志之后执行相应的操作从而实现数据同步。

2024-04-27 22:47:15 2072

原创 hexo配置教程、主题使用及涉及的技术学习

最近,一直想做一个属于自己的网站.可以从零开始搭建一个网站,顺便可以把日常中学到的技术用于实战,还可以顺便记录自己的所思所感,记录成长的过程.

2024-04-18 20:52:23 795

原创 MySQL innoDB存储引擎多事务场景下的事务执行情况

事务之间的互相阻塞是在执行到更新操作代码并且更新到相同表的相同行记录情况下才会触发的。(相当于需要顺序执行)MySQL innoDB存储引擎 可重复读隔离级别下,事务在第一次查询表记录的时候记录的是整个表的快照,后续查询无论是数据上,还是数据的量上都是快照读。可重复读隔离级别下,依旧存在幻读问题。可重复读的隔离级别要求事务内多次查询同一个表的数据和数据的量保持一致,这意味着事务内读取到的数据量和实际的数据量可能是不一致的,也就是可能读取到不存在的数据或者读取不到已插入的数据,从而出现幻读问题。

2024-04-10 22:00:00 904

原创 企微侧边栏开发(内部应用内嵌H5)

公司的业务需要用企业微信和客户进行沟通,而客户的个人信息基本都存储在内部CRM系统中,对于销售来说需要一边看企微,一边去内部CRM系统查询,比较麻烦,希望能在企微增加一个侧边栏展示客户的信息,提升销售的工作效率。

2024-03-28 15:24:34 5078 21

原创 IDEA POM文件配置profile实现不同环境切换

在企业级开发中,为了不影响生产环境的项目运行,一般情况下都会划分生产环境、测试环境、开发环境。不同环境可以配置不同的数据库、redis连接,这样在开发新功能的时候就不会影响线上环境。

2024-03-03 16:05:52 4447 1

原创 shell脚本编程快速入门

shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。一般是一种.sh文件,通过"sh 文件名"运行shell脚本编程本质上就是将一群shell命令打包到一个文件中去运行.通过打包命令的方式,让用户不需要每次都输入一堆命令来简化使用流程.

2024-01-15 17:15:50 1014

原创 Spring事务失效场景之类内部方法调用及解决方案

在日常开发中,经常有需要使用事务来保证数据一致性的情况。简单点的话直接在方法上面加@Transactional注解就可以了。但这样存在一个问题,在整个业务方法层面加注解会把很多并不需要归入事务的操作也归入到了事务里面,这样会可能会出现大事务的情况,影响系统性能。为了提高系统性能,比较好的一种方案是只把操作数据库的部分代码放到一个方法,给这个小方法加上事务,这样基本不会出现大事务的问题。而要实现这种方案,会碰上很常见的一种事务失效的场景。

2024-01-12 18:15:14 1427

原创 异步导入中使用SecurityUtils.getSubject().getPrincipal()获取LoginUser对象导致的缓存删除失败问题

但当异步的时候,就没有set用户信息的过程,线程内的用户信息还是上一次进入Controller用该线程的用户的用户信息。也就存在数据对不上的情况。(其实是因为只有一个用户,用来用去都只有一个用户,各个线程里面存的都是该用户,当然获取到的是一致的)因为新实现的导入都是直接用一个key作为判断是否存在正常导入的依据,并且异步之后删除key用的也是通过传参传入的LoginUser,而校验用的是ThreaLocal,自然不会出现这种问题。再去看半个小时内是否有导入,还真有,再细看过期时间和导入时间,居然还对的上。

2023-12-13 17:52:34 2352

原创 关于静态内部类和普通内部类的访问权限问题

能直接访问外部类的静态属性,不能直接访问外部类的成员属性。因为静态内部类可以直接创建对象,而不用先创建外部类对象。因为有外部类对象的情况下不一定创建了内部类对象,所以外部类对象不可以直接访问内部类的属性,而内部类可以直接访问外部类的成员属性和静态属性。先定义一下直接访问:类名.方式访问静态属性不算直接访问,直接用属性名访问才叫直接访问。外部类无法直接访问静态内部类的属性,因为创建了外部类,静态内部类不一定有创建对象。对于那种只对某个类有用的一些类,就没必要创建成外部类,可以创建成内部类。

2023-12-01 18:05:43 172

原创 springboot整合easy-es实现数据的增删改查

ES是基于倒排索引实现的,倒排索引中每条记录都是一个文档(JSON格式),系统会先对字段数据进行分词,然后给词条建立索引,并映射到文档id。在查询的时候根据输入进行分词,然后根据词条走索引查询文档id,再根据文档id查询文档并放入结果集,最后将结果集返回。

2023-11-29 15:51:49 1936

原创 表连接连接条件不当导致查询结果变多

首先,课表连接布置作业表,因为课表里面的课节和老师布置作业是一一对应的。综上,需要用课节id和学员id一起作为连接条件去关联表才行,这样才能定位到哪节课哪个人交的作业。一开始我的设计是课表通过课节id和布置作业关联,再接着用课表里面的课节id和作业的课节id关联进行查询。但实际数据比预期要多,因为一个课节会有多个人交作业,但我只关联了课节,这样不同人的作业都会被查出来。联表的时候需要注意联表的连接条件,因为要查询的一般是主表的信息,所以主表的一条记录对应的连接条件一般情况下只会对应连接表的一条记录匹配。

2023-11-13 11:25:08 479

空空如也

空空如也

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

TA关注的人

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