自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (1)
  • 收藏
  • 关注

原创 Vue3 +TypeScript 项目总结

创建全局css文件:global.css将 global.css 引入 main.ts。

2026-05-13 22:16:23 373

原创 K8s 集群部署微服务 - DevOps(二)

但是一些系统服务,是所有命名空间可以共享的,在新建的企业空间无法修改,也无法看到这些服务,如需修改,需要再默认企业空间中进行修改配置。在部署服务之前,需要新建企业空间,不能在默认的企业空间进行部署,因为默认的企业空间是不能使用 DevOps 流水线的,想要 DevOps,必须要在新建的企业空间上进行。安装的过程中需要拉取 jenkins 镜像,由于拉取比较慢,可能回到导致 UI 界面提示安装失败了,但其实还在拉取的过程中,需要拉取成功后,进行卸载 DevOps,在重新安装 DevOps。

2025-12-15 17:04:58 1464 1

原创 K8s 集群部署微服务 - DevOps(一)

在前面我们手动搭建了 k8s 集群,并手动使用命令行部署了 中间件、微服务项目。部署的过程中深刻体会到了过程繁琐、yaml 文件难以管理的痛点。接下来我们使用 kubeSphere 和 helm 来解决这个痛点,实现 CI/CD,从代码提交后,后续流程通过配置的流水线自动化更新部署。通过 helm 和 kubeSphere,解决了部署应用的过程中 yaml 文件难以管理,以及 多套集群环境原先需要多套yaml文件的问题。

2025-12-04 11:01:36 1134

原创 K8s 集群部署微服务 - yaml 版本(三)

首先 volumeClaimTemplates 是 StatefulSet(有状态服务) 的专属字段。为 StatefulSet 管理每一个 pod 都会单独创建一个独立的、与 pod 生命周期绑定的 pvc 以及对应的 pv。每个 Pod 挂载自己的专属存储,数据互不干扰,且 Pod 重建(即使调度到其他节点)仍能绑定到原来的 PVC。日志可通过 NFS 共享存储挂载(所有副本写日志到同一个 NFS 目录,或按 Pod 名分目录),无需每个副本专属 PVC。

2025-11-20 14:50:14 1085 5

原创 K8s 集群部署中间件 - yaml 版本(二)

创建 PVC 有两种 方式:PVC 只会和 一个 PV 进行绑定。使用 kind:PersistentVolumeClaim 来单独创建 PVC。与 pod / Deployment 等通过 vloumes.persistenVolumeClaim.claimName:[PVC name] 进行关联。该 PVC 是独立的 k8s 资源,其生命周期与使用它的 pod / Deployment 等解耦。即时 pod 被删除,PVC 与其绑定的 PV 仍会保留,除非手动删除。

2025-11-09 23:29:46 1082

原创 K8s 集群环境搭建 - yaml 版本(一)

不同地域的云服务器内网不互通,而 k8s 集群中,master 连接 woker 默认采用的内网连接,比如连接 master 连接 woker 的 10250 端口,通过此端口获取节点状态,下发容器操作指令等。在 Kubernetes 中,CSI 提供了一种标准的方式,用于与第三方存储供应商(如 NFS、AWS EFS、Ceph、GlusterFS、Minio 等)对接,实现存储卷的创建、挂载、卸载等操作。我这里是直接在 Master 节点安装的,所以直接用的 Master 节点的内网IP。

2025-10-23 18:16:19 948

原创 docker 部署汇总

桥接网络:桥接网络是 Docker 默认的网络模式。当你启动一个容器时,它会自动连接到一个名为 bridge 的默认网络。这个网络中的容器会被分配一个 IP 地址,但这些地址是动态分配的,你不能手动指定。如果采用这种默认的方式,就会导致每次容器重启,他所属的IP地址可能就会发生变化,容器之间如果存在通信,就会导致通信中断,包括集群也是。主机网络:主机网络模式允许容器共享主机的网络堆栈。这个模式通常用于需要高性能网络连接的场景,但它不会给容器分配独立的 IP 地址,而是使用主机的 IP 地址。

2025-10-23 18:03:19 1186

原创 高并发场景中的并发阻塞队列 Queue

