- 博客(508)
- 资源 (23)
- 收藏
- 关注
原创 Springboot Rabbitmq + 线程池技术控制指定数量task执行
定义DataSyncTaskManager,作为线程池任务控制器package org.demo.scheduletest.service;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Executors;import java.util.concurrent.LinkedBlockingQueue;import java.util.
2025-01-09 15:03:39
593
1
原创 基于 Java Supplier与Predicate 封装自动重试机制通用接口
关键需要理解Java的函数式接口编程 Supplier 与 Predicate作用。核心逻辑就是把重试的业务与重试中断条件抽象出来函数化,内部重试业务具体化。
2024-08-05 10:52:53
219
原创 Java Skija 绘图库绘制图形
Skija是一个由JetBrains开发的开源项目,其目标是为Java和Kotlin开发者提供一个高性能、易用的2D图形API,直接与Google的Skia图形库对接。与Java和Kotlin的紧密集成:由于Skija是用Java编写的,并且完全兼容Kotlin,所以对于熟悉这两种语言的开发者来说,上手非常快,无需额外学习新语法。高性能渲染:基于Skia,Skija提供了硬件加速的功能,确保了图像和图形处理的高效性能,无论是绘制复杂的2D图形还是处理大量的图像数据,都能保持流畅。
2024-06-15 16:25:56
396
原创 Controller 自动化日志输出
1.定义注解2.定义捕获日志接口方法3.定义捕获日志方法实现4.定义日志捕获切面5.通过AutoConfiguration实现注入6.starter文件spring.factories新增类。
2024-06-13 15:31:10
483
原创 JVM 双亲委派机制
双亲委派机制(Parent Delegation Mechanism)是Java中的一种类加载机制。在Java中,类加载器负责加载类的字节码并创建对应的Class对象。这种机制的设计目的是为了保证类的加载是有序的,避免重复加载同一个类。Java中的类加载器形成了一个层次结构,根加载器(Bootstrap ClassLoader)位于最顶层,它负责加载Java核心类库。
2024-06-12 15:15:37
1038
原创 JVM 三色标记算法
三色标记算法是一种用于JVM垃圾回收的增量式标记算法,它将Java堆中的对象划分为白色、灰色和黑色三种颜色,分别表示未标记对象、部分标记对象和已完全标记对象。这算法被广泛应用于CMS(Concurrent Mark-Sweep)和G1(Garbage-First)等垃圾回收器中,以在GC标记和清理阶段尽量减少Stop-The-World(STW)的时间,提高系统的响应性。总体而言,三色标记算法通过增量标记的方式,尽量避免全局性的STW,提高了垃圾回收的并发性,但也需要处理漏标问题。
2024-06-11 17:32:29
1118
原创 JVM 根可达算法
Java中"垃圾"通常指的是不再被程序使用和引用的对象,具体表现在没有被栈、JNI指针和永久代对象所引用的对象。Java作为一种面向对象的编程语言,它使用自动内存管理机制,其中垃圾收集器负责检测和回收不再被程序引用的对象,以释放它们占用的内存空间。以下是一些导致对象成为垃圾的常见情况:无引用对象: 当一个对象没有任何引用指向它时,它就变得不可达,成为垃圾,Java的垃圾收集器会识别这样的对象,并将它们回收。
2024-06-11 17:24:53
938
原创 Java 如何有效地避免OOM:善于利用软引用和弱引用 (四种引用模式)
在Java中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了。从Java SE2开始,就提供了四种类型的引用:强引用、软引用、弱引用和虚引用。Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。下面来阐述一下这四种类型引用的概念:1.强引用(StrongReference)
2024-06-11 16:59:45
825
原创 SpringBoot 返回值 i18n 自动处理
定义基础通用类首先定义一波错误码:ResultCode定义返回对象:Result定义一个异常通用类:ApiException定义异常拦截器:ApiExceptionHandler定义 i18n 配置类:I18nConfig定义 i18n 消息内容处理器:I18nUtils。
2024-05-28 19:54:42
428
原创 JNA、JNI、原生C++函数调用效率及测试过程
6.将生成的DLL及依赖的算法DLL复制到jdk/bin目录下。1.Visual Studio配置头文件及lib库文件的路径。7.java调用JNI函数执行DLL方法。2.生成.h头文件,用于包装C++方法。3.通过Clion封装C++函数。拷贝.h文件,并创建cpp文件。1.构建DLL Library。配置cmakelist文件。5.构建项目,会生成DLL。3.调用函数计算时长。
2024-04-09 10:45:06
988
原创 Springboot 构建异步TaskManager的优雅处理线程任务
【代码】Springboot 构建异步TaskManager的优雅处理线程任务。
2024-03-26 19:36:03
324
原创 Qt 运行一个实例进程
逻辑:首先一个新的实例启动时,将尝试连接到同一个本地服务器,如果连接失败,则表示第一个实例进程,创建一个本地服务器;否则,拉起已打开的实例进程。
2024-03-04 10:51:21
489
原创 cmake通过add_custom_command复制DLL及配置文件
【代码】cmake通过add_custom_command复制DLL及配置文件。
2023-12-09 11:31:26
1003
2
原创 Clion运行QT,模拟VS弹出CMD框打印
参考:https://stackoverflow.com/questions/35385772/running-clion-on-the-system-console-like-visual-studio。
2023-12-06 16:48:22
209
原创 QThread之moveToThread用法
使用moveToThread函数的流程如下:1、创建一个类继承自QObject类或其子类,并在其中定义所要执行的多个任务,执行多个任务就要定义相应的信号。2、任务通过moveToThread指定所要执行的线程。3、线程通过start启动4、通过信号与槽机制触发线程的执行。
2023-12-05 16:01:33
315
原创 采用connector-c++ 8.0操作数据库
把D:\Library\mysql-connector-c+±8.2.0-winx64\lib64\debug中的mysqlcppconn-9-vs14.dll复制到项目的可执行目录下。https://dev.mysql.com/downloads/connector/cpp/,下载带debug的库。2.在cmakelist中定义寻址头文件的路径与库的路径。1.下载最新的Connector。3.复制对应的DLL到可执行目录。
2023-11-22 19:43:21
1289
原创 编译QT Mysql库并集成使用
进入文件夹D:\Library\Qt5.14.2\5.14.2\msvc2017_64\mkspecs\common,打开msvc-version.conf文件,添加。检查mingw73_64/plugins/sqldrivers目录下是否存在qsqlmysql.dll文件,没有就需要编译mysql驱动。一定要复制到mysql对应位数的编译器中,然后在构建的时候,注意选择需要生成的应用是32位还是64位。7.将文件复制到编译器的5.14.2\msvc2017_64\plugins\sqldrivers中。
2023-11-22 19:41:59
602
原创 QT串口通信 基础使用
由于需要使用QT的信号槽,所以Q_OBJECT文件需要额外进行MOC编译,把对应的头文件指明到executable中。使用QT的SerialPort,需要加装对应的依赖。
2023-11-08 16:27:38
153
原创 日志记录库 spdlog 基础使用
配置特别简单,仅包含头文件即可;写日志方式简单明了;可实现自动按日期创建日志文件/定时创建日志文件;可自定义日志格式;可以输出当前输出日志所在的文件及函数;可自定义文档大小;可将不同级别的信息输出到不同日志文件;多平台等。*_st:单线程版本,不用加锁,效率更高。*_mt:多线程版本,用于多线程程序是线程安全的。日志记录槽sinkset_pattern(const std::string&):设置日志输出的内容格式。
2023-11-01 15:17:16
1488
原创 QT5 通过 webview2 加载网页
官方文档参考:https://learn.microsoft.com/zh-cn/microsoft-edge/webview2/get-started/win32。
2023-10-30 15:49:32
3250
原创 cmake 使用include 分层加载
cmake文件是干什么的,甚至会想.cmake文件是不是cmake的正统文件,而CmakeLists.txt并不是。但其实,CmakeLists.txt才是cmake的正统文件,而.cmake文件是一个模块文件,可以被include到CMakeLists.txt中。include指令一般用于语句的复用,也就是说,如果有一些语句需要在很多CMakeLists.txt文件中使用,为避免重复编写,可以将其写在.cmake文件中,然后在需要的CMakeLists.txt文件中进行include操作就行了。
2023-10-27 15:47:21
415
原创 Clion 初始化 QT
A:检查路径是否正确,set(CMAKE_PREFIX_PATH “D:/Library/Qt5.14.2/5.14.2/msvc2017_64/lib/cmake”)NMAKE : fatal error U1077: “echo”: 返回代码“0x1”解决方法:安装QT5和对应的cmake软件,然后修改makelist配置文件。默认CMakeLists文件。2.打开项目,如果出现报错。5.配置项目生成平台为64。
2023-10-27 14:22:58
465
原创 Aspect 切入点 @Pointcut 语法详解
this:用于匹配当前AOP代理对象类型的执行方法;bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法;target:用于匹配当前目标对象类型的执行方法;@target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;args:用于匹配当前执行的方法传入的参数为指定类型的执行方法;@args:用于匹配当前执行的方法传入的参数持有指定注解的执行;@annotation:用于匹配当前执行方法持有指定注解的方法;+:匹配指定类型的子类型;
2023-09-18 11:32:46
388
原创 JNI 调用
JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。本地代码与 Java 虚拟机之间是通过 JNI 函数实现相互操作的。JNI 函数通过接口指针来获得,本地方法将 JNI 接口指针当作参数来接受。
2023-04-04 13:46:06
1489
原创 重新认识 Java 中的内存映射(mmap)
恰恰和网传的很多言论相反,mmap 由于其不切态的特性,特别适合顺序读写,但由于 sun.nio.ch.FileChannelImpl#map(MapMode mode, long position, long size) 中 size 的限制,只能传递一个 int 值,所以,单次 map 单个文件的长度不能超过 2G,如果将 2G 作为文件大 or 小的阈值,那么小于 2G 的文件使用 mmap 来读写一般来说是有优势的。一个实用的技巧是动态分配的内存映射区域,在读取过后,可以异步回收掉。
2023-03-02 17:14:47
2113
原创 SpringCloud Gateway + Security + JWT 最快速的集成
*** 需要访问的url/*** 额外放开权限的url** @param urls 自定义的url* @return 自定义的url和监控中心需要访问的url集合} //放开权限的地址 Collections . addAll(set , addContextPath(permitUrl));} /*** 地址加访问前缀* @returni ++) {} }
2022-12-30 16:56:51
2446
3
原创 内存对齐详解
假如没有内存对齐机制,数据可以任意存放,现在一个int变量存放在从地址1开始的联系四个字节地址中,该处理器去取数据时,要先从0地址开始读取第一个4字节块,剔除不想要的字节(0地址),然后从地址4开始读取下一个4字节块,同样剔除不要的数据(5,6,7地址),最后留下的两块数据合并放入寄存器.这需要做很多工作。**考虑4字节存取粒度的处理器取int类型变量(32位系统),该处理器只能从地址为4的倍数的内存开始读取数据。现在有了内存对齐的,int类型数据只能存放在按照对齐规则的内存中,比如说0地址开始的内存。
2022-10-22 10:37:20
1027
原创 Redis 过期删除策略和内存淘汰策略
Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。过期删除策略有哪些?在说 Redis 过期删除策略之前,先跟大家介绍下,常见的三种过期删除策略:定时删除;惰性删除;定期删除;接下来,分别分析它们的优缺点。定时删除策略的做法是,在设置 key 的过期时间时,同时创建一个定时事件,当时间到达时,由事件处理器自动执行 key 的删除操作。定时删除策略的优点:可以保证过期 key 会被尽快删除,也就是内存可以被尽快地释放。因此,定
2022-07-05 14:03:08
456
算法图解 - 算法的基本操作
2018-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人