ArrayList的扩容机制
ArrayList的扩容机制 ArrayList是基于数组实现的集合,虽然是基于数组实现,却比数组要方便许多,比如初始化时可以不指定其长度;指定长度后,其大小也不是固定不变,会跟据你存储的元素的逐渐增多而增加;等等。今天说一下ArrayList的扩容机制是如何实现的。
首先我们看一下ArrayList的构造方法:
12345678910111213141516171819202122232425262728293031public ArrayList(int initialCapacity) {//可以指定集合的长度 //其中的elementData是ArrayList中用来存储元素的数组 if (initialCapacity > 0) {//大于零则对elementData数组进行初始化 this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) {//等于0 ...
dfs力扣1993树上的操作
[TOC]
dfs力扣1993树上的操作题目题目链接
给你一棵 n 个节点的树,编号从 0 到 n - 1 ,以父节点数组 parent 的形式给出,其中 parent[i] 是第 i 个节点的父节点。树的根节点为 0 号节点,所以 parent[0] = -1 ,因为它没有父节点。你想要设计一个数据结构实现树里面对节点的加锁,解锁和升级操作。
数据结构需要支持如下函数:
Lock:指定用户给指定节点 上锁 ,上锁后其他用户将无法给同一节点上锁。只有当节点处于未上锁的状态下,才能进行上锁操作。
Unlock:指定用户给指定节点 解锁 ,只有当指定节点当前正被指定用户锁住时,才能执行该解锁操作。
Upgrade:指定用户给指定节点 上锁 ,并且将该节点的所有子孙节点 解锁 。只有如下 3 个条件
全部满足时才能执行升级操作:
指定节点当前状态为未上锁。
指定节点至少有一个上锁状态的子孙节点(可以是 任意 用户上锁的)。
指定节点没有任何上锁的祖先节点。
请你实现 LockingTree 类:
LockingTree(int[] parent) 用父节点数组初始化数据结构。 ...
springcloud整合minio时出现的错误
Action:Correct the classpath of your application so that it contains compatible versions of the classes io.minio.S3Base and okhttp3.RequestBody这个错误是我在整合minio时报的错,说实话遇到这个错误我还是很头大的,因为之前在springboot项目中整合过一次minio,当时报的错误跟这个差不多,都是okhttp版本依赖问题,之前是因为,我的minio依赖里面自带的okhttp包的版本过低,需要将minio包中的okhttp包剔除,自己手动引进一个更高版本的okhttp包。
1234567891011121314151617<!--maven引入minio排除okhttp依赖并添加高版本的okhttp依赖--> <dependency> <groupId>io.minio</groupId> <artifactId>minio& ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
RabbitMQ
[TOC]
RabbitMQRabbitMQ概念 RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是 一个快递站,一个快递员帮你传递快件。RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。
使用Docker安装RabbitMQ
拉取镜像
1docker pull rabbitmq:management #带management是有管理页面的镜像
创建一个数据卷,用于持久化RabbitMQ的所有数据,方便管理
1docker volume create rabbitmq-home
创建并运行容器
12345678910docker run -id --name=rabbitmq \-v rabbitmq-home:/var/lib/rabbitmq \-p 15672:15672 -p 5672:5672 \-e RABBITMQ_DEFAULT_USER=rabbitmq \-e R ...
Nginx
Nginx什么是Nginx?Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。
Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。
Nginx的作用Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。
正向代理 ...
使用docker和minio实现对象存储
[TOC]
使用docker和minio实现对象存储什么是minio Minio是一个开源的分布式文件存储系统,它基于 Golang 编写,虽然轻量,却拥有着不错的高性能,可以将图片、视频、音乐、pdf这些文件存储到多个主机,可以存储到多个Linux,或者多个Windows,或者多个Mac,Minio中存储最大文件可以达到5TB。
任何类型的文件都是支持的,主要应用在微服务系统中。
安装minio 这里我们使用docker来安装minio镜像,然后通过minio镜像来创建一个minio容器。不了解docker的可以移步这里。
docker pull minio/minio # 拉取最新版本的minio镜像
docker run -p 9000:9000 -p 9090:9090 –net=host –name minio-6 -d –restart=always -e “MINIO_ACCESS_KEY=minioadmin” -e “MINIO_SECRET_KEY=min ...
Springboot整合第三方登录
[TOC]
Springboot整合第三方登录为什么采用第三方登录 采用第三方登录可以避免重新注册账号的繁琐,也不需要再为密码和昵称发愁,而第三方登录有一个比较好用的包,里面整合了多种第三方登录,开箱即用,非常方便。就是JustAuth,网址https://www.justauth.cn/。
整合第三方登录创建应用 这里采用gitee进行测试,因为gitee不需要其他的东西,只需要你有一个账号就可以。注册一个gitee账号后,到这里(https://gitee.com/oauth/applications)创建一个应用。
应用名称,这个根据自己的需要填,我测试使用就填了一个测试demo1
应用描述可填可不填
应用主页需要填一个已经上线的项目地址(这个不一定要填自己的项目,因为既然要整和第三方登录,那项目大概率是没上线的,这里可以随便填一个可用的网址,某度什么的都可以)
应用回调地址这个不能随便填,这个地址是之后用户授权后的回调地址,这是我测试时填的http://localhost:8080/oauth/callback
权限 根据页面提示操作,默认勾选第一个就行
...
Java实现文件分片上传
[TOC]
Java实现文件分片上传为什么要使用分片上传在需要上传文件时,不可避免地会遇到上传文件内容过大,上传时间太长地问题,采用文件分片上传就可以解决这个问题。
什么是分片上传?简单的说就是本来是需要一次搬一个很大的东西,比如是一大桶水,一次搬起来比较费事费力。我们可以把这一大桶水分装在几个或几十个或者更多的小瓶里,这样搬运起来就比较省力,也比较方便,等到目的地后,我们在将这些小瓶子里的水都倒回大桶里,这样就完成了一大桶水的搬运工作。这个将一大桶水分成许多小瓶子的过程就是分片的过程,最后将水倒回大桶的过程就是合并的过程。分片与合并也是文件分片上传的重要过程。
前后端代码这个分片的过程是在前端实现的,上传完成后的合并工作是后端完成的。
前端代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 ...
Docker的简单使用
[TOC]
Docker的简单使用Docker 是什么 Docker 是一个应用打包、分发、部署的工具。你也可以把它理解为一个轻量的虚拟机,它只虚拟你软件需要的运行环境,多余的一点都不要,而普通虚拟机则是一个完整而庞大的系统,包含各种不管你要不要的软件。
Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
Docker的基本组成镜像(image)docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container)Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。启动,停止,删除,基本命令!目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository)仓库就是存放镜像的地方!仓库分为公有仓库和私有仓库!Docker Hub(默认是国外的)阿里云.…都有容 ...