源码

HashMap源码分析

帅比萌擦擦* 提交于 2020-01-07 00:19:29
HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树),以减少搜索时间,具体可以参考 treeifyBin 方法。 底层数据结构分析 JDK1.8之前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。 所谓扰动函数指的就是 HashMap 的 hash 方法。使用 hash 方法也就是扰动函数是为了防止一些实现比较差的 hashCode() 方法 换句话说使用扰动函数之后可以减少碰撞。 JDK 1.8

Java高阶:ArrayList源码分析

只谈情不闲聊 提交于 2020-01-06 22:06:15
* ArrayList源码分析 * jdk7和jdk8版本有一些不同 首先,不管7版本还是8版本,ArrayList底层存储没有改变 private transient Object[] elementData; 在使用的时候,最简单的使用方式为: ArrayList list = new ArrayList(); 1.所以首先看ArrayList源码中的空参构造器 public ArrayList() { this(10); } public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; } 从源码可以看出,空参的时候,初始化的长度就是为10。 即new ArrayList();会创建一个长度为10的Object类型 数组 2.在ArrayList中的add方法: 第一次添加的时候,size大小为0 public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments

HashMap源码学习笔记(一)

天涯浪子 提交于 2020-01-06 21:40:00
HashMap源码学习笔记(一) HashMap中的部分属性 /** * The default initial capacity - MUST be a power of two. * 默认的初始化容量 */ static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 /** * The maximum capacity, used if a higher value is implicitly specified * by either of the constructors with arguments. * MUST be a power of two <= 1<<30. * 最大容量 */ static final int MAXIMUM_CAPACITY = 1 << 30; /** * The load factor used when none specified in constructor. * 默认的加载因子 */ static final float DEFAULT_LOAD_FACTOR = 0.75f; /** * The bin count threshold for using a tree rather than list for a * bin. Bins are converted

Rocketmq源码下载与调试

我们两清 提交于 2020-01-06 16:15:00
Rocketmq源码编译运行 下载 从 github 下载源码,比较慢,也可以从 gitee 下载 源码目录结构 名称 作用 broker broker模块:c和p端消息存储逻辑 client 客户端api:produce、consumer端 接受与发送api common 公共组件:常量、基类、数据结构 tools 运维tools:命令行工具模块 store 存储模块:消息、索引、commitlog存储 namesrv 服务管理模块:服务注册topic等信息存储 remoting 远程通讯模块:netty+fastjson logappender 日志适配模块 example Demo列子 filtersrv 消息过滤器模块 srvutil 辅助模块 filter 过滤模块:消息过滤模块 distribution 部署、运维相关zip包中的代码 openmessaging 兼容openmessaging分布式消息模块 编译 解压导入idea ,修改配置文件pom.xml,jdk编译版本为1.8 # 编译 mvn -Prelease-all -DskipTests clean install -U 启动namesrv 进入org.apache.rocketmq.namesrv.NamesrvStartup,执行main方法 会抛出错误, 原因是没有设置配置ROCKETMQ

2020年新的展望

心不动则不痛 提交于 2020-01-06 15:58:17
在公司实习了几个月,说实话学到的东西太少。技术上没有太大的提高,只是不断的搬砖。自己前期努力看红宝书,vue源码等等。后期毫无斗志,直接废了。 关于新的一年的展望: 希望新的一年脱离这家公司,毕竟选择比努力更重要。 新的一年看完红宝书,让自己的基础更加牢固。 好好实践自己node.js知识 学习vue框架源码。 来源: CSDN 作者: BeMount 链接: https://blog.csdn.net/weixin_40867255/article/details/103841254

LAMP源码安装

可紊 提交于 2020-01-06 15:36:09
安装前的介绍 Linux+Apache+MySQL/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。从网站的流量上来说,70%以上的访问流量是LAMP来提供的,LAMP是最强大的网站解决方案. 安装所需软件包 php5.6 Apache2.4 mysql5.6 apr1.5 apr-util1.5 pcre8.3 安装教程 安装教程 图文详解 大专栏 LAMP源码安装 /2.png" alt="教程"/> 来源: https://www.cnblogs.com/lijianming180/p/12147631.html

xposed云闪付免签支付系统源码

微笑、不失礼 提交于 2020-01-06 12:32:31
云闪付免签支付系统是通过xposed框架Hook云闪付,自动生成指定金额的支付二维码,支付完成后App监控云闪付支付成功信息,实现自动回调。 支持H5,支持自动回调,支持多客户端多卡轮询。 xposed云闪付免签支付系统核心源码——生码二维码代码: public static void GenQrCode(final String paramString1, final String paramString2, final String bankName, final String bankNo) { new Thread(new Runnable() { public void run() { try { Object localObject1 = paramString2; Object localObject2 = new BigDecimal(paramString1); localObject2 = ((BigDecimal) localObject2).setScale(2, RoundingMode.HALF_UP).toPlainString().replace(".", ""); Object localObject3 = new StringBuilder(); ((StringBuilder) localObject3).append("https://pay

Linux软件安装管理---源码安装

十年热恋 提交于 2020-01-06 01:32:13
在Linux平台下,软件包的类型可以划分为两类:源码包、二进制包。 源码包: 即程序软件的源代码(一般也叫Tarball,即将软件的源码以tar打包后再压缩的资源包)。 二进制包: 如 Red Hat发行版的.rpm包,Debian发行版的.deb包。 源码安装的主要步骤 : 1)获取源代码文件:一般为压缩包,并解压。 2)执行config: 一般在源代码目录中有install 或 readme等说明。 运行./config --prefix=PREFIX或者 ./config, config是一个可执行文件,其作用是检测操作系统,并生成makefile文件。其检测的内容有:系统中是否有合适的编译器来编译本软件,是否已经存在本软件所需要的函数库或其他相关软件,操作系统版本是否符合要求等。其中,PREFIX为安装位置。 曾经自己编译qt源码时,运行config时,其先生成了qmake,然后qmke根据.pro文件生成makefile文件。 3)执行make命令。 make根据makefile中指定的规则来将源代码编译成可执行文件。但是,这些可执行文件被放在当前目录下,不会安装到预定的安装目录中。 4)执行make install make会根据makefile中关于install的选项,将上一步编译出来的东西(?)搞到指定的安装目录中。 -----------------------

Ubuntu 16.04上安装SkyEye及测试

蹲街弑〆低调 提交于 2020-01-06 00:51:52
说明一下,在Ubuntu 16.04上安装SkyEye方法不是原创,是来自互联网,仅供学习参考。 一、检查支持软件包 gcc, make, vim(optional), ssh, subversion binutils-dev (bfd) atk-dev (libatk1.0-dev) gtk+-2.0-dev (libgtk2.0-dev) pkg-config pango-dev (libpango1.0-dev) freetype2-dev (libfreetype6-dev) glib-dev (libglib2.0-dev) x11-dev (libx11-dev) 建议您在终端里输入sudo apt-get install 软件包 来逐个检查,例如sudo apt-get install libx11-dev用来检x11-dev是否安装。我用Ubuntu16.04系统直接运行sudo apt-get install skyeye可以安装成功,安装的过程中如果系统提示缺少包,再按提示安装即可。 二、安装skyeye 1、建议在终端里输入 sudo apt-get install skyeye 来安装,这种方式安装默认安装的版本为1.2.5,。 2、也可以下载源码包进行编译安装,源码安装方法如下: --------------------------------------

MySQL 5.6.37源码编译安装

百般思念 提交于 2020-01-06 00:30:29
MySQL 5.6.37 编译安装 什么是数据库? 简单的说,数据库(database)就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据提供的多种方法来管理数据库里的数据。 数据库的种类 按照早起的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库,而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库。 什么是关系型数据库? 关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。例如老男孩教育某一期的学生关系就是一个二元关系。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关系的表格分类、合并、连接或选取等运算来实现数据的管理。 关系型数据库诞生距今已有40多年了,从理论产生发展到显示产品,例如:大家最常见的mysql和oracle数据库,oracle在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大产业市场,而mysql也是不容忽视的数据库,以至于被oracle重金收购。 - 二维表格 - 市场占有量较大的为MySQL、oracle数据库,互联网运维最常用的就是MySQL。 - 通过SQL结构化查询语言来存取、管理数据。 - 在保持数据一致性方面很强。ACID理论。 -