源码

【JDK】JDK源码分析-HashMap(1)

偶尔善良 提交于 2020-03-05 04:21:10
概述 HashMap 是 Java 开发中最常用的容器类之一,也是面试的常客。它其实就是前文「 数据结构与算法笔记(二) 」中「散列表」的实现,处理散列冲突用的是“链表法”,并且在 JDK 1.8 做了优化,当链表长度达到一定数量时会把链表转为红黑树。 因此,JDK 1.8 中的 HashMap 实现可以理解为「数组 + 链表 + 红黑树」。内部结构示意图: HashMap 的继承结构和类签名如下: public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {} PS: 还记得以前初读 HashMap 源码时,用了周末两天的时间,而且读完脑子里还是一头雾水。当时也没做什么笔记,这次记录一下。 代码分析 一些成员变量 // 默认初始化容量(必须是 2 的次幂) static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 // 最大容量(必须是 2 的次幂,且小于等于 2^30) static final int MAXIMUM_CAPACITY = 1 << 30; // 默认负载因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; //

sofa-bolt源码阅读(3)-通信模型

对着背影说爱祢 提交于 2020-03-05 03:44:49
Bolt提供了四种通信模型,分别是 Oneway , Sync , Future , Callback asynchronous 4.1 Oneway oneway单向通话 特点 不关心返回值 发送请求就立即返回 com.alipay.remoting.BaseRemoting#oneway protected void oneway(final Connection conn, final RemotingCommand request) { try { conn.getChannel().writeAndFlush(request).addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture f) throws Exception { if (!f.isSuccess()) { logger.error("Invoke send failed. The address is {}", RemotingUtil.parseRemoteAddress(conn.getChannel()), f.cause()); } } }); } catch (Exception e) { if (null == conn) { logger.error("Conn

记一道.git源码泄露题

拈花ヽ惹草 提交于 2020-03-05 01:47:47
记录一道今天做的.git源码泄露题 看到url有可能会有文件包含,尝试一下 应该是有什么被BAN了,这时候也没有什么更好的思路了 用御剑扫一扫后台,看看有没有备份文件或者.git文件什么的 果然扫描以后发现了.git目录 这时候就用到GitHack了 https://github.com/lijiejie/GitHack 使用后发现了 我们访问文件夹里的flag.php 可是没有东西 看来事情并没有那么简单,我们回去访问index.php <?php if (isset($_GET['page'])) { $page = $_GET['page']; } else { $page = "home"; } $file = "templates/" . $page . ".php"; //$file = "templates/" . '.system("cd ../../../; ls -lA;").' . ".php"; // I heard '..' is dangerous! assert("strpos('$file', '..') === false") or die("Detected hacking attempt!"); // TODO: Make this look nice assert("file_exists('$file')") or die("That

Xcode调试mysql源码

安稳与你 提交于 2020-03-05 00:21:12
一.编译前准备 下载地址 https://dev.mysql.com/downloads/file/?id=492161 解压安装包 #tar -xvf mysql-5.6.47.tar 创建编译目录 #cd mysql-5.6.47 #mkdir work 二.cmake编译 打开cmake(mac版本安装自行百度) 选择源码目录和build目录 单击configure,选择生成xcode项目文件,单击done开始编译 编译完成后单击Generate,自此源码编译完成 三.源码运行前准备 打开xcode,选择打开mysql项目 选择Automatically Create Schemes 单击build按钮,进行build build完成,忽略警告信息 四.创建源码运行所需的目录并拷贝相应文件 创建目录 #cd /Users/apple/data/DC/mysql-5.6.47/work #mkdir {bin,share,data} cp文件内容到相应目录(按照顺序执行) #cp sql/Debug/mysqld bin/ #cp client/Debug/mysql* bin/ #cp extra/Debug/my_print_defaults bin/ #cp -r sql/share/* share/ #cp support-files/my-default.cnf

HashMap源码深度解析

大城市里の小女人 提交于 2020-03-04 18:20:07
HashMap源码深度解析 一、重新认识HashMap 什么是HashMap? HashMap底层基于散列(Hash)算法,采用hash表实现键值对集合,继承了AbstractMap,实现了Map接口。最早出现在jdk1.2,允许null键和null值,null键的哈希值为0。需要注意的是HashMap不保证键值对顺序,同时非线程安全。 长啥样? 散列算法分为散列再探测和拉链式,HashMap采用的是拉链式,并在jdk1.8后使用红黑树优化长度大于等于8的链表。也就是说,目前HashMap底层数据结构为: 数组+链表+红黑树 。 数据结构如下图: 如上图所示,HashMap的数据结构采用数组和单链表(或者红黑树)组成,在进行增删改查时首先根据要查找元素的hash值定位到元素所在的数组下标(也称为桶),然后再根据这个桶所存储的元素的类型(单个node,单链表或红黑树)来找到该元素。 当单链表长度大于等于8时,转化为红黑树;当红黑树长度小于6时红黑树转化为链表。 HashMap特点 可以接受null键和null值,null键的hash值时0; 元素无序,可以序列化,线程不安全; 添加,查询的时间复杂度基本都是O(1); 存储元素时,根据键的hash值找到对应的桶。如果出现不同的对象计算出来的hash值相同,也就是hash冲突。为了解决这个问题

