自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ThreadPoolExecutor 源码解析

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

2024-05-09 00:06:59 871

原创 ReentrantLock 源码解析

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

2024-04-24 23:19:53 1018

原创 AbstractQueuedSynchronizer 源码解析

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

2024-04-19 23:45:23 882

原创 LinkedHashMap 集合源码分析

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

2024-04-08 22:59:17 628

原创 Hashtable 集合源码分析

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

2024-04-08 21:13:27 1082

原创 HashMap 集合源码分析

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

2024-04-02 00:04:38 662

原创 TreeMap 集合源码分析

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

2024-03-29 23:19:19 682

原创 红黑树的Java实现

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

2024-03-27 20:36:48 600

原创 B 树的Java实现

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

2024-03-24 18:39:53 645

原创 PriorityQueue集合源码分析

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

2024-03-19 21:48:01 568

原创 ArrayDeque集合源码分析

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

2024-03-09 23:07:08 317

原创 LinkedList集合源码分析

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

2024-03-06 22:50:28 479

原创 ArrayList集合源码分析

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

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

原创 Vector集合源码分析

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

2024-03-03 20:31:59 570

原创 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 796 1

原创 并发编程进阶

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

2023-05-10 22:00:01 838 1

原创 Mysql 高级学习笔记

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

2023-02-02 22:48:42 792

原创 Elasticsearch 这篇还不够吗

Elasticsearch 这篇还不够吗

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

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

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

2022-10-11 19:54:15 1278

原创 JVM 学习笔记

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

2022-09-15 21:00:18 351

原创 fastjson autoType is not support

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

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

原创 使用注解实现限流

利用注解实现限流

2022-08-03 16:49:49 725

原创 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 1021

原创 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 830

原创 RabbitMQ 学习笔记

RabbitMQ 详解

2022-03-01 10:24:14 407

原创 Nginx 学习笔记

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

2022-02-16 20:21:35 207

原创 多线程详解

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

2022-02-10 21:54:56 636

原创 # 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 113

原创 Vue 学习笔记(一)

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

2022-01-30 22:39:17 1183

原创 ElasticSearch 分布式全文检索

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

2022-01-18 20:16:19 1816

原创 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 699

原创 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 837

原创 SpringCloud Alibaba Seata 处理分布式事务

SpringCloud Alibaba Seata 处理分布式事务文章目录SpringCloud Alibaba Seata 处理分布式事务一、Seata 介绍二、Seata 的下载和安装三、Seata 使用一、Seata 介绍在分布式之后,单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来实现。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性没发保证。一句话:一次业务操作需要跨多个数据源或需要跨多个系统进行远程

2022-01-08 22:41:17 647

原创 SpringCloud Alibaba Sentinel 详解

SpringCloud Alibaba Sentinel文章目录SpringCloud Alibaba Sentinel一、Sentinel 介绍二、Sentinel 下载和安装一、Sentinel 介绍Sentinel 是面向云原生微服务的流量监控,熔断降级组件。能够监控并保护你的微服务。Sentinel中文文档Hystrix 和 Sentinel 对比:Sentinel 的主要特征:二、Sentinel 下载和安装Sentinel 分为两个部分:核心库(Java客户端)不依赖任何

2022-01-06 14:46:12 955

原创 SpringCloud Alibaba Nacos服务注册和配置中心

SpringCloud Alibaba Nacos服务注册和配置中心文章目录SpringCloud Alibaba Nacos服务注册和配置中心一、Nacos介绍二、Nacos 安装三、Nacos 作为服务注册中心一、Nacos介绍为什么叫Nacos?前四个字母分别为Naming和Configuration的前俩个字母,最后一个s为Service。Nacos是什么呢?一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台。Nacos:Dynamic Naming and Configur

2022-01-02 23:13:11 380

原创 SpringCloud消息驱动 Stream

SpringCloud消息驱动 Stream文章目录SpringCloud消息驱动 Stream一、SpringCloud Stream介绍二、SpringCloud Stream常用注解简介三、SpringCloud Stream消息驱动之生产者四、SpringCloud Stream消息驱动之消费者五、SpringCloud Stream重复消费五、SpringCloud Stream持久化一、SpringCloud Stream介绍为什么引入cloiud Stream ?中间件的差异

2021-12-26 22:33:55 1120

原创 消息总线Spring Cloud Bus

消息总线Spring Cloud Bus文章目录消息总线Spring Cloud Bus一、SpringCloudBus介绍二、SpringCloudBus使用1. 运行rabbitmq一、SpringCloudBus介绍SpringCLoudBus配合SpringCloudConfig使用可以实现配置的动态刷新。SpringCLoudBus是用来将分布式系统的节点与轻量级消息系统连接起来的框架,它整合了Java的事件处理机制和消息中间件的功能。SpringCloudBus目前支持RabbitMq

2021-12-26 15:04:24 1219

原创 SpringCloud Config介绍与使用

SpringCloud Config文章目录SpringCloud Config一、SpringCloud Config概述一、SpringCloud Config的使用一、SpringCloud Config概述SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置。需求分析: 假如我们有十个微服务,这时候我们需要修改数据库地址,我们就需要十个微服务中配置 文件,从而修改一次,十分麻烦。所以我们希望

2021-12-24 22:02:32 1283

原创 Docker学习笔记

Docker学习笔记文章目录Docker学习笔记一、Docker概述二、Docker安装二、Docker命令1. 帮助命令2. 镜像命令3. 容器命令一、Docker概述虚拟机数据模型:虚拟机数据缺点:资源占用十分多冗余步骤多启动很慢容器化技术模型:比较Docker和虚拟机技术的不同:传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后再这个系统上安装和运行软件。容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所有就轻便了。每个容器间

2021-12-21 00:33:26 2885

原创 GateWay的介绍与使用

GateWay的介绍与使用文章目录GateWay的介绍与使用一、GateWay介绍1. GateWay概述2. GateWay非阻塞异步模型3. Gateway工作流程二、Gateway的使用三. GateWay常用的Predicate四. GateWay的Filter一、GateWay介绍1. GateWay概述Gateway官网Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一

2021-12-13 10:32:24 6458

sapjco3.dll

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

2021-07-09

空空如也

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

TA关注的人

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