自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (2)
  • 收藏
  • 关注

原创 itext自定义pdf

字体文件可以再电脑系统中复制。

2024-10-22 10:50:26 358

原创 word转pdf 好用的工具包com.aspose.words

综上所述,com.aspose.words 是一个功能强大的文档处理库包名,它提供了丰富的API和高效的性能,支持跨平台和多种编程语言,广泛应用于企业级应用、Web应用和移动应用等领域。格式转换:Aspose.Words 支持将Word文档转换为其他格式,如PDF、HTML、ePub等,同时也支持从其他格式(如PDF、HTML)转换为Word文档。移动应用:在移动应用中,Aspose.Words 可以用于处理设备上的Word文档,提供文档查看、编辑和转换等功能。

2024-10-10 18:32:28 506

原创 $accumulator(聚合)

accumulator 是 MongoDB 聚合管道中用于自定义数据处理逻辑的一个算子,它允许用户使用 JavaScript 编写代码来控制数据的初始化、累积、合并和最终输出。下面是对。

2024-07-15 11:03:08 852

原创 tomcat启动流程

在Tomcat中,每个组件都扮演着不同的角色,共同协作以提供Web服务。

2024-05-28 11:23:57 295

原创 tomcat 的启动流程

tomcat 的启动流程 中 使用的Lifecycle 生命流程。在这里还使用了设计模式中的模板模式(LifecycleBase 是一个模板类)

2024-05-13 14:27:17 246 1

原创 tomcat 的架构中 所有组件的生命周期图

tomcat 的架构中 所有组件的生命周期图。

2024-05-11 10:56:05 184

原创 Store buffer 解决CPU的停滞(stall)状态

此外,由于store buffer的存在,写操作的顺序也可能被打乱。例如,CPU1可能先执行了一个写操作A,然后执行了一个写操作B,但是由于写操作B的数据先被放入store buffer并随后被刷新到主存,而写操作A的数据还在store buffer中等待,所以其他处理器看到的写操作顺序可能是B-A,而不是A-B。在多线程环境下,当一个线程将一个变量的值写入Store buffer后,其他线程可能立即读取这个变量的值,但由于Store buffer的异步性,这个读取操作可能会得到旧的值,而不是新写入的值。

2024-05-08 16:24:18 817

原创 VM中常见的几种垃圾回收算法

*标记(Mark)**阶段:从根对象(通常是静态变量和正在执行的方法中的局部变量)开始,递归地访问所有可达的对象,并标记它们为“存活”。整理的好处可以将不同页中的数据,整理到一起,这样当内存访问的时候加载一页数据,说不定需要的数据都在这一页中,减少了页加载。**清除(Sweep)**阶段:遍历整个堆内存,回收未被标记的对象所占用的空间。这种算法简单且高效,但代价是内存的使用率降低了(因为只有一半的内存是可用的)。:移动所有存活的对象,使它们紧挨着彼此,然后直接清理掉边界以外的内存。

2024-04-23 14:39:33 242

原创 标记清除算法

标记清除算法(Mark-Sweep Algorithm)是一种最基本的垃圾回收算法,用于回收不再使用的内存空间。该算法的核心思想是通过标记所有仍然被使用的对象,然后清除所有未被标记的对象,从而回收内存。为了解决这些问题,实际应用中,标记清除算法通常会与其他垃圾回收算法结合使用,以达到更好的效果。例如,Java虚拟机中就采用了标记清除算法和标记整理算法相结合的方式,来进行垃圾回收。综上,标记清除算法通过标记和清除两个阶段来回收内存,具有简单易实现等优点,但也需要考虑其可能产生的内存碎片和性能影响。

2024-04-22 17:03:00 396

原创 jvm中提前进入老年代

在JVM中,对象的“年龄”通常指的是对象经过了多少次Minor GC(新生代垃圾回收)后仍然存活。每次Minor GC后,存活的对象会被移动到Survivor区,并且它们的年龄会增加。当对象的年龄达到某个阈值(这个阈值可以通过JVM参数 -XX:MaxTenuringThreshold 来设置,默认值是15)时,它们会被晋升到老年代(Old Generation)。

2024-04-18 17:24:27 1144

原创 jdk17 +MAT进行内存分析

