节选jdk源码中比较重要的方法进行分析,如下:public class ThreadLocal<T> { private final int threadLocalHashCode = nextHashCode(); private static AtomicInteger nextHashCode = new AtomicInteger(); priva
  • arick
  • 2020-06-09 02:35:00
1 扩容时可能造成死循环,扩容时会造成死锁,形成环形链表;或者造成扩容大小不一致等问题2 多个线程put的时,get的值可能不一致,put的操作不是原子性的3 删除键值对的时候,会删除刚刚修改的位置元素扩容操作时:这个操作会新生成一个新的容量的数组,然后对原数组的所有键值对重新进行计算和写入新的数组,之后指向新生成的数组。当多个线程同时检测到总数量超过门限值的时候就会同时调用resize操作,各自
  • arick
  • 2020-04-21 13:52:05
1. 背景1.1. Java 线程模型的演进1.1.1. 单线程时间回到十几年前,那时主流的 CPU 都还是单核(除了商用高性能的小机),CPU 的核心频率是机器最重要的指标之一。在 Java 领域当时比较流行的是单线程编程,对于 CPU 密集型的应用程序而言,频繁的通过多线程进行协作和抢占时间片反而会降低性能。1.1.2. 多线程随着硬件性能的提升,CPU 的核数越来越越多,很多服务器标配已经达
  • arick
  • 2020-03-16 17:59:03
领域划分流程事件风暴B端商家-->查看发布的赛事列表-->查看发布的赛事详情-->生成海报  -->取消赛事  -->结束赛事  -->创建赛事-->发布赛事  -->查看当前赛事详情  -->查看当前的活动大盘  -->管理选手状态C端        用户-->查看赛事列表-->查看赛事详情-->报名-->支付-->查看我的报名列表-->查看我的报名详情  -->取消报名  -->查看当前活动详
  • arick
  • 2020-06-04 16:17:54
背景阿里小蜜机器人作为一款面向阿里经济体消费者的智能助理产品,以用户和机器人之间进行对话的形式作为智能服务的载体,在技术实现上则是通过http的请求响应模型来完成交互流程。但是使用http请求带来的痛点问题也不少,比如机器人无法主动触达到用户去推送一些个性化的内容,因为每次http请求都只能是由用户主动发起,而机器人总是被动的那一方; 再比如这种请求同步等待的机制也会给后端一些比较复杂的算法模型、
  • arick
  • 2020-05-13 16:44:11
1、前言1.1、背景介绍在TCC模式下,发起方需要考虑如何存储事务日志:异库发起方需要实现回查服务,并且自身业务量会受XTS Server及其db的瓶颈限制;同库发起方需要自行建库建表维护数据库,如果分库分表的话还需考虑如何对数据分片;对于参与者, 需要按TCC参与者设计规范,实现参与者服务;此外一个TCC参与者通常只适用于一个特定的业务场景,新的业务场景需要设计和实现新的TCC参与者,复用性比较
  • arick
  • 2020-05-12 15:53:52
corePoolSize:核心池的大小,这个参数跟后面讲述的线程池的实现原理有非常大的关系。在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法,从这2个方法的名字就可以看出,是预创建线程的意思,即在没有任务到来之前就创建corePoolSize个线程
  • arick
  • 2020-03-26 17:41:58
是什么  作为Java开发人员,对于AQS(AbstractQueuedSynchronizer)抽象队列同步器都不会陌生,无论是面试别人,或者别别人面试的过程中,多多少少都会提到它。在J.U.C包下很多类的底层都是采用它来保证的多线程间同步的,本文就来讲讲问及度比较高的ReentrantLock的实现原理,主要是说下AQS的实现原理。为什么  有些人会说ReentrantLock代码在哪里摆着,
  • arick
  • 2020-04-13 02:04:05
分库分表这个技术在之前一家公司其实也有接触。上一家公司在业务上按照用户水平分库的,所以避免了很多业务上的问题,但也只是基于Spring的AbstractRoutingDataSource,根据userId做了简单的路由。之前在网上听说过sharding-jdbc等中间件,也仅限于了解。所以结合我从内网看到的关于TDDL中间件的文章和外网看到的一些文章,在这篇文章中整理一下我这个新人对分库分表的认识
  • arick
  • 2020-06-01 13:52:03
1.1 分布式事务产生的背景1.1.1 数据库单库容量不足,需要分库当前的业务数据量膨胀,数据规模达到数亿甚至更多,单库存储受容量和性能限制,已无法满足业务需求。把数据存储到多个DB,并行操作是趋势。写操作一旦跨多个数据库,单机事务就无法保证数据一致性,需要通过分布式事务中间件进行保证。1.1.2 业务服务化业务量级扩大之后,平台业务服务化即刻成为强需求,实现系统间解耦、隔离不同的业务系统,能够降
  • arick
  • 2020-04-10 03:33:12
Rick ©2018