自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 文件上传大小超过服务器限制

配置位置配置项推荐值作用100MB关键配置,解决Undertow限制50MB单个文件大小限制100MB整个请求大小限制Nginx100-200MBNginx代理层限制前端JS文件大小检查20MB用户体验优化。

2026-02-05 21:12:24 714

原创 将Map转成对应实体

当字符串包含非数字字符(如货币符号"¥100.5"、单位"123.45cm"或千位分隔符"1,234.5")时,推荐使用自定义反序列化器。这让你能完全掌控转换逻辑。实现自定义反序列化器:创建一个类实现接口。在deserialze方法中编写清洗和转换逻辑。注意:引入的是import com.alibaba.fastjson.parser.DefaultJSONParser;@Override// 1. 首先将值作为字符串读取try {

2026-02-05 14:59:20 731

原创 将Map转成对应实体,但存在字段类型对不上,比如map里面是字符串(存在非数字字符),但实体是double

请对照以下表格检查你的代码和配置:排查要点正确的做法/代码示例常见的错误确保类声明正确继承了,泛型参数必须是Double。错误地继承(无泛型)或其他类型。必须正确重写方法。方法签名不正确,例如返回值是void或参数列表错误。注解应放在实体类的对应字段上。注解放在了类的顶部或getter/setter方法上,而非字段上。确保项目中的版本一致。版本冲突或混用了 Jackson 1.x 和 2.x 的注解。

2026-02-04 17:29:26 100

原创 微服务间通过Feign传输文件,处理MultipartFile类型

在接口中声明文件上传方法,并应用刚才的配置。

2026-02-02 16:55:07 469

原创 异步导出方案

如果数据量极大(十万级以上),应采用分页查询、流式写入的方式,防止内存溢出(OOM)。:除了前端轮询,可以在任务完成后通过WebSocket主动通知前端,提升用户体验。:在状态查询和下载接口中,务必加入权限校验,确保用户只能访问自己创建的文件。在Controller中,接收导出请求,立即生成UUID并创建任务记录。首先,我们需要一张表来跟踪导出任务的状态和存储信息。创建专用的线程池,避免核心业务资源被导出任务挤占。或创建时间过久的任务记录及其在MinIO中的文件。轮询任务状态,并在成功后获取下载地址。

2026-01-29 15:26:13 296

原创 MySQL 的 IN操作符

注意MySQL 的IN操作符本身保证查询结果的顺序与IN列表中指定的顺序一致。特性默认的IN查询使用使用​不固定,可能按主键、索引或物理存储顺序返回​ 按照IN列表中的顺序​ 按照给定的字符串列表顺序​无法控制在ORDER BY子句中使用FIELD函数在ORDER BY子句中使用函数​​不关心结果顺序时排序列表值类型为数字或短字符串,且列表直接写在SQL中时排序列表已是一个逗号分隔的字符串,或值中包含特殊字符时。

2026-01-20 10:47:06 302

原创 在Linux服务器上查找文件的相关命令

命令主要特点/查找依据查找速度适用场景find​实时遍历文件系统,可按名称、类型、时间、大小等条件精确搜索较慢(遍历硬盘)进行复杂条件查找、查找刚创建或更新的文件locate​基于预建文件名数据库搜索极快(查询数据库)快速模糊查找已知存在的文件,不要求结果绝对实时whereis​查找二进制程序、源码和手册页快快速定位命令的程序文件、源码及手册页的位置which​在PATH环境变量指定的路径中查找命令的可执行文件快确定当输入一个命令时,系统实际执行的是哪个文件type​。

2026-01-19 10:32:42 335

原创 达梦(DM)数据库中设置表空间

在达梦(DM)数据库中设置表空间数据文件路径,并在服务器上找到它,是数据库管理中的基础操作。操作环节关键动作/命令核心要点与说明​路径必须是,且目录需已存在。​查询所有数据文件及其所属表空间。关联系统视图,精确查看对应关系。​ls -l在Linux服务器上使用ls命令确认文件物理存在。

2026-01-19 10:29:52 415

原创 SQL查询性能优化 - EXISTS、IN

