源码

Map源码会问哪些面试题

爷,独闯天下 提交于 2020-02-18 15:20:34
1 Map 整体数据结构类问题 1.1 说一说 HashMap 底层数据结构 答:HashMap 底层是数组 + 链表 + 红黑树的数据结构,数组的主要作用是方便快速查找,时间复杂度是 O(1),默认大小是 16,数组的下标索引是通过 key 的 hashcode 计算出来的,数组元素叫做 Node,当多个 key 的 hashcode 一致,但 key 值不同时,单个 Node 就会转化成链表,链表的查询复杂度是 O(n),当链表的长度大于等于 8 并且数组的大小超过 64 时,链表就会转化成红黑树,红黑树的查询复杂度是 O(log(n)),简单来说,最坏的查询次数相当于红黑树的最大深度。 1.2 HashMap、TreeMap、LinkedHashMap 三者有啥相同点,有啥不同点? 答:相同点: 三者在特定的情况下,都会使用红黑树; 底层的 hash 算法相同; 在迭代的过程中,如果 Map 的数据结构被改动,都会报 ConcurrentModificationException 的错误。 不同点: HashMap 数据结构以数组为主,查询非常快,TreeMap 数据结构以红黑树为主,利用了红黑树左小右大的特点,可以实现 key 的排序,LinkedHashMap 在 HashMap 的基础上增加了链表的结构,实现了插入顺序访问和最少访问删除两种策略; 由于三种 Map

Java多线程系列---“基础篇”03之 Thread中start()和run()的区别

浪尽此生 提交于 2020-02-18 09:07:10
转自:https://www.cnblogs.com/skywang12345/p/3479083.html (含部分修改) 概要 Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答。本章内容包括: start() 和 run()的区别说明 start() 和 run()的区别示例 start() 和 run()相关源码(基于JDK1.7.0_40) 一. start() 和 run()的区别说明 start() : 它的作用是 启动一个新线程 ,新线程会执行相应的run()方法。 start()不能被重复调用 (否则抛出异常)。 Mynote:runnable没有start方法。要启动,必须要start方法,因此runnable构造方法中需要和Thread来进行绑定。 run() : run()就和普通的成员方法一样, 可以被重复调用 。单独调用run()的话, 会在当前线程中执行run(), 而并 不会启动新线程 ! 下面以代码来进行说明。 class MyThread extends Thread{ public void run(){ ... } }; MyThread mythread = new MyThread(); mythread.start()会启动一个新线程,并在新线程中运行run()方法。 而mythread.run(

Mybatis源码分析:trim标签

∥☆過路亽.° 提交于 2020-02-18 08:25:41
/*--> */ /*--> */ /*--> */ /*--> */ trim标签使用    标签用于对标签内的sql语句进行前后缀补齐或者前后缀删除。该标签提供了四个属性,prefix,prefixOverrides,suffix,suffixOverrides。prefix,suffix用于补齐sql前后缀的值。而prefixOverrides,suffixOverrides则表示如果sql语句中前缀或者后缀的值跟两个属性中的值一致,则会将这个值删除掉。看下面一段Mapper配置,该语句最终会变成 select id,name,age from sstudent where id=? and 1=1 .观察下列代码,进行流程分析。 在第一个trim标签中,存在prefix属性,那么语句拼凑为 where id=#{id} 检查suffix和suffixOverrides,suffixOverrides值为空,那么不做任何处理,此时会继续拼接suffix的值,所以sql语句变成where id=#{id} and 在第二个trim标签中,存在 prefixOverrides="and|or|where",mybatis首先使用竖线'|'分割为数组,因为1=1 and并不以{and,or,where}开头,所以不做任何处理 在 suffixOverrides="and|or

HashMap 实现原理及源码分析

偶尔善良 提交于 2020-02-18 00:43:39
HashMap是JDK中非常重要的容器,采用 数组 + 链表 的方式实现,理想情况下能支持 O(1) 时间复杂度的增删改查操作。本文将由浅入深地讲解哈希表的实现原理,并对HashMap的部分源码进行分析。 1. 从数组说起 数组应该是我们最先学习的数据结构,它是内存中一块连续的存储单元,因此计算机可以根据数组起始地址、元素长度和下标,计算出我们要访问的元素的地址,时间复杂度为 O(1) 。 以下代码定义了一个简单的 Student 类,假如我们要存储 20 个 Student 对象,我们希望能够在 O(1) 时间复杂度内,根据 studentID 找到相应的对象。 public class Student { public int studentID; public String name; public Student(int studentID, String name) { this.studentID = studentID; this.name = name; } } 如果我们要存储的 20 个 Student 对象的 studentID 刚好就是从 0 到 19,我们自然可以新建一个长度为 20 的 Student 数组 students,然后将对象的 studentID 作为数组下标,放到对应的 slot 里面,如下图所示。这样的话,如果我们想找 studentID

activiti 源码笔记之startProcess

