自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(217)
  • 收藏
  • 关注

原创 MySQL 主从复制

MySQL 的高可用主要通过主从复制来实现,同时在主从复制的基础上可以构建一个 MySQL 集群,来实现 MySQL 的读写分离,以实现 MySQL 的高并发操作数据热备:可以实时将主库的数据通过复制的方式备份到另外一个从库中,如果主库发生意外,数据丢失,则可以使用从库的数据提供服务读写分离:对于更新频繁的表,由于 MySQL 更新数据时需要锁表,所以当有其他更新语句或者数据读取语句到来时就需要等待锁,性能低下。这时可以将写操作都在主库上执行,数据的查询操作在从库上执行,降低主库压力。

2024-09-10 22:59:26 1231

原创 位图结构详解

位图(BitMap)使用二进制的比特位来表示一个数是否存在,比如一个字节占 8 个比特位,这样就能用该字节表示 1-8,对应比特位为 1 表示对应数字存在,为 0 则不存在,大大节约存储空间。

2024-09-10 22:32:13 383

原创 图结构详解

图是由有穷非空集合的顶点和顶点之间的边组成的集合,通常表示为 G(V,E)。G 表示一个图,V 是 图 G 顶点的集合,E 是图 G 边的集合。在图形结构中,数据之间具有任意联系,任意两个数据之间都可能相关,可用于表示多对多的数据结构如果从顶点 V1 到 V2 的边没有方向,则称这条边为无向边,顶点和无向边组成图称为无向图。如果从顶点 V1 到 V2 的边有方向,则称这条边为有向边,由顶点和有向边组成的图称为有向图。

2024-09-10 22:30:26 791

原创 红黑树详解

红黑树(Red-Black Tree,R-BTree)是一种自平衡的二叉查找树,在红黑树的每个节点都多出一个存储位表示节点的颜色,颜色只能是红(Red)或者黑(Black)。每个节点或者是黑色的,或者是红色的根节点是黑色的每个叶子节点都是黑色的,这里的叶子节点指的是最底层的空节点,即图中值为 null 的节点,讨论时一般将其省略,值为 null 的根节点在红黑树中不看作叶子节点如果一个节点是红色的,则它的子节点必须是黑色的从任一个节点到叶子节点的所有路径下都包含相同数量的黑色节点。

2024-09-08 19:41:52 831

原创 跳跃表详解

跳跃表(SkipList)是链表加多级索引组成的数据结构。链表的数据结构的查询复条度是 O(N)。为了提高查询效率,可以在链表上加多级索引来实现快速查询。跳跃表不仅能提高搜索性能。也能提高插入和删除操作的性能。索引的层数也叫作跳跃表的高度。

2024-09-08 19:40:03 447

原创 熔断、限流、降级 —— SpringCloud Hystrix

Hystrix 为 微服务架构提供了一整套服务隔离、服务熔断和服务降级的解决方案。它是熔断器的一种实现,主要用于解决微服务架构的高可用及服务雪崩等问题服务熔断:Hystrix 熔断器就像家中的安全阀一样,一旦某个服务不可用,熔断器就会直接切断该链路上的请求,避免大量的无效请求影响系统稳定,并且熔断器有自我检测和恢复的功能,在服务状态恢复正常后会自动关闭。

2024-09-05 19:15:36 1500

原创 配置管理 —— SpringCloud Config

Config 为分布式系统提供统一的配置管理工具,应用程序在使用过程中可以像使用本地配置一样方便地添加、访问、修改配置中心的配置Config 支持将配置存储在配置中心的本地服务器或 Git 仓库,通常将配置文件集中放置在一个 Git 仓库,然后通过配置中心(Config Server)来管理所有的配置文件。当某个服务实例需要添加或更新配置时,只需将该服务实例的本地配置文件进行修改,然后推送到 Git 仓库,其他服务实例通过配置中心(Config Server)就可以从 Git 仓库获取最新的配置信息。

2024-09-03 21:55:23 464

原创 Spring 学习笔记

