- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 红黑树的Java实现
红黑树也是一种二叉平衡搜索树,向比与AVL树,是一种弱平衡树。因为AVL树是通过平衡因子,左右树的高度相差不能大于1来保证平衡,而红黑树的左右字数的高度差并不固定,可以大于1,也没有平衡因子的概念。它是通过维护五条性质来保证红黑树是平衡的。红黑树五条性质:节点是 RED 或者 BLACK。根节点是 BLACK。叶子结点(外部节点,空节点)都是 BLACK。RED 节点的子节点都是 BLACK。可类比出两条性质RED 节点的 parent 都是 BLACK。从根节点到叶子结点。
2024-03-27 20:36:48 420
原创 B 树的Java实现
M :表示B树的阶数。root :根节点。minKeySize :非根节点含有的最少关键字数量,如果少于该数量,则发生下溢。maxKeySize:每个节点(包含根节点和非根节点)的最大关键字数,如果超过了,则发生上溢。kComparator:用于比较 k,使用k来进行排序,因为我们存储数据使用键值对来存储的。//b 树的根节点//非根节点中最小的键值对(根节点则是 [1,M-1])//所有节点中最大键值对//键的比较器Entry :用来存储关键字。K 用来排序。
2024-03-24 18:39:53 606
原创 PriorityQueue集合源码分析
常用于优先级队列,即堆顶元素时优先级最高的/或最低的(看传入的比较器)。不是线程安全的。PriorityQueue 默认是小顶堆,是基于数组实现的完全二叉树来构建的堆。拥有完全二叉树的性质。在初始化时,如果基于其他集合构建的 PriorityQueue,则通过自下而上的下滤操作来进行堆化操作,从而调整成为小顶堆。添加元素时,添加至元素尾部,然后通过上滤进行调整,获取堆顶元素时,通过交换尾元素至堆顶,然后惊醒下滤操作进行调成成小顶堆。
2024-03-19 21:48:01 508
原创 ArrayDeque集合源码分析
使用的是可循环使用的双指针数组来存储结构。可以有效的减少扩容次数,并且提高资源利用率。不支持存储null元素。是线程不安全的。可当做链表,栈,队列使用。在头部和尾部插入或者删除元素,时间复杂度为 O(1),但是在扩容的时候需要批量移动元素,其时间复杂度为 O(n)。扩容的时候,将数组长度扩容为原来的 2 倍,即 n
2024-03-09 23:07:08 284
原创 LinkedList集合源码分析
LinkedList 使用双向链表来存储元素,不需要连续的内存空间来存储元素,所以不需要扩容。一般作为队列,直接操作头部和尾部。支持存储或删除相同的元素,且支持存储null,存储的元素有序。存在相同多个值是,会删除靠近头结点的值。查找元素只能遍历查找,效率慢O(n),删除,插入快O(1)。根据元素值查找,只能从头结点开始遍历。如果根据 位置查找,会从距离头结点或尾结点近的一方开始遍历。不是线程安全的。
2024-03-06 22:50:28 445
原创 ArrayList集合源码分析
ArraList 底层使用数组存储结构,删除或添加元素的效率时间复杂度O(n),效率低下。查找元素快 O(1)。是线程不安全的数据结构,并发场景下可能带来非线程安全的问题。扩容是按1.5来进行扩容,当然不是绝对的,如果扩容后的容量比需要的容量还小,则新容量就是我们需要的容量。比如第一次添加元素时,会判断调用的是那种构造函数,无参第一次扩容为10,有参且为0,扩容后为1。还有就是快要溢出的情况,当需要的容量 > MAX_ARRAY_SIZE,则新容量为Integer.MAA_VALUE。
2024-03-03 20:32:27 728 1
原创 Vector集合源码分析
Vector:是线程安全的集合。因为添加元素和删除元素的方法都有syncnized修饰。因为syncnized是重量级锁且是悲观锁,所以效率并不高。使用数组来存储元素。Vector有两种迭代器,可根据不同场景选择不同的迭代器。通过维护游标curosr和lastRet来维护下一个要访问的元素下标和上一次访问元素下标。Itr迭代器迭代过程不允许集合被修改,通过该迭代器初始化时记录集合的版本号,并在跌单的过程用该版本号和集合的版本号进行比对来判断是否被修改。
2024-03-03 20:31:59 543
原创 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 248 1
原创 并发编程进阶
规定了一个线程如何何时可以看到由其他线程修改后的共享变量的值,以及在必须时如何同步的访问共享变量。JMM描述的是一种抽象的概念,一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,JMM是围绕原子性、有序性、可见性展开的。不同硬件实现内存屏障的方式不同,Java内存模型屏蔽了这种底层硬件平台的差异,由JVM来为不同的 平台生成相应的机器码。
2023-05-10 22:00:01 548 1
原创 Mysql 高级学习笔记
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例
2023-02-02 22:48:42 432
原创 Java 多线程编程核心技术
进程是操作系统的基础,是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动;是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。可以理解为在一个进程中独立运行的子任务。进程虽然是互相独立的,但它们可以互相通信的,较为通用的方式是使用 Socket 或 HTTP 协议。进程拥有共享的系统资源,比如内存,网络端口,供其内部线程使用。进程较重,因为创建进程需要操作系统分配资源,会占用内存。线程存在于进程中,是进程的一个子集,现有进程,后有线程。
2022-10-11 19:54:15 429
原创 JVM 学习笔记
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用文章目录系列文章目录一、pandas是什么?一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。...............
2022-09-15 21:00:18 318
原创 fastjson autoType is not support
在做SpringSecurity 的用户权限功能时,登录用户实体类中需要获取权限信息。实体类继承,通过方法获取用户权限信息。用户登录后,将该实体类存储在redis中,然后校验用户权限时,用携带的 token 再次从redis 中获取该用户信息。在获取。...
2022-08-09 15:15:33 1918 3
原创 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 1006
原创 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 776
原创 Nginx 学习笔记
Nginx 学习笔记文章目录Nginx 学习笔记一、Nginx 基本概念1. Nginx 的介绍一、Nginx 基本概念1. Nginx 的介绍什么是 Nginx?Nginx 是一个高性能的 HTTP 和反向代理服务器,特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。Nginx 专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载均衡的考验,有报告表明能支持高达 50000 个并发连接数。正向代理:在客户端(浏览器)配置代理
2022-02-16 20:21:35 193
原创 多线程详解
多线程详解文章目录多线程详解一、线程简介线程基础知识1. 线程的创建一、线程简介进程与线程:线程基础知识普通方法调用和多线程:1. 线程的创建创建线程的三种方式:Thread.class:继承Thread类。Runable 接口:实现Runnable 接口。Callable 接口:实现Callable 接口。继承 Thread.class 实现多线程(不建议使用,以为受单继承的局限性):自定义线程类继承Thread类重写 run() 方法,编写线程执行体创建线程对象,
2022-02-10 21:54:56 611
原创 # 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 97
原创 Vue 学习笔记(一)
Vue 轻松入门文章目录Vue 轻松入门一、Vue 概述二、 搭建Vue环境一、Vue 概述Vue 官网Vue 一套用于构建用户界面的渐进式JavaScrip 框架。Vue 可以自底向上逐层的应用简单应用:只需一个轻量小巧的核心库。复杂应用:可以引入各式各样的 Vue 插件。Vue 的特点:采用组件化模式,提高代码的复用率,且让代码更好维护。(如下图:三个模块类似三个组件,我们修改只需在对应的组件里修改Html或JS文件即可)声明式编码,让编码人员无需直接操作 DOM ,提高
2022-01-30 22:39:17 1161
原创 ElasticSearch 分布式全文检索
ElasticSearch 分布式全文检索文章目录ElasticSearch 分布式全文检索一、ElasticSearch 概述一、ElasticSearch 安装1. Windows 下使用一、ElasticSearch 概述谁在使用:ElasticSearch 和 Solr 对比:ElasticSearch 简介:Solr 简介:对比:当单纯的对已有的数据进行搜索时,Solr 更快。当实时建立索引时,Solr 会产生io阻塞,查询性能较差,Elasticsearch 具
2022-01-18 20:16:19 1749
原创 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 669
原创 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 719
原创 SpringCloud Alibaba Seata 处理分布式事务
SpringCloud Alibaba Seata 处理分布式事务文章目录SpringCloud Alibaba Seata 处理分布式事务一、Seata 介绍二、Seata 的下载和安装三、Seata 使用一、Seata 介绍在分布式之后,单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三个服务来实现。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性没发保证。一句话:一次业务操作需要跨多个数据源或需要跨多个系统进行远程
2022-01-08 22:41:17 595
原创 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 827
原创 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 350
原创 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 1096
原创 消息总线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 1206
原创 SpringCloud Config介绍与使用
SpringCloud Config文章目录SpringCloud Config一、SpringCloud Config概述一、SpringCloud Config的使用一、SpringCloud Config概述SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供一个中心化的外部配置。需求分析: 假如我们有十个微服务,这时候我们需要修改数据库地址,我们就需要十个微服务中配置 文件,从而修改一次,十分麻烦。所以我们希望
2021-12-24 22:02:32 1097
原创 Docker学习笔记
Docker学习笔记文章目录Docker学习笔记一、Docker概述二、Docker安装二、Docker命令1. 帮助命令2. 镜像命令3. 容器命令一、Docker概述虚拟机数据模型:虚拟机数据缺点:资源占用十分多冗余步骤多启动很慢容器化技术模型:比较Docker和虚拟机技术的不同:传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后再这个系统上安装和运行软件。容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所有就轻便了。每个容器间
2021-12-21 00:33:26 1584
原创 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 4346
原创 Histrix介绍与使用
Histrix介绍与使用文章目录Histrix介绍与使用一、概述二、使用1.Hystrix之服务降级2.Hystrix之服务熔断理论3. Hystrix之服务熔断总结3. Hystrix图形化Dashboard搭建一、概述分布式系统面临的问题:复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。服务雪崩:多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应
2021-12-10 16:28:15 443
原创 Ribbon与OpenFeign
Ribbon与OpenFeign文章目录Ribbon与OpenFeign一、Ribbon1. Ribbon入门介绍2. Ribbon的负载均衡和Rest调用3. Ribbon默认自带的负载规则4. Ribbon负载规则替换5. Ribbon默认负载轮询算法原理二、OpenFeign1. OpenFeign是什么2. OpenFeign服务调用3. OpenFeign超时控制4. OpenFeign日志增强一、Ribbon1. Ribbon入门介绍Spring Cloud Ribbon是基于Net
2021-12-03 11:43:58 394
原创 注册中心zookeeper与consul应用与测试
注册中心zookeeper与consul应用与预测注册中心zookeeper与consul注册中心zookeeper与consul应用与预测一、注册中心Zookeeper1. 服务提供者2. 服务的消费者二、注册中心Consul1. Consul简介2. 安装并运行Consul3. 服务提供者注册进Consul4. 服务消费者注册进Consul三、Eureka,Zookeeper和Consul三者的异同点一、注册中心Zookeeperzookeeper是一个分布式协调工具,可以实现注册中心功能
2021-11-30 17:36:23 154
原创 Zookeeper从入门到入土
Zookeeper从入门到入土文章目录Zookeeper从入门到入土一、Zookeeper入门1.概述2.Zookeeper工作机制3.Zookeeper特点4.数据结构5.应用场景二、使用步骤1.引入库2.读入数据总结一、Zookeeper入门1.概述Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目。示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。2.Zookeeper工作机制Zookeeper从设计模式角度来理解
2021-11-24 16:26:30 1090
原创 服务注册中心Eureka
服务注册中心Eureka文章目录服务注册中心Eureka一、什么是服务治理二、什么是服务注册与发现三、Eureka两个组件三、单机版Eureka1.依赖引用2.yml相关配置3.主启动类3.测试二、使用步骤1.引入库2.读入数据总结一、什么是服务治理Spring Cloud 封装了Netflix公司开发的Eureka模块来实现服务治理。在传统的rpc远程调用框架中,管理每个服务于服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用,负载均衡,
2021-10-12 15:52:58 88
原创 排序算法之堆排序
插入排序详解文章目录插入排序详解一、前言二、使用步骤1.引入库2.读入数据总结一、前言示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warningswarnings.filterwarnings('ignore
2021-09-09 10:44:04 128
原创 排序算法之希尔排序
插入排序详解文章目录插入排序详解一、前言二、交换法希尔排序三、移动法希尔排序四、时间复杂度和空间复杂度一、前言1959 年 77 月,美国辛辛那提大学的数学系博士 Donald Shell 在 《ACM 通讯》上发表了希尔排序算法,成为首批将时间复杂度降到 O(n^2)以下的算法之一。虽然原始的希尔排序最坏时间复杂度仍然是 O(n^2)但经过优化的希尔排序可以达到 O(n^{1.3})甚至 O(n^{7/6})。略为遗憾的是,所谓「一将功成万骨枯」,希尔排序和冒泡、选择、插入等排序算法一样
2021-08-31 09:35:10 163
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人