自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 时间的艺术:彻底搞懂 System.currentTimeMillis() 与 System.nanoTime()

Java时间获取机制解析:currentTimeMillis()与nanoTime()的深度对比 摘要:本文深入剖析Java中两种时间获取方式的本质区别。System.currentTimeMillis()提供真实世界时间,但存在性能陷阱和NTP同步问题;System.nanoTime()则是高精度单调计时器,适合性能测量。文章详细分析了二者的底层机制、使用场景和常见误区,指出currentTimeMillis()适用于业务时间记录,而nanoTime()专用于耗时计算。同时探讨了CachedClock的适

2025-11-24 14:39:13 843

原创 StackOverflowError之“非显式递归”深度剖析

Java应用中StackOverflowError的深度解析与解决方案 摘要:本文深入探讨了Java开发中StackOverflowError的两种典型场景:Jackson序列化循环引用和动态代理嵌套过深问题。在无显式递归的情况下,对象图的隐式循环引用会引发Jackson序列化的无限递归调用,而Spring AOP、MyBatis等多层代理的叠加会导致方法调用链过深。文章提出了多种解决方案,包括@JsonIgnore注解打断循环、@JsonManagedReference/@JsonBackReferenc

2025-11-24 11:50:32 762

原创 深入理解 Linux 熵与 Java 随机数阻塞的本质

摘要:本文探讨了计算机系统中随机数生成的关键问题——熵的来源与收集机制。在云时代,传统物理熵源(如键盘输入、机械硬盘)的缺失导致虚拟机/容器陷入"熵荒漠",引发Java应用因随机数阻塞而启动缓慢的问题。文章详细分析了Linux熵收集器的工作原理,对比了/dev/random和/dev/urandom的特性,指出云环境中应强制使用非阻塞的/dev/urandom。最终提出解决方案:配置JVM参数"-Djava.security.egd=file:/dev/./urandom&qu

2025-11-21 17:18:49 680

原创 数据主备切换连错 IP?罪魁祸首竟是 JVM 的 DNS 缓存

JVM默认永久缓存DNS解析结果,可能导致应用无法感知DNS变更(如数据库主从切换)。解决方案包括:1)启动时设置JVM参数(推荐-Dsun.net.inetaddr.ttl=10);2)代码动态设置;3)修改java.security文件。生产环境最佳实践包括设置TTL为10秒、监控DNS解析延迟,并优先使用服务发现机制替代DNS。在K8s+ServiceMesh环境中需注意Sidecar代理的DNS处理。所有Java应用都应显式配置DNS缓存TTL,避免依赖默认永久缓存。

2025-11-21 13:58:43 1239

原创 FD泄漏:Java 生产环境的隐形杀手与防御指南

摘要:文章深入剖析了Java系统中常见的"Too many open files"故障,以电商支付系统崩溃案例为切入点,揭示了文件描述符(FD)耗尽导致系统瘫痪的机制。通过Unix"一切皆文件"的哲学思想,详细讲解了FD的本质、生命周期和限制机制,分析了Java应用中常见的FD泄漏场景(如未关闭文件流、连接池配置不当等),并提供了从系统调优到应用监控的完整解决方案。文章强调防御性编程、资源管理和FD监控的重要性,为高并发系统稳定性保障提供了实用指导。

2025-11-20 17:37:34 1049

原创 Spring Boot 分布式定时任务:从单机到高可用集群

摘要:云原生时代下,分布式定时任务的重复执行问题日益凸显。本文分析了Spring @Scheduled在集群环境下的缺陷,提出了四种解决方案:1)基于Redis分布式锁实现任务互斥;2)使用Quartz集群模式实现任务协调;3)Kubernetes CronJob实现容器化任务调度;4)数据库唯一约束保证任务单次执行。建议优先选择Redis分布式锁方案,并强调任务幂等性、监控告警等关键实践。文章为分布式环境下定时任务管理提供了实用解决方案。

2025-11-20 14:03:17 916

原创 容器技术的演进与时代使命

容器化是现代软件开发的基石,它通过Docker等技术实现了环境一致性、快速交付和高效资源利用。从物理机到容器化的演进解决了资源浪费、环境差异等痛点。Docker基于Linux内核的Namespace、Cgroups和UnionFS三大技术,实现进程隔离、资源控制和分层存储。Docker的核心组件包括镜像(只读模板)、容器(运行实例)、网络和持久化存储。通过Dockerfile定义构建过程,使用Compose编排多服务应用,借助Registry分发镜像。最佳实践包括多阶段构建、健康检查、安全加固和资源监控。容