MemoryAnalyzer要进行内存分析,需要Dump快照 文件。手动获取Dump快照 文件。

2024-04-18 13:52:33 260

原创 关于项目中加入线程池,导致JVM性能急剧下降的问题

在项目中,为了提高新系统服务的并发处理能力,我在项目中加入了线程池。由于原来的项目是单线程的一个服务,或者说是一个少线程的服务.所以公司前辈,将jvm的TLAB 参数配置进行关闭了。TLAB(Thread Local Allocation Buffer)是在堆上开辟的内存空间。在Java虚拟机(JVM)中,堆是用于存储对象实例的主要内存区域。为了优化对象分配的性能,JVM引入了TLAB机制。当TLAB开启时,每个线程在堆上会有一个私有的内存区域用于对象分配。

2024-04-12 11:14:55 383

原创 java对象的内存布局

reference存储(引用)的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为) 时只会改变句柄池中的实例数据指针,而reference(引用)本身不需要改变。使用句柄访问对象,会在堆中开辟一块内存作为句柄池,句柄中储存了对象实例数据(属性值结构体) 的内存地址,访问类型数据的内存地址(类信息,方法类型信息),对象实例数据一般也在heap中开 辟,类型数据一般储存在方法区中。***类型指针:***指向对象类型元数据的指针,JVM通过这个指针来确定这个对象是哪个类的实例。

2024-04-10 16:18:31 305

原创 jvm中的数据区

**此外,栈中还有一个特殊的部分叫做本地方法栈,用于存放native方法,如hashCode()等,它也是线程私有的。这个引用指向方法区中的类元数据,使得对象能够知道它的类型,并能够访问该类型的字段和方法。因此,可以说堆中的对象在JVM中是依据方法区中的类的定义来创建的。这个过程是依据方法区中的类的定义来进行的,确保每个对象都是根据类的结构来正确创建的。如果在栈帧中有一个变量,类型为引用类型,比如Object obj=new Object(),这时候就是典型的栈中元 素指向堆中的对象。

2024-04-09 17:35:16 689

原创 加密class文件,使用自定义类加载器解密

接下来,你需要实现一个自定义的类加载器,这个类加载器需要能够读取加密的类字节码,解密它们,然后定义类。// 使用与加密时相同的密钥 public Class

2024-04-08 16:06:10 569

原创 CMS垃圾回收器 和G1垃圾回收器

初始标记(Initial Marking):此阶段会标记出GC Roots能直接关联到的对象,并且修改TAMS(Top At Mark Start)的值,让下一阶段用户线程并发运行时,能正确地在可用的Region中分配新对象。与其他垃圾回收器不同,CMS的主要目标是减少Stop-The-World(STW)的时间,即应用程序因垃圾回收而暂停执行的时间。重新标记(Remark):此阶段再次暂停所有的应用线程(STW),修正并发标记阶段因用户线程继续运行而导致标记产生变动的那部分对象的标记记录。

2024-03-27 14:07:45 758

原创 ScheduledFuture定时任务

这意味着你可以提交多个任务给 ScheduledExecutorService,它会利用线程池来高效地并发执行这些任务。灵活的任务调度:ScheduledExecutorService 提供了多种调度方法,允许你指定任务的初始延迟、执行间隔以及执行次数等。周期性执行任务:你可以安排一个任务按照固定的频率重复执行。定时执行任务:你可以安排一个任务在未来的某个时间点执行。任务取消和查询:通过返回的 ScheduledFuture 对象,你可以取消任务的执行,或者查询任务的状态(是否完成、是否取消等)。

2024-03-27 13:31:24 310

原创 transformers + dataset 进行大数据训练AI

自然语言处理

2024-01-22 16:56:05 504 1

原创 WebSocket后端主动唤起前端

当前端new 一个WebSocket 对象时,会去调用其ws://localhost:8080/websocket 接口,这个会跟后天服务器建立一个类似于长连接的通讯链路,在后天向这个链路中发送消息是,前端可以通过onmessage 函数进行数据的处理,可以做一个后端返回给数据前端,前端及时弹窗的一个功能。// 创建XMLHttpRequest对象。// 连接打开时触发的事件处理函数。// 将响应数据显示在页面-->// 创建WebSocket连接。// 或者设置为允许的域名。// 判断请求是否完成。

