服务发现——基于Eureka服务器实现微服务注册
集合类实现原理总结
集合类实现原理总结
整体认识
这里贴出一张网上某大神制作的关于集合类的整体结构关系
此图转载自 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.
虚拟机中多态的实现方式
使用Spring Cloud Config配置服务器控制配置
使用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项目
Docker的使用以及命令总结
帮助相关
- docker –help 可以查看docker的所有命令(注意单词全拼的参数前都是两个‘-’号)
- docker info 查看docker信息
- docker version 查看docker版本号