朝花夕拾篇
文章平均质量分 81
智_永无止境
来和大家一起学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
像CAD制图一样,使用Java绘图标注图片的瑕疵
自己编写图片验证码的项目,然而随着技术的发展,三方库的增强。滑动验证码、旋转验证码等更加方便的验证码出现,逐渐取代了传统的验证码。带辅助线的箭头如图上的瑕疵点02。箭头其实也是线,我们需要确定箭头的角度大小,而箭头的方向取决于辅助线的方向。为了计算的方便,我们设定为的辅助线的角度为45°,这样对应的X轴和Y轴的值都相等。验证码可能不需要了写了,但是这项画图的技术依然有他的用武之地。主要用来标注目标点的位置,以坐标点为圆心,画一个适合半径的圆。参数为左上角的坐标,所以这里都要减去半径才是画笔落笔的地方。原创 2025-11-25 09:30:31 · 247 阅读 · 0 评论 -
IntelliJ IDEA 2025.2.x的小惊喜和小BUG
每次提交之后,都会出现这样的问题,需要手动同步一下才可以。原本用的好好的,修改完代码打算提交时,发现提交的代码不见了,显示本地没有改动。软件的更新换代可能会存在BUG,作为程序员的大家可能都会深有体会,只是大小不同而已。以前的版本只有前5项,而2.x版本开始增加了图中框的两个,目前还是处于测试阶段。版本,本以为高版本的会修复掉,直到升级到2.x的最高版本问题依然存在。的,开始的时候怎么用怎么别扭。的支持、主题的变化、性能的提升,布局的改变等等。是免费的,免费的和收费的本身就没有可比性。带点灰色,比较柔和。原创 2025-11-24 09:47:48 · 146 阅读 · 0 评论 -
OCR告别付费!分享两款可部署的开源项目
Umi-OCR是一个免费、开源、可离线的 OCR 文字识别工具,由开发者hiroi-sora使用Python编写。它的名字中 “Umi” 在日语里是“海”的意思,寓意着其“海纳百川”的特性。该项目是基于百度开源的PaddleOCR开发,对中文和英文的识别准确率非常高,同时支持多国语言。它的主要目标是提供一个简单易用、功能强大且完全离线的图片文字识别解决方案,完美保护用户隐私,因为所有识别过程都在本地计算机上完成,无需连接任何外部服务器。不仅支持本地部署,还支持windowswindows。原创 2025-11-21 09:42:13 · 271 阅读 · 0 评论 -
Redis分布式锁不止set nx那么简单
Lock4j是一个分布式锁组件,其提供了多种不同的支持以满足不同性能和环境的需求,立志打造一个简单但富有内涵的分布式锁组件。其特性就是简单易用,功能强大,扩展性强,支持redissionzookeeper。可混用,支持扩展。该开源项目来自苞米豆社区,你可能没听过。但是你一定听过,它的作者和Lock4j的作者是同一人。原创 2025-11-20 10:08:59 · 952 阅读 · 0 评论 -
还在为HTML转PDF发愁?再介绍两款工具,为你保驾护航!
是iText7套件的一个附加组件,专门用于将HTML和CSS内容转换为PDF文档。它基于iText核心PDF生成引擎,提供了高质量的HTML到PDF转换功能。性能表现非常优异。完整的HTML5和CSS3支持:能够处理现代网页布局和样式字体嵌入:自动处理Web字体和系统字体响应式设计:支持媒体查询和响应式布局高保真转换:保持HTML内容的视觉保真度Java原生:专为Java生态系统设计GitHub地址:https://github.com/itext/itext-pdfhtml-java。原创 2025-11-13 10:15:28 · 444 阅读 · 0 评论 -
SpringBoot邮件发送怎么玩?比官方自带的Mail更好用的三方工具
Simple Java Mail 是一个拥有超简洁API的邮件库。它是世界上使用起来最简便的(Java)邮件库,可通过SMTP发送电子邮件。这个库让你无需处理诸如之类的底层API、繁琐的trycatch结构、内部类以及其他无用的东西。它是一个功能强大、特性完备的邮件库,同时又小巧且轻量。核心模块:GitHub地址:https://github.com/bbottema/simple-java-mail官网地址:https://www.simplejavamail.org/SMS4J。原创 2025-11-12 09:19:51 · 429 阅读 · 0 评论 -
为什么0.1 + 0.2不等于0.3?一次讲透计算机的数学“Bug”
在 IEEE 754 出现之前,不同厂商的计算机可能用不同的方式表示小数,导致程序在一台机器上运行正常,在另一台机器上结果却不一样。第24位是1,后面还有,所以粘滞位为1。根据向最接近的偶数舍入(默认舍入模式):第24位是1,且后面有非零位,所以需要向上舍入(即第23位加1)。它就像一套世界通用的“小数书写法则”,确保了在不同计算机上,同一个小数能有相同的表示,并且计算结果是可预测的。多处的以为是直接舍去还是进一,是有逻辑处理的。案例中直接打印,没有问题是因为没有参与二进制位的运算,所以不会有精度的丢失。原创 2025-11-11 13:31:28 · 846 阅读 · 0 评论 -
百度统计、Google Analytics平替开源网站分析工具:Umami
Umami是一款开源、注重隐私的网络分析工具,可作为谷歌分析的替代方案。它能提供有关网站流量、用户行为和性能的重要见解,同时始终将数据隐私放在首位。不收集或存储个人数据,无需使用Cookie,并且符合GDPR和PECR标准。优势:极简主义与用户体验界面清爽通过精美的图表和列表一目了然地展示,聚焦核心指标以隐私保护为核心无需Cookie警告,默认不收集任何个人身份信息,也不使用Cookie进行跟踪开源与自托管MIT 许可证下的开源软件,可以免费使用、修改和分发强大的多功能支持。原创 2025-11-07 09:56:37 · 797 阅读 · 0 评论 -
消息积压、排查困难?Provectus Kafka UI 让你的数据流一目了然
在了解这款kafka-ui之前,其实还有发现了其他两个类似的开源项目,并且star数还不低。我们这里要介绍是第一个。其他两个对比下来,小编觉得功能上并没有第一个丰富。所以最终就选择了。有兴趣的可以去试试。是一个功能丰富、基于 Web 的开源用户界面,专门为 Apache Kafka 设计,用来管理集群。它提供了一个直观的可视化控制台,让用户无需记忆复杂的命令行指令,就能轻松地执行从基本的主题管理到复杂的消费者组监控等各项任务。GitHub上提供操作的动图以及部署命令,我们以Docker部署为例。原创 2025-11-06 09:23:27 · 709 阅读 · 0 评论 -
Spring Boot还能这样玩?同时监听多个端口的黑科技
假设有一套系统运行平稳,得到合作商的青睐,想要有一套一模一样的系统。领导要求重新部署一套,但是为了节省经费,领导不提供多余的服务器,希望能够在原来的服务器的基础上技能让自己用,也能让合作商使用。我们将在不改变控制层代码的情况下,通过配置的方式完成资源的隔离。而多端口真正的使用场景,小编暂时还想不到。于是自己玩了一下,感觉蛮有意思的,就整理一下分享给大家。这就实现了一个接口三个端口都可以访问的效果。这里的配置直接使用控制层的类,也可以通过自定义的注解获取比对。开放两个端口,一个给自己用,一个给合作商用。原创 2025-11-04 10:42:28 · 313 阅读 · 0 评论 -
聊聊Spring里那个不打扰Controller就能统一改响应的“神器”
在程序编码的时候,我们总会统一返回响应参数,以规范开发。但是面对老项目改造的时候,有没有遇到过返回的参数不统一的情况,自己又不原因一个个的纠正。强迫症的解决方案,就是一个个的修改每一个方法。这种方案自然可行,但是当方法很多时,工作量就非常大,显然不太适合。为防止自定义的方法返回解析器被系统默认的解析器有限取代执行,我们需要调整解析器的位置。:什么样的条件进入,允许处理,类似开关。于是,就想从框架层面解决统一返回的问题。结果这里就不演示了,和上面的结果一致。的情况下,完成响应参数的统一封装。原创 2025-10-30 14:10:34 · 488 阅读 · 0 评论 -
Spring Boot全局异常处理指南
中一个非常强大且实用的注解,它的核心作用是提供全局的、跨多个控制器的增强处理。在很多博主分享的文章中,都会说这里需要定义所有需要处理的异常。本节我们将借鉴框架提供的异常处理机制,完善全局异常的处理,并聊聊背后的故事。如果想要更深层次的处理异常就需要自定义的异常处理器了。但是自定义的异常处理器,可以控制异常是否继续向后执行,还是直接返回客户端。按照小编的设想,异常的处理如果只关心异常的信息提示,那只要分出。配置项的时候,才发现原来配置项也可以进行异常的统一处理。原本全局异常的处理,上面的内容已经足够了。原创 2025-10-30 09:30:39 · 579 阅读 · 0 评论 -
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
是一个基于MyBatis的增强框架,它保留了MyBatis的所有优点,同时引入了更多现代化特性,旨在提供更优雅、更高效的开发体验。与传统的MyBatis增强工具不同,从头开始设计,专注于提供轻量级、高性能且功能丰富的ORM解决方案。小编从该项目刚开源不久就关注到了,当时的star不足1000。后续就关注的少了,最近发现其star数已经2.4k了。GitHub地址:https://github.com/mybatis-flex/mybatis-flex。原创 2025-10-20 15:03:50 · 1059 阅读 · 0 评论 -
TeamViewer、向日葵平替?这几款免费远程控制软件,真香!
号称时尚最安全的远程桌面。这是一款近年来在中国市场非常火爆的远程控制软件,因其对国内网络环境做了深度优化,在速度和延迟方面表现优异,被许多人视为。原创 2025-10-20 09:37:09 · 1577 阅读 · 0 评论 -
SpringBoot多模板引擎整合难题?一篇搞定JSP、Freemarker与Thymeleaf!
但是,总有一些老项目经历多轮迭代,人员更替,不同的开发都只是用自己熟悉的模版引擎,导致一个项目中包含了多种模板引擎。由于其他的视图解析器默认是最级别,所以这里的设置只要比Integr.MAX小即可。源码可以看到,仅仅做了遍历操作,并没有个给句特殊的规则去取。应用开发中,模板引擎是实现前后端分离和视图渲染的重要工具。所以影响视图解析器的就是候选视图的顺序。会对所有的视图排序,所以我们只需要指定。变成了第一个,最优的视图自然也选择了。是正常显示了,但是其他两个又不好了。的配置会影响其他的模板引擎,所以。原创 2025-09-29 14:23:05 · 944 阅读 · 0 评论 -
Xget:又一下载神器诞生!开源免费无广告,速度拉满!
Xget是一个由开发者 xixu-me创建的免费、开源的下载工具。它基于强大的后端下载引擎 Aria2构建,并提供了简洁易用的图形用户界面(GUI),使得即使不熟悉命令行操作的用户,也能轻松驾驭Aria2的高速下载能力。作者的初衷是为了加速在中国大陆境内访问不违反相关法律法规的平台上的开源资源,从而为广大开发者提供一个稳定、合法的加速体验。🌍 消除地理限制:帮助中国大陆开发者快速访问海外开源资源⚖️ 合规合法:严格遵守相关法律法规,仅加速合法的公开资源🚀 提升效率。原创 2025-09-26 09:30:00 · 655 阅读 · 0 评论 -
安利一款 Redis 神器:Tiny RDM!颜值与实力并存
Tiny RDM是一个开源、跨平台的Redis桌面客户端,专为现代开发者设计。它的名字中的“Tiny”体现了其追求轻量化和快速响应的理念,而“RDM”则代表了。开源免费:基于Apache-2.0协议,完全免费,社区驱动。跨平台支持:提供WindowsmacOS和Linux版本,覆盖所有主流操作系统。现代化UI:拥有清新、直观且对用户友好的界面设计。轻量高效:安装包小,资源占用低,启动和运行速度非常快。主要还支持中文,对于初学者相当友好。GitHub。原创 2025-09-23 15:11:26 · 1042 阅读 · 0 评论 -
Archery:开源、一站式的数据库 SQL 审核与运维平台
Archery由国内优秀的开源团队开发和维护,它并非某个单一功能的工具,而是一个统一的数据库管理门户。其核心设计理念是通过一个 Web 平台,将分散的数据库管理操作集中化、流程化和自动化。主要的功能包括了强大的SQL审核与执行、卓越的SQL查询与优化、多数据库类型的支持以及全面的运维管理功能,如实例管理、账号权限、性能监控等。原创 2025-09-19 09:20:22 · 849 阅读 · 0 评论 -
一键开启!Spring Boot 的这些「魔法开关」@Enable,你用对了吗?
通过声明式编程和自动装配机制,它们将复杂的技术实现细节完美地隐藏在一个个简洁的注解之后,让开发者能够专注于业务逻辑本身,从而真正实现了Spring Boot“快速开发”和“轻松集成”的承诺。理解和掌握这些“开关”背后的设计哲学,有助于我们更好地使用Spring Boot,乃至设计和实现自己的 Starter 与自动配置模块。Spring Boot的核心设计理念是“约定优于配置”,旨在减少开发者在XML和样板代码上的负担,让开发者能够快速构建生产级的应用。的位置不在启动类的扫描范围内,所以该类便不会加载。原创 2025-09-18 09:39:57 · 593 阅读 · 0 评论 -
接口调用总失败?试试Spring官方重试框架Spring-Retry
的核心思想是 AOP(面向切面编程)。它通过代理(Proxy)机制,在目标方法的外部包裹一层重试逻辑。当你调用一个被@Retryable注解的方法时,实际上是在调用一个由Spring生成的代理对象,这个代理对象负责在方法执行失败时,根据你配置的策略进行重试。原创 2025-09-16 13:13:36 · 745 阅读 · 0 评论 -
【工具库推荐】Java开发者必备:6款HTTP客户端神器,从经典到未来
它简化了与 HTTP 服务的交互,并集成了 Spring 的生态(如消息转换器)。这种方式需要保证项目能够启动起来才可以,在单元测试的时候,需要保证项目能够跑起来,才能从临时的。如果你厌倦了模板代码,希望用最简洁直观的方式完成HTTP通信,这个库都是非常好的选择。客户端神奇,助你根据项目需求精准选型,高效完成网络请求任务,总有一款适合你。,旨在用最少的代码完成最常见的 HTTP 请求任务,极大地提升了开发效率。的一部分,支持异步和流处理,资源占用更少,并发能力更强。功能极其丰富,几乎可以处理所有复杂的。原创 2025-09-16 10:41:29 · 1393 阅读 · 0 评论 -
告别繁琐配置!Retrofit-Spring-Boot-Starter让HTTP调用更优雅
地址:https://github.com/LianjiaTech/retrofit-spring-boot-starter。官方说了:对于绝大部分Spring-Boot项目,引入依赖即可使用。地址:https://gitee.com/lianjiatech/retrofit-spring-boot-starter。的深度集成,它简化了分布式系统间的服务调用,提供了丰富的功能和灵活的配置选项。,是因为接口地址被截断了,官方专门做了说明,小编也踩坑了。小编这里没有任何的配置,就值了直接调用成功。原创 2025-09-12 11:19:33 · 522 阅读 · 0 评论 -
Java序列化陷阱揭秘:这5个错误80%的开发者都犯过
不仅仅工具类,相同工具类的不同版本也有了能出现问题,这种问题最难排查,因为问题是偶发的,不可固定重现。显然序列化和反序列化的方式不一样,导致反序列化异常。最近总是遇到序列化与反序列化的问题,不是自己遇到就是帮助同事排查类似的问题,本节总结5个常见的错误,看看你有没有踩坑。并没有对应的属性,但是序列化的时候会调用,触发异常。的反序列化直接返回了,我们知道不配置的情况下,序列化和反序列化采用的事。所以,序列化本身看似序列化对象的属性,和方法看似没有关系,但是。代码中采用了自定义的对象流的序列化方式。原创 2025-09-11 14:54:09 · 856 阅读 · 0 评论 -
慢SQL警报:隐藏在数据库中的性能杀手
从一个简单的日志收集器,到一个具备智能分析、精准报警和闭环治理能力的平台,每一步进化都将为业务的稳定和高效运行注入更强的韧性。从一个简单的日志收集器,到一个具备智能分析、精准报警和闭环治理能力的平台,每一步进化都将为业务的稳定和高效运行注入更强的韧性。它悄然滋生,初期难以察觉,但一旦爆发,便会导致应用响应迟缓、系统资源耗尽,甚至引发服务雪崩。导致客户端超时超时,拿到的数据结果为空,从而报空指针异常,被空指针直接误导带偏。前两天帮同事排查一个问题,线下都是好好的,一到生产环境,代码卡死,最后通过。原创 2025-09-11 09:55:59 · 511 阅读 · 0 评论 -
优雅地实现ChatGPT式的打字机效果:Spring Boot 流式响应
是一个函数式接口,适用于需要直接向的输出流写入原始字节数据的场景。它提供了一种低层次、高效的方式来流式传输数据。没有默认的实现,只有一个方法writeTo()。将文件或者数据直接写入输出流中,可以通过输出流的flush()方法,将数据刷出磁盘,减少内存的占用。当我们需要将大量的数据或者文件响应给客户端时,由于处理耗时合作和内存的限制,我们就可以通过这种方式,逐步将数据响应给客户端,既可以提高用户体验又可以节省内存。是一个类,官方还给出了具体的使用案例。该类使用异步线程发送数据,最终需要使用。原创 2025-08-28 13:37:32 · 1292 阅读 · 2 评论 -
无需重启!动态修改日志级别的神技,运维开发都哭了
自定实方案可以定制修改,灵活性较大。修改核心代码log.debug("【DEBUG】日志级别从[{}]修改成[{}]级别了......", oldLevel, lever);log.info("【INFO】日志级别从[{}]修改成[{}]级别了......",oldLevel, lever);log.warn("【WARN】日志级别从[{}]修改成[{}]级别了......",oldLevel, lever);return "日志级别修改成功.....";而的获取是通过得到的。测试。原创 2025-08-26 13:10:17 · 952 阅读 · 0 评论 -
布隆过滤器:用微小的空间代价换取高效的“可能存在”判定
因为哈希冲突的存在,不同的元素通过哈希函数计算后,可能会映射到位数组的相同位置。当查询一个不存在的元素时,如果它的 K 个哈希值对应的位恰好都被其他元素设置为 1 了,布隆过滤器就会误判它为“存在”。布隆过滤器的巧妙之处在于,它。原创 2025-08-22 13:40:22 · 805 阅读 · 0 评论 -
Mybatis批量插入,形式不同性能也不同
批量插入面对小数据量的时,几乎没有任何区别,可以随意使用。一旦数据量比较大时,我们就需要斟酌,选择合适的插入方法,可以帮我们节省很多资源和时间。这样的脚本,适用于数据量不大的情况,基本满足业务需求,但是却存在安全隐患。上面的这种写法确实比一条条的数据入库的速度快太多,我们这里只横向对比不同的批量插入。从运行的结果来看,这种方式才是类似我们手搓的的脚本,效率杠杠的。所以呢,当一次插入的数据达到一定的数据就会出现异常。本节,我们将对比不同的写法以及响应的时间的消耗。接收和发送的最大数据包的大小,默认64M。原创 2025-08-18 13:48:22 · 1132 阅读 · 0 评论 -
流式数据服务端怎么传给前端,前端怎么接收?
也支持流式查询,防止频繁的数据库连接池的打开和关闭。如果按照思维定式处理,只能能到所有的数据全部加载完成,再响应给前端。大模型时代,尤其会话模型为了提高用户的使用体验,它不会将所有的数据加载完成一次响应给客户端,而是通过数据流,一点点的将数据慢慢呈现出来。小编为此做了相关的测试,整理在这里,分享给大家。当然我们对接业务中需要考虑连接超时的问题,以及页面多开客户端区分的问题。我们可以看到正常的Http请求,只有等到所有的流数据处理完成之后才会一起展示出来。我们经常编写的是一次请求,一次响应这样标准的。原创 2025-08-14 14:28:44 · 1138 阅读 · 0 评论 -
Mysql分页:高效处理海量数据的核心技术
在日常开发中,对于列表页面的查询、全链路操作日志等,数据的结果集可以无限增大或者数据量本身很大的场景,我们常常会增加分页,以避免一次性全量加载带来的内存、IO的压力。的查询结果中,返回的结果是一个数据集,要查询一条数据我们一般都是取集合中的第一条。分页一定是最后需要执行或者处理的,无论简单的脚本还是复杂的脚本都是在语句的结尾。查询的结果的分页用起来比较简单,但是使用不当的话就会出现与期望偏差的数据。这就是所谓的深分页。当然了,这样的查询语句的效率是低下的,测试的数据比较简单耗时大概。分页需要我们来计算。原创 2025-08-08 10:17:52 · 783 阅读 · 0 评论 -
PostMan不香了,IDEA因为Apipost插件这一功能轻松取代
在敏捷开发和微服务架构成为主流的今天,高效管理接口生命周期已成为开发团队的核心挑战。传统工具往往割裂了设计、调试、测试、文档与协作流程,导致沟通成本剧增、效率低下、错误频发。Apipost正是在此背景下应运而生,它致力于成为一体化、智能化的 API 协作平台,彻底打通 API 从诞生到维护的全流程。Apipost的核心价值:不止于调试。原创 2025-08-06 16:10:52 · 1197 阅读 · 1 评论 -
Knife4j:实时接口文档的利器
Knife4j作为一款专注于增强 Swagger 文档能力的国产开源工具,它极大地提升了开发者的接口文档体验。Knife4j是一个基于SwaggerOpenAPI2.0 / 3.0 规范)的、功能强大的 API 文档增强解决方案和生成工具。它在完全兼容原生 Swagger 注解和配置的基础上,提供了一个功能更丰富、界面更美观、操作更便捷的前端 UI 界面。由国内开发者开源并维护,对中文环境有良好的支持。你可以将其理解为Swagger的一个超级皮肤和功能扩展包。它替换了默认的swagger-ui。原创 2025-08-06 14:02:32 · 1186 阅读 · 0 评论 -
告别SQL盲猜!5种打印SQL语句的实战方案
这是一款第三方的数据库日志框架,里面提供了很多配置,可以随意定制日志格式。的打印我们不太关注。因为线下的调试,我们通过断点,日志等方式可以快速定位问题。的打印,线下测试的时候,我们经常会将次配置打开,以便随时了解SQL的执行情况。的做法,需要熟悉调用SQL的方法。这种方式在生产上应用也非常使用,根据需要抓取需要的SQL信息。但是提测之后或者线上,发现数据与预期的数据不符,需要对比。拦截器,之前的文章里介绍过,就不再赘述。线上的不能随意发布代码,导致排查问题变的困难。需要修改源数据源的参数,具有代码侵入性。原创 2025-08-04 15:46:20 · 361 阅读 · 0 评论 -
手撕「字段自动填充」的2种方案
标记需要填充的字段标记要拦截的方法(切点)/*** 注解类型*//*** 值*//*** 方法类的Class*/Class<?/*** 方法名*//** 注解的类型 */标记的位置通过标记字段,默认标记方法@AutoFill注解通过value指定填充的值,如果为空,则通过方法的class和对应的方法,最后调用填充值。Maven</</</切面@Aspect@Component// 拦截方法上的注解Class<?// 获取所有的字段。原创 2025-07-31 18:21:11 · 726 阅读 · 0 评论 -
甩掉手动赋值!MyBatis-Plus 自动填充实战秘籍
在数据库设计中,常常有一些字段每次都需要赋值,如创建时间、更新时间、操作人、删除标识等。很多时候,为了赶项目匆匆的赋值了一些业务字段,而漏掉了这些字段,导致查询问题的时候,时间点或者操作人对不上,加大了定位问题的难度。自动填充的实现和源码分析,下一期,我们将自己通过拦截器或者注解的方式,实现属于我们自己的自动填充的功能。这里填充的时候,需要指定字段的名称。注解来标记哪些字段需要自动填充,并指定填充的策略。的拦截器插件,细看了之后,并不是。之前,我们需要简单的搭建环境。等,这里就需要穷举所有的字段。原创 2025-07-31 09:33:05 · 532 阅读 · 0 评论 -
深入解析 Spring SpEL:SpelExpressionParser 的使用与实践
掌握 SpEL 能显著提升开发灵活性,尤其在需要动态配置的场景中(如规则引擎、个性化配置),但务必警惕安全风险,做好防护措施。案例中,可以看到:我们是可以随意修改上下文变量的值的。,回想到之前看到某框架的源码时,也看到类似的技术。对象,支持对象属性访问、方法调用、运算符操作、集合处理等复杂逻辑。简单来说,就是将一个字符串解析成对应的运算或者方法调用。的核心解析器,能够将字符串表达式转换为可执行的。值得说明的是:提取集合的某个属性时,用到的。中有很多实用的工具类,我们可以直接使用。我们一直在借助框架使用着。原创 2025-07-29 13:24:17 · 1023 阅读 · 0 评论 -
本地缓存一时爽,数据修改修罗场
监控是一个项目架构设计的重要指标,缓存的使用情况、命中情况,内存的使用情况等可以协助我们了解缓存使用的合理不合理。生产的节点一般都不是一个节点而是多节点部署,多节点部署中,每一个节点都会拥有独属于自己的本地缓存,而且多节点之间的缓存并不可见。内存,如果不设置容量的上线,随着缓存的增大,程序进程的内存被严重压缩,内存溢出就像定时炸弹一样,随时都有可能引爆。而本地缓存本身实现了缓存的使用情况,通过对缓存的分析,及时调整参数和冷热数据,让缓存发挥自己最大的效果。出品,成熟稳定,功能强大,曾是主流选择,现在常被。原创 2025-07-22 16:44:12 · 928 阅读 · 0 评论 -
告别System.currentTimeMillis()!Java高精度计时最佳实践
开过过程中,经常会遇到一些耗时的方法。当我们需要定位耗时的方法时,就需要逐步打印耗时已确认耗时的方法。或者在写单元测试的时候,粗略的估算方法耗时,是不是经常使用。和其他计算工具不同的是,这种方式没有代码的侵入性,启动。通过合理选择计时方法,可以更准确地获取代码性能数据,帮助优化关键路径逻辑。我们先罗列出常用的计算耗时的方法。耗时的计算用作测试,任意选择都无所谓,只要能达到目的即可。今天,我们一起来整理一下可以使用那些方法计算耗时。后执行命令后,等待方法执行即可。纳秒级计算,计算方式和。原创 2025-07-14 13:14:49 · 502 阅读 · 0 评论 -
你的Redis分布式锁还在裸奔?看门狗机制让锁更安全!
启用看门狗模式try {if(!return new JsonResult(false, "不可重复提交!"));/** 启动看门狗模式 */// 其他业务逻辑......}finally {// 停止看门狗// Lua脚本保证原子性删除看门狗实现与停止// 创建调度线程池// 以固定的频率调度任务// 使用Lua脚本确保原子性校验和续期System.out.println("锁续期成功");}else {// 锁续约失败,关闭看门狗= null) {原创 2025-07-14 09:30:25 · 678 阅读 · 0 评论 -
颠覆传统IO:零拷贝技术如何重塑Java高性能编程?
一般指的是从磁盘读取文件发送到网络或者从网络接收数据写入到磁盘文件的过程中,最大程度的减少数据的拷贝次数。从流程来看,传统的IO读写操作需要四次的拷贝,以及用户态和内核态的来回切换。零拷贝和传统IO的性能产生了相当大的性能差异,赶快用起来吧。我们可以看到使用零拷贝,是传统的IO性能的10倍左右。)是高性能IO绕不开的话题,通过减少拷贝次数(IO次数)来提高IO的性能。我们先了解一下传统的IO,对于用户进程发出读写指令时,计算机是如何运行的。从示例图中,可以看到将两次拷贝变成了一次拷贝,总共三次拷贝。原创 2025-07-10 14:40:21 · 798 阅读 · 0 评论
分享