code blog

记录学习中的点滴收获


  • 首页

  • 标签

  • 分类

  • 归档

HashMap(JDK1.8)的扩容时机与阈值的探讨

发表于 2020-02-17 | 分类于 集合 | 阅读次数:
字数统计: 1.1k | 阅读时长 ≈ 5
最近又开始复习一些基础知识,发现网上很多关于HashMap的总结有一些问题,尤其是扩容的时机和阈值的确定仍然有一些疑问,因此果断还是自己看看源码。 本文只指出部分关于扩容的问题,其他详细分析可以参考其他文章。 究竟什么时候扩容 当put时发现table未初始化时,进行初始化扩容 当put加入节点后, ...
阅读全文 »

服务发现——基于Eureka服务器实现微服务注册

发表于 2019-06-27 | 分类于 微服务 | 阅读次数:
字数统计: 1.3k | 阅读时长 ≈ 5
在任何分布式架构中,都需要找到机器所在的物理地址,这个过程称为服务发现。 服务发现的优点: 可以快速对环境中运行的服务实例数量进行水平伸缩 将服务的物理位置抽象,由于服务消费者不知道实际服务实例的物理位置,因此可以从可用服务池中添加或移除服务实例 有助于提高应用的弹性。当服务实例不可用时,可从内部 ...
阅读全文 »

集合类实现原理总结

发表于 2019-04-20 | 分类于 实现原理 | 阅读次数:
字数统计: 2.4k | 阅读时长 ≈ 9

集合类实现原理总结

整体认识

这里贴出一张网上某大神制作的关于集合类的整体结构关系

此图转载自 https://blog.csdn.net/u010887744/article/details/50575735

List

ArrayList——非线程安全

内部结构

ArrayList的内部结构其实就是一个数组。

由于是数组结构,故访问时间复杂度为O(1),插入删除的时间复杂度为O(n)。

扩容机制

ArrayList的默认大小是10个元素,当容量不够时,则需要扩容,而扩容的大小是原来的1.5倍(JDK1.8),其实现代码如下:

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
}

其决定新数组大小的则是int newCapacity = oldCapacity + (oldCapacity >> 1);

可以看出采用的是位运算得出原来的一半,再加上原来的大小,则得出了1.5倍。
而扩容的行为则是通过Arrays.copyOf(elementData, newCapacity);将原来的数组内容复制到新的数组中。

补充

关于网上部分文章提到的扩容为原来的1.5倍+1,其实是JDK1.6中的实现。扩容值算法如下:

int var4 = var2 * 3 / 2 + 1;

而自从JDK1.7开始则是采用位运算实现,故没有了后面的+1.

阅读全文 »

虚拟机中多态的实现方式

发表于 2019-04-19 | 分类于 JVM | 阅读次数:
字数统计: 752 | 阅读时长 ≈ 2

虚拟机中多态的实现方式

多态的表现形式分为重载和重写。

  • 重载是指同一类中的同名方法不同参数列表的表现形式,是一种静态的多态。

  • 重写是指具有继承关系的多个类中子类对父类方法的重写,是一种动态的多态。

    阅读全文 »

使用Spring Cloud Config配置服务器控制配置

发表于 2019-02-19 | 分类于 SpringCloud | 阅读次数:
字数统计: 1.5k | 阅读时长 ≈ 6

使用Spring Cloud Config配置服务器控制配置

Spring Cloud Config介绍

Spring Cloud Config是Sping-Cloud下用于分布式配置管理的组件,分成了两个角色Config-Server和Config-Client;

Config-Server端(即配置服务器)集中式存储/管理配置文件,并对外提供接口方便Config-Client访问,接口使用HTTP的方式对外提供访问;Config-Server存储/管理的配置文件可以来自本地文件,远程Git仓库以及远程Svn仓库

Config-Client(需要获取配置文件的各种微服务)通过接口获取配置文件,然后可以在应用中使用;

Spring Cloud配置服务器是基于REST的应用程序,它不是独立服务器,开发人员可以选择将它嵌入现有的springboot应用程序中,也可以在嵌入它的服务器中启动新的springboot项目

阅读全文 »

MySQL性能优化——剖析单条查询

发表于 2019-02-17 | 阅读次数:
字数统计: 492 | 阅读时长 ≈ 2

MySQL性能优化——剖析单条查询

EXPLAIN 的使用

EXPLAIN的使用非常简单,就在你要进行的查询语句前跟上 EXPLAIN 即可。
例如:

阅读全文 »

Docker的使用以及命令总结

发表于 2019-02-17 | 分类于 Docker | 阅读次数:
字数统计: 3.1k | 阅读时长 ≈ 11

帮助相关

  • docker –help 可以查看docker的所有命令(注意单词全拼的参数前都是两个‘-’号)
  • docker info 查看docker信息
  • docker version 查看docker版本号
阅读全文 »

装饰者模式

发表于 2018-12-01 | 分类于 设计模式 | 阅读次数:
字数统计: 896 | 阅读时长 ≈ 3

装饰者模式

装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例

动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

阅读全文 »

观察者模式

发表于 2018-12-01 | 分类于 设计模式 | 阅读次数:
字数统计: 768 | 阅读时长 ≈ 3

观察者模式

定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

阅读全文 »

策略模式

发表于 2018-11-20 | 分类于 设计模式 | 阅读次数:
字数统计: 1.3k | 阅读时长 ≈ 5

策略模式

策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

阅读全文 »
12
伈伈点灯

伈伈点灯

17 日志
9 分类
19 标签
RSS
GitHub E-Mail CSDN
© 2020 伈伈点灯 | Site words total count: 23.4k
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
博客全站共23.4k字
访问数 人 总访问量 次