自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 资源 (1)
  • 收藏
  • 关注

原创 Cookie、Session、Local Storage和Session Storage区别

(5)Session保存在服务端,常用于用户认证(存储用户的登录状态,判断用户是否已经登录)、购物车功能(存储用户在购物车中的商品信息)、记录用户偏好设置(存储用户的个性化设置,如语言、时区等)、保存游戏状态(在游戏中存储用户的进度和状态)等场景,但是使用 Session时需要考虑安全性问题(如XSS攻击、CSRF攻击),确保用户数据的安全。Session由服务端生成,它代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的,Session对象用来存储特定用户会话所需的信息。

2025-07-21 15:58:16 479

原创 flowable表结构

此表和ACT_RE_DEPLOYMENT是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG图片文件。1.全局参数, 默认三个参数next.dbid, IdGenerator区间, schema.history, 自动执行sql历史, schema.version, 当。记录机制基于Activiti引擎的事件机制的一般用途,并默认禁用。

2025-07-16 15:33:39 584

原创 smart-doc的接入

这个文档工具在目前我所经手的项目中广泛之使用,如图,需要的功能基本都有了🥰。

2025-07-15 14:09:00 609

原创 springboot 多数据源启动报错

报错内容如下:解决方式如下:})...

2025-07-11 10:41:05 160

原创 SpringBoot中如何引入第三方的SDK

在项目中经常会遇到使用第三方SDK情况,即就是第三方生产的jar包,但是这个不能上传到maven仓库中,由于我们的项目需要依赖到这个SDK,那么我们可以通过以下的几步就可以轻松的引入SDK到我们项目中。(1)三方的jar包放到项目的src/main/resources目录下。(2)添加maven依赖。

2025-07-09 17:43:30 173

原创 git 报错fatal: refusing to merge unrelated histories

等等,就是这样完美的解决咯!

2025-07-09 14:42:43 191

原创 Spring 为何需要三级缓存解决循环依赖,而不是二级缓存

循环依赖处理示例分析(AService ↔ BService):1、AService实例化,其ObjectFactory被存入三级缓存2、 AService开始属性填充,发现需要BService3、 触发BService加载流程:3.1、 BService实例化,其ObjectFactory存入三级缓存3.2、 BService开始属性填充,发现需要AService。

2025-07-03 11:18:33 868

原创 idea多线程编译设置

设置下线程数。

2025-07-03 09:28:31 69

原创 JVM的场景优化

这么做的结果就是,过了一段时间后,OOM依然会出现。死锁并没有第一种场景那么明显,web应用肯定是多线程的程序,它服务于多个请求,程序发生死锁后,死锁的线程处于等待状态(WAITING或TIMED_WAITING),等待状态的线程不占用cpu,消耗的内存也很有限,而表现上可能是请求没法进行,最后超时了。混合回收的基于复制算法的,所以大对象的复制会比较耗时,如果某个老年代的Region超过85%的对象是存活的,那他不会被回收,通过 -XX:G1MixedGCLiveThresholdPercent 设置。

2025-07-02 15:26:07 634

原创 flowable工作流的学习demo

需要注意的是,Authentication.setAuthenticatedUserId(currentUserId) 方法设置的当前用户ID在任务完成时对历史表产生影响是在任务监听器中触发的,例如在 “complete” 事件的任务监听器中执行了设置当前用户ID的操作。通常在开启一个新的流程实例、完成任务或者进行其他涉及用户身份的操作时,我们可以通过 Authentication.setAuthenticatedUserId() 方法设置当前用户的身份信息,以保留用户与相应操作的关联。

2025-06-14 22:58:51 661

原创 idea配置迁移

注意:最重要一点,如果安装idea时经过设置的,最好把原先\Roaming\JetBrains\IntelliJIdea2022.3.2复制到D:/software/IntelliJ IDEA 2022.3.2/config、\Local\JetBrains\IntelliJIdea2022.3.2复制到D:/software/IntelliJ IDEA 2022.3.2/system里面的数据原封不动的复制一份到目标目录,然后重启idea就可以了。更改IDEA的默认设置目录。

