源码

Java集合(10)--HashSet源码分析

独自空忆成欢 提交于 2020-02-24 23:12:42
由 哈希表 实现,实际底层为 HashMap。 public HashSet(Collection<? extends E> c) { map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16)); addAll(c); } public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<E,Object>(initialCapacity, loadFactor); } public boolean add(E e) { return map.put(e, PRESENT)==null; } PRESENT :傀儡值,Object类型,做 判断是否包含过用 Map的 key存的对象 就是 Set中的值 ,这块 就是为什么Set不能存储重复元素的原因。 -1, Set :存入Set的每个元素必须是 唯一 的。加入Set的元素必须定义 equals方法,以确保其唯一性 。Set接口 不保证 维护元素的 顺序 。 -2, HashSet :为 快速查找 而设计的Set。存入HashSet的 元素必须实现hashCode 方法。HashSet是使用 Set的默认首选 。 -3, TreeSet : 保持次序的Set ,底层为 树结构

前端资源网站整合

試著忘記壹切 提交于 2020-02-24 21:09:14
1.CodePen:http://codepen.io/ 网站里有很多很酷的特效,而且可以看到效果的源代码,也可以看到实现效果,是一个非常不错的前端开发学习资源网站。 这个是CodePen网站里的一个效果的源码截图,是不是很酷呀! 2.RunJS:http://runjs.cn/ 点击广场,则可以看到很多开发者分享的一些效果源码,如果你想找资源,做项目,这个网站绝对是一个不错的选择。 这个也是RunJS里的一个项目的源码截图。 3.BestCSSButtonGenerat: http://www.bestcssbuttongenerator.com/ 这个网站主要提供各种按钮的CSS代码,你可以从预设的按钮中选择并使用模板用于自己的设计,还可以查看源代码,非常适合学习。 4.jsrun: http://jsrun.net 这里可以查看项目的源码,里面有很多人分享的一些特效,绝对是一个不错的学习资源网站。 下面这个截图是jsrun网站里的一个日期控件的项目作品的源码,如果你要用来学习的话,可以完全下载下来。 这个开发者将他自己的项目分享在里面,可以查看效果,JS,HTML,CSS源码。 5.CodePlayerh: ttp://thecodeplayer.com/ 这个网站里的 项目资源 ,不仅可以看源码与项目效果,同时你还能看到开发者是如果将效果通过一行一行的代码敲定出来

前端开发项目资源网站

我与影子孤独终老i 提交于 2020-02-24 21:02:30
1.CodePen:http://codepen.io/ 网站里有很多很酷的特效,而且可以看到效果的源代码,也可以看到实现效果,是一个非常不错的前端开发学习资源网站。 这个是CodePen网站里的一个效果的源码截图,是不是很酷呀! 2.RunJS:http://runjs.cn/ 点击广场,则可以看到很多开发者分享的一些效果源码,如果你想找资源,做项目,这个网站绝对是一个不错的选择。 这个也是RunJS里的一个项目的源码截图。 3.BestCSSButtonGenerat: http://www.bestcssbuttongenerator.com/ 这个网站主要提供各种按钮的CSS代码,你可以从预设的按钮中选择并使用模板用于自己的设计,还可以查看源代码,非常适合学习。 4.jsrun: http://jsrun.net 这里可以查看项目的源码,里面有很多人分享的一些特效,绝对是一个不错的学习资源网站。 下面这个截图是jsrun网站里的一个日期控件的项目作品的源码,如果你要用来学习的话,可以完全下载下来。 这个开发者将他自己的项目分享在里面,可以查看效果,JS,HTML,CSS源码。 5.CodePlayerh: ttp://thecodeplayer.com/ 这个网站里的 项目资源 ,不仅可以看源码与项目效果,同时你还能看到开发者是如果将效果通过一行一行的代码敲定出来

高并发之——从源码角度分析创建线程池究竟有哪些方式

99封情书 提交于 2020-02-24 18:21:30
前言 在Java的高并发领域,线程池一直是一个绕不开的话题。有些童鞋一直在使用线程池,但是,对于如何创建线程池仅仅停留在使用Executors工具类的方式,那么,创建线程池究竟存在哪几种方式呢?就让我们一起从创建线程池的源码来深入分析究竟有哪些方式可以创建线程池。 使用Executors工具类创建线程池 在创建线程池时,初学者用的最多的就是Executors 这个工具类,而使用这个工具类创建线程池时非常简单的,不需要关注太多的线程池细节,只需要传入必要的参数即可。Executors 工具类提供了几种创建线程池的方法,如下所示。 Executors.newCachedThreadPool:创建一个可缓存的线程池,如果线程池的大小超过了需要,可以灵活回收空闲线程,如果没有可回收线程,则新建线程 Executors.newFixedThreadPool:创建一个定长的线程池,可以控制线程的最大并发数,超出的线程会在队列中等待 Executors.newScheduledThreadPool:创建一个定长的线程池,支持定时、周期性的任务执行 Executors.newSingleThreadExecutor: 创建一个单线程化的线程池,使用一个唯一的工作线程执行任务,保证所有任务按照指定顺序(先入先出或者优先级)执行 Executors

JUC源码分析-线程池篇(三)Timer