2025-11-19 12:07:40 1141

原创 深入 Java 伪共享(False Sharing)

摘要:多核CPU环境下,伪共享(False Sharing)成为影响并发性能的关键因素。本文深入剖析伪共享的产生机制——当不同CPU核心频繁修改同一缓存行中的独立变量时,触发无效的缓存同步,导致性能不升反降。重点介绍了Java的@Contended注解解决方案,通过缓存行填充实现变量隔离,实验数据显示在24核环境下性能提升达5.4倍。文章还对比了手动填充、JCTools等替代方案,并给出多核系统设计的最佳实践,为开发高性能并发程序提供重要参考。

2025-11-18 15:25:53 847

原创 深入 JVM Safepoint:《JVM 的“交通管制点”》

摘要:本文深入探讨了JVM中Safepoint机制导致的性能问题及优化方案。当GC日志显示短暂停顿但接口却出现秒级卡顿时,其根本原因往往是Safepoint同步延迟。文章通过实例演示了无Safepoint的循环和JIT优化导致的问题,并详细解析了Safepoint的工作原理、触发时机及监控方法。同时提供了三种优化策略:使用防内联空方法、JVM参数调优和任务拆分。测试表明合理的Safepoint检查开销可忽略不计,并提出"宁可多一点Safepoint"的黄金法则。最后强调在排查卡顿问题时,

2025-11-18 14:03:01 863

原创 MySQL 索引下推(ICP)的实战,彻底提升查询性能

本文探讨MySQL索引下推(ICP)机制的优化原理与应用。ICP允许在存储引擎层直接过滤索引数据,减少无效数据传输,提升查询性能。文章通过电商订单查询案例,对比开启/关闭ICP的性能差异(提升3倍),分析其工作原理及适用场景(复合索引非前导列的等值、范围、LIKE前缀查询)。同时指出注意事项:仅InnoDB支持、避免函数操作导致索引失效,建议结合覆盖索引优化。最后澄清常见误区,如ICP不减少回表次数、仅支持前缀匹配等,并提供了索引设计的最佳实践。该机制是SQL性能优化的重要工具。

2025-11-17 16:54:14 741

原创 Java异步编程演进与线程池最佳实践

《Java异步编程演进与线程池最佳实践》 摘要:本文系统剖析Java异步编程的发展历程与技术选型。从早期危险的new Thread()方式入手,指出其资源泄漏、OOM等风险,进而深入讲解线程池(ExecutorService)的核心机制与优势。通过对比分析,提出生产环境必须遵循"线程池替代裸线程"原则,并给出ThreadPoolExecutor参数配置建议。文章还探讨异步与多线程的本质区别,介绍Java21虚拟线程特性及其在IO密集型场景的性能优势。最终总结出异步编程的最佳实践:使用有界

2025-11-17 11:24:30 571

原创 一个 UserService 的现代化演进之路

本文通过一个UserService.findUserById需求,展示了从简单实现到工业级健壮代码的六轮重构过程。从Java8的Optional处理空值、依赖注入,到引入并发缓存解决性能问题;从Java16的record简化DTO、Java17的密封类建模状态,到Java21虚拟线程处理高并发;最后通过Java9模块系统实现强封装。整个过程系统性地应用了现代Java特性,包括空安全契约、防御式编程、结构化并发等最佳实践,体现了专业开发中预见问题、约束错误的设计思维。

2025-11-14 14:14:39 1175

原创 缓存命中率从 50% 到 95%:缓存优化实战指南

本文系统介绍了构建高性能缓存体系的五级优化策略。从基础防护(空值缓存)开始,逐步演进到缓存预热、动静分离分层管理、智能预加载,最终实现AI驱动缓存。针对冷启动雪崩、缓存穿透等常见问题,提出了具体解决方案,包括异步预热、本地缓存配合Redis、基于用户行为的预加载等实用技巧。文章强调避免"一刀切"误区,建议根据数据特性和访问模式采用差异化缓存策略,通过渐进式优化将命中率从40%提升至95%+。实践表明,优秀的缓存策略需要平衡命中率与资源消耗,实现从被动响应到主动预测的转变。

2025-11-14 11:08:51 1196

原创 设计一款高效的短链服务系统

本文系统介绍了短链系统的设计与实现,重点解决长URL在传播中的可读性、安全性和可追踪性问题。设计上采用分布式ID+Base62编码生成唯一短码,通过Redis缓存和数据库存储映射关系,支持高并发跳转。系统实现了短链创建、302跳转、访问统计和过期机制,并针对安全性提出防穷举和限流策略。技术选型基于SpringBoot框架,结合异步处理、CDN边缘计算等优化手段,兼顾性能和扩展性。文章最后强调短链系统的核心价值在于提升用户体验和运营效率,而非单纯技术实现。

2025-11-13 17:17:50 1089

原创 CPU飙升之正则回溯问题探讨

摘要:本文探讨了正则表达式回溯导致的性能问题及其解决方案。以电商平台大促期间因正则回溯导致CPU飙升至100%的案例为引,详细分析了嵌套量词引发的指数级回溯原理,展示了(a+)+b等危险正则的性能危害。文章提供快速诊断方法(top+jstack定位),并提出四大防御措施:重写正则表达式、使用占有优先量词、限制输入长度与字符集、改用非正则方式处理简单逻辑。生产环境还需禁止用户输入正则、代码审查危险模式、设置匹配超时及监控CPU异常。通过优化正则写法与系统防护,可有效避免灾难性回溯造成的服务瘫痪。

2025-11-13 13:45:03 816

原创 分布式系统设计之工程实践《1》

分布式系统的设计包括:1、cap和base理论;2、分布式事务的处理;3、cpu高处理;4、常用的线上诊断工具arthas;5、接口的安全性设计等几方面;

2025-11-13 10:30:06 945

原创 Java系统设计知识整理《1》

本文摘要: 文章系统阐述了四大高并发场景的技术方案:1)秒杀系统设计通过CDN缓存、层层限流、Redis原子扣减、MQ削峰实现高并发控制;2)分布式ID生成对比Snowflake、号段模式和ULID方案,分析时钟回拨等关键问题;3)短链系统采用自增ID转62进制+布隆过滤器防冲突,实现高效映射;4)接口幂等性通过Token机制、唯一索引、状态机等方案保证重复请求安全。全文突出"原子操作+异步解耦"的设计思想,每个方案均包含工业级优化实践与性能数据支撑。

2025-11-12 15:18:39 856

原创 MQ消息中间件知识整理《1》

本文系统介绍了消息队列的核心技术与实践方案:1)Kafka架构解析,包括分区、副本、ISR机制及其高可用设计;2)Kafka端到端消息不丢失方案(生产者acks=all+消费者手动提交+Broker多副本);3)主流MQ对比(Kafka/RabbitMQ/RocketMQ)及适用场景;4)消息重复消费的幂等性解决方案(唯一ID+状态机+数据库约束);5)RocketMQ事务消息原理(半消息+本地事务+回查机制)及其最终一致性实现。重点强调了不同技术方案的适用边界和最佳实践,为分布式系统建设提供可靠的消息中间

2025-11-12 14:01:47 970

原创 Redis的知识整理《1》

本文从六个方面全面剖析Redis核心原理及实践:1)Redis高性能源于内存操作、高效数据结构及单线程事件模型;2)详解五大基础数据类型及Bitmap等高级结构应用场景;3)提出缓存穿透(布隆过滤器)、击穿(互斥锁)、雪崩(随机过期)解决方案;4)对比RDB快照与AOF日志持久化机制,推荐4.0+混合模式;5)解析Cluster集群的Slot分片与故障转移机制;6)基于Redisson实现分布式锁,强调Lua脚本原子性及看门狗续期机制。全文贯穿版本特性(如7.0函数式API),通过电商秒杀等案例,系统阐述R

2025-11-11 16:16:07 670

原创 MySQL的索引和事务知识整理《1》

摘要:本文系统介绍了InnoDB索引、事务、MVCC等核心机制。聚簇索引存储完整行数据,非聚簇索引存储主键值,回表查询可通过覆盖索引避免。联合索引需遵循最左前缀原则,避免函数计算等8种索引失效场景。事务ACID特性由Undo/Redo Log实现,InnoDB通过MVCC+间隙锁解决幻读问题。MVCC依赖ReadView判断版本可见性,RR级别使用单一ReadView保证可重复读。慢SQL优化需分析执行计划,重点关注type和Extra字段。分库分表设计需考虑分片策略、全局ID和扩容方案,ShardingS