2025-06-14 20:09:51 414

原创 Java并发容器框架

/ node数组最大容量:2^30=1073741824// 默认初始值,必须是2的幕数//数组可能最大值,需要与toArray()相关方法关联//并发级别,遗留下来的,为兼容以前的版本// 负载因子// 链表转红黑树阀值,> 8 链表转换为红黑树//树转链表阀值,小于等于6(tranfer时,lc、hc=0两个计数器分别++记录原bin、新binTreeNode数量,<=UNTREEIFY_THRESHOLD 则untreeify(lo))

2025-06-10 14:09:42 997

原创 高并发下的计数器,为什么阿里不推荐使用 AtomicLong

LongAdder 是 JDK1.8 由 Doug Lea 大神新增的原子操作类,位于 java.util.concurrent.atomic 包下,LongAdder 在高并发的场景下会比 AtomicLong 具有更好的性能,代价是消耗更多的内存空间。LongAdder 是 Google 开源的一个高性能计数器实现。它采用了一种分段锁的策略,将一个 long 型的变量分割成多个 16 字节的段,每个段都使用一个独立的 AtomicLong 进行更新。

2025-06-04 14:14:38 925

原创 常用工具网站

https://github.com/dail8859/NotepadNext/releases

2025-06-04 13:33:48 89

原创 synchronized实现原理

synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法进入临界区,同时还可以保证共享变量的内存可见性。

2025-05-30 13:45:18 651

原创 springboot文件上传下载

SpringBoot中,类型可以精确控制HTTP响应,为文件下载提供完善的HTTP头信息。• 完全控制HTTP响应和头信息• 适合各种资源类型的下载• 支持动态生成的文件下载• 需要精确控制HTTP响应的场景• 动态生成的文件下载• 自定义缓存策略的文件服务。

2025-05-30 11:17:41 663

原创 多线程的一些概念

两个或两个以上的线程持有不同系统资源的锁,线程彼此都等待获取对方的锁来完成自己的任务,但是没有让出自己持有的锁,线程就会无休止等待下去。线程竞争的资源可以是:锁、网络连接、通知事件,磁盘、带宽,以及一切可以被称作“资源”的东西。如上图所示,Thread-1持有资源Object1但是需要资源Object2完成自身任务,同样的,Thread-2持有资源Object2但需要Object1,双方都在等待对方手中的资源但都不释放自己手中的资源,从而进入死锁。

2025-05-29 11:29:18 565

原创 ReentrantReadWriteLock读写锁

读取锁和写入锁都支持锁获取期间的中断;Condition支持。仅写入锁提供了一个 Conditon 实现;读取锁不支持 Conditon ,readLock().newCondition() 会抛出 UnsupportedOperationException。

2025-05-28 14:12:54 312

原创 volatile底层原理详解

Java语言规范对于volatile定义如下:Java编程语言允许线程访问共享变量,为了确保共享变量能够被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量。首先我们从定义开始入手,官方定义比较拗口。通俗来说就是但是它并不能保证多线程的原子操作。这就是所谓的线程可见性。。

2025-05-28 13:50:12 733

原创 了解final

按照final修饰的数据类型分类:

2025-05-23 17:08:08 1055

原创 Yavi用一行代码实现各种复杂验证

适用于任何对象的约束。包括Java Beans、Records、Protocol Buffers、Immutables等。支持API,以及结合验证结果和验证器的功能,融入了函数式编程的概念。类型安全的约束,不支持的约束不能应用于错误类型。在创建对象前对参数进行验证。

2025-05-23 16:55:54 159

原创 import*的展开(开发工具)

Java社区和许多编码规范(如Google Java Style)推荐明确导入所需的类,而不是使用通配符导入。很多IDE(如 IntelliJ IDEA、Eclipse)在自动补全功能上对于明确导入的类支持更好,使用。明确的导入语句有助于快速了解类的依赖关系,便于管理和修改。隐藏了实际使用的类,其他开发者在阅读代码时需要额外查找具体使用了哪些类,增加了理解代码的难度。虽然现代编译器和JVM对导入语句的处理非常高效,但在大型项目中,过多的。可能导致编译器无法明确识别要使用的具体类,进而引发编译错误。

