自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(169)
  • 问答 (1)
  • 收藏
  • 关注

原创 多级缓存如何应用

摘要 多级缓存在电商秒杀场景中发挥重要作用,包含五个层级:1)客户端缓存(如倒计时数据),2)CDN缓存(静态资源),3)Nginx缓存(静态资源及前置校验),4)本地缓存(低频变化数据),5)分布式缓存(如Redis处理库存扣减)。这种分层设计有效降低服务器压力,提升系统性能,其中每层缓存根据数据特性选择合适策略,确保系统高效稳定运行。

2025-07-06 21:11:46 742

原创 深入理解Spring的ResponseBodyAdvice接口

摘要:ResponseBodyAdvice是Spring4.2引入的接口,用于在控制器返回响应前统一处理响应数据。它提供两个核心方法:supports判断是否生效,beforeBodyWrite进行实际处理。典型应用包括统一响应封装、数据脱敏和国际化处理。使用时需注意执行顺序、异常处理和性能影响。该接口只对带有@ResponseBody或@RestController的方法生效,是Spring MVC响应处理的重要扩展点,能有效减少重复代码,提高开发效率。

2025-06-22 16:58:31 454

原创 openai-java

OpenAI-Java是一个Java开源库,用于简化与OpenAI模型的交互。文章介绍了如何通过Maven引入依赖,创建OpenAIClient实例(建议全局复用),以及使用本地部署的Qwen3-8b模型实现简单对话。示例代码展示了如何配置请求参数(包括提示词和模型设置),并解析返回的JSON响应。测试结果显示了模型生成的一段自我介绍文本,包含模型能力和服务目标说明。该库让Java开发者可以方便地集成AI对话功能到应用中。

2025-06-02 21:08:02 603

原创 qwen3 + qwen agent

阿里最近发布了Qwen3开源模型,据称其性能超越了DeepSeek。Qwen3的8B版本性能相当于Qwen2.5的14B版本。Qwen-Agent是阿里基于Qwen大语言模型构建的智能体应用开发框架,支持指令遵循、工具调用、记忆能力和多代理协作等功能。本文介绍了如何在LM Studio上部署Qwen3模型,并通过Qwen-Agent框架实现一个简单的数学计算助手。代码示例展示了如何定义计算器工具、配置本地模型、创建Agent并测试其计算功能。文章还提到Qwen3默认开启推理模式,并展示了开启和关闭推理模式下

2025-05-19 08:34:49 454

原创 本地模型+MCP实践

MCP(Model Context Protocol,模型上下文协议)是由Anthropic公司推出的开放标准协议,旨在为大型语言模型(LLM)与外部数据源、工具及服务提供统一的通信框架MCP主机:发起请求的应用(如Claude Desktop)。MCP客户端:负责与服务器通信。MCP服务器:提供资源(如数据库)、工具(如API调用)和提示模板。

2025-04-28 08:52:39 1122 2

原创 父子线程之间怎么共享/传递数据?

当我们在同一个线程中,想要共享变量的话,是可以直接使用ThreadLocal的,但是如果在父子线程之间,共享变量,ThreadLocal就不行了。因为ThreadLocal 变量是为每个线程提供了独立的副本,因此不同线程之间只能访问它们自己的副本。那么,想要实现数据共享,主要有两个办法,第一个是自己传递,第二个是借助InheritableThreadLocal。

2025-04-13 19:36:45 326

原创 LM Studio本地部署大模型

LM Studio 是一款专为本地运行大型语言模型(LLMs)设计的桌面应用程序,支持 Windows 和 macOS 系统。它允许用户在个人电脑上无需联网即可高效部署和交互开源大模型(如 LLaMA、Mistral、GPT-NeoX 等),兼顾隐私性与灵活性。

2025-04-06 18:06:19 1398

原创 xdocreport+freemarker导出docx&pdf

之前导出docx与pdf都是使用freemarker模板引擎+html文档来渲染的, 这种方式缺点在于每个模板都需要自己手动去调整改起来很不方便, 现在有了新的方式。

2025-03-30 20:32:26 563

原创 CompletableFuture的使用

默认使用 ForkJoinPool.commonPool(),可通过参数指定自定义线程池优化资源管理:这里可以结合spring 定义全局线程池来实现统一管理, 使用时将容器中的executor当做入参即可。

2025-03-23 18:46:12 330

原创 如何实现本地缓存?

