源码

Java中hashMap的源码初探

大城市里の小女人 提交于 2020-03-01 23:58:41
最近一段时间准备沉下心来,认真学习底层的东西。今天从HashMap开始吧。看源码,我个人觉得应该带着问题去看,去学习大师们怎么做的。 {:toc} HashMap 底层是用什么数据结构实现的? HashMap 怎么扩容? HashMap 怎么解决Key冲突? HashMap 是线程安全的吗? HashMap 是怎么把数据均匀的分布到容器的? HashMap 底层是用什么数据结构实现的? 我们先来看看,HashMap实现类定义的变量: static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 static final int MAXIMUM_CAPACITY = 1 << 30; static final float DEFAULT_LOAD_FACTOR = 0.75f; static final Entry<?,?>[] EMPTY_TABLE = {}; transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE; transient int size; int threshold; final float loadFactor; transient int modCount; static final int ALTERNATIVE_HASHING

QT绘图四:绘制模拟声波

偶尔善良 提交于 2020-03-01 23:04:54
今天的实例是绘制声波模拟线,当然模拟声波的方法各异,本人的实现思路只是其中一种。 实例的效果如下图所示: 具体实现方式请参考实例源码点击链接 声音波形模拟源码 来源: 51CTO 作者: 夹谷 链接: https://blog.51cto.com/7265851/2433509

(一)Spring源码——IoC骗

a 夏天 提交于 2020-03-01 22:00:27
@[toc] 1. Spring注解的源码分析 1.1 我如何开始分析源码的? 这一部分可以略过直接看第1.2节 想必程序员都会经过这样一个阶段,当 一门编程语言的语法 已经能够熟练运用。并且它的 流行框架 也能够用到 五分熟 ,程序员就会找进阶的入口,这时候就想到了去了解源码。 作为Java程序员,首先想到的一定是了解Spring源码,但是Spring这个东西庞然大物,从哪里开始都是个问题!这时候我就想起了唐曾那句话:“贫僧从东土大唐而来,往西天取经而去”。真的很羡慕他,知道自己从哪来,还知道自己该往哪去。这样的人已经不多了。那么对Spring源码的剖析该从哪来呢? 我经历过这几个阶段: 网上看视频(像B站里有很多好的关于spring源码的视频,但是视频有个缺点就是如果忘记了,想复习一遍,没那么容易。) 看网上的博客,这就不用说了。网上的博客五花八门,鱼龙混杂,想要找到一篇适合自己的很不容易。(放弃了) 啃书本,最开始我看的是《Spring源码深度剖析》,但这本书打着Spring5的旗号,讲解xml的内容,作为跟进潮流的程序员表示,我想看关于注解方式的源码解析。然后我又看了《Spring揭秘》《Spirng 技术内幕》等等。没有一本是符合自己的。 黄天不负有心人,最终我还是找到了一本合适的书籍《Spring5 核心原理——手写Spirng 30 个类实战》不得不说

30s源码刨析系列之函数篇

别来无恙 提交于 2020-03-01 21:42:10
前言 由浅入深、逐个击破 30SecondsOfCode 中函数系列所有源码片段,带你领略源码之美。 本系列是对名库 30SecondsOfCode 的深入刨析。 本篇是其中的函数篇,可以在极短的时间内培养你的函数式思维。 内容根据源码的难易等级进行排版,目录如下: 新手级 普通级 专家级 正文 新手级 checkProp const checkProp = (predicate, prop) => obj => !!predicate(obj[prop]); const lengthIs4 = checkProp(l => l === 4, 'length'); lengthIs4([]); // false lengthIs4([1, 2, 3, 4]); // true lengthIs4(new Set([1, 2, 3, 4])); // false (Set uses Size, not length) const session = { user: {} }; const validUserSession = checkProp(u => u.active && !u.disabled, 'user'); validUserSession(session); // false session.user.active = true; validUserSession

Java IO 之 OutputStream源码

落爺英雄遲暮 提交于 2020-03-01 21:22:24
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博: BYSocket 豆 瓣: BYSocket FaceBook: BYSocket Twitter : BYSocket 一、前言 上一篇《 Java IO 之 InputStream源码 》,说了InputStream。JDK1.0中就有了这传统的IO字节流,也就是 InputStream 和 OutputStream。梳理下两者的核心: InputStream中有几个 read() 方法和 OutputStream中有几个 write() 方法。它们是一一对应的,而核心的是read()和write()方法。它们都没实现,所有本质调用是各自实现类实现的该两个方法。 read() 和 write() ,对应着系统的Input和Output,即系统的输出输入。 二、OutputStream 也是一个抽象类,即表示所有字节输入流实现类的基类。它的作用就是抽象地表示所有要输出到的目标,例如常见的FileOutStream、FilterOutputStream等。它实现了java.io.Closeable和java.io.Flushable两个接口。其中空实现了flush方法,即拥有刷新缓存区字节数组作用。 那些输出目标呢?比如: 1) 字节数组(不代表String类,但可以转换) 2) 文件 3) 管道(多线程环境中的数据源)

SVN 下载(struts2 ) 开源源码