2025-04-24 17:38:16 479

原创 easyexcel工具类

【代码】easyexcel工具类。

2025-04-03 14:16:45 111

原创 redis检测大key

【代码】redis检测大key。

2025-02-25 10:46:04 205

原创 springboot 导入其他配置文件

从 Spring Boot 2.4 开始,支持通过属性导入其他配置文件。

2025-02-21 14:15:14 410

原创 在线正则网站

Github 地址:https://github.com/CJex/regulex。地址:https://jex.im/regulex/#!flags=&re=

2025-02-21 11:26:54 193

原创 红包算法实现

微信红包的分配算法通过将额度范围设置为这种设计既符合数学逻辑,也满足了用户体验的需求,是一种非常巧妙的算法设计。下面是一个基于 Java 的实现,用于模拟微信红包的分配算法。该算法的核心思想是:每次随机生成一个金额,范围在之间,同时确保总金额能够合理分配。

2025-02-20 10:43:25 244

原创 如何利用 Java 在线生成 PDF 文件

iText,对,没错,它就是我们今天的主角。iText是著名的开放源码站点一个项目,是用于生成PDF文档的一个java类库,通过iText不仅可以生成PDF或rtf的文档,而且还可以将XMLHtml文件转化为PDF文件。iText目前有两套版本,分别是iText5和iText7。iText5应该是网上用的比较多的一个版本。iText5因为是很多开发者参与贡献代码,因此在一些规范和设计上存在不合理的地方。iText7是后来官方针对iText5的重构,两个版本差别还是挺大的。

2025-02-17 14:16:10 614

原创 为什么数据库和数据库连接池不采用类似java nio的IO多路复用技术使用一个连接来维护和数据库的数据交换?

传统的阻塞IO为了提高效率,需要创建一定数量的连接形成连接池,而nio仅需要一个连接即可(大部分情况下一个连接即可)。但是一般我们在使用DB时,还是经常性采用c3p0,tomcat connection pool等技术来与DB连接,哪怕整个程序已经变成以Netty为核心。至于这些事件的处理方式,到底是业务代码循环着处理、丢到队列里,还是交给线程池处理,由业务代码决定。对于使用DB的程序来讲,不管使用多路复用,还是连接池,都要维护一组网络连接,支持并发的查询。在网络服务中,IO多路复用起的作用是。

2024-12-25 16:51:07 429

原创 防重复提交思路

只有一个针对锁的获取:acquiretryAcquire传入信息。至于锁的释放,则交给实现者自己实现。

2024-12-24 16:34:09 981

原创 Spring Boot整合EasyExcel并行导出及Zip压缩下载

这种方案特别适合需要处理大量数据导出的企业系统,在提升效率的同时,保证了系统的稳定性和可扩展性。首先,我们需要引入相关的依赖,包括 Spring Boot 和阿里巴巴的 EasyExcel 组件,此外还需要使用 Java 的 Zip 工具进行压缩操作。通过使用并行处理,可以同时生成多个文件。在这个例子中,假设我们有一个订单表,我们将导出每个用户的订单信息到不同的 Excel 文件中。:假设我们要导出上百万条订单数据,首先需要根据用户或其他条件将数据进行分片,每片数据导出到不同的 Excel 文件。

2024-12-13 11:16:35 724

原创 StreamingResponseBody:处理大批量数据导出

这种方式非常适合处理大文件下载、大批量数据导出等场景,因为它可以避免一次性加载所有数据到内存中,从而减少内存占用并提高性能。我们将采用StreamingResponseBody来实现流式响应,同时结合分页查询和异步处理。以下是带有详细注释的优化实现。Spring框架中,StreamingResponseBody 是一个接口,:只在需要时加载数据,并立即发送给客户端,减少了对服务器内存的压力。:数据可以分块地发送给客户端,而不是等待整个文件准备完毕。:用户无需长时间等待,文件开始生成后即可逐步接收到内容。