2023-10-20 15:36:46 184

原创 AI 识别文字tesseract-ocr+jTessBoxEditorFX-2.4.1+OpenCV

jTessBoxEditor点击Box Editor ->Open,打开步骤2中生成的“zwp.test.exp0.tif”,会自动关联到“zwp.test.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。在上一步骤生成的“xxx.font.exp0.tif”文件所在目录下打开命令行程序(即在cmd中切换盘符到文件目录下),执行下面命令,执行完之后会生成xxx.font.exp0.box文件。训练1 准备一个训练的基础的***.tiff***文件。

2023-10-11 15:47:47 426

原创 AI人脸识别(可运行)

简单的一个AI 人脸识别程序

2023-10-10 16:30:44 128

原创 PrinterJob控制打印机打印数据

这里主要演示GK888CN打印机。

2023-10-08 17:44:20 208

原创 理解线程安全类和底层cas

需要注意的是,虽然 CAS 操作可以实现非阻塞的线程安全,但在高并发场景中,由于可能存在 ABA 问题(即变量的值在某一时刻恰好等于期望的值,但在期间发生了其他线程的干扰导致某些状态的改变),需要使用额外的手段进行解决,例如使用版本号或时间戳等方式来区别不同状态。需要注意的是,AQS 在实现具体的同步器时,保证了对状态变量的操作都是原子的,但具体的同步逻辑和操作需要由子类来实现,并且在使用 AQS 的抽象方法时,开发者需要注意正确处理状态变量的修改和状态转换,确保线程安全性,并避免数据竞争和并发问题。

2023-08-21 17:06:42 85

原创 Debezium

Debezium提供了一套可扩展的、虚拟化的、与数据库无关的架构,可适用于多种数据库引擎和数据存储系统。总的来说,Debezium的核心是基于数据库的binlog或其他事务日志,实时捕获数据变更,并将数据变更以事件的形式传输到消息队列中,以实现实时的数据变更监控和同步。支持数据变更的“源端”和“目标端”之间的数据同步,允许实时地将源数据库中的数据变更同步到目标数据库中,确保数据的一致性和实时性。基于捕获的数据变更,生成一系列的事件,这些事件描述了数据的变更细节,如变更前的数据、变更后的数据、操作类型等。

2023-07-13 15:46:51 209

原创 聚合索引,中存在的页分裂和页合并

索引节点如果按4k为一个节点存储数据,当索引数据节点中的4k全部被占满,但是现在要进行索引树(b+树)数据插入更新,并且插入的数据是中间数据时,此时中间数据的节点将会超过4k的大小,需要将这个4k数据索引树节点进行分裂,分裂成两个索引树节点。这种就叫做页分裂。页合并:是指索引树节点原先是4k和4k,后面删除部分索引树节点数据,变为2k和2k的数据,或者说数据量和小于4k时,为了节约空间,会合并成一个索引树节点,这个就叫页合并。

2023-02-27 22:42:32 338

原创 RequestInterceptor 自定义请求头内容(Feign)

SpringCloud的微服务使用Feign进行服务间调用的时候可以使用RequestInterceptor统一拦截请求来完成设置header等相关请求,但RequestInterceptor和ClientHttpRequestInterceptor有点不同,它拿不到原本的请求,所以要通过其他方法来获取原本的请求。这里通过RequestContextHolder获取到当前的request。首先创建自定义的RequestInterceptor。

2023-02-14 17:19:56 443

原创 定时任务在分布式集群中,确保任务执行一次

