![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码阅读
文章平均质量分 96
源码阅读
了-凡
分享、感恩、努力、学习、坚持、梦想
还有请叫我小黄^O^
展开
-
Go源码分析:merge
文章目录写在前面配置特殊处理Merge方法1、前置处理2、目标数据类型为struct3、目标数据类型为mapa、初始化Mapb、判断src不是Mapc、遍历Map的key1、零值覆盖2、struct\ptr\map类型处理3、slice的处理4、map的设值处理5、完整的代码处理4、目标数据类型为slice5、目标数据类型为ptr、接口6、默认处理Map方法测试代码1、基本测试2、空值测试3、Slice测试写在前面go每日一库参考地址:https://segmentfault.com/a/119000原创 2021-02-09 15:57:45 · 688 阅读 · 0 评论 -
Go源码分析:mapstructure
mapstructure源码阅读map转结构体map切片转结构体切片map部分转换 ------------------分享使人进步原创 2021-01-27 13:56:10 · 2486 阅读 · 0 评论 -
Go源码解析:copier库
注:该文章源码分析参考copier目录源码包代码阅读1、tag标签说明2、静态参数3、整体设计4、辅助方法说明I、获取实际的Type和ValueII、Tag处理III、获取结构体Field切片IV、检查结构体复制结果V、对结构体进行设值5、Copy主方法说明I、参数说明II、不可寻址III、非ValidIV、可转换结构体的转换V、两个类型都是map的处理VI、只有一个类型是结构体的处理VII、判断数组设置标识VIII、根据.原创 2021-01-06 17:29:19 · 2296 阅读 · 0 评论 -
Go源码解析:validator.v8
When a field that is a nested struct is encountered, and contains this flag any validation on the nested struct will be run, but none of the nested struct fields will be validated. This is usefull if inside of you program you know the struct will be valid,原创 2020-12-14 15:07:29 · 1052 阅读 · 0 评论 -
Go-Linq包方法分析
注:以下所有的方法来自于https://github.com/ahmetb/go-linq,只对对应方法进行用法分析.具体的使用示例可以参考https://godoc.org/github.com/ahmetb/go-linq#目录前置:结构体与数据构造方法方法使用解析1、Aggregate:自定义聚合操作2、All:判断是否所有元素都满足条件3、Any:判断是否有任意个元素满足条件4、Where:根据条件查询对应所有元素5、计算类型的函数6、组合两个数组,...原创 2020-12-01 16:33:27 · 2681 阅读 · 0 评论 -
apache CollectionUtils源码阅读
文章目录1.getCardinalityMap(): 获取统计出现次数的map2.getFreq(): 通过key拿到value(私有方法)3.union(): 合集4.intersection(): 交集5.disjunction(): 差集6.subtract(): 返回包含a但不包含b的集合7.isSubCollection(): 判断a是不是b的子集合8.isEqualCollecti...原创 2019-11-25 11:19:44 · 535 阅读 · 0 评论 -
SynchronousQueue源码阅读
文章目录数据结构1.等待队列:waitQueue1.公平队列:FifoWaitQueue2.非公平队列:LifoWaitQueue2.数据传输方式:Transferer1.TransferStack2.TransferQueue3.转换(重点):transfer3. 获取一个元素:take数据结构1.等待队列:waitQueuewaitQueue是一个接口,在这个队列当中会声明两个等待的队...原创 2019-11-27 23:17:21 · 136 阅读 · 0 评论 -
LinkedBlockingQueue源码阅读
文章目录1.节点:Node2.构造函数3.重要参数说明1.队列容量:capacity2.队列当前数量:count3.控制 take,poll的锁:takeLock4.控制put ,offer方法的锁:putLock5.线程队列(等待移除出队列的操作):notEmpty6.线程队列(等待添加到队列的操作):notFull4.出队列:poll1.移除头结点:dequeue2.唤醒下一个节点:signa...原创 2019-11-26 21:38:56 · 127 阅读 · 0 评论 -
Java:ThreadPoolExecutor源码阅读
文章目录1.任务拒绝策略:RejectedExecutionHandler1.默认拒绝策略:AbortPolicy2.不抛错拒绝策略:DiscardPolicy3.移除队头元素:DiscardOldestPolicy4.通过主线程直接执行:CallerRunsPolicy5.设置任务拒绝策略2.线程池状态说明3.BlokingQueue:队列策略1.LinkedBlockingQueue1.节点:...原创 2019-11-30 22:46:20 · 156 阅读 · 0 评论 -
Semaphore源码阅读
文章目录1.作用说明2.代码实现1.代码书写2.输出结果3.源码阅读1.构造函数2.请求锁:acquire1.尝试获取锁:tryAcquire2.共享队列等待:doAcquireSharedInterruptibly2.释放锁:release1.尝试释放:tryReleaseShared2.解锁:doReleaseShared1.作用说明网上有一些比较好的解释,直接截图:https://w...原创 2019-11-24 20:39:02 · 131 阅读 · 0 评论 -
CyclicBarrier源码阅读
文章目录1. 作用2. 使用示例3. 源码阅读1. 参数说明1.Generation 当前CyclierBarrier迭代的管理2.lock 当前迭代管理的锁对象3.trip 等待发车的条件4.barrierCommand 发车线程5.parties 需要等待的总数6.count 剩余等待的数量2. 构造方法3. await1.doawait2.breakBarrier4. reset参考:Ja...原创 2019-11-24 15:46:09 · 238 阅读 · 0 评论 -
CountDownLatch源码阅读
文章目录1.使用场景2.代码示例3.代码阅读1.构造方法2.countDown3.await4.我的理解参考:用CountDownLatch提升请求处理速度,CountDownLatch的理解和使用1.使用场景 看了网上的一些解释,这边直接摘取一下过来:2.代码示例 &...原创 2019-11-22 21:48:31 · 139 阅读 · 0 评论 -
ReentrantReadWriteLock(读写锁)源码阅读
文章目录1.参数说明1.第一个读锁持有者:firstReader2.第一个读锁持有者计数:firstReaderHoldCount3.当前线程计数器缓存:cachedHoldCounter4.所有持锁线程计数器:readHolds2.前提3.写锁1.加锁1.关于公平锁和非公平锁的实现2.图解2.释放锁4.读锁1.加锁1.尝试获取读锁:tryAcquireShared2.循环获取读锁:fullTry...原创 2019-11-21 23:03:34 · 209 阅读 · 0 评论 -
ReentrantLock源码阅读
参考:【死磕Java并发】-----J.U.C之AQS:AQS简介参考:源码阅读.文章目录作用结构体分析Node:同步队列节点方法实现作用AQS,即队列同步器。它是构建锁或者其他同步组件的基础框架,能够成为实现大部分同步需求的基础。它是JUC并发包中的核心基础组件。AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = 0时...原创 2019-11-20 22:43:16 · 173 阅读 · 0 评论 -
Spring启动过程全览(未完待续)
本文基于Debug启动Spring工程,简单介绍整个启动过程,对Spring的整体有个认知,对于处理的一些关键点,会在后面的文章中阐述.因为代码太多,把一部分的日志代码删除,造成阅读不便,请查看源码作者水平有限,有错误的地方欢迎指出文章目录1.启动入口2.Spring内置启动业务注册ServletContextListener获取根WebApplicationContextContextLoa...原创 2019-11-16 17:36:38 · 164 阅读 · 0 评论 -
Spring事务源码阅读(注解式和xml配置式)
本文参考:《Spring源码深度解析》及源码走读.培养源码阅读思想文章目录必须懂的几个类提取器驱动(装载)的advisor:BeanFactoryTransactionAttributeSourceAdvisor@Transation注解元数据提取器:TransactionAttributeSource真实注解处理器:TransactionAnnotationParser事务执行器\拦截器:Tr...原创 2019-11-10 01:13:44 · 466 阅读 · 0 评论 -
Spring代理创建和代理实现
文章目录1. 属性设置2. 增强类转换(适配)2.1 进行适配3. 生成代理3.1 JdkDynamicAopProxy4.1 getProxy4.2 invoke5.1 拦截器链处理3.2 CglibAopProxy4.1 创建Enhancer并设置属性4.2 获取拦截器5.1 DynamicAdvisedInterceptor#intercept1. 属性设置protected Objec...原创 2019-11-05 22:05:25 · 615 阅读 · 0 评论 -
Spring Aop-2:查找所有切面注解方法(参照源码)
1原创 2019-11-05 19:57:56 · 2315 阅读 · 0 评论 -
Spring Aop动态代理实现-1(参照源码)
注:本文参考《Spring源码深度解析》,结合代码实际讲述AOP过程实现。具体步骤请参考目录分层,可以让阅读更清晰,因为Spring代码封装比较强,需分层级方能更好理解文章目录1.注册切面处理器1.1 BeanDefinitionParser的parse操作1.1.1 注册构造器1.1.1.1 注册 AnnotationAwareAspectJAutoProxyCreator1.1.1.1.1 ...原创 2019-11-05 22:13:15 · 202 阅读 · 0 评论 -
ConcurrentHashMap源码阅读(JDK1.7+JDK1.8)
文章目录一.jdk1.8实现关于UnSafe1.原子操作:tabAt2.原子操作:casTabAt3.原子操作:setTabAt4.get5.put6.clear7.remove二.JDK1.8实现1.Segment2.HashEntry3.一.jdk1.8实现关于UnSafe JDK中有一个类Unsafe,它提供了硬件级别的原子操作。JDK API文档也没有提供任何关于这个类的方法的...原创 2019-11-02 11:48:27 · 232 阅读 · 0 评论 -
HashSet源码阅读
文章目录一.参数分析1.map2.PRESENT二.方法分析1.add2.remove一.参数分析1.mapHashSet只是使用该HashMap的key来实现,因为HashMap的key不会重复 private transient HashMap<E,Object> map;2.PRESENTHashSet不关心value,所以就用这个参数来作为Hashmap的valu...原创 2019-10-31 13:22:33 · 86 阅读 · 0 评论 -
Java:HashMap源码阅读(带图)
文章目录一.整体分析1.拉链法2.JDK1.7和JDK1.8区别二.参数分析1.Map默认初始化大小2.Map最爱容量3.默认负载因子4.table5.负载因子6.entrySet三.数据结构分析1.Node2.TreeNode三.方法分析1.get可参考:JavaGuide一.整体分析1.拉链法所谓 “拉链法” 就是:将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表...原创 2019-10-31 13:03:31 · 1895 阅读 · 1 评论 -
LinkedList源码阅读
文章目录一.参数分析1.Node节点2.first和last3.size二.方法分析一.参数分析1.Node节点Node节点比较简单,他有三个参数,指向前一个、后一个位置的Node节点,该节点保存的元素 private static class Node<E> { E item; Node<E> next; Nod...原创 2019-10-29 20:50:26 · 86 阅读 · 0 评论 -
Arrays源码阅读(TODO)
文章目录一.方法实现1.binarySearch0Arrays这边主要看方法实现一.方法实现1.binarySearch0这边就直接看支持泛型的binarySearch0,因为Arrays里面有很多binarySearch的重载,支持泛型的应该是最能看出问题的二分查找的默认前提是排序好的数组直接上代码:/** * 前面的调用函数做了一些列的长度检查,这边就是直接的二分法查找...原创 2019-10-29 12:57:14 · 114 阅读 · 0 评论 -
ArrayList源码阅读
文章目录一.参数分析1.elementData2.DEFAULT_CAPACITY3.size二.方法分析1.indexOf2.get3.set4.add5.remove6.clear7.retainAll和removeAll8.forEach和fail-fast9.sort一.参数分析1.elementData//用来存储的数组的结构 transient Object[] elem...原创 2019-10-29 12:58:17 · 156 阅读 · 0 评论 -
Thread源码阅读
文章目录一.start方法和run方法区别1.先看总结1.源码分析二.join:线程串行3.interrupt:告知停止方法4.sleep和wait区别一.start方法和run方法区别1.先看总结start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()...原创 2019-10-27 19:04:39 · 172 阅读 · 0 评论 -
ThreadLocal源码阅读
文章目录一.概述二.内部类分析1.ThreadLocalMapA.内部类和参数分析1.内部类Entry2.table:Entry数组3.size4.threshold5.INITIAL_CAPACITYB.方法分析1.set2.get三.方法分析一.概述ThreadLocal能够保证线程的隔离,不同的线程取到对应的参数,那么这边是怎么做到的呢,我们来看一下源码二.内部类分析1.Thread...原创 2019-10-26 20:10:12 · 184 阅读 · 0 评论 -
StringBuffer源码阅读
文章目录一.参数说明二.方法说明1.toString一.参数说明StringBuffer也是继承自AbstractStringBuilder类,所以他也继承了这边的char [] value和count参数//声明为transient的数组变量说明不会跟着序列化出去//用来缓存toString()方法返回的最近一次的value数组中的字符。当修改StringBuffer对象时会被清除。p...原创 2019-10-24 21:13:33 · 182 阅读 · 0 评论 -
System.arrayCopy方法分析
在阅读StringBuilder源码的时候看到了这个方法,因为这边使用的也比较多,参数比较多,所以这边分析一下这个方法.因为他是native方法,所以只能根据参数的定义大概理解他的使用献上源码: /** * 略略略略略略略略略略略略略略略略略略略略 * * @param src the source array. -- 这个代表源数组(也...原创 2019-10-23 12:46:02 · 156 阅读 · 0 评论 -
StringBuilder源码阅读
文章目录一.接口分析二.参数分析三.方法分析1.构造方法2.append3.delete一.接口分析 继承自AbstractStringBuilder;抽象类 该抽象类提供了两个参数,如下:/** * The value is used for character storage. * 和String一样用...原创 2019-10-24 11:10:16 · 2496 阅读 · 0 评论 -
String源码阅读
文章目录一.接口分析二.参数分析1.value[]2.hash3.二.方法分析1.构造方法String()2.利用数组方法返回结果的方法3.equals4.compareTo5.startWith、endWith一.接口分析二.参数分析1.value[]定义如下: /** The value is used for character storage. */ pr...原创 2019-10-22 21:38:01 · 126 阅读 · 0 评论 -
FutureTask源码阅读
文章目录1.参数说明1.任务状态2.等待的节点:WaiterNode3.返回结果或者返回异常:outcome4.任务回调接口:Callable5.任务线程:runner2.构造函数1.Callable入参2.Runnable入参3.方法实现1.线程执行:run2.获取运行结果:get1.返回执行结果:report2.等待任务执行结束:awaitDown3.移除waiter:removeWaiter...原创 2019-12-01 23:16:16 · 260 阅读 · 0 评论