- 博客(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
原创 异步导出方案
如果数据量极大(十万级以上),应采用分页查询、流式写入的方式,防止内存溢出(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时返回结果中各字段的核心含义。字段含义与解读要点idSELECT 查询的序列号。。查询的类型,例如简单查询(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
原创 定时器多节点部署,导致保存数据重复(分布式锁)
方案优点缺点适用场景数据库分布式锁实现简单,依赖少性能一般,可靠性需自行保证小型项目,数据库压力不大,任务不频繁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
原创 获取某个字段时间最新的一条数据
要使用函数获取每个user_name最新的一条数据,其核心思路是。具体的写法会因数据库系统略有不同,以下是两种主流写法。
2025-11-27 19:53:01
616
原创 双节点部署WebSocket问题分析与解决方案
这样优化后的系统可以支持多节点部署,所有节点通过Redis实现数据同步和消息分发,确保WebSocket连接的全局一致性和消息的可靠传递。│ ├── nginx.conf # 主配置文件。├── conf\ # 配置文件目录。├── html\ # 静态文件目录。├── logs\ # 日志文件目录。: 通过Redis频道实现消息的全局广播和单播。: 设置Redis键的过期时间,防止僵尸连接。: http://[你的IP地址]:80。
2025-11-12 16:51:09
1058
原创 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
原创 easypoi导出
nametry {// 创建表头列表// 第一行表头:基础信息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上传与下载文件的完整指南
2024-11-22
0、多线程详解 多线程(Multithreading)是指在一个程序中同时执行多个线程的技术
2024-11-18
GDAL-3.4.1-cp39-cp39-manylinux-2-5-x86-64.manylinux1-x86-64.whl
2024-11-06
GDAL-3.3.3-cp39-cp39-manylinux-2-5-x86-64.manylinux1-x86-64.whl
2024-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