java
文章平均质量分 79
探索未知的自己
几十年一线研发与架构治理经验,致力于大规模分布式系统、云原生架构及AI工程化的前沿研究与产业落地。深度精通Java运行时与内核态优化,主导过电商、政务、物联网、能源等多个领域的0-1-n技术底座构建,形成可复用的微服务治理体系与多模式交付标准。
曾在大厂和国家级项目中,引领从业务建模到性能极限调优的全链路创新,实现百万级设备秒级响应与单机QPS突破7000。率先将RAG、LangChain等AI能力融入传统政务系统,推动决策智能化转型。
拥有多项授权发明专利,持续输出技术影响力。擅长在复杂约束下定义技术路线,平衡前瞻性与工程落地,以科学家视角重构系统韧性,为产业数字化提供可演进的技术范式。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
word转富文本
本文介绍基于docx4j的免费开源方案,实现Word与HTML双向转换的完整技术闭环。通过将Word转HTML(提取图片至MinIO并替换为URL),前端富文本编辑后,再将HTML还原为Word,可高效处理图文混排文档。但需解决图片嵌入、表格样式降级、字体丢失及分页符缺失等“坑”。该方案适用于普通文章类文档,对排版精度要求高的合同、公文建议采用模板引擎POI-TL生成。原创 2026-10-28 16:36:13 · 238 阅读 · 0 评论 -
PDF内容转移富文本
本文详解了将PDF转为富文本的全栈技术方案,核心难点在于格式丢失与中文字体渲染。通过ApachePDFBox解析文本、前端富文本编辑器(如Tiptap)实现可编辑性,再用OpenHTMLToPDF生成PDF,完成闭环。关键问题包括:原版复杂排版无法还原、字体缺失导致乱码、前端样式与后端渲染不兼容。建议仅用于简单文本类文档转换;若需精准保留排版,应采用PDF.js或WPS/OnlyOffice等专业工具。原创 2026-10-28 16:32:17 · 391 阅读 · 0 评论 -
在线文档编辑方案
本文提出一种前后端分工明确的文档生成方案:前端仅负责数据收集与轻量预览,后端利用Poi-tl、iText7、LibreOffice等工业级库实现精准排版、格式转换与安全生成。通过模板占位符替换(场景A)、坐标套打(场景B)和富文本转PDF(场景C)三种模式,兼顾灵活性与质量。核心优势在于前端零排版负担、文档安全可控、输出效果完美,推荐初学者优先采用Poi-tl+LibreOffice的场景A快速落地。原创 2026-10-28 14:00:45 · 321 阅读 · 0 评论 -
自定义注解使用简介
本文详解了Spring Boot中@RequestParam参数校验的正确实现方式,强调需依赖spring-boot-starter-validation引入验证框架,通过@Validated注解开启方法级校验(必须加在Controller类上),并自定义@ValidFile注解与FileValidator校验器,严格遵循JSR-380规范。关键点:避免在@RequestParam上使用@Valid,正确配置注解属性及校验逻辑,确保文件大小、类型等校验生效,最终实现安全可靠的参数校验机制。原创 2026-10-28 09:59:26 · 236 阅读 · 0 评论 -
EasyExcel 导出excell 单元格右侧对齐
在EasyExcel中实现单元格右对齐,推荐使用@ContentStyle注解方式,简洁高效;需多列差异化样式时,可继承AbstractVerticalCellStyleStrategy自定义策略;极特殊场景下使用WriteHandler编程方式动态修改。注解法最适合作为日常开发首选。原创 2026-10-13 08:53:11 · 568 阅读 · 0 评论 -
Kong、APISIX、Spring Cloud Gateway 以及 FastAPI + Node.js 组合
APISIX、Kong、SpringCloudGateway与FastAPI+Node.js在架构定位、性能与适用场景上差异显著。APISIX基于OpenResty与etcd,实现毫秒级动态配置,路由匹配采用高效基数树,性能领先;Kong依赖数据库或YAML,配置延迟较高;SpringCloudGateway深度绑定Java生态,启动慢、内存高;FastAPI+Node.js为业务服务组合,非专业网关。选型建议:纯Java团队用SpringCloudGateway,多语言架构选APISIX或Kong,Fas原创 2026-10-12 08:14:38 · 199 阅读 · 0 评论 -
Haversine 公式详解
Haversine公式是计算球面两点间大圆距离的经典方法,广泛应用于LBS、网约车、外卖等“附近搜索”场景。它通过半正矢函数克服了球面余弦定律在短距离下的数值不稳定性,提升精度。公式为:$ d = 2R \cdot \arcsin\left(\sqrt{\sin^2(\Delta\phi/2) + \cos\phi_1\cos\phi_2\sin^2(\Delta\lambda/2)}\right) $,其中$ R $取6371km为通用地球半径。使用时需注意经纬度顺序、弧度转换及浮点误差保护。长距离高精度原创 2026-10-10 17:20:15 · 72 阅读 · 0 评论 -
计算以点为圆心半径R的站点信息列表
本文实现了一个基于Haversine公式的近邻站点查找功能,支持根据当前点经纬度筛选10公里内站点并按距离排序。通过定义Station和StationDistanceVO模型,结合GeoUtils计算地理距离,使用Java Stream高效处理数据。优化建议包括边界框预过滤、并行计算、缓存及数据库空间索引。注意空值校验、经纬度顺序与浮点误差防护,确保结果准确可靠。适用于高并发场景下的位置服务应用。原创 2026-10-10 17:14:54 · 42 阅读 · 0 评论 -
根据经纬度 查询最近的站点分页列表
本文针对基于经纬度查询最近站点的分页难题,提出五种技术方案:MySQL Haversine+边界框分页(通用)、空间索引优化(8.0推荐)、Redis GEO应用层分页(高并发)、Elasticsearch原生支持(已有系统)及PostGIS KNN(专业场景)。核心思路是先用几何范围缩小候选集,再排序分页。深分页采用距离游标替代OFFSET,提升性能;高并发场景推荐Redis GEO,复杂地理计算选PostGIS。建议根据数据量、并发与系统架构选择最优方案,兼顾性能与可维护性。原创 2026-10-10 11:17:56 · 137 阅读 · 0 评论 -
根据经纬度查询附近站点信息
本文系统介绍了基于经纬度查询最近站点的五种技术方案:MySQL Haversine公式(适合小数据)、空间函数(推荐中等规模)、Redis GEO(高并发首选)、PostGIS(专业地理分析)及Elasticsearch(已有系统)。核心思路为距离计算+空间索引+排序取前N,结合边界框过滤优化性能。关键要点包括经纬度顺序、单位统一、索引设计与浮点保护。选型建议:小数据用MySQL,中等用空间索引,高并发选Redis,复杂场景用PostGIS。原创 2026-10-10 11:12:09 · 106 阅读 · 0 评论 -
把 List<Object> 数据用 EasyExcel 写入 Excel 并返回 MultipartFile
本文介绍如何使用EasyExcel将List<Object>数据导出为Excel并返回MultipartFile。核心步骤:通过ByteArrayOutputStream写入Excel,利用MockMultipartFile包装字节数组,返回可上传的文件对象。支持静态实体类(带@ExcelProperty)和动态表头两种方式,注意文件名需含.xlsx、MIME类型及参数名匹配。适用于Feign文件上传或接口返回场景,内存敏感时建议优化处理。原创 2026-09-28 15:07:44 · 290 阅读 · 0 评论 -
前端导出 Excel 功能:方案选型、实现与最佳实践
前端导出Excel需根据数据量、样式需求选择方案:小数据无样式用SheetJS,复杂报表选ExcelJS,超大数据建议后端生成。注意中文乱码、日期格式、数字显示等问题,通过加BOM、设置单元格格式、使用WebWorker或流式写入优化性能。封装统一工具函数,添加loading与错误提示,提升体验与可维护性。原创 2026-09-25 06:15:07 · 244 阅读 · 0 评论 -
防止被利用、被抢功、被踩踏:信任时代的自我防御系统
信任是职场资产,但需自我防御。防止被利用,须建边界、留筹码、留痕、识操纵;防抢功,靠可见性、留证、主动归因、塑个人品牌;防踩踏,需建立威慑、保持退出力、结盟、精准反击。核心:可预测、可依赖、可互惠,同时有边界、有筹码、有退路。善良要有锋芒,合作有底线,信任分级管理。成年人的生存之道,是信任与防御的平衡。原创 2026-09-24 08:15:47 · 171 阅读 · 0 评论 -
防御壁垒打造,建立护城河,魔鬼手段
本文构建“信任+防御”升级版体系,提出在合法合规前提下,通过信息、能力、关系、制度、心理五层壁垒打造护城河,以“阳谋”实现防御与威慑。强调不可替代性、转换成本、网络效应与品牌资产四大要素,倡导留痕、公开、互惠、可解释的合规策略,避免反噬。最终目标:以系统对抗随机,用价值赢得合作,实现可持续的职场安全与成长。原创 2026-09-24 08:15:27 · 156 阅读 · 0 评论 -
计算节点的父节点或者子节点算法
本文系统讲解树结构的存储与遍历:采用父指针数组、邻接表或完全二叉树数组三种方式,分别对应不同场景。核心是构建nodeMap和childrenMap,实现父节点O(1)查找、子节点快速获取及后代遍历(DFS/BFS)。数据库中可用递归CTE实现上下遍历。重点强调工程坑:循环引用需用visited防止死循环,避免N+1查询,注意递归深度与排序。推荐“扁平列表+映射”组合,高效且易维护。原创 2026-09-24 08:15:06 · 275 阅读 · 0 评论 -
布隆过滤器
布隆过滤器是一种高效概率型数据结构,通过位数组和多个哈希函数实现极低空间开销的元素存在性判断。它支持“一定不存在”(无假阴性)和“可能存在”(有假阳性),广泛用于缓存穿透防护、爬虫去重、黑名单过滤等场景。虽不支持删除,但可通过计数型或布谷鸟过滤器变种解决。其空间效率高,误判率可控,是系统设计中权衡性能与资源的理想工具。原创 2026-09-24 08:14:43 · 272 阅读 · 0 评论 -
特斯拉公司电子电气架构技术报告
特斯拉电子电气架构历经从分布式到集中式演进,以Model3/Y为里程碑,实现中央计算+区域控制器+以太网骨干的融合。核心特征包括:中央计算模块(CCM)集成自动驾驶、信息娱乐与车控;区域控制器就近管理本地执行器,大幅缩短线束;以太网提供高带宽支持OTA与数据融合;48V低压架构助力线控系统;软件定义汽车与服务化设计推动持续迭代。冗余设计保障安全,满足ASIL-D标准。该架构支撑自动驾驶与无人驾驶,体现“软件定义汽车”理念,对行业具有深远启示。原创 2026-09-19 16:10:06 · 177 阅读 · 0 评论 -
“卡尔滤波算法”应该是卡尔曼滤波(Kalman Filter)。
卡尔曼滤波是轨迹平滑的核心算法,通过状态空间模型融合多源传感器数据(如GPS、IMU),有效抑制噪声、补全缺失、提升轨迹连续性与动态可行性。其在线滤波与离线RTS平滑结合,兼顾实时性与精度,适用于自动驾驶、机器人导航及商用车编队等场景。工程实现中需合理选择状态模型(如CV、CA、CT)、调优过程/观测噪声协方差(Q/R),并注意时间同步与异常值处理。相比移动平均、样条插值等方法,卡尔曼滤波在实时性与多源融合上更具优势,是车载系统中高精度轨迹优化的首选方案。原创 2026-09-19 16:08:23 · 163 阅读 · 0 评论 -
轨迹优化正弦曲线
正弦曲线在轨迹优化中广泛用于生成平滑的周期性运动,如车辆换道、机器人巡检与避障。其优势在于连续可导、参数少、计算高效,适合规律性轨迹。通过一维或二维正弦函数建模横向摆动,结合余弦波实现端点导数为零的平滑过渡。可用于轨迹平滑(正弦拟合)与动态扰动避障,但表达能力有限,复杂路径需与其他曲线(如多项式、样条)组合使用。工程上常作为基元,适用于嵌入式实时系统,但不适用于高维、非周期或强约束场景。理解其边界,比掌握公式更重要。原创 2026-09-19 16:06:52 · 197 阅读 · 0 评论 -
窗口函数中的滑动窗口
滑动窗口是SQL中实现动态统计的核心功能,通过OVER(PARTITION BY ... ORDER BY ... ROWS BETWEEN ...)定义可变范围的计算窗口。它支持累计求和、移动平均、滑动极值等复杂分析,性能优于自连接,实现增量更新,显著提升代码简洁性与执行效率。适用于“最近N天”“累计到当前”“前后对比”等场景,但需注意其限制:不支持排名函数、避免过大窗口、优先使用ROWS而非RANGE。掌握滑动窗口,可轻松实现车辆每日累计净重、移动平均等实时分析需求。原创 2026-09-17 13:42:48 · 86 阅读 · 0 评论 -
Deepseek 公司研究员深夜发文说AI 革了自己的命
AI革了自己的命”,不是悲剧,而是一种清醒。真正危险的不是AI替代你,而是你拒绝承认变化,拒绝迁移能力,拒绝把自己从执行者升级为定义者。那个深夜发帖的研究员,已经走在了前面。我每天做的工作里,有多少是AI已经能做的?有多少是AI做不了、只有我能做的?答案,决定了你未来五年的位置。原创 2026-09-17 13:22:34 · 170 阅读 · 0 评论 -
微服务里边代码没有任何变动重启找不到数据库链接信息了
SpringBoot在perf环境启动失败,因未获取到数据库配置导致无法确定驱动类。根本原因并非代码变更,而是Nacos配置中心中perf环境的数据源配置缺失或未成功拉取。排查需确认Nacos中对应dataId是否存在、bootstrap.yml的namespace/group是否正确、Nacos服务是否可达,并通过--debug查看配置来源。修复方式为补全Nacos配置或临时排除数据源自动配置。核心教训:微服务下配置动态化,问题应优先排查配置来源而非代码。原创 2026-09-16 16:57:29 · 256 阅读 · 0 评论 -
客户端通过feign调用服务端,服务端的接口中获取用户信息
Feign调用无法自动传递原始请求上下文,导致下游服务无法获取用户信息。核心解决方案是通过Feign拦截器将用户信息(如Token、User ID)透传至下游。推荐方案:网关统一鉴权并注入Header,服务A通过拦截器原样透传,服务B用拦截器读取Header并存入ThreadLocal。需注意ThreadLocal清理、异步场景传递、防伪造及信任边界问题。最佳实践为网关层统一处理,确保链路清晰、可追踪,提升系统可观测性与安全性。原创 2026-09-15 14:29:00 · 220 阅读 · 0 评论 -
BigDecimal 的multiply 方法保留指定小数点位数
BigDecimal.multiply() 不会自动保留小数位,结果 scale 为两乘数 scale 之和。需调用 setScale(n, RoundingMode) 显式指定保留位数与舍入模式。推荐使用 RoundingMode.HALF_UP(四舍五入),且必须传入舍入模式,否则抛异常。务必用 String 构造 BigDecimal 避免精度误差。标准写法:a.multiply(b).setScale(2, RoundingMode.HALF_UP)。原创 2026-09-14 10:44:11 · 206 阅读 · 0 评论 -
DATEDIFF(now(), createTime) <= 写法优化
本文分析了SQL中使用DATEDIFF(now(), createTime) <= ?2的性能问题:该表达式无法利用索引,导致全表扫描,影响查询效率。推荐改写为createTime >= DATE_SUB(CURDATE(), INTERVAL ?2 DAY),使查询可走索引,实现范围扫描,显著提升性能。在MyBatis或JPA中均可便捷实现。不建议使用函数索引,维护成本高。结论:优化写法性能更优,强烈推荐。原创 2026-09-10 14:56:38 · 160 阅读 · 0 评论 -
对象设置默认值
在JDK8中使用Lombok的@Builder时,为确保parentOrgInfoMap永不为null,推荐组合使用@Builder.Default(默认空Map)与自定义构建器setter(显式传null时转为空Map),实现双重保障。此方案既简洁又彻底防御null风险,优于仅依赖@Singular或getter防御。原创 2026-09-10 08:39:35 · 123 阅读 · 0 评论 -
Objects.equals() vs compareTo()
本文系统对比了Objects.equals()与compareTo()的核心区别,强调前者用于值相等判断(支持null),后者用于排序与大小比较。重点剖析LocalDateTime、Long/Integer、BigDecimal等类型在判等与比较中的陷阱,如BigDecimal.equals()因精度差异导致误判,推荐使用compareTo == 0。结合业务场景,提出安全判等、时间截断、空值处理等最佳实践,总结出“判等用Objects.equals,比较用compareTo,注意精度与null”的核心原则原创 2026-09-09 13:48:23 · 479 阅读 · 0 评论 -
Objects.equals和compare 比较
本文深入解析了equals()与compareTo()的本质区别,重点对比了LocalDateTime、Long/Integer、BigDecimal等类型的比较行为。强调:equals()要求值与类型完全一致,而compareTo()仅关注数值大小。针对不同场景,推荐使用Objects.equals()处理空值,truncatedTo()精确控制时间精度,BigDecimal应以compareTo()==0判断相等(忽略精度),避免使用equals()。最佳实践包括统一使用compareTo()排序,优先原创 2026-09-09 13:43:02 · 75 阅读 · 0 评论 -
LocalDateTime,LocalDate,LocalTime 比较
Java8的LocalDate、LocalTime和LocalDateTime分别表示日期、时间及日期时间,均不包含时区信息,为“本地”时间。LocalDate用于生日、账单日等;LocalTime适用于定时任务、营业时间;LocalDateTime则用于记录事件发生的具体时间戳。三者不可变,可相互转换。使用时需注意:若涉及跨时区场景,应使用ZonedDateTime或Instant,否则可能导致时间显示错误。单一地区系统中,三者轻量高效,推荐使用。原创 2026-09-09 13:35:10 · 218 阅读 · 0 评论 -
feign 调用服务端不存在是客户端处理逻辑
客户端调用不存在的接口,会抛出(状态码 404)。建议:确保接口定义正确(URL、方法、参数)使用 fallback 实现服务降级,避免调用方崩溃使用全局异常处理,统一管理 Feign 异常响应在开发阶段,可以通过日志或调试确认请求路径是否与服务端一致。原创 2026-09-08 15:01:02 · 459 阅读 · 0 评论 -
长Long型ID问题
<think>我们根据要求:生成≤150字的文章摘要。内容是一篇关于前端id相同问题排查的文章。摘要需要简洁概括核心内容。注意字数。</think>前端列表ID异常多因后端Long型ID超JS安全整数致精度丢失,Postman正常而前端解析舍入为相同值。推荐后端用@JsonSerialize(using=ToStringSerializer.class)将ID转字符串;另需检查字段名、key或赋值引用错误。原创 2026-09-08 10:04:06 · 178 阅读 · 0 评论 -
时分秒区间比较
<think>我们要求根据用户提供的内容生成一个≤150字的文章摘要。内容主要是Java代码实现,比较时间部分判断重叠,处理跨午夜。摘要需要概括要点:忽略年月日,比较时间部分,转换为当天秒数,处理跨午夜,生成区间列表,重叠条件判断等。注意字数限制,简明扼要。</think>摘要:实现按时间部分判断重叠,将LocalDateTime转为当天秒数,并处理跨午夜。核心是标准化时间区间为不跨午夜子区间,再用开始小于结束且结束大于开始判定重叠。支持端点相接不重叠、全天候逻辑,空值返回false原创 2026-09-07 09:51:04 · 256 阅读 · 0 评论 -
JPA Repository 方法返回的对象中字段同sql返回字段数量不等
<think>我们根据要求生成一篇关于“JPA查询字段与实体字段不一致是否报错”的摘要,不超过150字。需要涵盖原生SQL和JPQL的区别,以及推荐做法。摘要要简洁。</think>原生SQL下,字段与实体不一致通常不报错:列少则未映射字段置null或0,列多则多余忽略,但可能引发空指针或数据覆盖风险。JPQL则严格要求类型匹配,缺字段或字段过多都会报错,需用DTO投影(SELECT NEW)。建议始终使用DTO投影,按需取字段,更安全清晰。原创 2026-09-04 08:44:35 · 340 阅读 · 0 评论 -
deaVim 与 IdeaVimExtension介绍
<think>我们只需要根据内容生成一个不超过150字的摘要。内容介绍了IdeaVim与IdeaVimExtension的关系、功能、优缺点等。摘要要简洁概括核心要点。</think>IdeaVim是JetBrains IDE的官方Vim引擎插件,提供模态编辑与IDE集成;IdeaVimExtension为社区插件,解决中文输入法在Vim模式下切换问题。二者通过.ideavimrc配置,提升纯键盘操作效率,但存在学习曲线陡峭、UI弹窗中Vim键失效等限制。原创 2026-09-03 13:33:12 · 286 阅读 · 0 评论 -
idea 2022.3.3 社区版本 安装代码智能补全插件
<think>我们根据要求生成一个≤150字的摘要。注意摘要要涵盖主要内容:安装路径、问题、解决方法。字数严格。</think>IntelliJ IDEA 2022.3.3社区版装代码补全插件,可在线或离线安装。常见网络超时、文件损坏、版本限制等问题。解决方案:配置代理、延长超时、添加官方源或磁盘安装、重启并启用核心组件、确保模型下载完成。原创 2026-09-03 08:40:18 · 217 阅读 · 0 评论 -
mysql date(datetime) 和date类型字段比较是同一天
<think>我们根据用户要求,生成≤150字的文章摘要。内容主题是MySQL中DATE与DATETIME比较不等,需要判断同一天的方法及性能。摘要需包括:直接比较不等的原因,推荐范围查询(走索引),DATE()函数会索引失效,特殊情况简述,最佳实践。字数控制。</think>MySQL中DATE与DATETIME直接比较不等,因隐式转换DATE为当天零点。若判断同一天,推荐范围查询:datetime_col >= date_col AND datetime_col <原创 2026-09-02 21:22:48 · 222 阅读 · 0 评论 -
BigDecimal 全部格式化为整数
<think>我们根据要求生成摘要,不超过150字。内容是关于BigDecimal格式化为整数的方法总结。摘要需简洁涵盖主要方式。</think>本文总结了BigDecimal格式化为整数的多种方式:通过setScale配合RoundingMode实现截断或四舍五入;使用intValue/longValue直接截断;用toBigInteger或stripTrailingZeros去除小数。推荐使用setScale(0,RoundingMode.HALF_UP)结合toPlainStr原创 2026-09-01 14:27:03 · 197 阅读 · 0 评论 -
mybatis 文件里面的特殊符号处理
<think>我们只需根据内容生成≤150字的摘要。需要概括主要点:MyBatis XML特殊符号处理,四种场景:比较运算符用CDATA或实体;LIKE通配符用#{}传参;${}占位符冲突避免;注释中--问题;万能CDATA但占位符放外面。注意字数。</think>MyBatis XML处理特殊符号:比较运算符用CDATA或实体符号;LIKE通配符应在Java拼好并用#{};慎用${},需白名单校验;注释避免连续--。万能方案是CDATA包裹SQL,但#{}和${}必须放在CDATA原创 2026-08-31 13:14:23 · 972 阅读 · 0 评论 -
mysq 检索当前时间在数据库startTime和endTime 字段区间的数据 按照 endTime 顺序排序
<think>我们只需要根据内容生成摘要,≤150字。内容是关于MySQL检索当前时间在startTime和endTime区间内并按endTime排序的SQL,包含边界情况、示例、MyBatis-Plus写法等。摘要要简洁概括。</think>本文介绍MySQL查询当前时间落在startTime与endTime区间内的数据,按endTime排序的SQL写法,涵盖BETWEEN边界含端点、严格区间及半开区间等场景,并给出MyBatis-Plus实现与边界处理建议。原创 2026-08-31 11:24:34 · 456 阅读 · 0 评论 -
jdk8 判断区间重合情况实例
场景代码判断两个区间是否重叠避免 null 导致 NPE在方法中判空更新时排除自身。原创 2026-08-31 10:18:02 · 199 阅读 · 0 评论
分享