从客户表(c1)中,找出所有状态为“2”的客户,并且要求存在另一个状态也为“2”、邮箱包含'customer'、手机号以'138'开头的同名客户。将所有状态为“2”且满足存在性检查的最终结果,按照c1.name进行排序,然后为其分配一个连续的group_seq。

2026-01-16 14:35:20 526

原创 Nginx 最核心和常用的命令

类别命令说明与常用参数​nginx启动 Nginx 服务。使用指定的配置文件启动。:立即终止所有进程,中断正在处理的请求。:等待当前连接的任务处理完毕后再停止,生产环境首选。:在不中断服务的情况下使新配置生效。。:常用于日志切割后。​启动 Nginx 服务。停止 Nginx 服务。重启服务(先停止后启动,会造成短暂中断)。重新加载配置(与效果相同)。查看服务的运行状态,包括进程ID、错误信息等。​nginx -t。修改配置前的最佳实践。nginx -T测试配置并到屏幕。​nginx -v。

2026-01-15 15:25:24 338

原创 数据库事务

在Java开发中,要确保接口操作与数据库修改的原子性,避免部分成功导致的数据不一致,核心方法是使用。下面这个表格汇总了关键的实现方式。实现方式核心机制适用场景关键点​通过Connection对象手动控制commit()rollback()。纯JDBC项目,需要精细控制事务边界。需手动处理资源关闭和异常回滚。​声明式事务管理。在方法或类上添加注解,由框架代理实现事务的开启、提交和回滚。基于Spring框架的项目,是主流选择。默认对运行时异常()及其子类进行回滚。可通过属性自定义。​。

2026-01-14 16:38:09 571

原创 Kafka中auto-offset-reset各个选项的作用

配置值起始位置是否消费历史消息典型应用场景earliest​分区现存最早的消息是,消费所有现存数据数据重播、数据迁移、补数、测试(确保不丢消息)latest​分区最新消息之后否,只消费启动后的新数据实时处理应用(默认)、大多数在线服务,避免处理历史积压none​不自动设置,直接抛异常无法开始消费偏移量必须存在的严格场景,需要人工介入seek​开发者指定的任意位置​取决于指定位置从检查点恢复、时间点回溯、精细化偏移量控制。

2026-01-07 08:58:02 616

原创 MySQL 支持的各类索引

在设计索引时,如果某些查询只需要返回少数几个字段,可以尝试创建一个包含这些查询字段的复合索引,使其成为覆盖索引,避免回表,能极大提升性能。:当MySQL优化器判断通过索引回表查询的成本高于直接顺序扫描全表时,会放弃使用索引。除全文索引外,下文讨论的索引类型(如唯一、主键、复合索引)默认都使用B+Tree结构。如果无法避免,优化器在数据量大时可能选择全表扫描,因为否定条件通常需要扫描大部分数据。,因为数据库引擎只需扫描索引即可返回数据,无需回表查询数据行。复合索引一索引多用,且比多个单列索引更高效。

2025-12-26 16:29:36 682

原创 优化SQL:如何使用 EXPLAIN

EXPLAIN是优化SQL查询不可或缺的工具。掌握其输出结果中type和Extra列的含义,是定位性能问题的关键。ALLrefrangeExtra下面这个表格汇总了使用EXPLAIN时返回结果中各字段的核心含义。字段含义与解读要点id​SELECT 查询的序列号。。​查询的类型,例如简单查询(SIMPLE)、主查询(PRIMARY)、子查询(SUBQUERY)、派生表查询(DERIVED)等。type​,即MySQL决定如何查找表中的行。

2025-12-26 10:26:26 896

原创 在Java中,从List A中找出List B没有的数据(即求差集)

对于小数据量或初学者,使用循环遍历易于理解。对于常规数据量且追求代码简洁性Stream API是非常好的选择。当处理大数据量时,HashSet优化法能显著提升性能。使用removeAll​ 方法时,务必注意它会修改原集合。如果不希望原集合被修改,应先创建副本。

2025-12-25 20:08:45 290

原创 Spring Boot 与 Apache POI 实现复杂嵌套结构 Excel 导出

实际业务中,我们常遇到的数据关系。例如,一个主实体包含多个一级子项,每个一级子项又包含多个二级子项。传统平面表格难以直观展示这种层次关系,需要和来优化可读性。