2025-11-10 14:52:41 892

原创 并发编程、锁、线程池知识整理<1>

本文深入探讨了Java并发编程的核心知识点。首先分析了synchronized的底层Monitor机制及锁升级过程(偏向锁→轻量级锁→重量级锁);对比了synchronized与ReentrantLock的特性差异,并解析了AQS框架的实现原理。其次详细讲解了volatile的三大作用(可见性、禁止重排序、happens-before)及其局限性,强调其无法保证复合操作的原子性。然后系统梳理了线程池的核心参数、执行流程与拒绝策略,比较了execute()与submit()的异同。接着介绍了Completab

2025-11-06 21:19:07 1034 2

原创 JVM核心知识整理《1》

摘要:JVM内存结构分为线程私有(程序计数器、虚拟机栈、本地方法栈)和线程共享(堆、方法区)。对象创建涉及类加载检查、内存分配、初始化等步骤,堆中分配通过指针碰撞或空闲列表实现。主流GC算法包括标记-清除、复制、标记-整理,CMS、G1和ZGC在延迟、堆大小适用性上各有特点。频繁FullGC排查需结合GC日志、jstat、jmap等工具分析内存泄漏或GC策略问题。调优参数如-Xmx、-XX:+UseG1GC等需根据监控数据调整。类加载遵循双亲委派模型,可通过SPI、自定义ClassLoader或模块化打破,

2025-11-05 13:20:54 642

原创 Java基础知识整理《1》

Java核心知识点摘要: String/StringBuilder/StringBuffer:String不可变基于安全性、缓存哈希值和字符串常量池优化;StringBuilder线程不安全但性能高,StringBuffer线程安全但性能稍低。 equals与==:==比较地址,equals比较内容;重写equals必须重写hashCode以维护哈希集合契约。 HashMap原理:数组+链表+红黑树结构,JDK1.8优化包括链表转红黑树和扩容机制改进;线程不安全源于数据竞争。 ConcurrentHashM

2025-11-04 16:11:56 594

原创 关于Java中equals和==的介绍

本文深入解析了Java中==和equals()的区别与使用场景。==比较基本类型的值或引用类型的地址,而equals()比较对象逻辑内容。文章通过实际案例揭示了自动装箱缓存、字符串常量池等陷阱,并强调重写equals()必须满足自反性、对称性等规则,且需同时重写hashCode()。特别指出Java 14的record类型自动生成安全的equals方法,建议优先用于数据类。最后总结:==适合引用比较,equals()用于对象内容比较,record是更安全的选择。

2025-10-25 13:24:37 697

原创 RocketMQ的事务半消息和本地事务表机制

摘要:本文探讨了分布式系统中"本地事务+异步消息"的一致性问题,重点介绍了RocketMQ的事务消息机制。通过半消息(HalfMessage)状态、事务回查等创新设计,RocketMQ实现了两阶段提交的事务模型,在保证最终一致性的同时避免了引入额外协调器。文章详细对比了普通消息、顺序消息和事务消息的重试机制,并分析了本地事务表方案的优缺点。针对不同业务场景,提出了半消息与本地事务表结合使用的建议,为解决分布式事务问题提供了实用方案。

2025-10-23 18:40:02 824

原创 关于分布式系统中NTP与时钟回拨处理方案

分布式系统中,雪花算法依赖时间戳生成唯一ID,但时钟回拨可能导致ID冲突。NTP协议通过分层时间服务器同步网络设备时钟,确保时间一致性。关键风险在于NTP时间校正方式:跳变(Step)会导致时间回拨,而渐进(Slew)调整更安全。建议使用chrony工具并配置"makestep 1 3"策略,限制启动初期跳变,后期仅用渐进调整。同时应在代码层面处理潜在回拨问题,如等待时间同步或启用备用方案。正确配置NTP是保障分布式系统时序相关功能稳定运行的基础。

2025-10-23 14:09:18 565

原创 MySQL的中继日志(relay-log)的实践