所谓本地缓存,就是和应用服务器在一起的缓存工具,将需要缓存的数据放到本地缓存中,可以大大的提升访问速度。

2025-03-16 19:39:03 295

原创 java读取Markdown配置文件

之前的文章中自定义实现过一个简单的状态机, 以前想的是读取json文件, 这样读起来更方便一点, 但是后来发现过于复杂的流程如果还是用json文件作为配置文件的话就比较麻烦了, 因此, 我们需要更直观地配置文件, 正好markdown能够完美满足我们的需求。

2025-03-09 20:47:59 275

原创 什么是充血模型/贫血模型?

充血模型(Domain Driven Design)是一种面向对象的软件设计方法,它强调将业务逻辑封装在领域对象中。假设有一个电商网站,需要对商品进行购买、库存管理等操作。在充血模型中,我们可以定义一个Product类来表示商品。Product类会包含商品的属性(例如名称、价格、库存等),并且也会包含一些行为(例如购买商品、更新库存等)。这些行为是直接封装在Product类中的,以便于对商品进行操作。

2025-03-02 17:40:27 363

原创 自定义实现简版状态机

基本原理就是根据状态机的概念简单实现一下, 根据读取json文件来配置整个流程。

2025-02-23 20:50:09 358

原创 线程池中怎么设置超时时间?一个线程如果要运行10s,怎么在1s就抛出异常

在使用线程池时,如果希望设置线程的超时时间,并在超时后抛出异常,可以根据不同的线程池实现方式和任务管理策略进行设置。常见的Java线程池实现包括 ExecutorService 和 ScheduledExecutorService,以及如何使用 Future 和 Callable 来控制任务执行和超时。

2025-02-16 09:55:46 709

原创 分区和分表有什么区别?

数据库中数据量过多,表太大的时候,不仅可以做分库分表,还可以做表分区,分区和分表类似,都是按照一定的规则将一张大表进行分解。听上去好像也差不多,不就是将表拆分吗?那具体有什么差别呢?

2025-01-19 21:21:36 1023

原创 为什么预编译可以避免SQL注入?

也就是说,用户输入的恶意代码会被当作普通的数据处理,而不会被解释为SQL语句的一部分。数据库的预编译(Prepared Statement)是一种数据库查询优化技术,在预编译中,可以先先提交带占位符的 SQL ,MySQL 先将其编译好,然后用户再拿着SQL中定义的占位符对应的参数让 MySQL 去执行。),是作为参数的位置标记存在的,而不是作为SQL语句的一部分。那么也就是说,用户输入的整个部分,都作为字符串的一部分了,会去数据库中查询username为hollis\';

2025-01-12 20:51:10 402

原创 使用minioClient迁移minio

MinIO是一个分布式对象存储服务器,专为大规模私有云基础架构设计,也适用于云原生环境和大规模数据存储需求。最重要的是它是开源的, 因此应用极为广泛, 今天来研究一下如何迁移minio桶中的数据要将 MinIO 中某个桶(Bucket)中的数据全部导出,可以使用mc(MinIO Client)工具来实现。mc是 MinIO 提供的一个命令行工具,专门用来与 MinIO 或其他兼容 S3 的存储服务交互。通过mc,你可以方便地将 MinIO 桶中的所有数据导出。

2025-01-05 22:21:01 1608

原创 Mybatis的工作原理

无论是Mybatis也好,Spring也罢,它们的执行过程无非可分为启动阶段和运行阶段:启动阶段:1. 定义配置文件,如XML,注解2. 解析配置文件,将配置文件加载到内存当中运行阶段:1. 读取内存中的配置文件,并根据配置文件实现对应的功能对于执行SQL的逻辑来讲,有如下步骤:当配置完成之后,假如说我们要执行一个下面一个sql,那么该如何执行呢?

2024-12-29 20:33:10 540

原创 Windows服务器修复SSL/TLS协议信息泄露漏洞等...

为了保证生产环境的安全, 我们会定期对服务器进行漏洞扫描, 一般情况下我们都是使用Linux服务器, 某些情况会用到Windows服务器出现SSL/TLS协议信息泄露漏洞问题一般情况下是远程连接使用了不安全的加密算法, 需要禁用这些加密算法。

2024-12-22 21:28:24 699

原创 基于mybatis-plus对数据库数据批量加密