2025-12-25 14:33:40 271

原创 Feign调用添加重试机制

本文介绍了5种实现Feign客户端重试机制的方法:1)使用SpringRetry框架,通过注解和配置实现;2)自定义重试器,手动控制重试逻辑;3)采用Resilience4j框架,提供更强大的容错能力;4)通过自定义异常处理实现重试;5)使用拦截器方式手动控制重试流程。这些方法都支持设置重试次数、间隔时间等参数,其中SpringRetry和Resilience4j两种方案功能较为完善,推荐优先使用。开发者可根据项目需求选择适合的重试策略,提升微服务调用的可靠性。

2025-12-24 15:57:22 193

原创 SQL窗口函数(使用场景)

窗口函数在大量数据上可能较慢,合理使用分区。:ORDER BY子句中的字段建议有索引。:明确指定ROWS或RANGE避免歧义。

2025-12-16 15:34:07 185

原创 EasyPOI 大数据导出

建议在方法中添加try-catch,避免单页失败导致整个导出失败。:使用SXSSFWorkbook,不会将所有数据加载到内存。:EasyPOI会自动循环调用。参数从1开始,每次调用自动递增。:当返回空列表时,导出自动结束。:导出完成后一定要调用。

2025-12-15 16:16:53 328

原创 computeIfAbsent:数据合并工具类

【代码】computeIfAbsent:数据合并工具类。

2025-12-11 16:10:19 119

原创 匹配第一个出现的数字开头的字符串,后面可以包含 +、-、数字、字母(大小写)。

大小写字母(0次或多次)

2025-12-04 15:47:33 171

原创 定时器多节点部署,导致保存数据重复(分布式锁)

方案优点缺点适用场景数据库分布式锁​实现简单,依赖少性能一般,可靠性需自行保证小型项目,数据库压力不大,任务不频繁Redis 分布式锁​性能高,可靠性高(推荐)​需要引入 Redis大多数互联网应用的首选,任务频繁调度框架​功能最全,最专业(强推)​架构最重,需要部署中心复杂的调度需求,需要可视化管理和故障转移业务状态控制​无额外组件,性能好对业务模型有特定要求业务数据模型恰好支持此模式的场景如果项目处于早期,任务不复杂,可以选择方案一或方案二,其中方案二(Redis)

2025-12-03 16:26:51 660

原创 多线程 submit、execute 与 @Async 详解及完整代码

Spring项目,需要简单的异步执行,与框架深度集成。:需要获取支付结果进行后续业务(库存扣减、积分计算):发送邮件不需要等待结果,即使失败也不影响主流程。可通过AsyncConfigurer统一处理。​ - 可以捕获和处理执行异常。Spring项目中的异步任务。void 或 Future。Future(有返回值)异常封装在Future中。:用户注册后发送欢迎邮件。​ - 主线程不会阻塞。​ - 复用线程资源。void(无返回值)

2025-12-03 15:08:10 303

原创 使用 poi-tl 生成 Word 文档并上传到 Minio

服务将自动生成Word报告并上传到Minio。生成人员: {{author}}返回包含文件路径的JSON响应。报告日期: {{date}}{{members}}姓名。

2025-12-02 10:42:49 348

原创 先按电压类型(直流优先于交流)排序,同类型下再按电压数值从高到低排序。

±1100kV (直流, 数值最大)直流500kV (直流)±800kV (直流)交流220kV (交流, 数值最大)交流110kV (交流)交流35kV (交流)交流10kV (交流)直流750V (直流, 但数值以V为单位,可能需注意单位统一)请注意"直流750V"中的单位是V(伏特),而其他都是kV(千伏)。代码在提取数字时,"750V"会变成750.0,但kV单位的数值(如10.0)代表10千伏,即10000伏特。因此,在数值比较时,750.0会远小于10.0,导致它排在很后面。

2025-12-02 09:49:08 306

原创 根据每个键对应的列表里所有实体的 count 最大值,将整个字典从大到小重新排列

count为了更直观地理解,我们来看一个例子。假设原始的如下:key(字符串)value(List<MyEntity> 中各实体的 count 值)列表中的最大 count"A"5"B"[count=10]10"C"7执行代码后,新的中的键值对顺序将是:key(字符串)排序依据(列表最大count)"B"[count=10]10"C"7"A"5。

2025-12-02 09:45:30 295

原创 XXL-JOB分布式任务调度平台搭建指南

调度中心(管理后台):公共依赖包:执行器示例。

2025-11-27 20:57:32 399

原创 获取某个字段时间最新的一条数据

要使用函数获取每个user_name最新的一条数据,其核心思路是。具体的写法会因数据库系统略有不同,以下是两种主流写法。

2025-11-27 19:53:01 616

原创 基于任意给定的基准日期来计算其昨天、当天和明天的时间范围。

基于基准日期的日期范围计算核心方法是使用来对基准日期进行偏移。

2025-11-25 19:59:12 150

原创 导出时间设置

【代码】导出时间设置。

2025-11-25 15:11:31 105

原创 双节点部署WebSocket问题分析与解决方案

这样优化后的系统可以支持多节点部署,所有节点通过Redis实现数据同步和消息分发,确保WebSocket连接的全局一致性和消息的可靠传递。│ ├── nginx.conf # 主配置文件。├── conf\ # 配置文件目录。├── html\ # 静态文件目录。├── logs\ # 日志文件目录。: 通过Redis频道实现消息的全局广播和单播。: 设置Redis键的过期时间,防止僵尸连接。: http://[你的IP地址]:80。

2025-11-12 16:51:09 1058

原创 Spring Boot + WebSocket完整实现示例

【代码】【无标题】

2025-11-12 16:19:08 186

原创 windows系统启动redis报错

在启动 Redis 时遇到了的错误,这通常意味着 Redis 服务无法成功绑定到指定的 IP 地址和端口(127.0.0.1:6380)。

2025-11-10 14:27:15 288

原创 JWT 用于身份认证和授权的、具有防篡改能力的数字令牌

JWT 的全称是 JSON Web Token。它本质上是一个字符串,由三部分组成,用点​​Header(头部)​​: 描述令牌的类型和签名算法。好比在会员卡上写着“本卡使用V3.0防伪技术”。​​Payload(负载)​​: 这是核心,里面包含了你想要传递的“声明”(用户信息、权限、过期时间等)。好比会员卡上印着的会员号会员级别有效期。​​注意:​​ 这部分信息是​​Base64编码的,并非加密​​。所以​​绝对不能在里面放密码等敏感信息​​。​​Signature(签名)​。

2025-10-22 10:39:48 450

原创 MyBatis 中 @InterceptorIgnore注解的作用。

​ 这个拦截器就像一个“关卡”或者“监控摄像头”,每当 MyBatis 要执行一个 Mapper 接口中的方法(最终对应一条 SQL)时,这个拦截器都会被触发,执行你定义的记录日志逻辑(在。​ 当 MyBatis 执行这个被注解标记的方法时,它会“看到”这个注解,并知道:“哦,这个方法要求忽略某些拦截器”。​ 如果使用拦截器实现基于租户 ID 的数据过滤,对于某些需要访问所有租户数据的超级管理员方法,可以排除这个过滤拦截器。比如,你可以指定只有当拦截器的。​时使用的,用来排除某些方法不被特定的拦截器拦截。

2025-10-22 09:55:21 619

原创 MQ的使用场景

​​当你不想让系统A的稳定性和性能被系统B、C、D拖累时​​(解耦)。​​当你想让用户更快地拿到响应,而把耗时的活儿放在后台慢慢干时​​(异步)。​​当你需要应对像秒杀、抢票那样的瞬时巨大流量时​​(削峰)。​​当你需要让多个系统之间的数据保持同步时​​(数据同步)。​​当你需要实现定时任务、广播通知、保证顺序等复杂业务逻辑时​​。

2025-10-22 09:09:19 533

原创 @Valid校验 -(Spring 默认不支持直接校验 List<@Valid Entity>,需用包装类或手动校验。)

/ 业务逻辑} MyEntity中某个参数没有传入,也没有提示,参数有加@NotNull注解在 Spring Boot 中,直接对使用@Valid验证时,集合内元素的校验可能不会自动触发。

2025-10-17 10:05:15 338

原创 stream使用

List<ImportDTO> importList 转成 List<MathDTO> mathList。

2025-09-26 14:39:55 151

