源码

ArrayList源码学习

偶尔善良 提交于 2020-01-10 12:35:05
本文依照构类定义、造函数、成员变量、方法的顺序进行分析。 一、ArrayList数据结构   通过翻阅源码和《算法》书籍,我们知道ArrayList的底层数据结构就是数组。在源码中通过object elementData[ ]数组来表示了底层结构。我们对ArrayList类的实例的所有操作底层其实都是基于数组的。 二、ArrayList源码分析    2.1 类定义 1 public class ArrayList<E> extends AbstractList<E> 2 implements List<E>, RandomAccess, Cloneable, java.io.Serializable View Code   解释:ArrayList继承AbstractList抽象父类,实现了List接口(规定了List的操作规范)、RandomAccess(可随机访问)、Cloneable(可拷贝,实现该接口,就可以使用Object.clone()方法了)、Serializable(可序列化)。 1)为什么中间要多一个AbastractList抽象父类,是因为这个类中包含了部分通用实现,这样写具体类,比如ArrayList时,只需要专注于本类的具体实现了。 2)在查看了ArrayList的父类AbstractList也实现了List<E>接口

Java集合之LinkedList源码解析

我的未来我决定 提交于 2020-01-10 12:32:56
下面我们来看看LinkedList的底层实现, 它继承抽象方法AbstractSequentialList<E>,实现List<E>, Deque<E>, Cloneable, java.io.Serializable接口 它的成员属性有, 1 transient int size = 0; 2 transient Node<E> first; 3 transient Node<E> last; size表示该集合的元素个数,初始值为0,first指向第一个Node,last指向最后一个Node, Node<E>是一个静态内部类, 1 private static class Node<E> { 2 E item; 3 Node<E> next; 4 Node<E> prev; 5 6 Node(Node<E> prev, E element, Node<E> next) { 7 this.item = element; 8 this.next = next; 9 this.prev = prev; 10 } 11 } item指当前元素,next是下一个元素的引用,prev是前一个元素的引用, LinkedList是一个双向链表, 百科中对于链表的定义是 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。 所以

Spring学习外传(一) @Target、@Retention、@Documented简介

*爱你&永不变心* 提交于 2020-01-10 09:04:16
怎么说呢,这三个注解是我在看SpringBoot源码的时候看到的,因为没有看过spring源码,也不清楚有没有,姑且先暂时算在spring学习里,等把spring吃透了再回来看 先来看一个一个常用注解@Controller import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Controller { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @return the suggested

String.valueOf()和.toString()的区别

只愿长相守 提交于 2020-01-10 08:40:36
直接上源码: public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); } 这是String.valueOf()的源码。先进行判断是否为null,如果为null 直接赋值为null,如果不为null,就调用toString()方法。 这样String.valueOf()和toString()的区别就是:String.valueOf进行String强制转换时不用考虑它是否为null,而.toString不能为空对象进行字符串转换。 来源: CSDN 作者: Manu Lab 链接: https://blog.csdn.net/Horse7/article/details/103868334

如何阅读别人的源码?vue源码阅读,读《vue.js技术揭秘》有感

旧巷老猫 提交于 2020-01-10 08:13:53
如何阅读别人的源码?vue源码阅读,读《vue.js技术揭秘》有感 Vue.js 技术揭秘 经过两章节的源码阅读发现:“反过来想就对了” vue框架主要做的是,用一种特定的dom书写方法,把标签转成js对象(虚拟DOM),再把虚拟DOM插入到HTML中,渲染成页面。 vue源码主要是围绕上面的“主题”来实现。(自顶向下) 先是架构,如何安排分解项目,把不同功能的功能低耦合拆分到不同类别的目录 项目初始化配置,逻辑实现。(牢记结果,一切操作是为了把 VNode 渲染到HTML) 倒数第二步,得到“最终”的结果的前一步准备,VNode 数据, 倒数第三步,想要获得 VNode 数据的前一步,是什么,做了什么 …… 越看到后面越明白,不明白的地方可先跳过,抓主干,走完流程,回头补细节 小结 总的来说是,从“前”往后看结果,从“后”往前看过程,我把这个过程称为“双向相对阅读” 来源: CSDN 作者: 追求者2016 链接: https://blog.csdn.net/example440982/article/details/103889074

