自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(285)
  • 资源 (2)
  • 收藏
  • 关注

原创 Docker高级篇之轻量化可视化工具Portainer

Portianer是一款轻量级的应用,它提供了图形化界面,用于方便管理Docker环境,包括单机环境和集成环境。

2024-06-10 11:10:26 729 1

原创 Docker高级篇之Docker-compose容器编排

Docker-compose时Docker官方的一个开源的项目,负责对Docker容器集群的快速编排。Docker-compose可以管理多个Docker容器组成一个应用,你需要定义一个YAML格式的配置文件,docker-compose.yml,写好多个容器之间的调用关系,然后,只需要一个命令,就能同时启动/关闭这些容器。docker建议我们每个容器中只运行一个服务,因为docker容器本身占用的资源比较少,所以是将每个服务单独的分割开来,但是这样我们又面临一个问题?

2024-06-10 10:50:27 1546

原创 Docker高级篇之Docker网络

从Docker的架构和运作流程来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者Docker Daemon作为Docker架构的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求Docker Engine执行Docker内部的一系列工作,每一项工作都是以一个job的形式存在。

2024-06-09 17:09:42 1644 1

原创 Docker高级篇之Docker微服务实战

将要上传到docker中的jar包最好要和Dockerfile放在同一个目录下。

2024-06-09 15:14:47 659

原创 Docker高级篇之Dockerfile解析

DockerFile是用来构建Docker镜像的文本文件,是由一条条构建镜像的指令和参数构成的脚本。

2024-06-06 22:50:05 1465 1

原创 Docker高级篇之安装Redis集群(分布式存储案例)

但这个方法缺点也是很明显的,原来规划好的节点,进行扩容或者缩容就比较麻烦,每次数据变动导致节点有变动,映射关系需要重新计算,在服务器个数不变时,哈希取余分区方法是很高效的,如果需要弹性扩容或者故障停机的情况下,原来的取模公式就会发生变化。一致性hash算法有很多优点,首先它具有容错性,假设上图的Node C节点宕机了,此时Object C的数据就会放到Node D中,也就是说在一执行hash算法中,如果一台服务器不可用,则受影响的数据仅仅是次服务器到其环空间中前一台服务器的数据,其它不会收到影响。

2024-06-05 20:48:10 1288 3

原创 Docker高级篇之Docker搭建mysql主从复制架构

master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据库的状态,获取file参数。master_connect_retry:连接失败重试的时间间隔,单位为秒。主机创建1个库db01,库中分别创建1一个表,然后表中插入数据。master_user:主数据库创建的用于同步数据库的用户账号。master_log_pos:指定从数据库哪个位置开始复制数据。master_password:用户账号对应的密码。master_host:主数据库ip地址。master_port:主数据库端口。

2024-06-04 17:11:32 560

原创 Docker基础篇之Docker常规软件安装

以上docker就成功部署了mysql服务,现在思考一个问题,如果我们一个mysql容器里面装的数据很重要,但是有人给这个容器给删除了怎么办?这种情况在线上是很严重的,为了保证容器被删除mysql数据不丢失,我们需要数据卷挂载技术。发现访问状态为404,这是因为新版本的tomcat做了一些更新,我需要修改容器的一些配置。可以发现webapps下面什么都没有,其实真正的内容在webapps.dist中。-p:小写:主机端口:docker容器端口。-P:大写:随机分配端口。然后重启一下mysql。

2024-06-04 14:45:06 884

原创 Docker基础篇之Docker容器数据卷

如果是Centos安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认是不安全的行为,在Selinux里面挂载目录被禁止掉了,如果要开启一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限。前面的案例容器卷可以写,主机挂载目录也可以写,然后主机和容器之间可以实现互联互通,这是Docker容器卷挂载的默认读写规则。

2024-06-03 22:05:47 1273 2

原创 Docker基础篇之将本地镜像发布到私有库

Docker Registry是官方提供的工具,可以用于构建私有镜像仓库。

2024-06-03 21:23:45 872

原创 Docker基础篇之本地镜像发布到阿里云

我们可以看到镜像仓库完成后,阿里云给了我们许多现成的命令。可以看到阿里云上已经有我们的镜像了。

2024-06-03 20:20:32 618

原创 Docker基础篇之Docker镜像

Docker中的镜像分层,支持通过扩展现有镜像,创建新的镜像。类似于java继承了一个base类,自己按需扩展。新镜像是从base镜像一层一层叠加来的,每安装一个软件,就在现有镜像的基础上增加一层。

2024-06-03 11:13:45 1263

原创 XXL-JOB学习

xxl-job下载地址:https://github.com/xuxueli/xxl-job。上面代码中一个执行器管理一个任务的执行,如果扩展为一个集群那么定时任务该如何执行?从数据库中我们就可以看到我们添加任务的详细信息了。可以看出控制台的输出了我们想要的任务执行结果。然后默认密码是:admin/123456。