原创 easypoi导出

name​try {// 创建表头列表// 第一行表头:基础信息headerList.add(new ExcelExportEntity("姓名", "name"));headerList.add(new ExcelExportEntity("性别", "gender"));// 第一行表头:数学相关参数(合并3列)ExcelExportEntity mathHeader = new ExcelExportEntity("数学相关参数", "math");// 合并3列。

2025-09-26 14:33:49 469

原创 使用Python拆分DataFrame:将单行数据扩展为多行

在数据处理和分析过程中,我们经常会遇到需要将单行数据拆分成多行的情况。特别是在处理时间序列数据、版本对比数据或者多状态数据时,这种需求尤为常见。本文将介绍一个通用的Python函数,可以帮助您轻松实现DataFrame的拆分操作。

2025-08-28 16:52:08 270

Python与MinIO结合使用Flask上传与下载文件的完整指南

内容概要:本文档详细介绍了如何在Python中使用MinIO对象存储服务进行文件的上传和下载操作,特别是在Flask Web应用中集成MinIO客户端的具体步骤和示例代码,包括环境搭建、模块引入、函数实现、异常处理以及安全性和兼容性的考虑,如处理URL编码、MIME类型等细节。 适合人群:具备基本Python编程能力的开发者,特别是正在从事Web开发或对MinIO对象存储有兴趣的技术人员。 使用场景及目标:本文提供的解决方案适用于任何需要高效管理大量文件的应用场景,比如云存储服务、在线图片视频分享平台、备份系统等,帮助开发者快速构建稳定可靠的文件管理接口。 阅读建议:建议边读边实践文中给出的例子代码,同时注意检查是否符合自己的具体业务需求(如不同操作系统下的路径规则、自定义域名支持),以便做出适当的调整优化。遇到问题时可以参考官方文档或相关社区论坛求助。

2024-11-22

0、多线程详解 多线程(Multithreading)是指在一个程序中同时执行多个线程的技术

0、多线程详解 多线程(Multithreading)是指在一个程序中同时执行多个线程的技术

2024-11-18

GDAL-3.4.1-cp39-cp39-manylinux-2-5-x86-64.manylinux1-x86-64.whl

具体说明: GDAL 3.4.1:这是 GDAL(Geospatial Data Abstraction Library) 的一个版本,GDAL 是一个开源库,广泛用于处理和转换地理空间数据(例如栅格和矢量数据)。 cp39:表示这个 Wheel 文件是为 Python 3.9 版本编译的。 manylinux_2_5 和 manylinux1:这表明这个文件是为符合 manylinux 规范的 Linux 系统构建的。manylinux 规范确保 Python 库可以在多个 Linux 发行版上顺利安装,因此这个 Wheel 文件适用于各种支持该标准的 Linux 系统。 x86_64:表示这是为 64 位架构 的操作系统构建的,适用于大多数现代计算机系统。 主要用途: GDAL 库用于地理信息系统(GIS)中的数据处理,特别是在栅格和矢量数据的读取、写入、转换、重投影和空间分析方面。它广泛支持不同的地理空间数据格式,如 GeoTIFF、Shapefile、KML 等等。

2024-11-06

GDAL-3.3.3-cp39-cp39-manylinux-2-5-x86-64.manylinux1-x86-64.whl

GDAL-3.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl 是一个 Python Wheel 文件,专门用于安装 GDAL 版本 3.3.3 的 Python 包。这个文件适用于以下条件: Python 3.9:文件名中的 cp39 表明它是为 Python 3.9 版本编译的。 操作系统平台:文件中的 manylinux 说明它是为符合 manylinux 规范的 Linux 系统构建的,适用于许多不同的 Linux 发行版。 64-bit 架构:x86_64 表示该文件适用于 64 位架构的操作系统。 该文件的作用: GDAL(Geospatial Data Abstraction Library)是一个开源的库,用于处理和转换地理空间数据(如栅格图像和矢量数据)。它支持多种地理数据格式,例如 GeoTIFF、Shapefile、KML 等等。GDAL 是很多地理信息系统(GIS)工具和 Python 库(如 rasterio、geopandas 等)底层的依赖库。

2024-11-06

空空如也

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

TA关注的人

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