非常好用的反射框架Reflections

Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。使用Reflections可以很轻松的获取以下元数据信息:1)获取某个类型的所有子类;比如,有一个父类是TestInterface,可以获取到TestInterface的所有子类。2)获取某个注解的所有类型
2022年05月28日 561次浏览

如何在Spring中优雅的使用责任链模式

背景:收到需求需要校验用户身份证和姓名是否匹配,要求可以顺序执行不同的校验方法,任一步返回结果,很容易想到责任链模式,网上的例子多半是原理讲解类的,没有充分使用 Spring 特点,所以记录一下。技术有限,如有纰漏,欢迎指正。要求增加新的处理渠道不改动原来的代码。使用 Spring 的方式编写。重点
2022年05月26日 732次浏览

一篇尽量用人话把DDD讲明白的文章

引言在人类发展史上,当人们遇到棘手的问题时,一个惯用的手段,通常是将问题拆分比如研究一个桃树由什么组成?首先根据植物的器官,细分为树叶,桃花,桃子,树茎,树根,等。于是问题变成了,树叶,桃花,桃子,各由什么组成?树叶是由叶片,叶柄,拖页组成,桃花由,花瓣,花粉,花柱组成,等。于是问题又变成了,叶柄是
2022年05月02日 474次浏览

一个完整的领域模型案例该如何落地?

引言很多人都听过领域模式,可是什么是领域模式,什么是领域,如何使用,是很多人的盲点。领域模型ddd,用一句话来概括,把业务逻辑映射到代码层,形成连贯可传承的结构化代码,而不是,是一堆片段式的为了实现业务的代码。所以,这里的几个关键字,传承,结构化,ddd是有成本的,一般一个项目发展到一定程度才建议使
2022年03月16日 927次浏览

DDD之事件风暴与领域故事的比较

DDD关键是发现有界上下文(bounded context),事件风暴(Event Storming)和领域故事(Domain Story)是两种不同的查找上下文边界方法,他们之间有什么异同?Eric Evans在他的“领域驱动设计”一书中称他们与领域专家进行了对话,这应该引导软件开发人员更深入地了
2022年02月10日 312次浏览

关于系统设计的持续思考(持续更新)

业务设计1.现在需要实现一个发放优惠券的功能,用户量1亿,从1亿的用户中获取当日过生日的用户,在当天早上8点-10点,进行优惠券发放。1.失败重试2.查询过程前置,不影响阻塞发放功能主流程
2021年09月17日 644次浏览

本地缓存的几种策略

缓存(Cache) 是指将程序或系统中常用的数据对象存储在像内存这样特定的介质中,以避免在每次程序调用时,重新创建或组织数据所带来的性能损耗,从而提高了系统的整体运行速度。以目前的系统架构来说,用户的请求一般会先经过缓存系统,如果缓存中没有相关的数据,就会在其他系统中查询到相应的数据并保存在缓存中,
2021年09月15日 663次浏览

MySQL Explain索引性能优化观察

在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL
2021年09月07日 383次浏览

netty之FastThreadLocal

1 FastThreadLocal的引入背景和原理简介既然jdk已经有ThreadLocal,为何netty还要自己造个FastThreadLocal?FastThreadLocal快在哪里?这需要从jdk ThreadLocal的本身说起。如下图:![](https://pic2.zhimg.co
2021年09月06日 441次浏览

HashMap何时会链表转红黑树

链表转红黑树部分源码://用来衡量是否要转红黑树的重要参数 static final int TREEIFY_THRESHOLD = 8; //转红黑树需要的最小数组长度static final int MIN_TREEIFY_CAPACITY = 64; for (int binCount =
2021年09月06日 442次浏览