队列的容量有一个固定大小的上限,一旦队列中的数据对象总量达到容量的上限时,队列就会对添加操作进行容错处理。例如返回false,表示操作失败。抛出运行时异常。进入阻塞状态,直到操作条件满足要求。不再允许立刻添加数据对象了。参考资料:BlockingQueue用法详解书籍:银文杰:《Java 高并发与集合框架》

2024-09-10 21:23:37 388

原创 ThreadPoolExecutor 源码解析

ThreadPoolExecutor 结构图如下:原子整型,高三位:线程池状态。低29位:Worker数量,即当前线程池中正在执行任务的线程数。todo线程状态字段::表示线程池中线程数量的位数 (32 - 3)。:表示线程中的最大线程数量(2^29 - 1)。用于存放已提交待执行的任务。可重入锁,ThreadPoolExecutor 存放线程池中的线程集合使用 HashSet< Worker > 存储的,而HashSet 是非线程安全的,所以操作前会先获取锁,在进行操作。存放线程池中线程的集合,在访问这个

2024-05-09 00:06:59 1177

原创 ReentrantLock 源码解析

ReentrantLock 实现了 Lock 接口,内部基于 AQS 实现。所以想要弄懂 ReentrantLock ,一定要先弄明白AQS。ReentrantLock 是可重入锁,同一个线程能够多次获取到同一个 ReentrantLock 锁。ReentrantLock 类采用的是 AQS 技术中的独占模式,实现了 AQS 的 3 个关键方法:tryAcquire(),tryRelease(),isHeldExclusively()方法。

2024-04-24 23:19:53 1520

原创 AbstractQueuedSynchronizer 源码解析

总综上,head 在并发的过程中是可能被别的线程修改的,所以需要 h == null 和 (h = head) == null 的判断,同时为了防止节点都能被唤醒,所以 head.waitStatus = 0 的情况下 设置 head.waitStatus = PROPAGATE,并且 在 setHeadAndPropagate 方法里通过 h.waitStatus < 0 的判断避免节点出现无法唤醒的情况,不得不说,设计真的非常巧妙。Node 节点就是用来包装一个个的线程的。

2024-04-19 23:45:23 1213

原创 LinkedHashMap 集合源码分析

我们知道 HashMap 并不能保证有序性,而 LinkedHashMap 作为 HashMap 子类解决了排序的问题。在构造时,通过传入afterNodeAccess = true 来设置LinkedHashMap是有序的。通过维护双向来链表来保证有序性,拥有变量 head 和 tail 分别指向双向链表的头结点和尾结点,越靠近 尾结点,越是最近访问的节点,越是靠近头结点,越是越久未被访问的节点。可用于实现 LRU 算法:@Override//最大容量。

2024-04-08 22:59:17 838

原创 Hashtable 集合源码分析

Hashtable 使用的哈希表 + 链表来实现的Hashtable 采用的是 数组实现的哈希表 + 链表的结构来实现的。因为在方法上使用了 synchronized 所以是线程安全,但由于是重量级锁,锁的粒度过大,所以效率低下。在进行扩容时,新容量为旧容量的2倍 + 1,当然会检查移除的情况,最大不得超过 Integer.MAX_VALUE - 8。在插入元素和扩容时采用的都是头插法。谈谈和hashmap的区别。

2024-04-08 21:13:27 1276

原创 HashMap 集合源码分析

HashMap 底层是使用了 哈希表(数组实现的哈希表)+ 链表 + 红黑树 实现的,所以学习HashMap的源码,如果对这些数据结构比较了解的话,学习的过程中会有些帮助。本文章主要针对 HashMap 的数据结构 TreeNode 设计,添加元素,删除元素,扩容,红黑树转链表,链表转红黑树等方法做了详细的介绍分析。小破栈上的小码哥HashMap讲解HashMap中针对高位与低位的理解。

2024-04-02 00:04:38 778

原创 TreeMap 集合源码分析