强颜欢笑 提交于 2020-02-17 19:12:40
rumtimeService.startProcessInstanceByXX方法将启动流程的任务委派给StartProcessInstanceCmd,此时会根据rumtimeService.startProcessInstanceByXX的XX来用不同的变量构造StartProcessInstanceCmd实例然后执行execute方法,StartProcessInstanceCmd的构造器如下. (1) processDefinitionKey 在bpmn20.xml中定义流程元素的id < process id = "loanReuqest" name = "Process to handle a loan request" > (2)processDefinitionId 对应流程数据库中act_re_procdef中的主键 (3)businessKey 关联的业务主键,用于自定义扩展,引擎本身没有用到. (4)variables 流程变量 execute的执行逻辑如下 (1) 根据processDefinitionKey或proceeDefinitionId在已发布的流程定义中查找,它是先查找缓冲中的流程定义然后再去数据库中查找以便提高效率,如果找不到或找到的流程定义被挂起将抛出运行时异常ActivitiException. deploymentCache

树莓派学习:源码方式安装opencv

谁说我不能喝 提交于 2020-02-17 18:24:48
1:下载若干依赖项: 更新软件源:sudo apt-get update/upgrade; 依次安装一下依赖项: sudo apt-get install build-essential sudo apt-get install cmake sudo apt-get install libgtk2.0-dev sudo apt-get install pkg-config sudo apt-get install python-dev python-numpy sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev 2:获取源代码:本人从opencv官网下载opencv2.4.10的linux版本。建立opencv文件夹,解压opencv2.4.10与opencv内。 unzip opencv-2.4.10.zip 3:编译源代码: 进入opencv源代码目录,新建一个名为release的文件夹: cd /home/pi/opencv/opencv-2.4.10 mkdir release cd release 使用cmake工具在该文件夹中生成makefile文件,指定opencv的安装目录为/usr

【Tomcat源码学习】-4.连接管理

北城余情 提交于 2020-02-17 15:33:29
前面几节主要针对于Tomcat容器以及内容加载进行了讲解,本节主要针对于连接器-Connector进行细化,作为连接器主要的目的是监听外围网络访问请求,而连接器在启动相关监听进程后,是通过NIO方式进行请求的监听-响应-处理。 一、整体设计 Connector在创建时,会根据Connector的协议创建对应的ProtocolHandler处理类 协议标识 普通模式 Apr模式 HTTP/1.1 org.apache.coyote.http11.Http11NioProtocol org.apache.coyote.http11.Http11AprProtocol AJP/1.3 org.apache.coyote.ajp.AjpNioProtocol org.apache.coyote.ajp.AjpAprProtocol ProtocolHandler处理类包含对应的端点处理类,比如Http11NioProtocol的端点处理类为NioEndpoint NioEndpoint:对应一个ServerSocketChannel通道,在启动过程中,会分别初始化SocketProcessor、PollerEvent、NioChannel缓存堆结构,以及请求处理的线程池Executor,最后将会初始化两组用于请求处理线程Acceptor、Poller Acceptor:默认只有一个线程

java多线程源码解析

荒凉一梦 提交于 2020-02-17 15:32:42
一.interface Executor 最顶层接口 1.1 void execute(Runnable command); 二.class Executors 为这些 Executor 提供了便捷的工厂方法。 1.newFixedThreadPool 固定个数的线程池 public static ExecutorService newFixedThreadPool(int nThreads) { // 1.1 调用ThreadPoolExecutor return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());//1.2 使用linkedBlockingQueue } 1.1 调用 ThreadPoolExecutor ()构造方法 //1.1.1 参数说明 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { //1.1.2 调用另一个构造方法 this(corePoolSize,

jdk1.8 java.io.FileInputStream类源码阅读

ぃ、小莉子 提交于 2020-02-17 11:52:01
介绍 jdk解释: public class FileInputStream extends InputStream A FileInputStream从文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。 FileInputStream用于读取诸如图像数据的原始字节流。 要阅读字符串,请考虑使用FileReader 。 属性 /* File Descriptor - handle to the open file */ private final FileDescriptor fd ; /** * The path of the referenced file * (null if the stream is created with a file descriptor) */ private final String path ; private FileChannel channel = null ; private final Object closeLock = new Object ( ) ; private volatile boolean closed = false ; 值得注意的是private final FileDescriptor fd; FileDescriptor类jdk 1.8解释: 文件描述符类的实例用作表示打开文件

wxPython4.0.4关于我们

拈花ヽ惹草 提交于 2020-02-17 08:59:19
源码地址: https://download.csdn.net/download/zy0412326/12154342 wxPython4改版后将AboutBox方特到adv包里面。如果想快速实现GUI关于我们则直接调用wxPython自带的关于我们即可。 先看看效果图: 虽然不是很漂亮,不过可以用。 上代码: 源码地址: https://download.csdn.net/download/zy0412326/12154342 来源: https://www.cnblogs.com/zy0412326/p/12320224.html