源码

史上最详细的HashTable源码解析,最容易懂

柔情痞子 提交于 2019-12-21 21:14:13
HashTable源码分析 更多资源和教程请关注公众号: 非科班的科班 。 如果觉得我写的还可以请给个赞,谢谢大家,你的鼓励是我创作的动力 ###1.前言 Hashtable 一个元老级的集合类,早在 JDK 1.0 就诞生了 ###1.1.摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、HashTable、Properties 等等。 ###1.2.简介 Hashtable 一个元老级的集合类,早在 JDK 1.0 就诞生了,而 HashMap 诞生于 JDK 1.2,在实现上,HashMap 吸收了很多 Hashtable 的思想,虽然二者的底层数据结构都是 数组 + 链表 结构,具有查询、插入、删除快的特点,但是二者又有很多的不同。 打开 Hashtable 的源码可以看到,Hashtable 继承自 Dictionary,而 HashMap 继承自 AbstractMap。 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable { ..... } HashMap 继承自 AbstractMap

吃透Shiro源码第五天

孤街浪徒 提交于 2019-12-21 20:18:38
文章目录 技术手法 (1)AuthenticationRealm设计思路 重点研究源码 技术手法 (1)AuthenticationRealm设计思路 AuthenticationRealm这个类我看了好久,实际上最最核心的方法就是提供:如何通过用户传递的AuthenticationToken来获取AuthentioncationInfo的方法。 @Override public final AuthenticationInfo getAuthenticationInfo ( AuthenticationToken token ) throws AuthenticationException { AuthenticationInfo info = getCachedAuthenticationInfo ( token ) ; if ( info == null ) { //核心:让子类通过token获取到info,这也是要强制重写的方法 info = doGetAuthenticationInfo ( token ) ; //尝试缓存 if ( token != null && info != null ) { LOGGER . debug ( "无缓存,尝试做token与info的缓存" ) ; //尝试缓存一下info

zookeeper(15)源码分析-服务器(2)

戏子无情 提交于 2019-12-21 16:48:00
LearnerZooKeeperServer是所有Follower和Observer的父类,在LearnerZooKeeperServer里有2个重要的属性: //提交请求处理器 protected CommitProcessor commitProcessor; //同步处理器 protected SyncRequestProcessor syncProcessor; FollowerZooKeeperServer和ObserverZooKeeperServer都继承了LearnerZooKeeperServer服务器。 1、FollowerZooKeeperServer 1.1、类属性 //待同步的请求 ConcurrentLinkedQueue<Request> pendingSyncs; //待处理的事务请求 LinkedBlockingQueue<Request> pendingTxns = new LinkedBlockingQueue<Request>(); 1.2、核心函数 1.2.1、setupRequestProcessors 构建请求处理链,FollowerZooKeeperServer的请求处理链是: FollowerRequestProcessor -> CommitProcessor ->FinalRequestProcessor @Override

tronado 源码框架分析

心已入冬 提交于 2019-12-21 10:52:26
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一. Tornado是什么? Facebook发布了开源网络服务器框架Tornado,该平台基于Facebook刚刚收购的社交聚合网站FriendFeed的实时信息服务开发而来.Tornado由Python编写,是一款轻量级的Web服务器,同时又是一个开发框架。采用非阻塞I/O模型(epoll),主要是为了应对高并发 访问量而被开发出来,尤其适用于 comet 应用。 二. 为什么要阅读Tornado的源代码 Tornado由前google员工开发, 代码非常精练, 实现也很轻巧, 加上清晰的注释和丰富的demo, 我们可以很容易的阅读分析tornado. 通过阅读Tornado的源码, 你将学到: * 理解Tornado的内部实现, 使用tornado进行web开发将更加得心应手 * 如何实现一个高性能,非阻塞的http服务器 * 如何实现一个web框架 * 各种网络编程的知识, 比如epoll * python编程的绝佳实践 三. 从http服务器开始 Tornado不仅是一个web开发框架, 还自己实现了一个http服务器. 谈到http服务器, 我们自然想到 C10K. 其中介绍了很多种服务器的编程模型, tornado的http服务器采用的是: 多进程 + 非阻塞 + epoll + pre-fork

tornado 源码分析 waker

回眸只為那壹抹淺笑 提交于 2019-12-21 10:40:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> class Waker(interface.Waker): """Create an OS independent asynchronous pipe. For use on platforms that don't have os.pipe() (or where pipes cannot be passed to select()), but do have sockets. This includes Windows and Jython. """ def __init__(self): #让os自动分配一个socket # Based on Zope select_trigger.py: self.writer = socket.socket() # Disable buffering -- pulling the trigger sends 1 byte, # and we want that sent immediately, to wake up ASAP. self.writer.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) count = 0 while 1: count += 1 a = socket.socket() a

PriorityQueue源码分析

梦想与她 提交于 2019-12-21 07:31:19
PriorityQueue其实是一个优先队列, 和先进先出(FIFO)的队列的区别在于,优先队列每次出队的元素都是优先级最高的元素 。那么怎么确定哪一个元素的优先级最高呢,jdk中使用堆这么一种数据结构,通过堆使得每次出队的元素总是队列里面最小的,而元素的大小比较方法可以由用户Comparator指定,这里就相当于指定优先级。 1. 二叉堆介绍 那么堆又是什么一种数据结构呢、它有什么样的特点呢?(以下见于百度百科) (1)堆中某个节点的值总是不大于或不小于其父节点的值; (2)堆总是一棵完全树。 常见的堆有二叉堆、斐波那契堆等。而PriorityQueue使用的便是二叉堆,这里我们主要来分析和学习二叉堆。 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆有两种:最大堆和最小堆。 最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。 说到二叉树我们就比较熟悉了,因为我们前面分析和学习过了二叉查找树和红黑树(TreeMap)。惯例,我们以最小堆为例,用图解来描述下什么是二叉堆。   上图就是一颗完全二叉树(二叉堆),我们可以看出什么特点吗,那就是在第n层深度被填满之前,不会开始填第n+1层深度,而且元素插入是从左往右填满。   基于这个特点,二叉堆又可以用数组来表示而不是用链表,我们来看一下:     

EventRay UI Kit – Web & Mobile 的素材

白昼怎懂夜的黑 提交于 2019-12-21 04:11:39
  EventRay UI 工具包是一个免费的,可以现成使用的界面套件。包括多个为 Web 和移动应用设计的布局和 UI 元素。所有你需要做的就是下载这个 UI 工具包,点击源码下载打开的页面即可下载。 在线演示 源码下载   您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果【附源码】 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果【源码下载】 12款经典的白富美型 jQuery 图片轮播插件 本文链接: EventRay UI Kit – 用于 Web & Mobile 的素材 编译来源: 梦想天空 ◆ 关注前端开发技术 ◆ 分享网页设计资源 来源: https://www.cnblogs.com/lhb25/p/ui-kit-layouts-ui-elements-web-mobile.html

【转载】spark累加器(详细)

社会主义新天地 提交于 2019-12-21 04:00:46
一、生产常用Spark累加器剖析之一 由于最近在项目中需要用到Spark的累加器,同时需要自己去自定义实现Spark的累加器,从而满足生产上的需求。对此,对Spark的累加器实现机制进行了追踪学习。 本系列文章,将从以下几个方面入手,对Spark累加器进行剖析: Spark累加器的基本概念 累加器的重点类构成 累加器的源码解析 累加器的执行过程 累加器使用中的坑 自定义累加器的实现 Spark累加器基本概念 Spark提供的Accumulator,主要用于多个节点对一个变量进行共享性的操作。Accumulator只提供了累加的功能,只能累加,不能减少累加器只能在Driver端构建,并只能从Driver端读取结果,在Task端只能进行累加。 至于这里为什么只能在Task累加呢?下面的内容将会进行详细的介绍,先简单介绍下: 在Task节点,准确的就是说在executor上; 每个Task都会有一个累加器的变量,被序列化传输到executor端运行之后再返回过来都是独立运行的; 如果在Task端去获取值的话,只能获取到当前Task的,Task与Task之间不会有影响 累加器不会改变Spark lazy计算的特点,只会在Job触发的时候进行相关的累加操作 累加器的重点类介绍 class Accumulator extends Accumulable 源码

Windows Live Writer 代码插件改造

半城伤御伤魂 提交于 2019-12-21 03:04:51
源码和插件都在后面,如果不想看我神神叨叨的可以直接到文章后面下载 一 .找插件 在使用Windows Live Writer 经常要用到插入代码的功能,根据博客园中教程,分别使用了: WindowsLiveWriter.CNBlogs.CodeHighlighter 和 SourceCodePlugin_version_1.1.zip 都不尽人意 只能再找一个,于是我便发现了它:Windows Live Writer Plugin - Source Code Formatter http://www.amergerzic.com/post/WLWSourceCodePlugin.aspx 【先别急着点,后面更精彩】, 这个插件支持:交错行样式和选中样式,觉得挺不错,虽然是英文但是因为插件使用起来比较简单可以忽略。 二.用插件 直接下载安装就好了 但是当我插入一段代码之后却发现最终插入到文章中的代码明显行距比较大。 然后百度然后找到也有人提出了对这个插件的牢骚,然而始终没有解决方法,于是就去了官网,发现后面竟然有源码下载(赞一个) 三.改插件 程序员不怕累,既然有了源码,改呗,先改样式,后改HTML字符串,都不能达到效果,然而在不断的努力下还是找到了,是回车换行的问题”\r\n” 这里通过字符“\n”分割字符串,但是却保留了“\r” 而每一行代码都内嵌在<pre>标签中,所以”\r

编译Android系统源码

好久不见. 提交于 2019-12-21 01:26:01
步骤 : 1:下载源码 2:搭建编译环境 3:编译( 一定要等源码下载完整再编译) 硬件软件要求 官方文档 : https://source.android.google.cn/setup/build/requirements 硬件要求 : 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。 如果要检出代码,至少需要 250GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译,则需要更多空间。 如果在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。 我装的是虚拟机Ubuntu16.0.4,根据官方的要求准备了520G,下载的是8.1的源码,编译完以后发现还有250G。多分配点空间更好以免空间不足扩容麻烦。 一、 下载源码 Android 源码是非常庞大的,而且每个模块都是用git来进行管理 ,整个Android源码是由很多个git项目构成,Google对Android代码的更新也是更新到相应模块的git项目上。 那对于需要编译Android的开发者来说,要分别clone 每个git项目而且还要放到固定的位置确实是件惨绝人寰的事,所以Google就开发了一个基于Python编写的帮助开发者管理多个项目的工具