TreeMap是一个有序的容器,底层是使用了红黑树存储来存储数据,来保证它的有序性,通过红黑树节点的k来进行排序。默认是不支持存储key 为null的,因为 在使用 compare 比较之前会强行转换为 Comparable,所以key 为null 会报错,同时也说明,如果没有传入比较器,那么传入的key 的数据类型得是 Comparable 的实现类。为什么采用红黑树,而不是采用像AVL这种同样是二叉平衡二叉搜索树呢?

2024-03-29 23:19:19 834

原创 红黑树的Java实现

红黑树也是一种二叉平衡搜索树,向比与AVL树,是一种弱平衡树。因为AVL树是通过平衡因子,左右树的高度相差不能大于1来保证平衡,而红黑树的左右字数的高度差并不固定,可以大于1,也没有平衡因子的概念。它是通过维护五条性质来保证红黑树是平衡的。红黑树五条性质:节点是 RED 或者 BLACK。根节点是 BLACK。叶子结点(外部节点,空节点)都是 BLACK。RED 节点的子节点都是 BLACK。可类比出两条性质RED 节点的 parent 都是 BLACK。从根节点到叶子结点。

2024-03-27 20:36:48 747

原创 B 树的Java实现

M :表示B树的阶数。root :根节点。minKeySize :非根节点含有的最少关键字数量,如果少于该数量,则发生下溢。maxKeySize:每个节点(包含根节点和非根节点)的最大关键字数,如果超过了,则发生上溢。kComparator:用于比较 k,使用k来进行排序,因为我们存储数据使用键值对来存储的。//b 树的根节点//非根节点中最小的键值对(根节点则是 [1,M-1])//所有节点中最大键值对//键的比较器Entry :用来存储关键字。K 用来排序。

2024-03-24 18:39:53 914

原创 PriorityQueue集合源码分析

常用于优先级队列,即堆顶元素时优先级最高的/或最低的(看传入的比较器)。不是线程安全的。PriorityQueue 默认是小顶堆,是基于数组实现的完全二叉树来构建的堆。拥有完全二叉树的性质。在初始化时,如果基于其他集合构建的 PriorityQueue,则通过自下而上的下滤操作来进行堆化操作,从而调整成为小顶堆。添加元素时,添加至元素尾部,然后通过上滤进行调整,获取堆顶元素时,通过交换尾元素至堆顶,然后惊醒下滤操作进行调成成小顶堆。

2024-03-19 21:48:01 870

原创 ArrayDeque集合源码分析

使用的是可循环使用的双指针数组来存储结构。可以有效的减少扩容次数,并且提高资源利用率。不支持存储null元素。是线程不安全的。可当做链表,栈,队列使用。在头部和尾部插入或者删除元素,时间复杂度为 O(1),但是在扩容的时候需要批量移动元素,其时间复杂度为 O(n)。扩容的时候,将数组长度扩容为原来的 2 倍,即 n

2024-03-09 23:07:08 507

原创 LinkedList集合源码分析

LinkedList 使用双向链表来存储元素,不需要连续的内存空间来存储元素,所以不需要扩容。一般作为队列,直接操作头部和尾部。支持存储或删除相同的元素,且支持存储null,存储的元素有序。存在相同多个值是,会删除靠近头结点的值。查找元素只能遍历查找,效率慢O(n),删除,插入快O(1)。根据元素值查找,只能从头结点开始遍历。如果根据 位置查找,会从距离头结点或尾结点近的一方开始遍历。不是线程安全的。

2024-03-06 22:50:28 555

原创 ArrayList集合源码分析

ArraList 底层使用数组存储结构,删除或添加元素的效率时间复杂度O(n),效率低下。查找元素快 O(1)。是线程不安全的数据结构,并发场景下可能带来非线程安全的问题。扩容是按1.5来进行扩容,当然不是绝对的,如果扩容后的容量比需要的容量还小,则新容量就是我们需要的容量。比如第一次添加元素时,会判断调用的是那种构造函数,无参第一次扩容为10,有参且为0,扩容后为1。还有就是快要溢出的情况,当需要的容量 > MAX_ARRAY_SIZE,则新容量为Integer.MAA_VALUE。

2024-03-03 20:32:27 884 1

原创 Vector集合源码分析