2024-06-03 11:00:06 190

原创 ShardingSphere使用案例

是一样的所以造成了只分布在了每个库中的一个表中,所以我们需要修改分表的语句为。这两个表达式相同,数据首先分库均匀的分布在了两个数据库,然后再分表。运行原先代码,我们可以发现出现了数据分布不均匀的情况,因为。这样就平局分配到了四个分片中了。

2024-05-28 11:44:56 198

原创 Docker基础篇之常用命令

启动docker:停止docker:重启docker:查看docker 的运行状态:开机启动:查看docker该要信息:查看docker 帮助文档查看docker命令帮助文档:同一个仓库源可以有多个Tag版本,代表这个仓库源的不同个版本,我们使用Repository:Tag来定义不同的镜像。它的options选项说明如下:docker search [options]:远程库中查找某个镜像的名称它的options选项说明如下:docker pull 某个xxx镜像名字:将

2024-05-27 15:16:27 1168

原创 Docker基础篇之入门使用

Docker为什么比传统的虚拟机快?docker有着比虚拟机更少的抽象层由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在docker容器上的程序直接使用的是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显的优势。docker利用的是宿主机的内核,而不需要加载操作系统OS内核当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。

2024-05-27 14:01:55 819

原创 Docker基础篇之Docker入门介绍

一次镜像,处处运行Docker是基于Go语言实现的云开源项目。Docker的主要目标是“Build,Ship and Run Any APP,AnyWhere”,也就是用过对应用组件的封装、分发、部署、运行等生命周期的管理,使得用户的APP及其运行环境能够做到一次镜像、处处运行。Linux容器技术的出现解决了这样的一个问题,尔Docker就是在它的基础傻上发展过来的,将应用打成镜像,通过镜像称为运行在Docker容器上的实例,而Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。

2024-05-27 12:13:50 1053

原创 一文掌握gRPC

gRPC是由google开源的高性能的RPC框架。它是由google的Stubby这样一个内部的RPC框架演化出来,gRPC2015年开源,目前是在云原生时代的一个RPC的标准。协议:使用Http2协议(传输数据使用二进制数据内容、支持双向流[双工]、连接的多路复用)序列化:基于二进制(protobuf- 谷歌开源的一种序列化方式)代理的创建 :让调用者像调本地方法一样去调用远端的方法Thrift和gRPC的区别:首先Thrift和gRPC这两个RPC框架有一个共性,就是都支持异构语言的RPC。

2024-05-13 14:08:36 9490 1

原创 Netty底层数据交互源码分析