对数据库加密是个老生常谈的问题, 一般来说都是在开发阶段就会考虑到对于一些敏感的用户信息进行加密处理, 但是有一些情况是需要对之前不需要加密的数据进行加密, 这样一来就比较麻烦了, 需要对数据库已有的数据进行加密, 为了减轻负担, 搞了一个工具类。

2024-12-15 11:53:23 448

原创 Linux系统nginx版本升级

最近公司漏扫有涉及到需要升级nginx的部分, 以下是一些总结经验。

2024-12-08 20:20:14 1137

原创 使用加固助手加密apk后无法安装

我们开发好的安卓APP, 在上线之前为了安全会对apk进行加密操作, 可能会用到一些加固工具, 我使用到的是360加固助手, 但是会有一个问题, 就是加固之后再安装的时候会出现安装包被损坏的情况, 经过查询,发现是加固之后的apk需要再次签名才可以, 接下来来介绍一下操作步骤。

2024-12-01 19:27:41 469

原创 Nexus私服迁移

开始之前先简单介绍一下nexus的基本结构, 以下是Nexus私服的所有库的列表, 我们平时使用maven的setting文件使用的都是maven-public, 但是我们要导出的话是不可以使用,maven-public的,因为它是一个集合(可以注意看一下他得type), 其中集合了多个库, 如果我们要迁移自己的私服一般只需要迁移maven-releases库即可(自定义的除外)

2024-11-25 16:55:04 1047

原创 jenkins的安装(War包安装)

‌‌ 它提供了一个开放易用的平台,使软件项目能够实现持续集成。Jenkins的功能包括持续的软件版本发布和测试项目,以及监控外部调用执行的工作。‌。

2024-11-17 21:14:40 1357

原创 jenkins国内插件源

Jenkins是一个开源的持续集成和持续部署(CI/CD)工具, 可以大大减轻部署的工作量, 但是jenkins作为一个国外的软件, 在国内下载插件会很麻烦, 因此我们可以将其换为国内源。

2024-10-25 18:16:03 1616

转载 Java 敏感词检测工具

检测忽略大小写,特殊字符,重复字符,简繁体,中英文等;自定义替换检测策略示例;常规用法 查找替换;

2024-10-20 15:45:11 94

原创 ArrayList的序列化是怎么实现的?

在序列化过程中,如果被序列化的类中定义了writeObject 和 readObject 方法,虚拟机会试图调用对象类里的 writeObject 和 readObject 方法,进行用户自定义的序列化和反序列化。如果没有这样的方法,则默认调用是 ObjectOutputStream 的 defaultWriteObject 方法以及 ObjectInputStream 的 defaultReadObject 方法。

2024-10-13 21:12:05 281

原创 生产环境升级mysql流程及配置主从服务

之前写到过mysql升级8.4的文章, 因此不再介绍mysql的安装过程。

2024-09-30 09:09:07 973

原创 Java21 中的虚拟线程

在以前的JDK中,Java的线程模型其实比较简单,在大多数操作系统中,主要采用的是基于轻量级进程实现的一对一的线程模型,简单来说就是每一个Java线程对应一个操作系统中的轻量级进程,这种线程模型中的线程创建、析构及同步等动作,都需要进行系统调用。而系统调用则需要在用户态(User Mode)和内核态(Kernel Mode)中来回切换,所以性能开销还是很大的。而新引入的虚拟线程,是JDK 实现的轻量级线程,他可以避免上下文切换带来的的额外耗费。

2024-09-22 21:55:11 1001

原创 避免服务器安装多个mysql引起冲突的安装方法

最近工作中涉及到了数据迁移的工作. 需要升级mysql版本到8.4.2为了避免升级后服务出现异常, 因此需要保留原来的mysql,所以会出现一台服务器上运行两个mysql的情况。mysql并不陌生, 但是安装不当很容易引起服务配置文件的冲突,导致服务不可用, 今天就来介绍一种可以完美解决冲突的方法来安装mysql。防止mysql去读默认配置文件/etc/my.cnf。如果glibc版本2.17。如果glibc版本2.28。

2024-09-17 20:19:25 856 1

原创 DDD的实现流程

领域驱动设计(DDD)是一种面向领域的软件设计方法。它强调将业务知识和业务逻辑集成到软件设计中,从而提高软件系统的可维护性、可扩展性和可测试性。

2024-09-08 19:09:21 529

原创 mysql查询慢除了索引问题还会是因为什么?