解释:为什么去保存任务的redis缓存一段时间,为防止任务被执行成功后,该缓存丢失后,其他实例执行该任务是,去缓存中没有查询到改任务数据,导致其他实例又执行一遍。3通过key,去redis中检索数据,未找到这个value值,则应该执行这个任务,执行成功后应当保存该任务key的redis缓存一段时间。覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;利用redis,构建分布式锁(NX), 数据结构(key:由任务的唯一标识组成;

2023-02-02 09:20:10 1936

原创 赋值请求头的Host,赋值成功,但是Host无法被覆盖

但是为了容灾,客户端需要指定ip访问该服务,如果该ip坏掉,客户端就切换到另个一ip(靠dns解析太慢)于是在http请求上做了点处理,url配置ip,同时配置http头部的Host参数为该域名,通过ip访问,设置Host头部来让nginx识别,然后分发到相应的处理程序。赋值请求头的Host,赋值成功,但是Host无法被覆盖。对外提供http接口,采用nginx反代,使用域名访问。nginx上只配置了域名的分发,没有配置ip分发。如果想要覆盖需要设置。

2023-02-01 17:47:46 403

原创 判断数组中那些值没有重复

自建一个hash表,进行数据的存储。

2023-01-29 17:15:24 126

原创 rocketMQ下的Broker

元数据在broker节点启动时,会主动汇报集群的元数据,去支持p/c的路由信息,信息汇报给NameServer(可以多个)。NameServer数据不需要持久化,内存化就可以(因为每次broker会将信息向NameServer报告)。Broker包含一下几个重要的子模块。

2023-01-14 17:19:25 267

原创 xxljob 与springboot整合

【代码】xxljob 与springboot整合。

2022-12-23 10:28:10 191

原创 spring cloud steam 整合kafka 进行消息发送与接收

Binder是SpringCloud Stream的一个抽象概念,是应用与消息中间件之间的粘合剂,目前SpringCloud Stream实现了Kafka和RabbitMQ的binder。Binder可以生成Binding,Binding用来绑定消息容器的生产者和消费者,它有两种类型,INPUT和OUTPUT,INPUT对应于消费者,OUTPUT对应于生产者。

2022-12-22 15:57:37 2238

原创 netty 编码器解码器

netty是区别于以往的传输方式,通过字节来传输。编码器和解码器主要用于解析,加密,可以按自己的逻辑去实现数据的传输格式,可以自定义协议。通过ChannelPipeline对象可以向链路中添加 解码器和编码器RequestDataEncoder 编码器(继承MessageToByteEncoder)ResponseDataDecoder 解码器 (继承ReplayingDecoder)

2022-12-07 13:44:29 373

原创 Nio聊天室(可运行)

【代码】Nio聊天室(可运行)

2022-12-02 16:35:14 171

原创 提取pdf文案内容,图片识别

简单用列

2022-11-03 17:56:43 238

原创 SmartInitializingSingleton和xxljob的故事

调用SmartInitializingSingleton类型接口的afterSingletonsInstantiated方法实现逻辑(而xxljob这个小家,实现了自己想要的afterSingletonsInstantiated方法)spring实例化对象,实例化单例对象后,去判断是否存在SmartInitializingSingleton类型的对象,存在这个类型的对象,XxlJobSpringExecutor 实现spring框架的接口(添加人的时候给每个人分配任务)xxljob是轻量级任务调度框架。

2022-09-28 16:59:01 149

原创 jpa 持久态,游离态,瞬态

指该实体对象处于Hibernate框架所管理的状态,也就是说这个实体对象是与Session对象的实例相关的。处于持久态的实体对象的最 大特征是对其所作的任何变更操作都将被Hibernate持久化到数据库中。表示该实体对象在内存中是自由存在的,也就是说与数据库中的数据没有任何的关联即,该实体从未与任何持久化上下文联系 过,没有持久化标识(相当与主键)。与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录 与Session没有任何关系,也就是没有通过Session对象的。

2022-09-27 13:50:16 932

原创 RequestContextHolder 在service获取请求参数对象

Spring

2022-09-22 17:06:22 205

原创 veth pair 的使用

veth pair

2022-09-21 15:22:53 467

原创 java规则引擎easy-rules

你自己定义的规则运算"condition":“(AlgorithmUtil.aa() && AlgorithmUtil.cc())”,facts.put(“class”, AlgorithmUtil.class);执行AlgorithmUtil里的aa()方法和cc()方法。B:为规则计算的数据。

2022-08-16 15:21:01 933

netty-code源码

netty-code源码

2024-05-30

netty编码器,解码器实例

netty编码器,解码器实例,可运行

2022-12-07

kafka。。。。。。。。。。。

kafka。。。。。。。。。。。

2022-05-19

cronolog-1.6.2.zip

日志分割工具

2020-07-21

空空如也

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

TA关注的人

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