源码

ArrayList源码分析(jdk 1.8)

点点圈 提交于 2019-12-19 01:43:26
写在前面 ArrayList相信大家做开发的同学都不陌生,在开发过程中这应该是最常用的数据结构了吧。但是现在是“源码时代”,会用还不够,要知道他的实现原理,本文主要基于jdk1.8对ArrayList源码进行分析。 一、从主要字段开始 值得注意的是,ArrayList内部会有一个modCount字段,但是这个字段是在父类AbstractList中的,代表着修改次数,后面会讲 /** * 默认容量 */ private static final int DEFAULT_CAPACITY = 10; /** * 空元素集,构造函数传入空集合的时候使用 */ private static final Object[] EMPTY_ELEMENTDATA = {}; /** * 空元素集,默认无参构造函数中使用 */ private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; /** ArrayList真正保存元素的数组,在第一次插入元素的时候扩容 * */ transient Object[] elementData; // non-private to simplify nested class access /** * 当前数组元素个数 * * @serial */ private int size;

lamp源码搭建

久未见 提交于 2019-12-19 01:24:45
准备环境一台centos6.5 准备源码包 wget http://ftp.cuhk.edu.hk/pub/packages/apache.org//httpd/httpd-2.4.16.tar.gz wget http://bg2.php.net/distributions/php-5.6.12.tar.gz wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.26.tar.gz 源码安装Apache 1解决依赖关系 http需要apr和apr-util (1) 编译安装apr wget http://apache.01link.hk/apr/apr-1.5.2.tar.gz # tar -xvf apr-1.5.2.tar.gz # cd apr-1.5.2 # ./configure --prefix=/usr/local/apr # make && make install (2) 编译安装apr-util wget http://apache.01link.hk/apr/apr-util-1.5.4.tar.gz # tar -xvf apr-util-1.5.4.tar.gz # cd apr-util-1.5.4 # ./configure --prefix=/usr/local/apr-util -

ReenrantLock源码剖析