spark2.1源码分析1:Win10下IDEA源码阅读环境的搭建

∥☆過路亽.° 提交于 2020-03-04 16:57:28
环境:win10、IDEA2016.3、maven3.3.9、git、scala 2.11.8、java1.8.0_101、sbt0.13.12 下载: #git bash中执行: git clone https://github.com/apache/spark.git git tag git checkout v2.1.0-rc5 git checkout -b v2.1.0-rc5 导入IDEA,开始调试: file–open–选中根目录pom.xml,open as project 编译: 等待IDEA index文件完成 打开Maven Project–Profiles–勾选:hadoop-2.6、yarn 点击import changes,再次等待IDEA index文件完成 Maven Project–Generate Sources and Update Folders For All Projects mvn -T 6 -Pyarn -Phadoop-2.6 -DskipTests clean package bin/spark-shell 错误: Exception in thread "main" java.lang.ExceptionInInitializerError at org.apache.spark.package$.<init>(package

Spark 源码和应用开发环境的构建

﹥>﹥吖頭↗ 提交于 2020-03-04 16:51:27
引言 Spark 现在无疑是大数据领域最热门的技术之一,读者很容易搜索到介绍如何应用 Spark 技术的文章,但是作为开发人员,在了解了应用的概念之后,更习惯的是打开开发环境,开发一些应用来更深入的学习 spark 知识,在遇到问题的时候,也希望能够深入调试 Spark 源代码来解决问题。但是由于 Spark 技术本身较新,对于初学者,在构建开发调试环境的过程中,总会遇到这样那样的问题。而其使用的 Scala 语言,SBT 构建工具相对于 Java 语言,Maven 构建工具而言,也比较小众,因些在 Web 上能够参考的信息相对也比较少。本文结合作者的实践,从 Spark 的源码开始编译整个项目,同时给出了一些在编译过程中可能出现的问题,供使用参考。文中各步骤展示的编译方法主要用于方便学习 Spark 源码,若仅需要编写 Spark 应用则不需要如此繁复的流程,具体引用方法可参考最后一章。 环境要求 系统:Windows/Linux/Mac OS IDE:Eclipse/IntelliJ 其他依赖:Scala,Sbt,Maven Eclipse 下开发调试环境的配置 该小节中使用的各项工具分别为:Windows 7+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven3.3.3,测试的 Spark 版本为 1.4.0。 1.配置

mvc源码解读(2)-mvc路由注册

时间秒杀一切 提交于 2020-03-04 12:04:34
mvc虽然开源了,但是mvc核心的路由注册机制微软并没有公开,因此在开源的mvc源码中我们并不能完全的分析到mvc的路由注册原理,我们必须借助反编译工具来查看路由的注册。我们在新建一个mvc项目的时候,在全局文件Global.asax进行初始化的时候都会有一个注册路由的RegisterRoutes方法,该方法具体如下: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.IgnoreRoute("{folder}/{*pathInfo}", new { folder = "Service" }); routes.MapPageRoute("CommonReportRoute", // Route name " Reports/{reportmodel}/{reportname}",// URL "~/Reports/{reportmodel}.aspx" // File ); routes.MapRoute("Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller =

asp.net core源码地址

独自空忆成欢 提交于 2020-03-04 11:19:21
https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet 这个下面是asp.net core 框架的地址,里面有很多仓库。 https://github.com/aspnet/EntityFrameworkCore EF Core源码 https://github.com/aspnet/Configuration 配置模块源码 https://github.com/aspnet/Routing 路由模块 https://github.com/aspnet/Security 认证及授权 https://github.com/aspnet/DependencyInjection 依赖注入 https://github.com/aspnet/HttpAbstractions 有很多的一些HTTP管道的抽象接口都定义在这里 https://github.com/aspnet/Options 看名字 https://github.com/aspnet/Mvc https://github.com/aspnet/Hosting 来源: https://www.cnblogs.com/pangjianxin/p/9833726.html

asp.net core 源码部分

戏子无情 提交于 2020-03-04 11:18:43
https://github.com/dotnet/corefx 这个是.net core的 开源项目地址 https://github.com/aspnet 这个下面是asp.net core 框架的地址,里面有很多仓库。 https://github.com/aspnet/EntityFrameworkCore EF Core源码 https://github.com/aspnet/Configuration 配置模块源码 https://github.com/aspnet/Routing 路由模块 https://github.com/aspnet/Security 认证及授权 https://github.com/aspnet/DependencyInjection 依赖注入 https://github.com/aspnet/HttpAbstractions 这个一定要看,有很多的一些HTTP管道的抽象接口都定义在这里 https://github.com/aspnet/Options 看名字 https://github.com/aspnet/Mvc https://github.com/aspnet/Hosting 来源: https://www.cnblogs.com/gaoliangchao/p/9943764.html