本文介绍了MySQL主从复制中的两个关键组件:中继日志(Relay Log)和二进制日志(binlog)。中继日志是主从复制的核心机制,作为从库上的临时日志文件,接收主库的binlog事件并供SQL线程回放执行,实现了异步数据同步。文章详细阐述了中继日志的定义、作用、工作原理,并与binlog进行了对比。同时深入分析了binlog的三种格式(statement/row/mixed)、交互流程、查看命令和实际应用场景,重点说明了row格式在数据一致性方面的优势。最后提供了生产环境配置建议和注意事项,帮助读者更

2025-10-17 15:56:52 572

原创 JVM的即时编译JIT的介绍

Java程序运行流程:通过JVM混合模式(解释执行+即时编译)执行.class字节码。JIT(即时编译)是提升性能的关键技术,它会将热点代码编译为机器码,使用热点探测策略(如计数器)识别频繁调用的方法,并采用方法内联、循环展开等优化手段。JVM包含C1和C2两个编译器,分层协作实现高效执行。验证方法包括打印编译日志和性能对比实验。JIT优化在不改变语义的前提下显著提升程序运行速度。

2025-10-10 17:29:40 772

原创 关于Socket的介绍

《Socket技术详解》摘要: Socket是网络通信的端点,位于应用层与传输层之间,通过五元组(源/目标IP+端口+协议)唯一标识连接。内核中Socket表现为包含文件描述符、缓冲区和状态信息的结构体。主要分为TCP Socket(可靠连接)和UDP Socket(无连接)两种类型,工作模式遵循三次握手/四次挥手流程。常见误解包括将Socket误认为物理设备或协议,实际它是操作系统提供的编程接口。现代所有网络应用(如微信、网页服务)都依赖Socket实现数据传输,理解其机制对排查网络问题至关重要。(149

2025-09-25 18:35:59 714

原创 Java设计模式之《观察者模式》

本文介绍了Java中的观察者设计模式。观察者模式属于行为型模式,用于建立对象间的一对多依赖关系,当被观察对象状态改变时自动通知所有观察者。文章通过公众号推送系统的示例,展示了如何自定义观察者接口、被观察者类(公众号)和具体观察者(用户)的实现过程。同时分析了Java内置Observable类的使用方法和不足,并比较了自定义实现的优势。该模式适用于需要解耦事件发布者和订阅者的场景,如天气通知、订单状态更新等系统。

2025-09-04 15:46:42 1070

原创 关于数组的前沿技术介绍

关于数组的高级用法、性能优化、替代结构以及在高并发、大数据、AI 等领域中的演进与前沿应用。未来趋势:通用编程:Stream + List 为主;高性能计算:数组 + 向量化 + 堆外内存;AI/大数据:张量(Tensor) 成为“超级数组”。

2025-09-04 13:57:18 1291

原创 Java设计模式之《外观模式》

外观模式是一种简化复杂子系统接口的结构型设计模式。它通过提供一个统一的高级接口来隐藏系统内部复杂性,降低客户端与子系统的耦合度。该模式包含外观角色(协调子系统)、子系统组件和处理请求的客户端。其优点是简化调用、降低耦合、提供清晰入口,但可能违反开闭原则。以家庭影院系统为例,外观类封装了灯光、投影仪等设备的复杂操作,提供"一键观影"等简化接口,使客户端调用更便捷。该模式适用于需要简化复杂系统交互的场景,在Java日志系统等框架中广泛应用。

2025-08-27 21:03:31 1367

原创 Java设计模式之《亨元模式》

享元模式是一种通过对象共享减少内存使用的设计模式,其核心思想是"共享不变部分,分离变化部分"。该模式包含抽象享元、具体享元、享元工厂和客户端四个角色,通过将重复的内部状态共享,仅保留变化的外部状态实现优化。典型应用场景包括文本编辑器字符样式、游戏对象、连接池等。文中以奶茶店为例,展示了如何通过共享口味配方(内部状态)而仅改变顾客姓名(外部状态)来节省对象创建开销。该模式能显著降低内存占用,但增加了系统复杂性,适用于存在大量相似对象的场景。

2025-08-27 16:19:35 851

原创 Java设计模式之《状态模式》

状态模式是一种行为型设计模式,允许对象在内部状态改变时改变其行为。它通过将状态封装为独立类来解决if-else判断的弊端,实现开闭原则。文章对比了传统if-else实现与状态模式实现,展示了状态模式在订单系统等场景的优势:解耦状态和行为、可扩展性强、避免条件语句膨胀。同时提供了优化方案,如使用集合管理状态流转,使业务流程可配置化。状态模式适用于状态多且变化频繁的系统,但也可能增加系统复杂度。总体而言,该模式能有效管理复杂状态转换逻辑。

2025-08-26 14:45:11 1098

原创 关于Java类加载的详细介绍

JVM类加载过程详解 JVM执行Java程序的核心过程包括类加载、运行时数据区管理、执行引擎和本地库接口。类加载过程分为五个阶段: 加载:通过类全名获取二进制字节流,转化为方法区数据结构,生成Class对象 验证:检查字节码合法性,包括文件格式、元数据、字节码和符号引用验证 准备:为静态变量分配内存并设置默认初始值 解析:将符号引用转换为直接引用 初始化:执行类构造器方法,完成静态变量赋值和静态代码块执行 类加载遵循双亲委派模型,由Bootstrap、Extension和Application三类加载器协同

2025-08-26 11:16:52 1018

原创 JDK9-21的新特性持续介绍

本文介绍了JDK中几个关键特性:1)JDK9的@Contended注解,用于防止多线程环境下的伪共享问题,通过填充字节使变量独占缓存行;2)JDK16引入的record类型,简化不可变数据类的定义,自动生成常用方法;3)JDK21的虚拟线程(Virtual Threads),通过轻量级用户态线程实现高并发,特别适合IO密集型场景。这些特性分别针对并发优化、代码简化和性能提升,展示了Java在多线程编程和数据建模方面的持续演进。