2024-12-06 15:44:28 993

原创 Java操作PDF:一键生成文件,插入文字、选项、签名及公章

使用word,制作一个模板。

2024-11-12 10:53:16 574

原创 解决 attempt to unlock lock, not locked by current thread by node id redisson异常

3.多线程竞争的问题,当第一个线程完成lock,此时并未 unlock,第二个线程未获取到锁,但执行finally,第二线程尝试着去释放第一个线程的锁。就是问题的翻译如下:尝试去释放不是当前线程持有的锁。2.多线程竞争的问题,当第一个线程完成lock,此时并未 unlock,如此,第二个线程尝试获取锁,并进行lock操作,会抛出该异常。1.当你在完成lock后,里面的业务代码执行时间大于lock时间时,进行unlock,会抛出该异常。为什么会这样,由于在进行lock操作时,会设置一个时间默认30s,

2024-10-29 15:49:37 994

原创 实体与DTO如何转换

它是一个代码生成器,它基于约定优于配置的方法,极大地简化了 Java Bean 类型之间的映射实现。生成的映射代码使用简单的方法调用,因此执行速度快、类型安全且易于理解。另一方面,它是一个运行时库,用于实例化和调用生成的映射器。它采用基于约定的方法,同时提供简单、重构安全的应用程序接口(API)来处理特定用例。这里添加了Order到OrderDto转换的映射,将Order中的orderAmount映射到OrderDto中的money。在Spring环境下,建议配置如下的Bean以方便我们进行转换。

2024-10-22 10:24:34 488

原创 synchronized为什么会有两个monitor exit

于是线程就会释放锁。因为文章开头已经说过,这是由于Java在多个线程同时访问同一个对象的成员变量的时候,每个线程都拥有了这个对象变量的拷贝。代码如果遇到了这个标识,就表示获取到了对象的监视器monitor(monitor对象是由C++实现的),这个获取的过程是排他的,也就是同一时刻只能有一个线程获取到由synchronized所保护对象的监视器。在多线程之间,共享变量的值是线程不安全的,因为线程在开始运行之后都会拥有自己的工作空间,而从自己工作空间把修改的值刷新回主存的时候需要CPU的调度。

2024-09-05 13:45:43 460

原创 web.xml

web.xml

2024-08-30 15:52:52 1363

原创 java序列化

【代码】java序列化。

2024-08-30 10:29:25 172

原创 天书般的Tree工具类

3.1 JAVA中树形对象的定义在JAVA中树形结构是通过对象嵌套方式来定义的,如MenuVo对象中有一个子对象subMenus:3.2 JSON数据格式中的树形结构JSON数据天然就是树形结果,如以下展示一个简单的JSON树形结构: TreeUtil代码分析直接看这神一样的方法makeTree():是不是完全看不懂?像看天书一样?makeTree方法为了通用使用了泛型+函数式编程+递归,正常人一眼根本看不这是在干什么的,我们先不用管这个makeTree合成树的代码原理,先直接

2024-08-15 14:39:11 895

原创 线程池常见问题

9)MemorySafeLinkedBlockingQueue:而且 LinkedBlockingQueue 默认是使用 Integer.MAX_VALUE 作为容量的,也就是个无界队列,可能会有发生 OOM 的风险,所以自己实现了一个内存安全的 MemorySafeLinkedBlockingQueue,可以配置最大剩余内存,当内存达到该值的时候,再往队列放任务就会失败,很好的保证了不会发生令人头疼的 OOM 问题。这公式太偏理论化了,很难实际落地下来,首先很难获取准确的等待时间和计算时间。

2024-08-12 13:53:52 813

redis复习资源.讲解redis

redis复习资源.讲解redis

2025-06-01

算法与数据结构java版本

java版本的算法与数据结构leetcode习题

2025-05-23

2024Leetcode最新解题笔记

2024Leetcode最新解题笔记

2024-04-18

阿里巴巴java性能调优实战手册

阿里巴巴java性能调优实战手册

2022-06-12

空空如也

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

TA关注的人

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