Vector:是线程安全的集合。因为添加元素和删除元素的方法都有syncnized修饰。因为syncnized是重量级锁且是悲观锁,所以效率并不高。使用数组来存储元素。Vector有两种迭代器,可根据不同场景选择不同的迭代器。通过维护游标curosr和lastRet来维护下一个要访问的元素下标和上一次访问元素下标。Itr迭代器迭代过程不允许集合被修改,通过该迭代器初始化时记录集合的版本号,并在跌单的过程用该版本号和集合的版本号进行比对来判断是否被修改。

2024-03-03 20:31:59 768

原创 Kubernetes 入门

比如现在的nginx版本为1.7,将版本修改为1.9退出后发现我们的pod中的nginx 并没有更新,还是1.7版本,如果我们将pod-4删除了,发现该pod又会被创建,使用的就是我们修改后最新的配置文件,即nginx 版本为1.9。以下是一个具有容忍度的示例:定义了一个名为"toleration-pod"的Pod,并在Pod的tolerations字段中定义了一个匹配污点的容忍度规则,该规则表示Pod能够在具有"dedicated=high-performance"污点的节点上运行。

2023-07-22 16:50:48 1138 1

原创 并发编程进阶

规定了一个线程如何何时可以看到由其他线程修改后的共享变量的值,以及在必须时如何同步的访问共享变量。JMM描述的是一种抽象的概念,一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性、有序性、可见性展开的。不同硬件实现内存屏障的方式不同,Java内存模型屏蔽了这种底层硬件平台的差异,由JVM来为不同的 平台生成相应的机器码。

2023-05-10 22:00:01 1050

原创 Mysql 高级学习笔记

系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例

2023-02-02 22:48:42 965

原创 Elasticsearch 这篇还不够吗

Elasticsearch 这篇还不够吗

2023-01-23 19:32:02 5996 1

原创 Java 多线程编程核心技术

进程是操作系统的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。可以理解为在一个进程中独立运行的子任务。进程虽然是互相独立的,但它们可以互相通信的,较为通用的方式是使用 Socket 或 HTTP 协议。进程拥有共享的系统资源,比如内存,网络端口,供其内部线程使用。进程较重,因为创建进程需要操作系统分配资源,会占用内存。线程存在于进程中,是进程的一个子集,现有进程,后有线程。

2022-10-11 19:54:15 1573

原创 JVM 学习笔记

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用文章目录系列文章目录一、pandas是什么?一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。...............

2022-09-15 21:00:18 515

原创 fastjson autoType is not support

在做SpringSecurity 的用户权限功能时,登录用户实体类中需要获取权限信息。实体类继承,通过方法获取用户权限信息。用户登录后,将该实体类存储在redis中,然后校验用户权限时,用携带的 token 再次从redis 中获取该用户信息。在获取。...

2022-08-09 15:15:33 2516 3

原创 使用注解实现限流

利用注解实现限流

2022-08-03 16:49:49 915

原创 Vue 学习笔记(三)

Vue 学习笔记(三)文章目录Vue 学习笔记(三)一、Vue 脚手架1. 脚手架安装2. 分析脚手架结构3. render 函数4. 修改默认配置5.一、Vue 脚手架Vue 脚手架是 Vue 官方提供的标准化开发工具(开发平台)官方文档1. 脚手架安装全局安装 @Vue/clinpm install -g @vue/cli如果出现下载缓慢,可以先配置 npm 淘宝镜像:npm config set registry https://registry.npm.taobao.o

2022-03-20 21:51:07 1100

原创 JWT 认证介绍与使用

JWT 认证文章目录JWT 认证一、JWT 介绍1. 什么是JWT2. JWT 能做什么3. 为什么选择JWT4. JWT的结构是什么二、JWT 使用一、JWT 介绍JWT 官网1. 什么是JWTJWT简称 JSON Web Token ,也就是通过 JSON 形式作为 Web 应用中的令牌,用于各方之间安全地将信息作为 JSON 对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。2. JWT 能做什么授权:这是使用 JWT 的最常见的方案。一旦用户登录,每个后续请求将包括 JW

2022-03-17 11:38:38 1261

原创 RabbitMQ 学习笔记

RabbitMQ 详解

2022-03-01 10:24:14 560