Spring 是一个企业级 J2EE 应用开发一站式解决方案,其提供的功能贯穿了项目开发的表现层、业务层和持久化层,同时,Spring 可以和其他应用框架无缝整合轻量:Spring 是一个轻量级的框架,其核心 JAR 包的大小均为 1MB 左右。从系统的资源使用上来说,Spring 也是一个轻量级的框架,在其运行期间只需少量的操作系统资源便能稳定运行。

2024-09-03 21:54:02 1330

原创 流控算法详解

流控指控制系统流量的平均速度,一般会为系统设置一个阀值,对阀值内的流量正常处理,如果流量超过这个值,就对超出阀值部分的流量进行拒绝或丢弃操作,保障系统不被冲量冲垮工作中常用的流控算法有固定窗口算法、漏桶算法和令牌桶算法。

2024-09-02 22:52:10 321

原创 租约机制详解

租约机制指在租约期限内,拥有租约的节点有权利操作一些预设好的对象,具体如下租约是由授权者授予的一段时间内的承诺授权者一旦发出租约,则无论接受方是否收到,也无论后续接收方处于何种状态,只要租约不过期,授权者就得遵守承诺,按承诺的时间和内容执行。接收方在有效期内可以使用授权者的租约,如果租约过期,那么授权者将不再对租约的承诺负责。如果要继续使用租约,则需要重新申请。可以通过版本号、时间周期或者某个固定的时间点判断租约是否有效可以把租约机制和公司的权利下放做类比来帮助理解。

2024-09-02 22:49:23 1010

原创 Netty 学习笔记

Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 Java NIO 提供的 API 实现提供了对 TCP、UDP 和文件传输的支持。Netty的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以主动或者通过通知机制获取 IO 操作结果IO 多路复用模型:Netty 通过在 NioEventLoop(事件轮询机制)内封装 Selector 来实现 IO 的多路复用。

2024-08-28 17:18:54 865

原创 负载均衡详解

负载均衡建立在现有的网络结构之上,提供了廉价、有效、透明的方式来扩展网络设备和服务器的带宽,增加了吞吐量,加强了网络数据的处理能力,提高了网络的灵活性和可用性。项目中常用的负载均衡有四层负载均衡和七层负载均衡。

2024-08-20 20:25:23 1286

原创 HTTPS 详解

HTTP 被用于在 Web 浏览器和网站服务器之间传递信息,但以明文形式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务端之间的传输报文,就可以直接读懂其中的信息,因此 HTTP 不适合传输一些敏感信息,比如身份证号码、密码等。为了数据传输的安全性,HTTPS 在 HTTP 的基础上加入了 SSL 协议,SSL 依靠证书来验证客户的身份,并对客户端和服务端之间的通信进行数据加密,以保障数据传输的安全性,其端口一般是 443。

2024-08-17 20:20:53 687

原创 HTTP 请求流程

【代码】HTTP 请求流程。

2024-08-17 20:06:00 435

原创 OSI 七层网络模型和 TCP/IP 四层网络模型

TCP/IP 不是指 TCP 和 IP 这两个协议的合称,而是指因特网的整个 TCP/IP 协族。从协议分层模型方面来讲,TCP/IP 由 4 个层次组成,从下到上分别是:网络接口层、网络层、传输层和应用层。网络的七层架构从下到上主要分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

2024-08-15 15:46:10 457

原创 JVM 参数配置

XX:SurvivorRatio: -XX:SurvivorRatio=8 表示 Eden 区和两个 Survivor 区的比值为 8:1,即 Eden:SurvivorTo=8:1、Eden:SurvivorFrom=8:1。-XX:NewRatio:-XX:NewRatio=3 表示设置新生代与老年代的比值为 1:3,因此新生代占整个堆栈的 1/4,老年代占整个堆内存的 3/4。-XX:NewSize:-XX:NewSize=1g 表示设置新生代的大小为 1GB,一般建议设置为总堆内存的 1/3。

2024-08-14 16:37:06 711

原创 Java IO 流详解