作为一个程序员SQL查询慢的问题在工作和面试中都是会经常遇到的问题, 一般情况下我们都会联想到索引问题, 那么除了索引问题还有什么其他的场景会导致SQL查询慢呢?MySQL执行查询逻辑例如我们使用可视化工具执行这样一条SQL:首先可视化工具会携带mysql的用户名和密码与mysql建立连接, 然后执行。

2024-09-01 18:24:39 1137

原创 程序运行期发生程序运行期发生ClassNotFoundException

ClassNotFoundException这个错误不陌生, 程序运行时找不大某个类的class文件, 这个在开发时是常有的, 比较容易解决, 但是在一个程序运行时出现这个错误就需要来找一找是什么问题了一般来说编译正常通过了就不会出现这个问题了, 那么为啥在运行期还会可能报错提示ClassNotFoundException呢?ClassNotFoundException是一个受检异常(checked exception)。他通常在运行时,在类加载阶段尝试加载类的过程中,找不到类的定义时触发。

2024-08-25 21:18:49 680

原创 什么叫日志门面

日志门面,是门面模式的一个典型的应用。门面模式(Facade Pattern),也称之为外观模式,其核心为:外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。就像Log4j、Logback日志框架一样,每一种日志框架都有自己单独的API,要使用对应的框架就要使用其对应的API,这就大大的增加应用程序代码对于日志框架的耦合性。为了解决这个问题,就是在日志框架和应用程序之间架设一个沟通的桥梁,对于应用程序来说,无论底层的日志框架如何变,都不需要有任何感知。

2024-08-18 18:47:21 962 1

原创 打印日志会不会影响性能?怎么办?

刚开始做开发的时候就有一个疑问, 我们开发一般为了调试方便都会给自己的业务代码加上一些日志, 那么问题来了, 打印这么多日志不会影响性能吗?这个肯定是必然的, 毕竟需要计算机分出一些性能来打印日志的, 但一般要求不苛刻的场景可以忽略这个问题前面说了一般情况下日志影响的性能是可以忽略的, 既然有一般那肯定就有不一般的情况, 今天来了解一下如何减少日志对性能的影响。

2024-08-11 17:01:33 888

原创 CAS5.3自定义登录校验规则

前一篇文章中已经用到了这个抽象类, 这次要要做的还是改造它, 我们可以在之前的基础上来改造/*** 自定义登录拦截器*/@Setter@Override//查询用户信息//仅判断用户是否输入了自己的手机号,需要自行修改} else {throw new RuntimeException("验证码错误");} else {throw new RuntimeException("用户名或密码错误");} else {

2024-08-04 20:51:14 571

原创 CAS5.3使用自定义获取更多的用户信息

玩过cas的小伙伴都知道CAS-Server本身是支持CAS和OAuth2.0两种协议的, 之前写过一篇使用OAuth2.0协议获取用户信息的文章,今天来介绍一下CAS协议怎么获取更多的用户信息。

2024-07-28 23:09:44 550

原创 CAS5.3为OAuth2.0添加自定义用户信息

Slf4j@Autowired@Overridetry {//获取id, id其实就是用户名= null) {//根据用户名获取用户详细信息= null) {//将用户信息放入model中log.error("OAuth获取用户信息错误!", e);throw new RuntimeException("OAuth获取用户信息错误!");

2024-07-21 23:06:22 417

原创 Redis如何高效安全的遍历所有key

在工作中有时可能会用到遍历redis的情况, 如果redis中没有多少数据还行,但是redis'中的数据长度过长的话还是会对性能有一定的影响, 我们使用redis主要的一个原因就是因为redis快, 所以尽量是不要牺牲Redis的性能, 今天找到两种可以高效遍历redis中所有key的方法。

2024-07-14 23:03:40 804

原创 BigDecimal(double)和BigDecimal(String)有什么区别?BigDecimal如何精确计数?

除了scale这个字段,在BigDecimal中还提供了scale()方法,用来返回这个BigDecimal的标度。scale到底表示的是什么?当标度为正数时,它表示小数点后的位数。例如,在数字123.45中,他的无标度值为12345,标度是2。当标度为零时,BigDecimal表示一个整数。当标度为负数时,它表示小数点向左移动的位数,相当于将数字乘以 10 的绝对值的次方。

2024-07-07 22:07:52 1079

空空如也

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

TA关注的人

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