文章目录1. 前题回顾2. 主线流程源码分析3. Netty底层的零拷贝4. ByteBuf内存池设计书接上文1. 前题回顾上一篇博客我们分析了Netty服务端启动的底层原理,主要就是将EventLoop里面的线程注册到了Select中,然后调用select方法监听客户端连接,我们这里从这个EventLoop里面线程的run方法开始分析。2. 主线流程源码分析进入EventLoop的run方法:@Override protected void run() { for (;

2024-05-09 10:19:42 399

原创 DDD架构理论详解

DDD是领域驱动设计(Domain-Driven Design)的缩写,这是一种主要软件开发方法,由Eric Evans在它的书《领域驱动设计:软件核心负责性应对之道》中首次提出。DDD主要关注于创建与业务领域紧密相关的软件模型,以确保能够准确地解决实际问题。

2024-05-08 09:35:07 13250 4

原创 Netty核心线程模型源码分析

Netty的线程模型图如下所示:具体细节看这篇博客。

2024-05-06 22:09:13 794

原创 TCP粘包拆包问题解决之道

如果此时服务端的TCP的接受滑窗非常小,而数据包D1和D2比较大,很有可能会发生第五种可能,即服务端分多次才能将D1和D2包的接收完全,期间发生多次拆包。假设客户端分别发送了两个数据包D1和D2,由于服务端一次读取到的字节数是不确定的,故存在以下四种情况。

2024-05-06 16:03:40 400

原创 Netty的一个入门小程序

【代码】Netty的一个入门小程序。

2024-05-06 16:03:04 322

原创 SpringBoot启动过程源码复习

上面这个类实现了ApplicationContextInitializer接口,然后我们将ZhouyuApplicationContextInitializer这个类写到spring.factories文件中,这个类就会被Springboot注册为一个bean,由于它实现了ApplicationContextInitializer接口,那么在SpringBoot启动流程中会调用这个bean的initialize将我们的TypeExcludFilter先注册到了容器中,这样就解决了上面的问题,那么。

2024-04-26 07:49:50 623

原创 SpringBoot自动配置底层源码分析

Spring Boot的自动配置是一种机制,它使得开发者能够快速地开始构建Spring应用,而不需要手动编写大量的样板代码。Spring Boot的自动配置是通过@EnableAutoConfiguration注解触发的,它会自动根据类路径下的jar包依赖来启用相应的Spring应用上下文配置。创建自己的@Configuration类,并通过@Configuration注解标记它。

2024-04-24 15:59:49 948

原创 URI和URL的区别?

URI(Uniform Resource Identifier,统一资源标识符)和URL(Uniform Resource Locator,统一资源定位符)都是网络上用来识别和定位资源的标准方式,但它们之间存在一些差异。URI 可以包含方案名称(scheme),路径(path)和可选的片段(fragment)或查询(query)组件。它主要是标准的方式来标识一个资源,但不提供资源的位置信息。URL 是一种特殊类型的URI,它不仅标识资源,还提供了找到该资源的方法。它指出了资源存在的位置和访问资源的机制。

2024-04-13 10:56:04 285

原创 Spring源码复习之AnnotatedBeanDefinitionReader

AnnotatedBeanDefinitionReader是一个用于读取和解析带有注解的Bean定义的类,它主要用于基于注解的配置方式,允许开发者将Java类标记为Spring组件,从而让Spring容器自动扫描和注册这些组件,而不需要显式配置这些组件的Bean定义。创建一个 DefaultListableBeanFactory 容器和关联的 AnnotatedBeanDefinitionReader,手动注册一个 MyBean 类为 Spring Bean,然后获取和打印该 Bean 的实例。

2024-04-13 10:23:04 166

原创 Spring源码复习之XmlBeanDefinitionReader

XmlBeanDefinitionReader是Spring Framework中的一个类,用于加载和解析XML格式的Bean定义配置文件,将配置文件中定义的Bean元数据信息提取为Spring容器内部的Bean定义对象,进而实现IOC容器的构建和管理。首先创建了一个Spring容器(DefaultListableBeanFactory),然后使用XmlBeanDefinitionReader来加载和解析名为"beans.xml"的XML配置文件,将其中定义的Bean元数据信息注册到容器中。

2024-04-13 10:02:34 308

原创 Spring源码复习之BeanDefinitionRegistry

我们使用Spring的DefaultListableBeanFactory和BeanDefinitionRegistry接口来注册、管理和操作Bean定义的过程,包括创建Bean定义、注册到容器、获取、检查是否存在、获取所有定义的名称和数量、检查名称是否已使用,以及移除Bean定义。Bean定义是描述Spring容器中的对象(Bean)的元数据,包括Bean的类名、依赖关系、作用域等信息。运行结果发现,我们的各种操作已成功执行,包括注册、查询、操作和移除Bean定义。获取Bean定义信息。

2024-04-13 09:25:36 110

原创 Spring源码复习之BeanDefinitionHolder

BeanDefinitionHolder 主要用于持有一个 BeanDefinition 对象,它包含有关 Bean 的元数据信息,如类名、作用域、属性、初始化方法等。除了 BeanDefinition 和名称,BeanDefinitionHolder 还可以包含其他元数据,如 BeanDefinition 的原始来源(通常是一个 Resource 对象)以及 BeanDefinition 的描述信息。随后,使用容器的 getBean 方法来检索这些 Bean,验证它们的正确注册和别名的设置。

2024-04-13 09:08:15 280

原创 Spring源码复习之BeanDefinition理解

BeanDefinition 是 Spring 框架中的关键构建块,它是一种配置元数据,用于详细描述和定义应用程序中的 Bean 对象,包括 Bean 的类名、作用域、依赖关系、构造函数参数、属性值、初始化方法、销毁方法等信息,从而允许 Spring 容器准确地实例化、配置和管理这些 Bean。BeanDefinition中定义来很多属性来描述一个bean的定义信息,包括bean的作用域是单例还是原型,bean的类型(对应的类的类型),是否是懒加载的bean,bean的初始化方法和销毁方法等。

2024-04-13 08:43:21 125

原创 一文解决集合框架源码(一)

文章目录1. 集合框架结构2. Iterable接口3. Conllection接口4. List接口5. Set接口6. Queue接口7. Deque接口8. ArrayList类9. Vector类10. Stack类11. LinkedList类12. HashSet类13. LinkedHashSet类14. SortedSet接口15. NavigableSet接口16. TreeSet类17. ArrayDeque18. PriorityQueue19. Map接口20. HashMap(重点

2024-04-09 11:17:50 122

原创 java的Class文件分析

Java有一个著名的口号一次编译,处处运行,这就凸显出来Java程序的一个特点平台无关性。Java的平台无关性是基于各种不同平台的Java虚拟机,以及所有平台都统一支持的程序存储格式—字节码实现的。在Java中任何一个Class文件都对应一个类或接口的定义信息。Class文件是以一组8个字节为单位的二进制流,各个数据项目严格按照顺序紧凑地排列在文件中,中间没有添加任何分隔符,当遇到需要占用8个字节以上空间的数据项时,会按照高位在前的方式分割成若干个8个字节进行存储。

2024-04-01 12:36:36 104

原创 JavaNIO的Buffer详解

Buffer缓冲区实际上就是一个数组,把数组的内容和信息包装成一个Buffer对象,它提供了一组访问这些信息的方法。

2024-03-29 09:38:15 155

原创 JAVA的NIO和BIO底层原理分析

IO,即Input/Output,指的是输入和输出。在计算机科学中,IO描述的是数据在内部存储器和外部存储器或其他周边设备之间的流动过程,既包括数据从外部复制到内存(输入),也包括数据从内存复制到外部(输出)。IO是计算机与外界交互的过程,涉及到的对象可以是人或其他设备,如文件、管道、网络、命令行、信号等,更广义地讲,I/O指代任何操作系统理解为“文件”的事务。此外,IO也是操作系统中的一个核心概念,在各种系统中都有重要地位,例如在本机、传统的单体应用、分布式系统中。

2024-03-28 14:31:28 792

原创 RPC和HTTP协议

每个使用TCP的项目都可以定义一套类似这里的协议解析标准,它们可能有区别但是原理都类似,所以基于TCP就衍生了非常多的协议,就例如HTTP和RPC协议。,所以为了解决粘包问题,我们就需要加入一些自定义的规则,用于区分消息的边界,比如给每个消息加入消息头,消息头里面写清楚该条消息的具体长度,当然这些消息头除了放消息长度之外,还可以放各种东西,例如消息体是否被压缩过和消息体格式之类的东西,只要上下游都约定好了,互相都认识就可以了,这就是所谓的。

2024-03-27 09:44:15 1217

原创 ElasticSearch使用(一)

结构化数据:结构化数据是指具有固定格式和结构的数据,其存储方式是以表格形式组织,每个数据项都有固定的字段和数据类型。结构化数据通常是按照预先定义的模式进行组织和存储的,因此具有良好的组织结构和易于查询的特点。非结构化数据非结构化数据是指没有固定格式和结构的数据,其存储方式不遵循任何预定义的模式,通常以文本或二进制形式存在。由于缺乏固定的结构,非结构化数据通常难以直接用于传统的关系型数据库管理系统进行存储和查询。非结构化数据的搜索方式通常有两种:顺序扫描和全文检索。

2024-03-21 10:57:14 1830

原创 RocketMQ源码分析

可以用 git把项目clone下来或者直接下载代码包。broker: Broker 模块(broke 启动进程)client :消息客户端,包含消息生产者、消息消费者相关类example: RocketMQ 例子代码namesrv:NameServer模块store:消息存储模块remoting:远程访问模块。

2024-03-19 11:57:12 1838

原创 Redis高性能设计之epoll和IO多路复用深度解析

在处理多个客户端连接redis问题时,在多路复用没有出来之前,通常的解决方案就是同步阻塞网络IO(BIO)。这个模式的特点就是用一个进程来处理一个网络请求(一个用户请求)。这种思路很简单易懂,但是却存在着很大的问题,它的性能时极差的,如果每个用户请求都开辟一个新的进程来处理,那么来一个请求就需要分配一个进程来进行处理,如果来了海量的用户系统根本创建不了这么多线程来处理用户请求。必须让一个进程能够同时处理很多TCP连接。

2024-03-15 07:34:40 1753

原创 Redis底层数据结构之ZSet

skiplist时一种空间换时间的结构,由于链表无法进行二分查找,因此借鉴数据库索引的思想,提取出链表中的关键节点(索引),先在关键节点上查找,再进入下层链表查找,提出多层关键节点,就形成了跳表。:维护成本高,在单链表中,一旦定位好要插入的位置,插入节点的时间复杂度很低的就是O(1),但是新增或者删除时需要把索引都更新一遍,为了保证数据的有序性,我们需要先找到要操作的位置,这个超找操作就会比较耗时最后在新增和删除过程中的更新,时间复杂度也是O(logn)解决方法:空间换时间,得到了下面的方案。

2024-03-13 13:21:13 588

负载均衡讲解,讲解负载均衡的基本原理

负载均衡讲解,讲解负载均衡的基本原理

2022-12-16

自己机器学习所做的一些笔记,有疑问欢迎评论区留言联系我

可以直接访问我原先笔记链接 https://note.youdao.com/s/7cpM5n4x 后期我会更新Linux Java 机器学习 深度学习方面的笔记,欢迎关注我

2022-10-16

408数据结构算法大题:.md

考研数据结构408代码

2021-10-23

408数据结构.pdf

可供阅读,背诵

2021-10-23

空空如也

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

TA关注的人

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