谁都会走 提交于 2020-02-24 16:54:12
JUC源码分析-线程池篇(三)Timer Timer 是 java.util 包提供的一个定时任务调度器,在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。 1. Timer 类结构 Timer 由 TimerThread,TaskQueue ,TimerTask 组成。 Timer 初始化时会构建一个 TimerThread 线程用于执行调度任务。TaskQueue 保存所有调度的定时任务,基于二叉树小顶堆时间,第一个要执行的任务永远位于 queue[1],其插入和查找时间复杂度都是 log 2 n。 1.1 TimerTask 生命周期 int state = VIRGIN; // 任务状态 static final int VIRGIN = 0; // 初始化 static final int SCHEDULED = 1; // 任务已经调度,还未执行 static final int EXECUTED = 2; // 任务已经执行 static final int CANCELLED = 3; // 任务取消 VIRGIN 表示 Task 刚刚被创建,SCHEDULED 表示 Task 已经被加入 TaskQueue中,等待调度,EXECUTED 表示 Task 已经被执行,CANCELLED 表示 Task 已经被取消。 TimerTask

源码分析|ArrayList

痴心易碎 提交于 2020-02-24 16:51:54
本文由 Oo鲁毅oO 首发于 掘金,下方为原文链接 源码分析|ArrayList 1.什么是ArrayLsit ArrayList是JDK中的一个基于数组实现的线性的可变长度的集合类,并且实现了List接口。 2.ArrayList构造方法分析 不指定容量时 //创建ArrayList ArrayList list = new ArrayList(); 创建完成后,点击进入ArrayList源码,可以发现是 public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 这样的一个无参构造方法对 ArrayList 进行了初始化操作,其中 elementData 是一个 Object 类型的数组, DEFAULTCAPACITY_EMPTY_ELEMENTDATA 也是一个 Object 类型的数组且长度为0。 指定容量时 //创建ArrayList ArrayList list = new ArrayList(20); 再次点击就会发现会调用一个制定了初始化容量的构造方法 public ArrayList(int initialCapacity) { if (initialCapacity > 0) { this.elementData = new Object

SpringAOP源码之 --- 入口

泄露秘密 提交于 2020-02-24 13:03:38
在查找AOP源码的时候,不知道如何下手,网上找了很多资料,分析源码后,来记录一下AOP的入口: BeanDefinition的解析 首先对spring.xml中文件的中的<aop:aspectj-autoproxy/>进行解析,如果发现不是bean标签,则会采用不同的类来解析。解析AOP的是AopNameSpaceHandler,追踪到init中,可以看到如下: registerBeanDefinitionParser("aspectj-autoproxy", new AspectJAutoProxyBeanDefinitionParser()); //配置为<aop:aspectj-autoproxy>时,通过这个BeanDefininationParser来处理 进入这个类的parse函数,解析器AspectJAutoProxyBeanDefinitionParser由BeanDefinitionParser接口统一实现: 进入到registerAspectJAnnonationAutoProxyCreatorIfNecessary方法: public static void registerAspectJAnnotationAutoProxyCreatorIfNecessary( ParserContext parserContext, Element

OpenShift 4 之 Quarkus(2)使用S2I部署Quarkus应用

末鹿安然 提交于 2020-02-24 10:45:32
文章目录 将Quarkus源码按可执行程序部署到OpenShift 将Quarkus源码按Java应用部署到OpenShift 我们除了可以参考《 OpenShift 4 之 Quarkus(1)创建第一个Quarkus应用 》部署由Quarkus编译生成的可执行程序外,还可以通过OpenShift提供的针对Quarkus提供的S2I功能自动从应用源码完成在OpenShift上的应用部署。 将Quarkus源码按可执行程序部署到OpenShift 以下过程的部署的应用是https://github.com/quarkusio/quarkus-quickstarts.git#getting-started中的Quarkus应用代码,构建过程使用的Builder-Image是quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java8(也可以用quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java11)。 # To build the image on OpenShift $ oc new-project quarkus-quickstart-native $ oc new-app quay.io/quarkus/ubi-quarkus-native-s2i:19.3.1-java8~https:/

Windbg学习笔记:源码模式调试

…衆ロ難τιáo~ 提交于 2020-02-24 08:54:52
源语言要求:C, C++, or assembly. #1 编译要求 符号文件( .pdb files) ---- visual studio 2012默认生成 源代码 打开编译器开关 /Od /Oi #2 定位符号文件和源代码文件 #3 单步源码调试的范例 .lines enable source line information bp main set initial breakpoint l+t stepping will be done by source line l+s source lines will be displayed at prompt g run program until "main" is entered pr execute one source line, and toggle register display off p execute one source line #4 设置特定行源码断点 ? ` [[ module ! ] filename ][ : linenumber ] ` 此命令显示模块源码文件某行的地址, 注意:里面的符号不是靠近回车键的逗号,而是ESC键下面的键。图中的第二行是逗号,第一行是正确写法。 下图是成功设置断点后的截图。 来源: https://www.cnblogs.com/servo/archive/2012

Caffe: CMake源码编译(OpenCV4.2+CUDA)

不想你离开。 提交于 2020-02-24 08:47:40
周六周日在家倒腾了两天,总算稍微了解点pycaffe的一些接口和api设置了,但是针对不同层,还是有很多注意的细节的,所以也准备写个博客专门总结pycaffe的常见层参数设置,(LZ这个蠢啊,之前居然手写prototxt,一把辛酸泪,太傻了/(ㄒoㄒ)/~~) 之前已经写过用Anaconda直接安装caffe,这样安装caffe不香嘛, 为啥非得源码再来安装一次呢? 1.项目里后端是用的tensorflow的接口,前端是要用caffe的接口,caffe的有些参数设置还是源码查询比较方便 2.有一些层是比较特殊的,这种定制化的层可能需要使用c写完之后,再进行源码编译 不过源码编译还是有很多坑的,且听LZ一一道来: 首先下载源码, https://github.com/weiliu89/caffe 按照tutorial安装依赖项: http://caffe.berkeleyvision.org/installation.html LZ的小小笔记本是Ubuntu16.04 所以需要先安装对应的依赖库 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no