- 博客(12)
- 收藏
- 关注
原创 ThreadLoca与FastThreadLocal
然而由于ThreadLocalMap的内部实现中键是弱引用,当外部对该ThreadLocal实例没有强引用,键是可以被垃圾回收的,但对应的值却是强引用,这个值不会被垃圾回收器回收。static 关键字,会让人觉得这是一个静态常量,而静态常量属于类元信息,一个线程的值修改后其它线程也会被改。的用法,可以分析出键值对的key 为this,this指的当前ThreadLocal对象。而值是ThreadLocalMap.Entry,Entry中有一个value属性,这个value也是最终return的内容。
2024-04-01 09:35:43
809
原创 优秀的营销模型
业务架构的核心始终都是对业务系统的设计和构建,首要目标都是满足业务需求。在此基础上根据个人能力或架构师能力为系统注入可扩展性、可维护性、可重用性和灵活性等特性。
2024-03-26 09:31:43
544
原创 业务系统如何保证一致性
Seata-AT 模式,在事务资源器执行数据操作(SQL)后,其它线程或服务可以对这条数据进行再次修改,但资源管理器任然可以发起Undo 操作,这就造成了“幻读”风险。Seata降低了传统2PC协议在准备阶段长时间锁定资源的问题,提高了系统并发性能,对业务代码侵入性较低,只需要简单的配置即可。Seata针对不同的框架有对应的jar包,比如Fegin和DUBBO都有对应的实现jar包,使用相对简单。生成失败日志,记录失败内容、原因、时间等要素,在失败后通过重试策略进行重新发放,双方要确认好幂等。
2024-03-14 17:31:37
1164
原创 获取枚举信息工具类
需求:前端通过枚举的code查询对应的值,别问我为什么不是前端配置或者查询数据库,条条大路通罗马,这只是解决方案的一种第一版:那就直接上手干,初步想法是通过包名获取这个包下的所有枚举类,递归其中的枚举,以类名为key,维护一个静态Map,每次查询都只需要从Map取值对枚举内部也有一定的要求,获取枚举对象方法一定要用getCode,getDesc命名import org.apache.commons.collections.CollectionUtils;import org.ap.
2021-03-26 10:37:18
324
原创 限流算法----读12306架构有感
12306的架构当然不止这么一点,仅对其中的限流做出讨论、2306购票 zhj优化版限制每台服务器访问后层的次数每台服务器都设置一个buffer值 每次调用接口,首先从缓存中取出buffer,将buffer减1,更新缓存,然后从返回值中取出剩余值 通过一定算法确定buffer,更新缓存,后续请求只有当buffer大于0时才会调用方法等于0后直接拦截接口,缓存要设置有效时长...
2019-12-06 19:40:20
403
原创 分布式系统中的接口调用如何保证顺序性
业务场景:有三个连续的请求,必须保证其顺序性第一种方案:通过redis记录点评:这种方法太重,阻塞的接口会压榨服务器的并发数/吞吐量,只有当请求1失败后其他两个才能释放。第二种方案:前端串行请求在不追求高服务体验的时候可以限制下一个请求,当请求1没有处理完成前,前端不会发送第二个请求,并且后端系统在接收到请求2时直接返回错误信息,也可以在前端建立一个队列,按顺序发送...
2019-12-06 19:35:42
1405
1
原创 一个很好用的 quartz 定时任务表达式生成工具页面
好用的东西就要记录下,当然理解后自己会写是最重要的但是新手有个工具用用还是方便了很多地址:http://cron.qqe2.com/
2019-08-28 16:33:51
360
原创 Fork/Join 实现笔记
首先是一些对Fork/Join的个人理解1)最主要的目的还是将相同的行为的拆成N份,同时异步执行2)实际作用不是很大,要不是应用够简单,就是做统计;要不就是服务器够强大。3)所有不讨论基数的多线程都是耍流氓话不多说,直接上代码public class ForkJoinTest { /*获取随机数数组方法*/ private s...
2019-06-10 23:07:13
158
原创 Google Guava学习整理(随笔、随心)
(1)布隆过滤器 BloomFilter算法:1. 初始化一个长度为n比特的数组,每个比特位初始化为02. 首先需要k个hash函数,每个函数都把key散列成为m个整数3. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为14. 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在...
2019-04-07 12:43:25
532
原创 Redis分布式锁个人实现
Redis分布式锁的基础是Redis的单进程单线程,用来控制分布式系统之间同步访问共享资源。实现的原理是CAP。分布式锁的目的是对资源的保护,确保业务逻辑与预想的一致性、正确性。实现原理是每一个线程争夺对Redis的写操作的权限,从而获得操作业务代码的权限。网上有非常多不同版本的实现,但是总觉得都有一定的问题,所以自己写了一个实现。@Slf4jpublic class Redi...
2019-02-01 22:06:02
176
转载 Spring中Bean的命名问题 id和name区别以及alias 标签
原文没找到,转自:https://www.cnblogs.com/ckysea/p/4528279.htmlSpring中Bean的命名1、每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一;2、可以不指定id属性,只指定全限定类名,如:<bean class="com.zyh.spring3.hello.Stat...
2019-01-26 15:31:16
1881
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人