流是一个抽象的概念,代表了数据的无结构化传递。流的本质是数据在不同设备之间的传输。在 Java 中,数据的读取和写入都是以流的方式进行的在 Java 中,根据数据流向的不同,可以将流分为输入(Input)流和输出(Output)流。根据单位的不同,可以将流分为字节流和字符流。根据等级的不同,可以将流分为节点流和处理流。

2024-08-10 19:21:20 941

原创 MySQL Explain 关键字详解

explain 关键字可以模拟执行 sql 查询语句,输出执行计划,分析查询语句的执行性能使用方式如下:explain + sql。

2024-06-17 15:19:11 887

原创 HTTP 连接详解

世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的,客户端可以打开一条TCP/IP连接,连接到任何地方的服务器。一旦连接建立,客户端和服务器之间交换的报文就永远不会丢失、受损或失序TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。通俗来讲,TCP就是双方通信的一个规范标准,负责对数据的传输进行一定的控制HTTP 要传送一条报文时,会以流的形式将报文数据的内容通过一条打开的 TCP 连接按序传输。

2024-05-12 15:31:11 1876

原创 HTTP 报文详解

可以通过三位数字代码对不同状态码进行分类,200 到 299 之间的状态码表示成功,300 到 399 之间的代码表示资源已经被移走了,400 到 499 之间的代码表示客户端的请求出错,500 到 599 之间的代码表示服务器出错。方法用来告知服务器要做些什么,比如,GET 方法负责从服务器获取一个文档,POST 方法会向服务器发送需要处理的数据,OPTIONS 方法用于确定 Web 服务器的一般功能,或者 Web 服务器处理特定资源的能力。所有的 HTTP 报文都可以分为两类:请求报文和响应报文。

2024-05-10 16:15:59 935

原创 HTTP URL 详解

params>?方案:访问服务器以获取资源时要使用哪种协议用户:某些方案访问资源时需要的用户名密码:用户名后面可能要包含的密码,中间由冒号分隔主机:资源宿主服务器的主机名或 IP 地址端口:资源宿主服务器正在监听的踹口号,很多方案都有默认端口号(HTTP 的默认端口号为 80)路径:服务器上资源的本地名,由一个斜杠(/)将其与前面的 URL 组件分隔开来参数:指定输入参数,参数为键值对,URL 中可以包含多个参数,使用分号分隔。

2024-05-09 13:23:05 618

原创 HTTP 结构概述

Web 内容都是存储在 Web 服务器上的,Web 服务器所使用的是 HTTP 协议,因此经常被称为 HTTP 服务器,HTTP 服务器存储了因特网的数据。HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法,每条 HTTP 请求报文都包含一个方法,这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、运行一个程序、删除一个文件等)URI 的第二种形式就是统一资源名(URN),URN 作为特定内容的唯一名称使用,与目前的资源所在地无关,因此可以将资源四处搬移。

2024-05-09 11:33:43 434

原创 MySQL 主从配置

在主从复制中,一般有一个主数据库(Master)和一个或多个从数据库(Slave),主数据库负责接收和处理写操作,从数据库复制主数据库的日志文件,将写操作在自身的数据库重演,从而实现数据的同步。

2024-04-05 17:57:16 527

原创 MySQL 索引失效场景总结

如果对 a、b、c 建立联合索引,那么首先根据 a 字段排序,如果 a 字段值相同,再根据 b 字段排序,如果 b 字段值也相同,再根据 c 字段排序。因此,使用联合索引必须按照从左到右,也就是字段排序的顺序,只有先用了 a,才能接着使用 b,使用了 b 才能接着使用 c。联合索引遵从最左匹配原则,所谓最左匹配原则,就是如果 SQL 语句用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配。如果希望以 % 开头仍使用索引,则需要使用覆盖索引,即只查询带索引字段的列。

2024-03-31 12:35:24 426

原创 SpringBoot 常用注解总结

