
java
文章平均质量分 82
xyzroundo
程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Jackson 无法序列化 Hutool 的 `JSONNull` 对象
摘要: Hutool的JSONNull对象导致Jackson序列化失败(InvalidDefinitionException),可通过三种方案解决: 1️⃣ 推荐方案:在数据返回前将Hutool的JSONObject/JSONArray递归转为标准Java对象(Map/List),彻底消除JSONNull; 2️⃣ 兼容方案:为JSONNull注册自定义Jackson序列化器,强制输出为JSON的null; 3️⃣ 临时方案:禁用FAIL_ON_EMPTY_BEANS(不推荐,可能隐藏其他错误)。建议优先采原创 2025-08-15 23:22:15 · 288 阅读 · 0 评论 -
Spring Cloud 中,@FeignClient注解的 url属性通过占位符注入详解
摘要: Spring Cloud中@FeignClient的url属性支持通过占位符(如${feign.url.property})动态注入配置值,其核心机制依赖Spring环境属性解析与Feign代理初始化。启动时,Spring从配置源解析占位符并硬编码到Feign代理,后续请求直接使用该URL(绕过服务发现)。动态刷新需配合@RefreshScope重建代理。注意事项:1) 配置优先级遵循Spring规则;2) URL需显式声明协议;3) 生产环境慎用(丧失负载均衡能力);4) 建议多环境隔离配置。最佳原创 2025-08-13 23:49:58 · 745 阅读 · 0 评论 -
Spring Cloud微服务架构中,使用FeignClient结合Nacos,无需重启服务的动态修改FeignClient URL的方案
摘要:在Spring Cloud微服务中,动态修改FeignClient URL的5种方案:1) 配置中心动态刷新(Nacos+@RefreshScope);2) 运行时编程修改(自定义Feign.Builder);3) AOP切面路由(拦截请求替换URL);4) 环境隔离(Profile分环境配置);5) 开发工具热加载(DevTools/JRebel)。推荐开发调试用方案2或5,生产环境优先方案1或3。所有方案均绕过注册中心,需注意负载均衡失效问题,适用于特殊场景调试。(149字)原创 2025-08-13 23:42:20 · 427 阅读 · 0 评论 -
Java:如何处理Java中double精度误差问题?
Java处理double精度误差的系统化解决方案:1)优先使用BigDecimal的字符串构造器进行精确计算,避免直接传入double值;2)运算时需指定精度和舍入模式,尤其是除法操作;3)通过compareTo方法或误差范围比较数值,禁用==直接比较;4)特殊场景如金融计算可改用整数存储最小单位。关键点包括:必须用字符串初始化BigDecimal,除法强制设置舍入规则,以及理解BigDecimal的不可变性带来的性能影响。原创 2025-06-26 10:54:18 · 702 阅读 · 0 评论 -
Linux:查看Linux系统中进程的详细信息
交互操作(在 top 界面中):按 c:显示完整命令路径(避免截断)按 1:展开多线程详情(若进程含子线程)按 F → 选择字段(如 RES=物理内存, SHR=共享内存)→ 按回车确认按 Shift + H:切换线程视图(显示线程级资源)关键指标:%CPU:实时CPU占用%MEM:实时内存占用VIRT/RES:虚拟/物理内存大小S:进程状态(动态刷新原创 2025-06-19 19:39:51 · 392 阅读 · 0 评论 -
Linux: ps -o nlwp
ps -o nlwp 20550 命令的输出 NLWP 363 表示 进程 ID (PID) 为 20550 的进程当前包含 363 个线程原创 2025-06-19 19:38:05 · 910 阅读 · 0 评论 -
Java:监控线程泄漏
线程泄漏监控方案 通过工具链与规范结合监控线程泄漏: 1️⃣ 工具监控 使用jstack分析线程状态,jconsole/VisualVM观察趋势 Arthas实时检查阻塞线程,Prometheus设置阈值告警 2️⃣ 日志分析 规范线程命名,定期采集线程转储 识别异常增长的线程组及阻塞调用链 3️⃣ 系统命令 ps -eLf统计线程数,top -H动态监控 设置线程数基线及增长告警规则 4️⃣ 编码规范 显式关闭线程池,配置拒绝策略 强制设置阻塞操作超时 排查流程:监控发现→定位泄漏组→检查代码(池关闭/阻原创 2025-06-19 19:33:34 · 763 阅读 · 0 评论 -
Java: xxl-job线程编号持续增长现象
xxl-job定时任务线程编号持续增长通常属于正常现象,由线程生命周期机制导致。系统为每个任务创建独立线程,若任务间隔时间长(如5分钟)且执行时间短,线程可能在空闲超时(默认90秒)后被销毁,下次执行时重建新线程导致编号递增。需警惕两类异常情况:线程阻塞导致的泄漏(如未超时的I/O操作)或线程池配置不合理。可通过监控线程存活时间、活跃线程数及堆栈状态进行排查。优化建议包括:调整线程池核心参数、合并高频短任务、设置I/O超时及异步日志。最终结论是:线程编号增长本身是设计机制,只有伴随线程数持续不降时才需介入处原创 2025-06-19 19:27:55 · 580 阅读 · 0 评论 -
Java: xxl-job调度器线程池机制
xxl-job调度器采用双线程池设计优化高频任务处理: 1️⃣ 快慢线程池分离 快线程池处理短任务(≤500ms),默认核心线程10,队列1000 慢线程池处理长任务,自动降级超时任务,队列2000 2️⃣ 动态降级机制 1分钟内超时10次的任务自动降级到慢线程池,避免阻塞正常任务 3️⃣ 配置建议 高频场景可扩容快线程池(默认最大200线程) I/O密集型任务建议增大队列容量 该设计通过资源隔离和异步处理,单机理论支持5000+任务并发,显著提升调度稳定性。实际部署需结合业务监控调整参数。原创 2025-06-19 19:25:23 · 936 阅读 · 0 评论 -
Java多线程:协作式中断机制 死循环问题
摘要:Java线程的中断机制是协作式的,仅设置中断标志位而不强制终止线程。若循环仅依赖中断信号退出且未被调用,将导致死循环。风险场景包括纯计算型任务和忽略阻塞操作中断的情况。解决方案包括:1)结合中断标志与自定义标志位;2)设置超时机制;3)插入中断检查点;4)通过关闭资源触发中断。关键在于设计多重退出条件,确保线程可控,体现Java协作式中断的设计哲学。(150字)原创 2025-06-18 16:40:09 · 596 阅读 · 0 评论 -
Java多线程:协作式中断机制 实现安全可控的循环退出
摘要:提供的Java代码不会导致死循环,关键机制在于循环条件!Thread.currentThread().isInterrupted()会随线程中断状态变化而改变。当外部调用interrupt()时,中断状态变为true,循环自动退出。若业务逻辑包含阻塞操作,会抛出InterruptedException并通过恢复中断状态确保循环退出。对于耗时任务,建议在子任务间主动检查中断状态(如使用Thread.interrupted())以实现即时响应。代码通过finally块保障资源清理,整体实现了安全可控的循环原创 2025-06-18 16:38:25 · 294 阅读 · 0 评论 -
Java多线程:协作式中断机制
Java多线程编程中,协作式中断机制通过while (!Thread.currentThread().isInterrupted())结构持续监听中断请求,确保及时响应。结合Thread.interrupted()清除中断标志,避免后续逻辑干扰。关键点包括: while循环在整个任务周期内检查中断状态,比单次if更可靠; interrupted()方法会重置中断标志,保持处理逻辑一致性; 需避免冗余检查,在耗时操作前可增加中断检查点; 阻塞操作中断需在catch中恢复中断状态。 标准模式应包含循环检查、异常原创 2025-06-18 16:25:17 · 359 阅读 · 0 评论 -
Java:处理资源竞争或死锁的常见方法
在Java中,无法直接强制终止线程,但可以通过中断机制或线程池管理间接结束线程。处理资源竞争时,推荐使用interrupt()方法发送中断信号,要求线程检查中断状态并主动退出。对于死锁问题,应采用预防性设计如固定顺序加锁或超时机制。极端情况下可以使用废弃的Thread.stop()或系统命令,但存在资源泄漏风险。核心原则是让线程自行响应终止请求,而非强制中断,同时要确保资源释放和状态一致性。原创 2025-06-17 19:52:29 · 680 阅读 · 0 评论 -
Java 线程池:线程饥饿(Thread Starvation)
Java线程池线程饥饿问题及解决方案线程饥饿指任务因无法获取线程资源而长期得不到执行,常见于:固定线程池被长任务独占单线程池任务互相等待低优先级任务抢占资源解决方案:分离阻塞/计算任务,使用不同线程池合理配置线程数/队列(有界队列防OOM)采用工作窃取线程池(ForkJoinPool)优先级队列+拒绝策略保障关键任务异步回调代替同步等待,避免死锁动态监控调整线程池参数核心原则:确保线程不被无限阻塞,通过任务拆分、异步处理和资源隔离维护线程池弹性。原创 2025-06-03 20:50:16 · 931 阅读 · 0 评论 -
java线程池:maximumPoolSize和 workQueue
Java线程池中,maximumPoolSize与workQueue协同控制任务处理机制。核心逻辑遵循corePoolSize→workQueue→maximumPoolSize顺序:优先使用核心线程,队列满时创建临时线程直至达到最大线程数。队列类型直接影响最大线程数是否生效:无界队列会使maximumPoolSize失效(仅用核心线程);有界队列在队列满时启用临时线程;SynchronousQueue则直接触发线程扩容。实际应用中需根据任务特性选择队列类型,合理设置线程数上限,并配置拒绝策略以平衡系统负载原创 2025-06-03 20:45:01 · 901 阅读 · 0 评论 -
java线程池:任务卡住影响其他任务
线程池优化方案摘要:针对任务卡顿问题,建议改用有界队列(如ArrayBlockingQueue)并配置拒绝策略(如CallerRunsPolicy)防止内存溢出;隔离阻塞任务到专用线程池;增加任务超时控制(FutureTask)自动中断长时间任务;加强监控线程池状态(活跃线程数、队列积压等)。其他优化包括线程命名、优雅关闭和异常捕获。参数调优遵循IO密集型(CPU核数×(1+等待/计算时间))和CPU密集型(CPU核数+1)公式。改造后可提升吞吐量200%,有效避免任务阻塞和资源耗尽问题。(149字)原创 2025-06-03 20:31:43 · 431 阅读 · 0 评论 -
Mybatis源码:Executor 模板模式
by yan 20220301Mybatis insert时序图原创 2022-03-01 15:38:56 · 368 阅读 · 0 评论 -
事务隔离级别(IsolationLevel)
来源:https://www.cnblogs.com/wms01/p/6183241.html事务隔离级别(IsolationLevel)事务的特性(ACID)1、原子性(Atomicity) 事物是数据库的逻辑工作单位,事务中的诸多操作要么全做要么全不做2、一致性(Consistency) 事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态3、隔离性(Isol...转载 2020-02-25 14:22:09 · 738 阅读 · 0 评论 -
Java笔记-字符串编码与解码以及编码表原理
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/u011753266/article/details/82629357#编码表编码表:是一张由字符及其对应编码的表计算机只能识别二进制数据,早期由电信号演化而来。为了方便使用计算机,让它可以识别各个国家的文字,就将各个国家的文字用数...转载 2019-11-21 00:48:23 · 287 阅读 · 0 评论 -
http://jackielieu.blog.51cto.com/5586910/1161944
来源:http://jackielieu.blog.51cto.com/5586910/1161944说明,JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备, (3)使用中国网建提供的S转载 2014-05-15 18:39:05 · 756 阅读 · 0 评论 -
HQL多对多的查询语句
来源:http://www.blogjava.net/fuhoujun/archive/2009/01/06/232230.html一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有. 要查询教拥有书"a"的学生的老师!Hql语句:SELECT t FROM Teacher t join t.students s join s.boo转载 2014-03-07 18:20:14 · 800 阅读 · 0 评论 -
Java内存查看与分析
来源:http://tech.ifeng.com/internet/detail_2011_03/08/5022006_0.shtml[导读]业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分。业界有很多强大的java profil转载 2014-02-25 23:11:59 · 663 阅读 · 0 评论 -
RPC: 工作原理
来源:http://hi.baidu.com/avantjing/item/388b9f0960b90137f2eafc5fRPC: 工作原理 运行时,一次客户机对服务器的RPC调用,其内部操作大致有如下十步: 1.调用客户端句柄;执行传送参数 2.调用本地系统内核发送网络消息 3.消息传送到远程主机 4.服务器句柄得到消息并取得参数 5.执行远程转载 2014-01-25 23:10:40 · 791 阅读 · 0 评论 -
当maven引用的jar在maven库中下载不到源代码
作者:yan当maven引用的jar在maven库中下不到源代码或者找不到相应格式的源码时可以用如下方法解决:1、在其它地方单独下载源码包,比如我下载了源码包为libthrift-0.9.1-tar.gz.src2、将它重命名为maven可识别的文件名:libthrift-0.9.1-sources.jar 放到本地的maven库里,如图。这样就OK了。原创 2014-01-24 13:54:42 · 1440 阅读 · 0 评论 -
Thrift入门及Java实例演示
来源:http://www.micmiu.com/soa/rpc/thrift-sample/Thrift入门及Java实例演示作者: Michael日期: 2012 年 6 月 14 日 发表评论 (12)查看评论目录:概述下载配置基本概念数据类型服务端编码基本步骤客户端编码基本步骤数据传输协议实例演示(java) th转载 2014-01-22 14:27:06 · 724 阅读 · 0 评论 -
Tomcat启动设置环境变量
作者:yan最彻底的做法:进入tomcat的bin目录下,修改catalina.bat 或 catalina.sh(linux) 文件。例如:set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45原创 2014-01-09 14:26:32 · 1222 阅读 · 0 评论 -
tomcat查看内存使用情况
D:\pbcg\apache-tomcat-7.0.47\bin>jpsD:\pbcg\apache-tomcat-7.0.47\bin>jmap -heap 6100Attaching to process ID 6100, please wait...Debugger attached successfully.Server compiler detected.JVM原创 2014-01-09 19:06:04 · 749 阅读 · 0 评论 -
一致性哈希算法与Java实现
来源:http://blog.youkuaiyun.com/wuhuan_wp/article/details/7010071 一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了,如转载 2013-12-12 13:48:45 · 604 阅读 · 0 评论 -
Mybatis 高级结果映射 ResultMap Association Collection
来源:Mybatis 高级结果映射 ResultMap Association Collection转载 2014-06-05 14:55:59 · 972 阅读 · 0 评论 -
Mybatis
AND a.data_status = #{dataStatus}原创 2014-07-24 17:01:49 · 738 阅读 · 0 评论 -
一个Java反射机制例子
來源:http://blog.youkuaiyun.com/loyoveui/archive/2007/06/22/1662154.aspx package test;import java.lang.reflect.Method;public class InvokeTest { /** * * main 方法 * @param args * voi转载 2009-11-11 17:44:00 · 391 阅读 · 0 评论 -
class声明为final的好处
来源:https://zhidao.baidu.com/question/397935417.htmlfinal class怎么调用亲,涉及到的知识点如下:1.final修饰类 不能被继承,也没有子类。【使用环境】:1.不是专门为继承而设计的类,类的本身方法之间有复杂的调用关系。假如随意创建这些类的子类,子类可能会错误的修改父类的实现细节2.出于安全原因,类的实现细节不允许有任何改动3.在创建对象...转载 2018-03-15 16:51:47 · 26412 阅读 · 1 评论 -
读tomcat源码,随笔类图
by yan 20170425读tomcat源码,随笔类图:原创 2017-04-25 18:24:28 · 517 阅读 · 0 评论 -
dubbo 实践笔记
//by yan 20170412亲测:1、 在github下载整个源码:https://github.com/alibaba/dubbo2、 import入eclipse3、 install 整个 dubbo-parent 4、 install所有成功后,可以对项目dubbo-demo-provider,执行mvn assembly:assembly5、 rz 上传到虚原创 2017-04-20 11:31:55 · 550 阅读 · 0 评论 -
JMX的Hello World
来源:http://www.blogjava.net/hengheng123456789/articles/65690.html一、JMX简介 什么是JMX?在一篇网文中是这样说的:"JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理",这句转载 2016-08-29 16:58:45 · 465 阅读 · 0 评论 -
EL toString()功能,对象转换字符串
by yan 20160801${ti.showIndex} //showIndex 对象取出是Integer类型,经过set之后变String,这样下面的${r.topicItemTextMap[showIndex]才能取到值√ 1}">${s[1]}原创 2016-08-01 11:42:34 · 3978 阅读 · 0 评论 -
Spring @transactional annotation 事务使用详解
来源:http://www.yihaomen.com/article/java/412.htmannotation 方式写程序越来越称谓主流了,以前用hibernate 也用 xml 一大堆配置文件。spring beans 管理也是一大堆xml 配置文件,但现在的趋势是 annotation ,这种方式写程序更方便,很少配置文件,维护起来也比较方便。这几天重新看 spring 的翻译 2016-05-25 16:01:13 · 524 阅读 · 0 评论 -
spring的annotation-driven配置事务管理器详解
来源:http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html这篇文章是我从ITeye上复制来的,看了一遍,觉得很深刻,决定把他复制来,对原作者表示感谢。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~转载 2016-05-25 15:58:42 · 407 阅读 · 0 评论 -
让32位Eclipse和64位Eclipse同是在64的Windows7上运行
让32位Eclipse和64位Eclipse同是在64的Windows7上运行 我的机器安装的OS是Windows7 64位版本,JDK也是64位版本,有Eclipse indigo也是64位版,此搭配天造地设,运行完美。然而今天要运行Adobe Flash Builder 4.6转载 2014-07-15 11:21:44 · 960 阅读 · 0 评论 -
StAX XMLInputFactory cannot create more than 64000 readers [JDK 1.7.0_45]
https://forums.oracle.com/thread/2594170转载 2013-12-02 18:05:19 · 720 阅读 · 0 评论