
java
文章平均质量分 73
三无少女指南
Java | 大模型 | 架构设计 | 工程项目管理 | 思考感悟
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
状态管理的“终极进化”:从状态模式到表驱动与Spring Statemachine
展现你不仅会“造轮子”,还懂得何时“用轮子”,体现了你作为架构师的决策能力。原创 2025-07-08 10:17:13 · 797 阅读 · 0 评论 -
策略与工厂的演进:打造工业级Spring路由框架
我们将首先剖析“经典工厂模式”在现代Spring项目中的两大“原罪”,然后展示一种“注册表驱动”的智能工厂是如何完成救赎,最终提炼出一套能在面试中充分展现你设计思想的“黄金回答框架”。一个卓越的设计,往往不是对某个模式的生搬硬套,而是将多种模式的思想融会贯通,并与所使用的技术框架(如Spring)深度结合。实例,都是由Spring容器创建和管理的Bean,所以它们是“全副武装”的。现在,我们来看这个“工业级”的设计是如何解决上述所有问题的。的“经典”工厂模式是什么样的。创建的对象,就像一个被扔到。原创 2025-07-07 12:01:21 · 1038 阅读 · 0 评论 -
ThreadLocal的挑战与未来:在响应式编程与虚拟线程中的演变
然而,现代并发模型,如响应式编程和虚拟线程,恰恰就是要打破这条“铁律”,这使得。当一个虚拟线程从一个OS线程上被“卸下”(unmount),又在另一个OS线程上被“装上”(mount)时,它的。一个请求(盘子)的处理过程是流动的,它可能会依次经过A工人(放沙拉)、B工人(放牛排)、C工人(放蛋糕)。的,而不是与承载它的物理线程绑定。所以,从功能正确性上讲,:业务逻辑看似运行在一个独立的虚拟线程上,但这个虚拟线程可能会在不同时间点,被。Java的虚拟线程(Project Loom)是另一个重大的变革,它对。原创 2025-07-06 15:31:49 · 513 阅读 · 0 评论 -
InheritableThreadLocal深度解析:从父子线程传值到线程池陷阱
为我们提供了完美的线程隔离,但这种隔离是绝对的,甚至在父子线程之间也无法逾越。在某些业务场景下,我们恰恰希望子线程能够“继承”父线程的某些上下文信息,例如全链路追踪的Trace ID、用户身份信息等。然而,这个看似完美的解决方案,其设计初衷与现代后端开发的普遍实践之间,存在着一个致命的冲突。的设计初衷,完美适用于那种**“一个主线程,创建和启动若干个用完即弃的、独立的子线程”**的场景。本身的特性:它是完全的线程封闭,子线程无法访问父线程中设置的值。,其核心机制恰恰是**“线程复用”**。原创 2025-07-06 15:16:00 · 852 阅读 · 0 评论 -
深入理解ThreadLocal:线程封闭、内存模型与高级应用
这种**“空间换时间”**的设计哲学,通过为每一个线程提供独立的变量副本,从根本上避免了多线程间的竞争和同步开销,是并发编程中一种极其优雅的解决方案。因为线程池会复用线程,上一个任务在线程中留下的“继承”数据,会被下一个完全无关的任务错误地“继承”,导致严重的业务逻辑错误。值得一提的是,在现代的**响应式编程(如WebFlux)或虚拟线程(Project Loom)**的上下文中,,它允许子线程在创建时“继承”父线程的本地变量,在需要进行全链路追踪的场景下非常方便。的哈希计算非常独特,它不依赖Key的。原创 2025-07-06 15:05:47 · 921 阅读 · 0 评论 -
从Java BigDecimal到MySQL DECIMAL:一条保证金融级精度的黄金法则
作为一名后端工程师,你的职责并不仅仅停留在应用层。保证数据在整个生命周期中的准确性和一致性,是衡量专业能力的核心标准。本文将深入探讨为何在处理高精度数据(如金额)时,Java中的。原创 2025-06-21 15:37:02 · 339 阅读 · 0 评论 -
面试指导:如何展示你对SOLID的深刻理解? 当面试官问:“谈谈你对SOLID原则的理解。”
*单一职责原则(SRP)**是这一切的基础,它保证了我们拆分出的类和模块本身是内聚的、健康的。我会像设计‘插头和插座’一样,让我的业务逻辑(高层模块,比如台灯)依赖于一个抽象接口(插座),而不是一个具体的实现(比如某个特定的发电站)。这样一套组合拳打下来,你不仅清晰地阐述了每个原则,更重要的是,你展示了你知道它们之间的关系、最终的目标,并能结合主流框架来佐证你的观点。在我看来,这五个原则中,开闭原则(OCP)是我们的最终目标,而其他原则,特别是依赖倒置原则(DIP)是实现这个目标最重要的手段。原创 2025-06-21 14:59:00 · 214 阅读 · 0 评论 -
从JIT到AOT:深度解析Java追求极致性能的编译演进史
从JIT到AOT,我们看到了Java语言强大的生命力。它不仅在诞生之初通过JVM和字节码奠定了跨平台的基石,更在发展的过程中,通过JIT技术将性能推向新的高度,如今又通过AOT技术积极拥抱云原生的浪潮。理解这条演进路线和其中的技术权衡,不仅能让你在面试中对答如流,更能帮助你在实际工作中做出更优秀的技术决策。原创 2025-06-21 14:48:06 · 727 阅读 · 0 评论 -
接口安全的“时间守卫”:深入理解时间戳如何防御重放攻击与盗刷
一个看似无害的请求,如果被黑客截获并恶意重放,可能会引发灾难性的后果:用户资金被重复扣除、优惠券被无限盗刷、系统资源被瞬间耗尽…因此,它绝不能单独使用,必须作为安全体系的一部分,与签名、限流等机制协同工作。时间戳通过引入**“时效性”**约束,为 API 安全提供了一道简单而有效的前置防线,是防御重放攻击的核心手段。它如同一位忠诚的“时间守卫”,为每个请求打上时效烙印,使其无法在时间的长河中被肆意滥用。通过这种方式,即使攻击者的请求包内容完全正确,也会因为时间戳的“失效”而被服务端无情拒绝。原创 2025-06-16 15:20:57 · 702 阅读 · 0 评论 -
深度解析信息安全三大基石:一文搞懂防窃听、防篡改与防伪造
而构建这一切的基石,便是信息安全的“三大核心目标”,即大家常说的。本文将从技术原理、实现方案和典型场景三个维度,带您深度解析这三大安全支柱,并提供 Java 代码实现。,顾名思义,就是确保数据的秘密性。它要求数据在传输或存储时,仅对授权方可见,能有效防止未授权的第三方(如黑客、中间人)窃取和解读敏感信息。用于确保数据在传输、存储和处理过程中,没有被未授权地修改、插入或删除。,旨在确认通信实体(如用户、服务器、设备)的身份是真实可信的,防止攻击者伪造或冒充合法身份。虽然三者紧密相关,但它们的侧重点完全不同。原创 2025-06-16 15:16:35 · 1047 阅读 · 0 评论 -
海量数据处理:巧用位图法(BitMap)解决100MB内存下亿级整数快速查询难题
面对这个问题,传统的解决方案,如哈希表(Hash Table)或直接排序,都会因巨大的内存开销而被立刻否决。具体来说,我们可以创建一个足够大的 bit 数组,数组的**每个索引(index)**都直接对应一个整数值。通过这种方式,我们用一个 bit 的状态(0 或 1)来表示一个整数的存在与否,极大地压缩了存储空间。因此,位图法不仅是解决此类问题的最优方案,也为我们处理类似的数据密集型场景提供了高效、可靠的设计思路。的内存,远低于题目要求的 100MB 限制,方案可行!面对在严格内存限制下对。原创 2025-06-16 15:12:24 · 1018 阅读 · 0 评论 -
深度解析高并发红包系统:从架构设计到核心实现
分而治之:将复杂的业务流程拆分为独立、清晰的阶段。空间换时间:通过预计算和数据预热,为高并发阶段减负。内存优先:将最核心、压力最大的操作全部放在内存中完成。异步解耦:利用消息队列将核心链路与非核心、耗时的操作分离,保证系统的高可用和最终一致性。原创 2025-06-08 16:10:57 · 3838 阅读 · 0 评论 -
如何从零到一构建高性能消息通知系统:实战设计与优化
推拉结合:巧妙地平衡了消息的实时性要求和系统的整体性能开销。写扩散模型:通过分离消息内容和用户状态,优化了高并发下的读写性能。异步化与聚合:利用消息队列削峰填谷,并通过消息聚合提升了用户体验。多维度优化:结合缓存、分库分表、幂等性设计等手段,确保了系统的可扩展性和健壮性。这套设计方案兼顾了性能、成本与用户体验,适用于绝大多数需要复杂消息通知功能的互联网应用场景。原创 2025-06-08 16:07:24 · 3631 阅读 · 0 评论 -
深入理解Java并发:阻塞队列(BlockingQueue)核心解析
是 Java 并发编程中不可或缺的工具,它将复杂的线程同步问题封装在简洁的 API 背后。通过理解其阻塞特性核心方法不同实现的差异(特别是和的锁机制)以及内部实现原理,我们能更加自如地应对并发挑战。无论是构建生产者-消费者模型,还是配置线程池,选择并正确使用合适的都是保证程序高效、稳定运行的关键。原创 2025-06-08 16:04:20 · 3786 阅读 · 0 评论 -
Eclipse配置tomcat
Wtpwebapps 会自动创建用于存放Web项目。原创 2022-08-16 08:41:59 · 133 阅读 · 0 评论 -
Dubbo命令行详解
3、时间使用yyyy-MM-dd HH:mm:ss 格式,如invoke findDatas(null,null,null,“2017-12-14 00:00:00”,“2017-12-14 00:00:00”,null)显示汇总状态,该状态将汇总所有资源的状态,当全部OK时则显示OK,只要有一个ERROR则显示ERROR,只要有一个WARN则显示WARN。改变缺省服务,当设置了缺省服务,凡是需要输入服务名作为参数的命令,都可以省略服务参数。跟踪1次服务任意方法的调用情况。统计1次服务任意方法的调用情况。.原创 2022-08-14 08:23:52 · 1516 阅读 · 0 评论 -
Dubbo 面试题总结
连接断了之后,ZK不会马上移除临时数据,只有当SESSIONEXPIRED之后,才会把这个会话建立的临时数据移除。所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点,也就是说不会因为创建该节点的客户端会话失效而消失。临时节点的生命周期和客户端会话绑定,也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。dubbo:reference/ 服务消费者引用服务配置。dubbo:service/ 服务提供者暴露服务配置。会的,dubbo根据本地缓存的服务地址进行服务调用。...原创 2022-08-14 07:08:13 · 381 阅读 · 0 评论 -
Docker进入容器命令
但是这种方式有缺点,当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。这样的错误,是我们docker镜像中的/bin/bash文件并不存在,可能存在的是/bin/sh文件,使用。...原创 2022-08-14 05:52:43 · 1088 阅读 · 0 评论 -
docker安装postgresql
v/data/postgresql:/var/lib/postgresql/data 将运行镜像的/var/lib/postgresql/data目录挂载到宿主机/data/postgresql目录。在data目录创建挂载文件夹(我这是在正式服务器,所有镜像的挂载目录都在data目录,方便后期维护)-p 5432:5432: 端口映射将容器的5432端口映射到外部机器的5432端口;的镜像文件,也可以拉去最新的版本,按需拉取镜像文件,会慢慢的写出来,有兴趣的,评论区交流,互相提高技术)...原创 2022-08-14 04:27:25 · 1094 阅读 · 0 评论 -
docker-compose与docker的版本对应关系表
进入。原创 2022-08-14 03:12:45 · 3276 阅读 · 0 评论 -
Dependency ‘org.springframework.bootspring-boot-starter-testnot found 的解决方法
第一次写springboot 项目的同学,记得一定要在右上角的maven中 导包,导包,导包,重要的事情说三遍,下载完成后问题就解决了,在各类网站查找解决方法,都没得用,直到最后快放弃的时候,在csdn上看到一篇良心之作,直接解决问题。使用IDEAs 创建第一个springboot 项目,在l配置pom,xml 中出现了一个很无语的问题。最后附上原作者的文章,希望能解决同学的问题;...原创 2022-08-14 01:57:27 · 4302 阅读 · 0 评论 -
centos7 dubbo安装
* [持续集成、自动化部署、弹性伸缩教程](http://edu.csdn.net/course/detail/6452) http://edu.csdn.net/course/detail/6452 ———————————————————————— ** Centos 安装 Dubbo。1、修改 dubbo.registry.address=…—————————————————————————————————- 我是传说中的分割线 —————————————————————————————————-...原创 2022-08-14 00:39:27 · 722 阅读 · 0 评论 -
AndroidStudio配置maven阿里云镜像
写1行不行,要写5行,不要写 jcenter(), google(),半天完不了。原创 2022-08-13 23:23:57 · 1665 阅读 · 0 评论 -
C++中map的用法
map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,后边我们会见识到有序的好处。当客户端对map进行元素新增操作(insert)和删除(erase)时,操作之前的所有迭代器,在操作完成之后依然有效。标准的STL map是以红黑树为底层机制完成的,每一个节点的内容是一个pair。使用map得包含map类所在的头文件。...原创 2022-08-13 12:23:41 · 910 阅读 · 0 评论