240 发简信
IP属地:广东
  • 加载因子是扩容的参考标准(threshold = capacity*loadfactor)默认数组初始大小为16,在加载因子为0.75(默认值)时,在数组长度(size)达到12就扩容,反之,如果把加载因子放大,到1,那么 threshold 就变成16,意味着,在数组长度达到16才会扩容,这时候也许已经产生很多哈希冲突了,导致某些链表过长,影响查询效率。

    加载因子过高,虽然提高了空间的利用率,但增加了查询时间的成本;加载因子过低,虽然减少查询时间的成本,但是空间利用率又很低了。所以0.75是一个折中的选择。
    链表长度为8转为红黑树的原因是,官方根据泊松分布实验发现,假设hashmap长度length为16,假设放入12(0.75*16)个数据到hashmap中,链表中存放8个节点的概率仅为0.00000006,而链表中存放1~7节点的概率为:

    0: 0.60653066

    1: 0.30326533

    2: 0.07581633

    3: 0.01263606

    4: 0.00157952

    5: 0.00015795

    6: 0.00001316

    7: 0.00000094

    从以上可知,实际上一个链表被放满8个节点的概率非常小,实际上链表转红黑树是非常耗性能的,而链表在8个节点以内的平均查询时间复杂度与黑红树相差无几,超过8个节点,黑红树的查询复杂度会好一些。所以,当链表的节点大于等于8个的时候,转为红黑树的性价比比较合适。

    HashMap的loadFactor为什么是0.75?

    面试core java,HashMap的结构差不多是必问题了。字面意思,真的真的是必问题了。 我遇到的问题有: 1. HashMap, ConcurrentHashM...

  • 都是“生产者-消费者”模式

    Akka框架简介

    Akka是JAVA虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言编写,同时提供了Scala和Java的开发接口。Akka处理并发的方法基于...

  • 常用正则表达式公式总结|果断收藏!

    一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[...

  • 您好,我想问一下您理解的线程本地缓存和CPU 缓存有什么关系吗?

    JMM和底层实现原理

    1.并发编程领域的关键问题 1.1 线程之间的通信 线程的通信是指线程之间以何种机制来交换信息。在编程中,线程之间的通信机制有两种,共享内存和消息传递。在共享内存的并发模型里...

  • 120
    Linux被kdevtmpfsi 挖矿病毒入侵

    一、通过top 命令查看CPU 的使用情况 二、查看进程的信息ps -aux|grep kdevt 三、查询关联的守护进程 四、kill 掉相关进程 五、删除对应目录下的文件...

  • 120
    Redis

    一、为什么要用redis而不用map做缓存? 缓存分为本地缓存和分布式缓存。map 实现的是本地缓存,生命周期随着jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各...

  • 120
    集合

    一、常用集合的分类 Collection 接口的接口 对象的集合(单列集合)├——-List 接口:元素按进入先后有序保存,可重复│—————-├ LinkedList 接口...

  • MySQL 常用命令

    查看是否开启自动提交:show variables like 'autocommit';开启自动提交:set autocommit = 1;开始事务:begin;提交事务 :...

  • MVCC多版本并发控制机制的实现

    MVCC(Multiversion concurrency control )是一种多版本并发控制机制,解决了幻读的问题。 不同存储引擎的MVCC实现是不同的,典型的有乐观(...

  • 自增主键连续问题

    一、自增主键保存位置 自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑自增主键放在非主键位置,当自增到最大值,则值不会变化;如果是主键位置,当自增到...

  • 120
    一条更新语句怎么执行的

    一、两个重要的日志模块 与查询流程不一样的是,更新流程还涉及两个重要的日志模块。 redo log(重做日志) redo log 也是事务中持久性实现的原理,它是存储引擎层的...

  • 120
    索引

    零、什么是索引? 索引是帮助MySQL 高效获取数据的数据结构 索引存储在文件系统中 索引的文件存储形式与存储引擎有关 索引的文件结构4.1 hash4.2 二叉树4.3 B...

  • 120
    一条查询语句怎么执行的

    一、MySQL 的基本架构信息 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数据和加密函数等),所有跨存储引擎的功能都在这一层实现,不同的存储引擎共用...

  • 120
    数据库事务特性的实现原理

    一、原子性实现原理 Undo Log(引擎层特有) Undo Log 是为了实现事务的原子性,在MySQL 数据库InnoDB 存储引擎中,还用Undo Log 来实现多版本...

  • 120
    maven 编译提示找不到 sun 内部类的解决方法

    问题引起的原因:java编译器检测一个特殊的“内部”类何时被访问,并拒绝导入该类。Eclipse使用了一个可能没有此检查的不同编译器。 com.sun.xml.interna...

  • 解决SQL 问题

    一、执行MyBatis中的SQL 时Limit 无法算术的问题。 想要在limit中使用运算,那就要用到sql动态语句: