自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 ConcurrentHashMap详解

文章目录spread()方法putVal()方法initTable()方法tryPresize()tableSizeFor()resizeStamp()transfer()总结compute()addCount() 计算成员数量sumCount()fullAddCount()资源锁sizeCtl其它节点类型forwarding节点ReservationNode节点spread()方法作用:用于获取槽位值 static final int spread(int h) { //h为k

2022-03-28 15:17:56 83212 1

原创 Jackson进行Json反序列化对于一个小写字母开头后跟大写字母无法识别反序列成功问题

这个报错的意思很明显,从json中没有解析出对象的pTargetId字段,但明显我们知道json中是存在这个属性字段的。通过设置这里报错倒是解决了,但是本质问题还是没有解决也就是为什么json中有pTargetId,但是转换成对象后属性值确实空的。Gson,fastjson,hutool的不存在这个问题。

2023-12-29 18:13:36 629

原创 TransmittableThreadLocal详解

是阿里开源的用于解决,在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。详细的内容可以查看。 TransmittableThreadLocal , ThreadLocal 线程池访问值为null,解决方案。跨线程访问上下文问题

2023-02-01 18:06:26 8426 1

原创 ThreadLocal与InheritableThreadLocal的实现原理

的特点就是与线程绑定,一般通过这种隐式传参的方式来传递上下文。比如,用户登录和获取用户相关信息,这时候如果在每个需要用户信息的方法入参上加入用户信息参数就先的非常冗余,不够优雅。还有就是日志的链路信息等等。根据上面的问题我们知道存在的局限性,也就是可继承的ThreadLocal,这里的可继承就是指的。它实现可继承的方式,就如前文描述的一样,线程池使用 ThreadLocal InheritableThreadLocal 取值为null

2023-01-28 14:13:35 1141 1

原创 Required to bind 2 arguments, but only bound 1 (JoinPointMatch was NOT bound in invocation)异常

方案已经给出来了,但是这个错误报出是百思不得其解,错误说的是需要2个参数但是只绑定了1个,跟我优先级有什么关系?对源码感兴趣的同学可以关注我(^U^)ノ~YO,将不定期跟更新自己的体会和一些源码理解分享。回去检测需要的参数和绑定的参数数量是否一直,这时候就发现少了一个。,其他拦截器必须在它之后,它必须是第一个执行的。Required to bind 2 arguments, but only bound 1 (JoinPointMatch was NOT bound in invocation)异常

2023-01-10 11:20:34 980

原创 JDBC使用与理解

Java数据库连接,(Java DatabaseConnectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。那就是是说Java定义了一套接口,而对应的数据库厂商需要实现这个接口(也就是所谓的驱动)。简单理解:Java规定了访问数据库的API,数据库厂商去实现它这个API就是java.sql路径下的一系列接口,比如说以mysql为例接口,实现就是接口,实现就是接口,实现就是…等等还有很多。

2023-01-09 17:43:27 135

原创 ScheduledThreadPoolExecutor源码详解

是JDK提供的一个基于内存的定时任务调度器继承于,需要注意的就是方法和方法的区别。ThreadPoolExecutor源码详解。

2023-01-06 18:14:34 307

原创 ThreadPoolExecutor源码详解

例如:corePoolSize=10,maximumPoolSize=20,那么前10个启动的线程不一定不会被关闭,整个容器会保证当核心线程数超过10个后,会按照配置来让核心线程保持在10,但这10个可能是最开始创建的也可能是后面创建的,动态变更而不是静态的。答:第一取决于workQueue的实现类,第二当核心线程和队列都满的情况下,并且maximumPoolSize>当前线程数>corePoolSize 时,后续任务会比队列中先执行。一种停止,所有线程都被打断了,就分配了连个状态来与之对应。

2023-01-05 19:16:15 1123

原创 聊聊AbstractQueuedSynchronizer

文章目录什么是AbstractQueuedSynchronizer实现同步器步骤安全的去改变state范例AbstractQueuedSynchronizer设计第一步:给框架进行定位第二步:抽象需自定义的API第三步:CLH变种队列的设计与管理队列结构队列成员属性节点成员有几种状态节点状态机共享模式队列操作共享模式-总体思路共享模式-出入队addWaiter()setHeadAndPropagate()doReleaseShared()PROPAGATE状态产生的原因共享模式队列操作ConditionOb

2022-04-08 15:14:12 667 1

原创 HashMap源码详解

文章目录结构hashMap 空间使用程度相关参数含义槽位概念Hash()方法putVal() 方法总结resize() 方法总结removeNode()方法总结getNode()KeySet 和 Values整体总结遗留问题结构hashMap 空间使用程度相关参数含义sizethresholdtable.lengthsize:代表现在存入的成员商户数量threshold:代表着需要触发扩容的成员数量table.length:代表整个容器的总数量一个容器,固有

2022-03-21 13:42:25 584

原创 Spring中对于@RequestBody的参数解析问题

文章目录问题起源问题延伸代码实现前置准备阶段选择解决方案如何自定义Resolver处理类型如何自定义HttpMessageConverter思考总结问题起源今天后端与前端同事在讨论对于只有一个参数的接口,能否不将参数当作url的一部分传递,而都通过参数进行传递。比如说:访问车辆详情页面只需要一个车辆id。第一种方式:通过访问路径传递就是:getDetail/{carId}这种方式。第二种方式:如果以get方式进行请求,那么就可以写成:getDetail?carId=xxxx;第三种方式:如果以

2022-03-14 18:51:45 3100

原创 【dubbo学习系列】dubbo消费端的代理生成详解(@DubboReference和@Reference)

文章目录spring中dubbo实现RPC如何加载@Reference和@DubboReference注解DubboComponentScanRegistrar概括发现@Refrence和@DubboReference注解,并编织RPC通信逻辑ReferenceAnnotationBeanPostProcessor(核心)@Reference@DubboReference@Reference和@DubboReference的区别@DubboReference的使用方式总结spring中dubbo实现RPC

2021-11-29 19:11:29 5785

原创 基于时间窗口统计数据

文章目录如何对请求进行限制对于限流的三种常见算法令牌桶算法漏桶算法时间窗口(滑动窗口)实现窗口对象操作对象总结如何对请求进行限制这个问题其实分为两步第一步,需要明确进行限制的规则数据,比如说接口的qps,线程数,报错数,传入参数等第二步,根据上面的统计数据,实现自己的规则这篇文章主要讲第一步中的一种统计数据结构,基于时间窗口(或者滑动窗口)来统计信息对于限流的三种常见算法常见的有三种,令牌桶,漏桶,时间窗口前两中算法由于不是本章的重点,就稍微讲述下是什么。令牌桶算法令牌桶的思路呢,是按一

2021-11-10 14:08:38 1392

原创 雪花算法生成分布式唯一ID

雪花算法(Snowflake)是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake IDs或snowflakes。这种算法由Twitter创建,并用于推文的ID。Discord和Instagram等其他公司采用了修改后的版本。一个Snowflake ID有64位元。前41位是时间戳,表示了自选定的时期以来的毫秒数。接下来的10位代表计算机ID,防止冲突。其余12位代表每台机器上生成ID的序列号,这允许在同一毫秒内创建多个Snowflake ID。

2021-11-06 21:39:38 1567

原创 SpringAop报错是否影响@Transactional回滚问题

文章目录问题起始aop中的执行顺序Spring如何实现Aop?如何通过一个@Transactional注解回滚?那么现在核心问题来,aop与transactional他们的拦截器,执行顺序又是什么呢?总结问题起始今天被人问了个问题,说SpringAop里面报错,@Transactional事务会进行回滚吗? 当时第一个反应是不会,想法是bean对象实际是获取的一个proxy,@Transactional不会比我们的aop更后面执行吧?但是也不能确定,所以就有了今天这篇文章。我们先来看看aop里面的各个

2021-11-05 19:29:16 1937 2

原创 【spring学习笔记 七】ConfigurationClassPostProcessor详解

文章目录概览ConfigurationClassPostProcessorpostProcessBeanDefinitionRegistry()parse()@Component@PropertySource@ ComponentScan,@ComponentScans@Import实现ImportSelector实现ImportBeanDefinitionRegistrar接口@Beanload...

2020-02-26 15:20:00 1622

原创 【spring cloud学习笔记 一】客户端启动@EnableDiscoveryClient

文章目录概览@EnableDiscoveryClientEnableDiscoveryClientImportSelector.classselectImports()总结概览当我们想要将一个客户端注册到Eureka上,我们只需要在启动类上添加一个@EnableDiscoveryClient注解就搞定了。本篇文章主要就是对该注解进行介绍,并看看它背后究竟做了什么。@EnableDisc...

2020-02-25 17:26:46 1374

原创 【spring学习笔记 七】循环依赖解决思路

文章目录问题解决方案非正常表现解决方案这章我们主要来聊聊在doCreateBean()方法中,`spring是如何解决循环依赖的,以及一些错误的使用方式。问题假设现在我们有两个类,分别是A类,B类,同时A类需要引用B类,B类需要引用A类,也就是套娃模式。@Componentpublic class A { @Autowired private B b;}@Component...

2020-01-23 18:30:09 572

原创 【spring学习笔记 六】doCreateBean()

文章目录创建包装类型的BeanBean的前置处理是否提前曝光填充属性(populateBean)第一步:判断该bean是否进行属性填充第二步:访问各个处理器获取PropertyValues(但有些处理器直接进行了填充)第三步:根据返回的PropertyValues进行填充初始化Bean特殊通知前置通知初始化通知后置通知曝光实例处理注册一些Bean销毁后需要处理的实例上一篇介绍了加载bean的一种...

2020-01-22 17:33:04 1536

原创 【spring学习笔记 五】finishBeanFactoryInitialization()

文章目录preInstantiateSingletons()初始化所有单例对象FactoryBean的实例化普通Bean的实例化 (doGetBean)createBean()唤醒SmartInitializingSingleton实例的方法总结前几篇我们聊完了Bean初始化的前置步骤,也就是后面各个节点的处理器已经准备完毕了,下面就等着人去触发它们了。这一篇我们就一起来看看,各个节点都分别在...

2020-01-21 23:23:36 294

原创 【spring学习笔记 四】registerBeanPostProcessors()

文章目录registerBeanPostProcessors()MergedBeanDefinitionPostProcessor总结上一篇我们聊完了注册与唤醒BeanFactoryPostProcessor,这篇我们就来聊聊BeanPostProcessor的注册 。registerBeanPostProcessors()第一步:添加BeanPostProcessorChecker创建B...

2020-01-21 21:45:52 312

原创 【spring学习笔记 三】invokeBeanFactoryPostProcessors()

文章目录invokeBeanFactoryPostProcessors()总结上篇交代了refresh()的整个流程,下面我们就来看看其中比较重要的流程invokeBeanFactoryPostProcessors()。这个方法主要是唤醒BeanFactoryPostProcessor和其子类BeanDefinitionRegistryPostProcessorinvokeBeanFacto...

2020-01-20 22:38:27 322

原创 【spring学习笔记 二】refreshContext源码分析

文章目录前言refreshContext()prepareBeanFactory()invokeBeanFactoryPostProcessors()registerBeanPostProcessor()registerListeners()finishBeanFactoryInitialization()总结前言上篇文章我们已经对spring启动的整体流程有了一个初步的认识,但是在即将达到高...

2020-01-19 22:09:56 151

原创 【spring学习笔记 一】spring启动流程概览

文章目录spring流程概览new SpringApplication()setInitializers() 和 setListeners()run()prepareEnvironment()createApplicationContext()prepareContext()refreshContext ()总结spring流程概览这篇文章主要聊聊spring启动流程经历了哪些步骤,以及它们做...

2020-01-19 21:01:36 326

原创 权限认证-基于紧凑的数据结构

文章目录1.背景原因2.解决与实现3.总结1.背景原因假设我们有一批用户的权限信息,分为4类权限A,B,C,D。如何设计一种能够快速识别身份权限的数据结构呢?首先我们先要对用户与权限建立一种映射关系,也就是 用户-权限信息。用户信息权限信息我们可以采用Key-value的形式进行存储,由于我们主要是做权限认证,所以先调整个方向。 权限信息作为key, 用户表示作为value。首先我们可...

2020-01-16 22:17:21 219

原创 【netty学习笔记】BootServerstrap源码分析

文章目录1.BootServerstrap.bind()2.initAndRegister()3.init(Channel channel)register(Channel channel)1.BootServerstrap.bind()netty在服务端这一侧的启动入口 是通过ServerBootstrap这个类的bind方法。所以我们想了解ServerBootstrap做了什么就需要通过...

2020-01-16 15:22:57 160

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除