java8 AbstractStringBuilder源码

回眸只為那壹抹淺笑 提交于 2020-01-10 08:12:55
更新中... 欢迎大佬指出错误 abstract class AbstractStringBuilder implements Appendable, CharSequence { char[] value;//可变字符数组 int count; //value中非null字符数量 AbstractStringBuilder() { } AbstractStringBuilder(int capacity) {//指定初始容量的构造方法 value = new char[capacity]; } @Override public int length() {//返回长度 return count; } public int capacity() {//返回容量 return value.length; } public void ensureCapacity(int minimumCapacity) { if (minimumCapacity > 0) ensureCapacityInternal(minimumCapacity); } private void ensureCapacityInternal(int minimumCapacity) {//setLength的参数newLength if (minimumCapacity - value.length > 0) {/

bluekitchen的btstack源码移植到vs2017(序)

限于喜欢 提交于 2020-01-10 05:37:54
前言 之前有个朋友想要学习蓝牙的核心协议,然后我给了他一些资料,包括bluekitchen开源的协议栈源码。当时他问我这个开源协议栈怎么玩,可以在哪个开发环境上跑起来,我说可以移植到嵌入时平台,也可以移植到windows的环境上。不过当时我还没有如此做过,后面觉得这确实是个有趣的项目,所以我尝试将stack移植带vs2017上。 目前已经实现了部分的功能,下面我该demo的使用做简要的说明,同时也会分享一些移植过程中的心得: 项目使用说明(一) 如果有什么疑问或者我有错误的地方,欢迎在评论区给我留言! 下面是我存放源码github的链接,仅供学习使用,请不要用于商业用途! github链接: https://github.com/layne11/Bluekitchen_porting_to_vs2017 来源: CSDN 作者: 清晨上马 链接: https://blog.csdn.net/ylangeia/article/details/103848938

Nginx源码研究八:nginx监听socket实现流程

风流意气都作罢 提交于 2020-01-10 02:57:27
前面描述了nginx系统分析nginx的配置文件,初始化模块相关参数的过程,这里利用nginx监听socket的实现过程,做一次完整的回顾 1、首先,nginx启动的main函数中,会先初始化cycle数据结构 cycle = ngx_init_cycle(&init_cycle); 2、在初始化cycle中,nginx做了关于生成配置参数项,分析配置文件,初始化配置参数项等工作。当然在完成这些工作后,nginx还在初始化cycle函数中,完成了监听socket的流程 //生成NGX_CORE_MODULE模块的核心配置项 for (i = 0; ngx_modules[i]; i++) { if (ngx_modules[i]->type != NGX_CORE_MODULE) { continue; } module = ngx_modules[i]->ctx; if (module->create_conf) { rv = module->create_conf(cycle); if (rv == NULL) { ngx_destroy_pool(pool); return NULL; } cycle->conf_ctx[ngx_modules[i]->index] = rv; } } senv = environ; ngx_memzero(&conf, sizeof(ngx

一键源码安装apache

故事扮演 提交于 2020-01-10 02:55:36
先拖包httpd-2.2.9.tar.gz ![在这里插入图片描述](https://img-blog.csdnimg.cn/](https://img-blog.csdnimg.cn/20200109190450270.png) 写入脚本 查看80端口是否启动 来源: CSDN 作者: 生活可曾爱过谁 链接: https://blog.csdn.net/weilinpppp/article/details/103914244

retrofit源码分析

拥有回忆 提交于 2020-01-10 02:20:57
最近时间比较空闲,梳理了下retrofit的源码,和大家分享下,估计分析的不是很完善,不喜勿喷 从整体架构上了说,retrofit是对okhttp的进一步封装,底层使用的是okhttp框架,通过动态代理的设计模式和注解,并且和rxjava进行无缝对接,使使用起来更加方便,准确的说retrofit只负责网络请求接口的封装。 1.1 Retrofit的创建 public Retrofit build() { if (baseUrl == null) { throw new IllegalStateException("Base URL required."); } okhttp3.Call.Factory callFactory = this.callFactory; if (callFactory == null) { callFactory = new OkHttpClient(); } Executor callbackExecutor = this.callbackExecutor; if (callbackExecutor == null) { callbackExecutor = platform.defaultCallbackExecutor(); } // Make a defensive copy of the adapters and add the default