张彦峰ZYF
阿里系P7菜鸡一枚,不断努力,不断提升!
展开
-
如何正确使用 @PostConstruct 和 @PreDestroy 进行资源管理
本文系统介绍了 Spring 中 @PostConstruct 和 @PreDestroy 注解的原理、用法及注意事项,深入分析了其在 Bean 生命周期管理中的作用。通过典型案例解析生命周期注解在继承、作用域、异常处理等场景中的表现,帮助开发者避免常见误区,实现资源的安全初始化与优雅释放。原创 2025-05-09 09:12:41 · 2119 阅读 · 9 评论 -
Restful API优雅原则统一规范
本部分预留作业,后续总结后分享。原创 2023-10-14 18:56:28 · 96459 阅读 · 1430 评论 -
探索Aviator:轻量级Java动态表达式求值引擎的使用指南
本文探讨了Aviator引擎在Java中的动态表达式求值功能,重点介绍其在复杂条件判断和代码可维护性方面的优势。Aviator通过允许开发者以简洁的方式编写逻辑,提高了代码的灵活性和可读性,减少了冗余代码的出现。文章还提供了示例代码,展示了如何在项目中有效应用Aviator,使其成为开发者实现动态逻辑处理的强大工具。总之,Aviator为Java编程带来了新的可能性,值得每位开发者去探索和实践。原创 2023-10-14 19:22:18 · 50435 阅读 · 1551 评论 -
Java 继承复用避坑指南:五个血泪案例揭示高频陷阱
本文系统剖析了继承滥用在实际系统中的五类典型陷阱,包括逻辑被绕过、构造失控、行为不一致、初始化混乱等问题,并通过真实业务案例与测试验证,逐一展示问题根源与演进优化方案。文章强调:继承是一把双刃剑,设计不慎将带来系统性隐患。最终,我们总结出继承的适用边界,倡导以组合、接口、策略等手段替代非必要的继承,实现更健壮、可演进的业务架构。希望本文能为你在系统设计与代码演进中提供深度启发。原创 2025-05-11 15:58:03 · 1667 阅读 · 19 评论 -
连作者都弃用的 LinkedList,你还在用吗?
本文通过源码分析、性能对比和实战案例,揭示了 Java 中 LinkedList 的诸多问题,呼应 Josh Bloch “我从不用 LinkedList”的观点,建议开发者谨慎使用,并优先考虑 ArrayList 或 ArrayDeque 等更高效的替代方案。原创 2025-05-11 15:57:45 · 1485 阅读 · 11 评论 -
浮点数的陷阱:你以为的 0.1 + 0.2其实不是 0.3,BigDecimal你真的用对了吗?
在金融和交易系统中,哪怕是一分钱的误差都可能造成巨大损失。然而,很多开发者仍在不经意间落入浮点数的陷阱:看似简单的 0.1 + 0.2,为什么在 Java 中不等于 0.3?本篇文章从底层的 IEEE 754 浮点数标准讲起,剖析误差来源,逐层构建 BigDecimal 使用、格式化控制、精度舍入、判等策略等防线,并结合真实案例总结出一套浮点数处理的实战规范,助你规避金额计算中的隐性风险。原创 2025-05-09 09:13:04 · 2219 阅读 · 10 评论 -
多线程编程全攻略:提升性能与线程安全的必备知识
介绍多线程编程的相关概念、同步机制以及无锁编程。从线程的基础概念出发,包括逻辑线程和硬件线程的比较,以及线程、核心和函数的关系。随后,我们探讨了多线程编程的基本原则,包括时间分片、上下文切换、线程安全函数和可重入函数等。接着,我们讨论了为什么需要多线程同步、什么情况需要进行同步以及多线程同步的方式,包括串行化、原子操作和锁等。我们还深入研究了非阻塞的无锁同步机制,如CAS循环和无锁数据结构。最后,我们解释了程序序、内存序、乱序执行、存储缓冲区和失效队列等概念,以帮助更好地理解多线程编程。原创 2023-10-14 20:02:37 · 97526 阅读 · 1474 评论 -
掌握正则表达式:从基础到实用示例
本文介绍了正则表达式在Java编程中的基本概念和应用。首先,简要解释了正则表达式的语法规则,随后通过具体示例展示了如何在Java中使用正则表达式进行模式匹配、字符串替换和数据验证。通过理解和掌握正则表达式,开发者可以高效地处理复杂的字符串操作,提高代码的灵活性和可读性。希望本文能为读者提供有价值的参考,助力在实际开发中更好地利用正则表达式。原创 2023-10-14 20:31:28 · 96678 阅读 · 1093 评论 -
JDK 19 协程新特性:Project Loom 项目的延续
探讨了协程的定义、发展史和 JDK 19 中的实现原理。协程是一种轻量级的并发编程工具,通过 Continuation 控制流、Scheduler 调度和阻塞操作的改造,实现了非阻塞、高效的并发编程。历史回顾包括协程在不同编程语言中的应用和 Java 协程的发展。JDK 19 中的协程原理深入分析了创建协程的方法、非阻塞 IO 改造、Continuation 的作用以及协程的唤醒机制。总结了协程的核心原理和重要组件。原创 2024-04-25 23:48:15 · 77114 阅读 · 1453 评论 -
超越并发瓶颈:CAS与乐观锁的智慧应用
synchronized 是 Java 内置的同步机制,依赖 JVM 实现,通过进入和退出监视器锁(Monitor Lock)来保证线程的安全性。在高并发情况下,线程可能会频繁地在 BLOCKED 状态和 RUNNABLE 状态之间切换,导致用户态和内核态的频繁切换,从而影响性能。CAS和乐观锁作为两种重要的并发控制机制备受关注。CAS机制直接利用硬件保证原子性,而乐观锁则基于乐观的思想进行并发控制。本文将学习这两种机制的原理、应用及性能特点来进行体会原创 2022-04-25 21:18:46 · 51263 阅读 · 1413 评论 -
提升分布式系统响应速度:分布式系统远程调用性能提升之道
本文主要探讨了在高并发和复杂数据需求的分布式系统中,如何通过并行调用、数据异构存储和混合策略优化接口性能。通过分析多个服务接口调用的实际场景,文章介绍了如何利用并发工具(如 Java 的 CompletableFuture)实现并行调用,缩短响应时间;以及如何通过 Redis 等缓存技术进行数据异构存储,减少远程调用次数。最后,文章总结了混合策略的应用,通过动态选择并行调用和缓存策略,既满足了数据实时性要求,又优化了系统的性能。原创 2024-12-02 09:17:42 · 50180 阅读 · 1403 评论 -
异步处理优化:多线程线程池与消息队列的选择与应用
本文讨论了两种常见的异步处理方式:多线程线程池和消息队列(MQ)。通过将非核心逻辑异步化,可以提升系统的性能和响应速度。多线程线程池适用于本地并发任务,适合需要快速响应的场景,但无法处理跨服务任务。消息队列则适用于分布式系统,能够解耦服务并保证任务的可靠性和顺序性,适合处理高并发和高可靠性要求的任务。文章提供了实际代码示例,帮助开发者根据业务需求选择合适的异步处理方式。原创 2024-12-01 23:55:34 · 1689354 阅读 · 1386 评论 -
接口性能优化宝典:解决性能瓶颈的策略与实践
本文深入探讨了提升接口性能的多种策略,涵盖了数据库优化、远程调用、异步处理、事务优化、缓存机制、分库分表等方面的技术。通过直面常见性能瓶颈,本文详细讲解了如何优化 SQL 执行效率、避免重复调用、减少事务复杂性、提高并发度,并提供了实际应用的最佳实践和技术方案。此外,文章还结合具体的案例,阐述了如何通过合理选择和设计优化方案,解决常见的性能问题,帮助开发者构建高效、可扩展的系统架构。原创 2024-12-01 23:54:11 · 1729998 阅读 · 1469 评论 -
Java 同步锁性能的最佳实践:从理论到实践的完整指南
在多线程编程中,锁是保证线程安全的重要手段之一,但如何选择合适的锁并进行优化,一直是我们面临的挑战。本博客探讨Java中同步锁的性能分析与优化之路,从使用同步锁和不使用同步锁的性能对比入手,逐步展开对锁的优化手段和技术原理的解析,帮助读者更好地理解和应用Java中的锁机制。原创 2024-12-01 23:53:54 · 88368 阅读 · 1390 评论 -
实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
探讨如何基于实现一个高效的上下文管理组件,以解决多线程环境下的数据共享和上下文管理这些问题。通过具体的代码示例和实战展示如何为多线程编程提供一种简洁而高效的上下文管理方案。原创 2024-12-01 23:53:39 · 99520 阅读 · 1540 评论 -
缓冲区的奥秘:解析数据交错的魔法
本文探讨了缓冲区的重要性及其在不同领域的应用。首先,从直观角度解释了缓冲区的好处,包括保持操作节奏、减少性能损耗和优化用户体验等。其次,通过经典案例分析了文件读写流和日志缓冲的应用,展示了缓冲区的加速效果。进一步探讨了缓冲区优化方向,以及在Kafka中可能引发的数据丢失和对业务高可用性的影响。本文旨在帮助读者深入理解缓冲区的奥秘,以及在实际应用中的优化思路。原创 2024-12-01 23:53:05 · 75103 阅读 · 1483 评论 -
解放代码:识别与消除循环依赖的实战指南
本文讨论软件开发中常见的循环依赖问题及其解决方法。首先介绍了循环依赖在代码中的形成原因,并提出了避免循环依赖的基本原则。其次,详细介绍了使用工具如JDepend来识别项目中的循环依赖,并通过具体案例分析了三种消除循环依赖的方法:提取中介者、转移业务逻辑和采用回调接口。每种方法都结合了实际的代码改造示例和测试用例,帮助读者理解和应用这些技术以优化自己的软件架构和设计。主要思想的编排思路来自极客时间《如何有效识别和解决代码中存在的循环依赖问题?》,当然也有其他的参考和自身的一些思考和优化。原创 2024-11-20 00:01:38 · 73977 阅读 · 1969 评论 -
探索CompletableFuture:高效异步编程的利器
随着现代软件系统的复杂性和用户需求的多样化,异步编程成为了提升系统性能和响应速度的重要手段。在Java领域,CompletableFuture作为Java 8引入的新特性,提供了强大的异步编程能力,极大地简化了多线程和并发任务的处理。本文将深入探讨CompletableFuture的基本功能和使用方法,介绍如何利用其提升程序的并发性能和代码的可维护性。原创 2024-11-19 23:59:35 · 1690018 阅读 · 1227 评论 -
CompletableFuture回调机制的设计与实现
CompletableFuture回调机制的设计与实现:首先分析Future原理总述与局限性,再次分析CompletableFuture原理与回调机制总结,最后从类图分析、整体流程分析和算法实现分析CompletableFuture回调机制设计,结尾给出简单的使用CompletableFuture注意方面原创 2024-11-19 23:59:14 · 52843 阅读 · 1483 评论 -
掌握 QLExpress:阿里巴巴开源的业务规则动态解析神器
QLExpress(Quick Language Express)是阿里巴巴开源的一门动态脚本引擎解析工具,起源于阿里巴巴的电商业务,旨在解决业务规则、表达式、数学计算等动态脚本的解析问题。线程安全:QLExpress被设计为线程安全的动态脚本引擎,它使用类型的临时变量,确保在引擎运算过程中的并发场景下的线程安全性。高效执行:为了提高执行效率,QLExpress在编译过程中可以将比较耗时的脚本编译结果缓存到本地机器。原创 2023-11-12 23:39:13 · 105350 阅读 · 1381 评论 -
智选球员:运用动态规划提升棒球队的签约效益
动态规划:签约棒球自由球员我们定义了一个二维数组 dp,其中 dp[i][j] 表示在考虑前 i 个位置且预算不超过 j 时的最大总VORP值。通过状态转移方程更新 dp 数组,不选择当前位置球员的情况与选择当前位置球员的情况进行比较,选择VORP值更高的方案。最终通过回溯 dp 数组,确定具体选择的球员。时间复杂度为 O(N×X×P),其中 N是位置数量,X是预算,P 是每个位置上球员的平均数量。空间复杂度为 O(N×X),主要用于存储 dp 数组和选择标记数组 chosen。原创 2023-11-01 23:45:14 · 72215 阅读 · 1450 评论 -
反应式编程的魅力:Reactive Streams与Reactor框架探索
本文探讨了Reactive Streams编程模型的核心概念及其在现代软件开发中的应用。我们分析了Reactor框架的设计原理,强调了其在处理异步数据流、实现高效的错误处理和回压机制方面的优势。通过实例,展示了Reactive Streams在微服务架构和实时数据处理中的重要性。希望通过这篇文章,读者能够深入理解响应式编程的价值,并在实际开发中灵活应用这一强大工具。原创 2023-05-01 20:19:36 · 45323 阅读 · 891 评论 -
散列函数的安全与应用:自问自答详解
本文深入探讨了散列技术及其在信息安全中的应用。首先介绍了散列函数的基本概念和常见算法(如MD5、SHA-1、SHA-2、SHA-3)的特点,分析了它们在不同场景下的适用性。接着,讨论了散列函数的安全性问题,重点阐述了如何防止散列冲突、哈希碰撞和彩虹表攻击等常见风险,并提出了加盐和使用安全算法等防护措施。此外,本文还介绍了散列技术在密码存储、数据完整性校验、数字签名等方面的实际应用,并讨论了如何选择合适的散列算法及参数。最后,文章总结了散列技术在现代信息安全系统中的重要性,并强调了在安全性与效率之间的平衡。原创 2021-05-20 14:45:00 · 43265 阅读 · 1442 评论 -
日常开发Guava提效工具库核心实用指南梳理
主要针对平时开发中最常用的guava操作做基本的操作总结,并不完善,只整理平时使用较多的地方!原创 2020-07-28 14:51:35 · 45455 阅读 · 1511 评论 -
掌握Spring AOP:开发中的切面编程与案例分析
本文介绍了 Spring AOP(面向切面编程) 的基本理论和实际应用。首先,详细解释了 AOP 中的关键概念,如连接点、切点、通知等,并通过切点表达式和正则规则的使用,展示了如何在不同场景下灵活应用 AOP。接着,结合多个实际开发案例,讲解了如何使用 AOP 实现方法自动打印、mock 赋能干预、业务处理和异步操作等功能。最后,文章总结了 AOP 的开发注意事项及最佳实践,帮助开发者避免常见的陷阱并提高代码的可维护性和扩展性。原创 2020-05-12 22:14:53 · 1674383 阅读 · 1339 评论 -
锁的艺术:Java并发中的常用锁策略与实践
对java锁相关内容进行整理分析:乐观锁 VS 悲观锁+自旋锁 VS 适应性自旋锁+无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁+公平锁 VS 非公平锁+可重入锁 VS 非可重入锁+独享锁 VS 共享锁原创 2020-05-12 17:36:44 · 1693777 阅读 · 1481 评论 -
从ReentrantLock理解AQS的原理及应用总结
本文介绍了Java中的AbstractQueuedSynchronizer(AQS),重点讲解了其在实现ReentrantLock等同步器中的应用。文章分析了AQS的基本概念、工作原理及关键数据结构,并探讨了其在多线程竞争中的线程排队与唤醒机制。通过对AQS实现的深入剖析,帮助开发者更好地理解并发编程中的锁机制和自定义同步器的实现。原创 2020-05-12 17:30:44 · 1695709 阅读 · 1326 评论 -
Java线程池ThreadPoolExecutor背后的秘密与实践
本文深入分析了Java线程池ThreadPoolExecutor的工作原理、核心参数以及配置策略。通过详细讲解线程池的创建、任务调度和线程管理机制,帮助开发者理解如何高效使用线程池来处理并发任务。文章还探讨了常见的性能瓶颈和优化方法,如合理配置线程池参数、选择适当的拒绝策略等,旨在提升应用的并发处理能力和稳定性。最终,读者将能够根据不同场景灵活调整线程池配置,从而有效提升系统性能。原创 2020-05-12 17:24:37 · 1694881 阅读 · 1447 评论 -
Java阻塞队列解析:挑战并发编程中的瓶颈
本文介绍了Java中的阻塞队列(BlockingQueue),重点讲解了其基本概念、常见实现及应用场景。通过分析生产者-消费者问题的解决方案,帮助开发者理解如何利用阻塞队列优化并发编程,提高系统效率与稳定性。原创 2020-05-12 17:10:39 · 1696026 阅读 · 984 评论 -
告别NullPointerException!Optional深入实战与源码揭秘
Java 8 引入的新特性Optional类,主要解决空指针异常(NullPointerException)问题。从实际使用来看,Optional对多层判空嵌套有奇效,但如果只是简单的单层判空,确实没有必要去引入Optional。原创 2020-05-12 17:03:32 · 45435 阅读 · 763 评论 -
高效的布隆过滤器:实现、优化与应用案例
本文介绍了布隆过滤器的基本原理及其在大数据领域的应用。首先,阐述了布隆过滤器的工作机制和实现方法,随后深入分析了Guava框架中布隆过滤器的实现及其优化。通过实际案例,本文展示了布隆过滤器在数据去重和存在性判断中的优势,尽管存在一定的误判率,但其高效的内存使用使其在大数据处理场景中得到了广泛应用。最后,文章总结了布隆过滤器的实践意义,强调了其在提升系统性能中的重要作用。原创 2019-02-14 14:21:17 · 1673117 阅读 · 1429 评论 -
揭秘CAS:深入理解与应用解析
在并发编程中,Compare-And-Swap(CAS)机制作为一种无锁算法,凭借其高效性和避免线程阻塞的优势,受到广泛关注。CAS不仅在底层实现上有着重要地位,还在实际开发中发挥着关键作用。本文将从CAS的工作原理、在Java中的实现及其增强机制来回顾和加深理解一下CAS。原创 2019-01-17 00:12:31 · 839637 阅读 · 1224 评论 -
自动化Google Chrome的强大工具:chromedriver下载、安装、简单使用
本文介绍了 ChromeDriver 的基本概念和安装配置方法,重点讲解了如何通过 Selenium 实现 Chrome 浏览器的自动化测试。内容涵盖了 ChromeDriver 下载、版本匹配、依赖引入和简单的自动化测试脚本示例,帮助读者快速上手并避免常见问题。原创 2019-01-17 00:03:11 · 855639 阅读 · 1434 评论 -
实现一个熔断器公共组件接入其他服务?
实现一个熔断器公共组件接入其他服务?回顾熔断器的基本概念及其工作原理,介绍如何通过监控失败率来判断调用是否可能失败,以及熔断器如何在服务恢复时自动切换状态。接着,提供了一个 Java 实现的基本熔断器代码示例,展示了熔断器如何管理状态并处理服务调用。最后,文章列出了几种流行的开源熔断器库供后续学习原创 2019-01-16 23:57:45 · 851308 阅读 · 1476 评论