原创 Nginx 学习笔记

Nginx 学习笔记文章目录Nginx 学习笔记一、Nginx 基本概念1. Nginx 的介绍一、Nginx 基本概念1. Nginx 的介绍什么是 Nginx?Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载均衡的考验,有报告表明能支持高达 50000 个并发连接数。正向代理:在客户端(浏览器)配置代理

2022-02-16 20:21:35 269

原创 多线程详解

多线程详解文章目录多线程详解一、线程简介线程基础知识1. 线程的创建一、线程简介进程与线程:线程基础知识普通方法调用和多线程:1. 线程的创建创建线程的三种方式:Thread.class:继承Thread类。Runable 接口:实现Runnable 接口。Callable 接口:实现Callable 接口。继承 Thread.class 实现多线程(不建议使用,以为受单继承的局限性):自定义线程类继承Thread类重写 run() 方法,编写线程执行体创建线程对象,

2022-02-10 21:54:56 735

原创 # Vue 学习笔记(二)

Vue 学习笔记(二)文章目录Vue 学习笔记(二)一、收集表单数据一、过滤器三、内置指令1. v-text 指令2. v-html 指令3. v-cloak 指令4. v-once 指令5. v-pre_指令四、自定义指令1. 回顾 DOM 操作2. 自定义指令五、生命周期1. 引出生命周期2. 分析生命周期3. 总结生命周期六、非单文件组件1. 基本使用2. 几个注意点3. 组件的嵌套4. VueComponent5. 一个重要的内置关系七、单文件组件一、收集表单数据<!DOCTYPE h

2022-02-04 22:02:42 186

原创 Vue 学习笔记(一)

Vue 轻松入门文章目录Vue 轻松入门一、Vue 概述二、 搭建Vue环境一、Vue 概述Vue 官网Vue 一套用于构建用户界面的渐进式JavaScrip 框架。Vue 可以自底向上逐层的应用简单应用:只需一个轻量小巧的核心库。复杂应用:可以引入各式各样的 Vue 插件。Vue 的特点:采用组件化模式,提高代码的复用率,且让代码更好维护。(如下图:三个模块类似三个组件,我们修改只需在对应的组件里修改Html或JS文件即可)声明式编码,让编码人员无需直接操作 DOM ,提高

2022-01-30 22:39:17 1277

原创 ElasticSearch 分布式全文检索

ElasticSearch 分布式全文检索文章目录ElasticSearch 分布式全文检索一、ElasticSearch 概述一、ElasticSearch 安装1. Windows 下使用一、ElasticSearch 概述谁在使用:ElasticSearch 和 Solr 对比:ElasticSearch 简介:Solr 简介:对比:当单纯的对已有的数据进行搜索时,Solr 更快。当实时建立索引时,Solr 会产生io阻塞,查询性能较差,Elasticsearch 具

2022-01-18 20:16:19 1970

原创 Redis 学习笔记

Redis 学习笔记文章目录Redis 学习笔记一、Redis 介绍1. Redis 概述2. Redis 应用场景二、Redis 安装1. Redis 启动1. 前台启动2 后台启动三、Redis 五大数据结构1. Redis 键(key)的常用命令2. 字符串(String)3. 列表(List)4. 集合(Set)5. 哈希(Hash)6. 有序集合(Zset)四、Redis 发布和订阅一、Redis 介绍1. Redis 概述Redis 是一个开源的key-value 存储系统。Red

2022-01-15 18:30:51 842

原创 Docker Compose 容器管理

Docker Compose 容器管理文章目录Docker Compose 容器管理一、Docker Compose 介绍二、Docker Compose 安装一、Docker Compose 介绍我们操作单个服务时,需要先创建DockerFile,然后 build 创建容器并运行。但要是有100个微服务呢,显然一个一个的去操作不显示,而且服务之间有强的依赖关系。这时候就需要Docker Compose 来轻松高效的管理容器。作用: 批量容器编排。Compose 是Docker 官方的开源项目。需

2022-01-10 17:18:40 948

sapjco3.dll

用于解决打包时报错:no sapjco3 in java.library.path,将改文件放入C:\Windows\System32可解决该错

2021-07-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除