1. 前言 Hashmap可以说是Java面试必问的,一般的面试题会问: Hashmap有哪些特性? Hashmap底层实现原理(get\put\resize) Hashmap怎么解决hash冲突? Hashmap是线程安全的吗? ... 今天就从源码角度一探究竟.笔者的源码是OpenJDK1.7 2. 构造方法 首先看构造方法的源码 // 默认初始容量 static final int DEFAULT_INITIAL_CAPACITY = 16; // 默认负载因子 static final…
1. 前言 上一篇从源码方面了解了JDK1.7中Hashmap的实现原理,可以看到其源码相对还是比较简单的.本篇笔者和大家一起学习下JDK1.8下Hashmap的实现.JDK1.8中对Hashmap做了以下改动. 默认初始化容量=0 引入红黑树,优化数据结构 将链表头插法改为尾插法,解决1.7中多线程循环链表的bug 优化hash算法 resize计算索引位置的算法改进 先插入后扩容 2. Hashmap中put()过程 笔者的源码是OpenJDK1.8的源码. JDK1.8中,Hashmap将…
HashMap是在面试中经常会问的一点,很多时候我们仅仅只是知道HashMap他是允许键值对都是Null,并且是非线程安全的,如果在多线程的环境下使用,是很容易出现问题的. 这是我们通常在面试中会说的,但是有时候问到底层的源码分析的时候,为什么允许为Null,为什么不安全,这些问题的时候,如果没有分析过源码的话,好像很难回答, 这样的话我们来研究一下这个源码.看看原因吧. HashMap最早出现在JDK1.2中,它的底层是基于的散列算法.允许键值对都是Null,并且是非线程安全的,我们先看看这个…
NIO 流与块 通道与缓冲区 缓冲区状态变量 文件 NIO 实例 选择器 套接字 NIO 实例 内存映射文件 NIO与IO对比 Path Files NIO 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的,弥补了原来的 I/O 的不足,提供了高速的.面向块的 I/O. NIO核心组件: 通道(Channels) 缓冲区(Buffers) 选择器(Selectors) 流与块 I/O 与 NIO 最重要的区别是数据打包和传输的方式,I/O 以流的方式处理数据,而 NIO 以块的方式处…
一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍一下,Tomcat 调优大致分为两大类. 1.Tomcat的自身调优 采用动静分离节约 Tomcat 的性能 调整 Tomcat 的线程池 调整 Tomcat 的连接器 修改 Tomcat 的运行模式 禁用 AJP 连接器 2.JVM的调优 调优Jvm内存   二.Tomcat 自身调优 1.采用动…
一.前言 大家在面试过程中,必不可少的问题是线程池,小编也是在面试中被问啥傻了,JUC就了解的不多.加上做系统时,很少遇到,自己也是一知半解,最近看了尚硅谷阳哥的课,恍然大悟,特写此文章记录一下!如果还不了解线程池的小伙伴,一定要认真看完,你会有收获的哈!! 二.线程池创建使用 答:使用Executors看一下源码是有好多个,经常用的也就三个,今天就展示靠上的五种. //创建一个定长线程池,超出的线程会在队列中等待 ExecutorService executorService = Execut…
课程简介 HashMap集合在企业开发中是必用的集合同时也是面试官面试率很高的集合,因为HashMap里面涉及了很多的知识点,可以比较全面考察面试者的基本功,想要拿到一个好offer,这是一个迈不过的坎.在阿里等大厂面试中HashMap会经常被问起的. 虽然在网上能够搜索很多关于HashMap的讲解,但是讲解的都不够深入和详细.并且对于部分程序员而言对于HashMap的理解也不是很深入,并不知道如何使用HashMap才能够保证更高效. <ignore_js_op> 在本套课程中,将会非常深入.…
JUC:java.util.concurrent (Java并发编程工具类) 代码:D:\JAVA\Java_Learning\Elipse_Project\workspace200301EE\JUC 一般面试提问:面向对象和高级语法.Java集合类.Java多线程.JUC 和高并发.Java IO和 NIO 获取多线程的4种方法: 1.继承Thread类,重写run方法(其实Thread类本身也实现了Runnable接口) 2.实现Runnable接口,重写run方法 3.实现Callable…
HashMap结构 数组+链表+红黑树 链表大于8转红黑树,红黑树节点数小于6退回链表. 存放的key-value的Node节点 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; } 树形结构的Node节点 static final class TreeNode<K,V> extends Linked…
HashMap冲突解决方法比较考验一个开发者解决问题的能力. 下文给出HashMap冲突的解决方法以及原理分析,无论是在面试问答或者实际使用中,应该都会有所帮助. 在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样. 当程序试图将多个 key-value 放入 HashMap 中时,以如下代码片段为例: HashMap<String,Object>m=newHashMap<String,Objec…