江枫思渺然 提交于 2020-03-01 21:15:26
apache的官方网站通常都会提供svn的下载地址,具体的下方法如下: ①apache的官方网站上查看你想要下载的软件的源码地址,例如,在 http://struts.apache.org/dev/builds.html 上可以查看struts的 源码下载地址 http://svn.apache.org/repos/asf/struts/struts1/trunk http://svn.apache.org/repos/asf/struts/struts2/trunk http://svn.apache.org/repos/asf/struts/sandbox/trunk http://svn.apache.org/repos/asf/struts/site ②在你要存放源码的地方,新建一个文件夹 ③右键单击这个文件夹,选择Repo_browser,如下图示 ④在弹出的对话框中,输入你想要下载的源码的地址,如下图所示: ⑤一般的开源项目的源码管理都会如下图所示:其中trunk是表示项目的主干,branches表示项目分支,tags表示的是版本号 ⑥打开tag,右键点击你想要下载的版本,选择checkout,如下图所示: ⑦弹出如下图的对话框: ⑧点击OK,就开始下载struts源码啦! 来源: oschina 链接: https://my.oschina.net/u/203513

SVN 签出源码 Struts Spring Hibernate

試著忘記壹切 提交于 2020-03-01 20:48:01
很多优秀的开源项目已经提供SVN源码签出了,无论是解疑还是学习,都是一大幸福之事啊! Apache的SVN库,强烈推荐! http://svn.apache.org/repos/asf/ 里面不但有Struts的源码,还有著名的Apache jakarta project 相当好的Web UI框架Tiles 现在很流行的项目管理工具Maven Ant、Commons、Tomcat、OpenJPA、Subversion、webservices...... Spring Spring源码是由springframework.org维护管理的,它有三个SVN地址 https://src.springframework.org/svn/spring-framework https://src.springframework.org/svn/spring-maintenance https://src.springframework.org/svn/spring-security spring-framework 是spring 3.0以上版本 spring-maintenance 是spring 3.0以下版本 spring-security是原Acegi演变出的spring子项目(权限安全管理框架) Spring每个目录下面都有tags、trunk、branches三种区分

JDK源码阅读-------自学笔记(七)(二维数组的浅析)

微笑、不失礼 提交于 2020-03-01 20:09:27
实际开发中一般最多使用到二维数组,再高很少使用 二维数组很少用,实际开发中会使用容器代替使用 1、创建二维数组 1 // 二维数组初始化 2 int[][] secondDimensional = new int[3][]; View Code 2、二维数组赋值 1 // 二维数组赋值 2 secondDimensional[0] = new int[]{1, 2, 3}; 3 4 secondDimensional[1] = new int[]{1, 2, 3, 4}; View Code 3、二维数组的表格式操作 思考:建立一个一维数组,将一维数组存入到二维数组中,生成表格 注意: 二维数组的[] 内是自动生成的没有数字填 1 // 首行数据 2 Object[] tablesName = {"ID", "姓名", "年龄", "职能", "入职日期"}; 3 4 // 用户数据 5 Object[] userData = {1001, "张三", 22, "教师", "2010-11-21"}; 6 7 // 二维数组初始化 8 Object[][] secondDimensional = new Object[3][]; 9 10 // 存入数据 11 secondDimensional[0] = tablesName; 12 13 secondDimensional[1]

大厂面试题手写Promise源码

筅森魡賤 提交于 2020-03-01 19:45:32
手写Promise源码几乎是每个大厂面试要求必会的一个考点,每次听到源码,总有一种让人上头的感觉,因为自己从来没有实现过,总感觉这东西很难实现,最近再为跳槽做准备,从头写学了一下基础知识,手写了call源码、apply源码、Promise源码,感觉还挺有意思,不是想想的那么难。就是一个js的简答实现。只要优点js基础的人都能手写出来,所以不要一听“源码”二字就给吓到。自己动手实现一遍,比看别人的几十遍的效果更好。 本篇文章从实际应用角度思考Promise是怎样的一个实现过程,会先从简单的应用出发,然后一点一点去完善整个代码。 先来一个简单的例子: //刚开始是等待态,pending let promise = new Promise( (resolve,reject) =>{if(err) return reject(err) //失败了返回失败信息 失败态 resolve(data) //成功了返回数据 成功态 }) //状态改变了调用 promise.then(data=>{ //成功了调用 console.log(data) },err=>{ //失败了调用 console.log(err) }) 这是一个promise实例,它有三种状态,pending(等待态)、fullfilled(成功态)、rejected(失败态),resolve为成功时调用,状态由等待态变为成功态

Spring Boot 启动源码的个人分析

北战南征 提交于 2020-03-01 17:11:39
熟悉Spring Boot的都知道,其启动方式有多种,如:直接main函数运行;通过 mvn spring-boot:run 命令运行;通过 java -jar xxx.jar 命令运行等。这里就‘直接main函数运行‘来分析下Spring Boot的启动(其它方式虽然有些差异,但最终也会通过这个函数运行Spring Boot程序)。 首先看一下main函数: @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 很简单的一个函数,直接调用了 SpringApplication 的 run 方法,查看 run 方法,如下所示: public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) { return run(new Class<?>[] { primarySource }, args); } public static ConfigurableApplicationContext run(Class<?>[]