作用在类上,继承了 @Component,因此也能被 SpringBoot 扫描并处理,提供对 Controller 类的拦截功能,配合 @ExceptionHandler、@InitBinder、@ModelAttribute 等注解可实现全局异常处理,全局参数绑定,请求参数预处理等功能。映射 web 请求,可以注解在类和方法上,@GetMapping 和 @PostMapping 是 @RequestMapping 的两种特例,一个处理 get 请求,一个处理 post 请求。

2024-03-27 11:02:10 1010

原创 面试官:说一说 Spring 与 SpringBoot 的区别?

Spring 为开发 Java 应用程序提供了全面的基础架构支持,它将 Java 对象交由容器统一管理,从而实现控制反转(IOC)和依赖注入(DI),并提供了一些常用模块如 SpringAOP、SpringJDBC、SpringMVC 等等SpringBoot 继承了 Spring 的核心思想,并进一步简化应用开发。

2024-03-25 16:15:46 348

原创 Java HashMap 详解

HashMap 由数组和链表实现对数据的存储,HashMap 里面实现一个静态内部类 Entry,包含 Key、Value 和对 key 的 hashcode 值进行 hash 运算后得到的 Hash 值,它还具有 Next 指针,可以连接下一个 Entry 实体,以此来解决 Hash 冲突的问题。因为 1.7 扩容时,元素会被重新移动到新的数组,而使用头插法会使链表发生反转,比如原本是 A-B-C 的链表,扩容之后就变成 C-B-A 了,在多线程环境下,会导致链表成环的问题。先判断是否需要扩容,再插入。

2024-02-29 14:56:34 663

原创 RabbitMQ 学习笔记

具体操作可以通过路由键来实现:创建三个队列,每个队列都对应不同的路由键,每个消息可以根据 id 设置不同的路由键(例如用 id 对路由键的数量取模),消费者通过绑定指定的队列和路由键来接收消息,这样每个消费者只会接收到其关注的特定路由键的消息,从而实现了消息的分区。消费者监听死信队列,实现再次消费。拉模式下,生产者发布消息到队列时,不会立即发送消息给消费者,而是等待消费者请求消息后才发送,优点:消费端可以按照自己的处理速度来消费,缺点:消息传递存在延迟,当处理速度小于发布速度时,容易造成消息堆积在队列。

2024-02-27 16:47:22 967

原创 分布式事务详解

随着互联网的发展,软件系统由原来的单体应用转变为分布式应用。分布式系统把一个单体应用拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作。这种分布式系统下不同服务之间通过远程协作完成的事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务举个例子,使用传统本地事务完成转账逻辑,任一步骤出问题都会回滚// 1.本地数据库操作:张三减少金额// 2.本地数据库操作:李四增加金额但在分布式系统下,就变成这样。

2024-02-13 22:37:54 911

原创 接口幂等性详解

所谓接口幂等性就是:在特定场景下,同一条件的多次接口调用,保证操作只执行一次,如果接口没有保证幂等性,在以下场景就会产生问题前端重复提交:用户进行注册、创建个人信息等操作,由于网络抖动导致页面没有及时响应,用户认为没有成功而多次点击提交按钮,发生重复提交表单请求接口超时重试:提供外部系统调用的接口,因为网络抖动等原因执行成功但没能及时响应,外部系统发起重试,导致重复调用。

2024-02-10 14:45:17 425

转载 MySQL MVCC 详解

MVCC 全称 Mutil-Version Concurrency Control,多版本并发控制,是一种并发控制方法,旨在减少读写操作的冲突我们知道,当有多个事务同时操作数据库的相同数据时,会出现并发问题,例如,读 + 写事务并发可能会导致脏读、幻读和不可重复读等问题,写+写事务并发可能会导致数据覆写等问题为了解决读 + 写事务并发可能导致的问题,MySQL 的 innodb 引擎实现了 MVCC,做到不用加锁也可以实现安全的非阻塞的并发读 + 写,而对于写 + 写事务并发则只能通过加锁解决。

2024-01-31 16:38:14 100

原创 死锁面试题详解