2025-08-25 13:34:38 1022

原创 常用的分布式ID设计方案

本文探讨分布式系统中ID生成方案,分析6种主流方法:1)数据库自增ID存在单点瓶颈;2)号段模式通过批量获取ID平衡性能与可用性;3)UUID无序但无需中心节点;4)Snowflake算法结合时间戳、机器ID和序列号实现高性能分布式生成;5)Redis原子操作适合高并发递增ID;6)Zookeeper顺序节点保障绝对有序。综合对比显示,Snowflake及其改进版适用于大多数高并发场景,而具体选择需权衡唯一性、性能、有序性等需求。数据库号段和Redis方案在中低并发场景具有优势,UUID则适合无序场景。

2025-08-25 10:28:54 1158

原创 JDK21之虚拟线程的深入理解

JDK21引入了虚拟线程(VirtualThread),这是Java并发编程的重要革新。虚拟线程是JVM管理的轻量级线程,与传统平台线程(1:1映射操作系统线程)不同,它通过用户态调度实现高并发。核心优势包括:支持百万级并发(堆内存按需分配栈空间)、兼容现有Thread API、自动挂载/卸载降低阻塞开销,特别适合IO密集型场景(如微服务、网络请求)。相比线程池+CompletableFuture方案,虚拟线程能用同步写法达到异步性能,但需注意不适用于计算密集型任务或涉及JNI阻塞的场景。其底层通过Cont

2025-08-22 11:35:25 1383

原创 关于常用线程池CompletableFuture和Future的介绍

Java异步编程中,Future和CompletableFuture是两种主要实现方式。Future通过ExecutorService.submit()提交任务,需调用get()阻塞获取结果,适合简单异步场景;而CompletableFuture采用链式非阻塞回调机制,支持任务编排和异常处理,默认使用ForkJoinPool,更适合复杂异步流程。核心区别在于:Future需主动获取结果(同步等待),CompletableFuture可通过回调自动处理(异步响应)。新项目更倾向使用CompletableFut

2025-08-22 11:01:18 846

原创 关于localhost和127.0.0.1的区别联系

【摘要】localhost和127.0.0.1都指向本地主机,但存在关键差异:127.0.0.1是固定IPv4回环地址,直接通过网络栈通信;localhost是域名,需通过hosts文件解析(默认指向127.0.0.1或IPv6的::1)。主要区别体现在:1)MySQL连接时localhost可能使用Unix域套接字;2)IPv6环境下localhost可能解析为::1;3)hosts文件修改会影响localhost解析。建议开发时优先使用localhost(可读性好),调试特定协议时用对应IP地址(127

2025-08-21 14:42:33 1232

空空如也

空空如也

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

TA关注的人

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