坚强是说给别人听的谎言 提交于 2019-12-19 00:33:31
重入锁的实现原理 内建锁隐式的支持重入性,synchronized通过获取自增,释放自减的方式实现重入. 重入锁的特性: 线程获取锁时,如果已经获取锁的线程是当前线程直接获取. 因为可以获取N次,所以只有当释放N次后才算真正释放成功. 非公平锁nonfairTryAcquire(): final boolean nonfairTryAcquire ( int acquires ) { //拿到当前线程 Thread current = Thread . currentThread ( ) ; //获取当前同步状态 int c = getState ( ) ; if ( c == 0 ) { //当前同步状态还未被获取,当前线程使用CAS尝试获取同步状态 if ( compareAndSetState ( 0 , acquires ) ) { setExclusiveOwnerThread ( current ) ; return true ; } } //此时同步状态不为0,表示已经有线程获取到了当前状态, //判断持有线程是否是当前线程 else if ( current == getExclusiveOwnerThread ( ) ) { //若是当前线程,同步状态再次+1 int nextc = c + acquires ; if ( nextc < 0 ) { throw

Intel VTune基本使用介绍

吃可爱长大的小学妹 提交于 2019-12-18 22:11:16
前言 Intel VTune Amplifier是intel公司开发的一款强大的性能瓶颈分析软件,能帮助开发者找出性能影响因素,它支持Linux* OS,Windows* OS,Android* OS等目标平台和VMWare,KVM等虚拟平台,支持独立下载安装和集成安装。 使用步骤 如果使用icc中的vtune 使用Xmanager中的Xshell进行连接(不能使用默认Xshell),必须先source icc环境,使用icc -v看到icc版本信息说明icc环境准备成功。 如果要测试GCC编译的程序或其它的程序,也先要source 对应的环境(例如分析benchmark)。 启动amplxe-gui,并新建工程和新建分析,如图1所示: 选择需要分析的文件和输入参数以及源码文件,如图2所示: 注意: 1)如果测试例子是benchmark,为了避免可能出现其它未知错误,可执行文件请选择run目录下面的;2)如果运行参数是输入集的话请使用<,例如<input.in;3)便于结构分析,请选择源码文件位置。 点击choose analysis,选择基本热点分析(Basic Hotspots)或者高级热点分析(Advanced Hotspots),Advanced Hotspots需要在intel平台才能支持,如图3所示: 最终运行结果总体摘要信息,如图4所示: 自下往上分析(Bottom

eclipse或idea搭建spring源码

天大地大妈咪最大 提交于 2019-12-18 21:49:41
idea 工具搭建 听我的,一步步走,别看文章少,句句干货。 下载源码:https://github.com/spring-projects/spring-framework/tags?after=v5.0.13.RELEASE 什么都不用整,打开idea, 2.1 选择import project 2.2 选中Import project from external model,选中Gradle 2.3 选择你的spring-framework,继续下一步。 OK。idea会帮你做后续的事情,包括下载gradle等,你等着就行了。 如果你想使用自己的gradle,那么你就在导入前,先设置idea的gradle。 eclipse 工具或命令行搭建 下载源码 直接执行里面的import-into-eclipse.bat,它会检测并帮你下载gradle。 执行完后,直接导入eclipse中即可。 同理,如果你也想用自己的gradle,那就在eclipse中配置。 来源: CSDN 作者: 一名无知的小码农 链接: https://blog.csdn.net/qq_16607641/article/details/103602570

SpringIoc源码(十五)- BeanFactory(四)- getBean(上)

天大地大妈咪最大 提交于 2019-12-18 20:37:59
目录 1、获取真实的BeanName(传入的可能是别名等) 2、从缓存中获取实例(如果已经调用过getBean) 之所以先写了ApplicationContext的refresh方法再写继续写BeanFactory的getBean核心方法,是因为觉得项目中根本不会直接使用BeanFactory肯定还是会使用ApplicationContext。并且每个Bean的生命周期会在getBean中完成,其中就会回调所有的 BeanPostProcessor 的 postProcessBeforeInitialization 和 postProcessAfterInitialization 方法。 先梳理一下getBean的整个过程(只分析单利Bean) 1、首先会从缓存中获取;否则(第一次)需要根据之前注入的BeanDefinition进行创建。 2、创建之前需要先处理ovverride和前置准备;在创建时会有依赖注入的情况(需要解决循环依赖的问题),则再分析真正的创建 3、创建过程:创建Bean实例;记录创建Bean的工厂;属性注入;初始化Bean(Bean的生命周期在这里完成,包括注册DisposableBean) 开始: @Override public Object getBean(String name) throws BeansException { return

mybatis源码阅读心得

孤人 提交于 2019-12-18 18:39:05
第一天阅读源码及创建时序图。(第一次用prosson画时序图,挺丑。。) 1. 调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法; 2. SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建XMLConfigBuilder 对象 ; 3. SqlSessionFactoryBuilder 调用 XMLConfigBuilder 对象的 parse() 方法; 4. XMLConfigBuilder 对象返回 Configuration 对象; 5. SqlSessionFactoryBuilder 根据 Configuration 对象创建一个DefaultSessionFactory 对象; 6. SqlSessionFactoryBuilder 返回 DefaultSessionFactory 对象给 Client ,供 Client使用。 public SqlSessionFactory build(InputStream inputStream) { return build(inputStream, null, null); } public SqlSessionFactory build(InputStream inputStream, String

mybatis源码阅读(一)

这一生的挚爱 提交于 2019-12-18 17:26:52
第一步开始阅读 SqlSessionFactory 的生成 一、整体梳理 // 配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //根据配置文件生成的SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); public SqlSessionFactory build(InputStream inputStream, Properties properties) { return build(inputStream, null, properties); } public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) { try { // 根据输入的文件流变成了一个相当于dom对象,不过在外面封装了一层 XMLConfigBuilder parser = new XMLConfigBuilder(inputStream,

4. vue源码分析——响应式原理

笑着哭i 提交于 2019-12-18 15:33:37
数据驱动是vue的一个核心思想 这个在2.vue源码分析——数据驱动已经了解过了 这次我们来了解vue的响应式原理 所谓响应式就是当我们数据发生变化时 视图会根据数据的变化重新渲染 使得我们在开发过程中可以通过修改数据来实现视图更新 1. 响应式对象 上 来源: CSDN 作者: function-maize 链接: https://blog.csdn.net/dhhjd/article/details/103596134