CompletableFuture
CompletableFuture 在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。 它可能代表一个明确完成的Future,也有可能代表一个完成阶段( CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作。 它实现了Future和CompletionStage接口 创建CompletableFuture supplyAsync 有 runAsync 无两者的区别在于是否返回result 执行 CompletableFuture.allOf() CompletableFuture.anyOf()两者的区别在于是否需要全部任务执行完在继续allOf是阻塞式的,需要全部future执行完才会继续anyOf则是有个执行完就ok调用get方法,得到结果值 回调函数 thenApply回调函数(callback) 当前阶段正常完成以后执行,而且当前阶...
Java HashMap 底层实现原理
转自:https://mrbird.cc/Java-HashMap%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html 本节用于记录Java HashMap底层数据结构、方法实现原理等,基于JDK 1.8。 底层数据结构Java HashMap底层采用哈希表结构(数组+链表、JDK1.8后为数组+链表或红黑树)实现,结合了数组和链表的优点: 数组优点:通过数组下标可以快速实现对数组元素的访问,效率极高; 链表优点:插入或删除数据不需要移动元素,只需修改节点引用,效率极高。 HashMap图示如下所示: HashMap内部使用数组存储数据,数组中的每个元素类型为Node<K,V>: 123456789101112131415161718192021222324252627282930313233343536373839static class Node<K,V> implements Map.Entry<K,V> { final int hash; ...
JVM 常用命令(长期记录)
jinfo:可以输出并修改运行时的 Java 进程的 opts。 jps:与 Unix 上的 ps 类似,用来显示本地的 Java 进程,可以查看本地运行着几个 Java 程序,并显示他们的进程号。 jstat:一个极强的监视 VM 内存工具。可以用来监视 VM 内存内的各种堆和非堆的大小及其内存使用量。 jstack:用于打印出给定的 Java 进程 ID 或 core file 或远程调试服务的 Java 堆栈信息,如果是在 64 位机器上,需要指定选项 -J-d64,Windows 的 jstack 使用方式只支持以下的这种方式。 jmap:打印出某个 Java 进程(使用 pid)内存内的所有对象的情况(如:产生那些对象,及其数量)。 jconsole/jvisualvm:Java GUI 监视工具,可以以图表化的形式显示各种数据,并可通过远程连接监视远程的服务器。 命令后接>>输出某一位置,如: jstat -gc 13976 >> d:\c.txt jps jps:仅显示简单类名和 pid jps -l:输出主类或者 jar ...
Windows 共享文件夹
首先需要启用Guest用户,一般默认是禁用的,按下Win+R打开运行窗口,输入lusrmgr.msc命令,回车,打开本地用户和组(本地) 右键Guest用户,打开属性,把“账户已禁用”前边的勾去掉,点击应用,确定。如果有必要,可右键Guest,点击设置密码(有时访问必须得有密码才行,此时也可不用设置,等需要的时候再设置也行)。此时账户就没有问题了,接下来共享文件夹。 右键需要共享的文件夹,打开属性,切换到共享界面,点击“共享”按钮。 点击“添加”按钮前边的下拉框,选中Guest账户,点击添加按钮,此时Guest用户就出现在了共享用户列表中,然后根据自己需求,在权限级别一栏选择对应选取即可,我这里选择的是读取和写入。然后点击下边的“共享”按钮,共享结束后,点击“完成”按钮。 点击“高级共享”按钮,然后点击下方的“权限”按钮 在权限界面,选中Everyone用户,点击删除(请注意,这里设置的权限,也是正常系统用户访问该文件夹的权限,如果非必要或者不清楚,那就不要删除了),然后点击“添加”按钮。 在“输入对象名称”下边输入Guest...
Nexus3 配置 Docker
安装nexus3 docker 123456789101112131415161718192021mkdir -p /usr/local/nexus3chown -R 200 /usr/local/nexus3docker run -d \--privileged=true \--name=nexus3 \-u root \-p 8081:8081 \# 这几个端口给docker私有仓库使用,故在需要使用 Docker 的机器上修改 `/etc/docker/daemon.json`:{"insecure-registries": ["你的服务器IP:8001", "你的服务器IP:8002", "你的服务器IP:8003"]}-p 8001:8001 \-p 8002:8002 \-p 8003:8003 \# 启动容器时加入时间挂载,使用宿主机时间-v /etc/localtime:/etc/localtime:ro \-v /usr/share/zoneinfo/Asia/...
Trivy 容器安全扫描完全指南:安装、使用与 CI/CD 集成
概述Trivy(tri 发音为 trigger,vy 发音为 envy)是一个简单而全面的安全扫描器,专注于容器和其他工件的漏洞/错误配置检测。 核心特点: 🔍 简单易用,只需安装二进制文件即可开始扫描 🛡️ 全面检测操作系统和语言包漏洞 ⚙️ 支持基础设施即代码(IaC)配置检测 🚀 适用于 CI/CD 流程集成 官方资源: 📖 官方文档 💻 GitHub 仓库 核心功能检测类型Trivy 检测两种主要的安全问题: 类型 说明 示例 漏洞 软件或操作系统中的缺陷、弱点 CVE 漏洞、过时的依赖包 配置错误 部署配置中的安全隐患 IaC 文件中的不安全配置 扫描目标Trivy 可以扫描三种不同的工件: 容器镜像: 📦 Docker 镜像 🔍 检测系统包和应用依赖漏洞 ✅ 支持多种镜像仓库 文件系统: 💾 主机文件系统 🖥️ 虚拟机镜像 📂 解压的容器文件系统 Git 存储库: 🔗 远程 Git 仓库 📁 本地代码库 🔍 IaC 文件扫描 运行模式Trivy 支持两种运行模式: 模式 适...
在 Windows 中安装极狐 GitLab Runner(解决 Host key verification failed)
摘自:https://blog.csdn.net/chqaz123/article/details/131029045 在运行runner的机子上,配置SSH密钥123git config --global user.name "输入你的用户名"git config --global user.email "输入你的邮箱"ssh-keygen -t rsa -C "邮箱名称" 该过程禁止设置密码 复制用户目录下id_rsa.pub的内容 将该数据填入GitLab配置公钥置处 下载GitLab Runner 下载GitLab Runner二进制文件,新建一个文件夹(不要有中文),并将二进制文件放入该文件夹,重命名为“gitlab-runner.exe” 执行部署安装指令如果代码没有子模块 直接开始运行runner,切记使用管理员权限 12.\gitlab-runner.exe install.\gitlab-runner.exe start 如果代码有子模块 必须在install的时候输入当前机子上的用户账...
蓝绿部署、金丝雀发布(灰度发布)与 AB 测试
转自:https://www.jianshu.com/p/0df88fe4a1e3 随着微服务架构的普及,线上服务越来越多,随之而来的就是部署越来越频繁;随着互联网行业的兴旺,产品迭代的频率也是越来越快,服务上线速度逐步提升。有上线、有部署,就有风险。有风险,就对业务有影响,然后就有了一系列减少这种风险的部署方案:蓝绿部署、金丝雀发布(灰度发布),也有适应产品迭代频率的AB测试。 蓝绿部署蓝绿色部署是一种通过运行两个相同的称为 BLUE 和 GREEN 的生产环境来减少停机时间和降低风险的技术。 蓝绿部署,以颜色命名,简单的理解就是,线上有两套集群环境,在架构图中,一套标记成蓝色,称为蓝色集群BLUE;一套标记为绿色,称为绿色集群GREEN。通过将流量引入两个集群,完成系统升级切换。 步骤一:部署绿色集群,这个时候是初始状态,蓝色集群承担全部责任,接收全部流量,等待被替换。绿色集群刚刚部署,还没有投入使用,流量为0,等待验证和上线。 步骤二:蓝色集群流量不变,向绿色集群引入流量。这个过程可以分成几个阶段完成。第一个阶段,引入少量非实时流量,仅用于数据测试;第二个阶段,引入...
CentOS 7 修改 Docker 容器和镜像默认存储位置
注: 目前发现在迁移过程中nexus服务会丢文件(迁移之前一定要做好测试) 转: https://segmentfault.com/a/1190000040326126 CentOS7修改Docker容器和镜像默认存储位置通常,当你开始使用docker时,我们并不太关心Docker 用于存储镜像和容器的默认目录。当使用Docker进行更多实验时,Docker开始占用大量的空间时,你不得不按下紧急按钮。所以现在是时候把故障排除放在如何改变docker的默认存储位置了 在试图改变Docker的默认存储位置时,我们必须知道一些重要的信息。 docker 当前使用的默认存储位置docker 当前使用的存储驱动程序镜像和容器要存放的新存储空间 Docker 默认的位置在/var/lib/docker,当前所有的镜像、容器都存储在这儿。如果你有任何在运行的容器,停止这些容器,并确保没有容器在运行,然后运行以下命令,确定当前Docker使用的存储驱动。 1、查看docker当前信息注:此处需要注意docker的两个信息: Storage Driver: ov...
Docker Compose 网络
默认网络 默认情况下,compose中的多个服务会加入一个名为default的网络。这些服务在default网络中是互通的。该default网络的全称是以compose文件所在文件夹名字做为前缀。比如文件夹为hello_world的compose。其一组服务对应的网络名为:hello_world_default。 这组service在该网络中,以compose文件中的第二组端口通信。 12345678910version: "3"services: web: build: . ports: - "8000:8000" db: image: postgres ports: - "8001:5432" 比如上述配置中,在hello_world_default网络中,web服务使用8000端口和db服务的5432端口通信。第一组端口8000和8001是宿主机访问web和db服务的端口。 使用已存在的网络1234docker network create es-netnetw...