死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果没有外力干涉,这些进程将永远无法继续执行死锁通常发生在多个进程试图同时访问同一资源而无法获取的情况下,例如,进程 A 需要访问资源 C,进程 B 需要访问资源 D,如果进程 A 获取了资源 C 的锁,进程 B 也获取资源 D 的锁,而进程 A 需要获取资源 D 的锁才能继续执行,进程 B 也需要获取资源 C 的锁才能继续执行,那么进程 A 和进程 B 就会陷入相互等待的状态,导致系统无法继续正常工作。

2024-01-23 16:19:49 536

原创 如何设计一个高并发系统?

所谓高并发系统,是指能同时处理大量并发请求,并及时响应,从而保证系统的高性能和高可用那么我们在设计一个高并发系统时,应该考虑哪些方面呢?

2024-01-15 16:36:05 499

原创 Redis 性能优化

服务间存在网络延迟Redis 服务本身存在问题如果是第一种情况,那么所有服务都会发生网络延迟,只需要联系运维处理即可,这里主要讨论第二种情况。

2024-01-10 16:53:07 953

原创 Redis 数据一致性

当我们在使用缓存时,如果发生数据变更,那么你需要同时操作缓存和数据库,而它们两个又分属不同的系统,因此无法做到同时操作成功或失败,因此在并发读写下很可能出现缓存与数据库数据不一致的情况理论上可以通过分布式事务保证同时操作成功或失败,但这会影响系统性能,一般很少使用。虽然没办法做到缓存和数据库强一致,但我们可以让他们的数据尽可能在绝大部分时间内保持一致,并保证最终是一致的。

2024-01-03 15:16:56 749

原创 ThreadLocal 本地线程变量详解

ThreadLocal 意为本地线程变量,即该变量只属于当前线程,对其他线程隔离我们知道,一个普通变量如果被多线程访问会存在存在线程安全问题,这时我们可以使用 Synchronize 来保证该变量某一时刻只能有一个线程访问,从而解决并发安全问题但如果这个变量并不需要被共享,那么就可以使用 ThreadLocal 为每个线程提供一个完全独立的变量副本,每个线程只操作自身拥有的副本,彼此互不干扰。

2023-12-12 11:32:28 1067

原创 MySQL Select 语句执行顺序

如果指定了OUTER JOIN(如 LEFT JOIN、RIGHT JOIN),将上一步没有匹配的行添加到 VT-2,生成 VT-3。在这一步,无论后面跟那种联接运算(LEFT JOIN、RIGHT JOIN等),都首先执行交叉联接(CROSS JOIN),计算笛卡尔积,生成虚拟表 VT-1。按照指定的列名对 VT-4 的行进行分组,生成VT-5,最后每个分组只有一行。根据 ON 的筛选条件对 VT-1 进行筛选,生成 VT-2。使用聚合函数对 VT-5 的分组进行筛选,生成 VT-6。

2023-11-20 17:02:03 261

原创 Java 四种引用类型(强引用、软引用、弱引用、虚引用)

/ person 就是指向 Person 实例“张三”的引用Person person = new Person("张三");在 JDK1.2 以前,Java 里的引用是很传统的定义:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该 reference 数据是代表某块内存、某个对象的引用。

2023-11-15 15:15:47 290

原创 服务链路追踪 —— SpringCloud Sleuth

随着业务的发展,系统规模变得越来越大,微服务拆分越来越细,各微服务间的调用关系也越来越复杂。客户端请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,几平每一个请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。

2023-10-08 12:27:06 183

原创 分布式事务 —— SpringCloud Alibaba Seata

传统的单体应用中,业务操作使用同一条连接操作不同的数据表,一旦出现异常就可以整体回滚。随着公司的快速发展、业务需求的变化,单体应用被拆分成微服务应用,原来的单体应用被拆分成多个独立的微服务,分别使用独立的数据源,业务操作需要调用三个服务来完成。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题无法保证。在微服务架构中,一次业务请求需要操作多个数据源或需要进行远程调用,就会产生分布式事务问题。

2023-10-06 09:42:58 163

空空如也

空空如也

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

TA关注的人

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