自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习分享-JDBC和Proxy的区别及应用场景

JDBC:是一种标准的 Java API,用于直接与关系数据库交互。适用于单一数据库连接和操作。Proxy:是一种设计模式,常用于数据库中间件,通过代理控制数据库访问,实现高级功能,如负载均衡、分库分表、读写分离等。

2024-07-03 19:33:35 739

原创 学习分享-Redis 中的压缩列表 (Ziplist)

之所以说这种存储结构节省内存,是相较于数组的存储思路而言的。我们知道,数组要求每个元素的大小相同,如果我们要存储不同长度的字符串,那我们就需要用最大长度的字符串大小作为元素的大小(假设是20个字节)。但是这样有一个问题,我们在遍历它的时候由于不知道每个元素的大小是多少,因此也就无法计算出下一个节点的具体位置。我们在遍历节点的之后就知道每个节点的长度(占用内存的大小),就可以很容易计算出下一个节点再内存中的位置。这种结构就像一个简单的压缩列表了。数组的优势占用一片连续的空间可以很好的利用CPU缓存访问数据。

2024-06-18 15:59:25 873

原创 学习分享-Callable 和 Runnable 任务

顺带回顾学习一下Callable 或 Runnable 任务Runnable:适用于不需要返回结果或不抛出检查型异常的简单任务。Callable:适用于需要返回结果或可能抛出检查型异常的复杂任务。FutureTask:可以封装Callable或Runnable任务,提供任务的异步执行、结果获取和任务取消功能。通过理解Callable和Runnable的区别,以及FutureTask如何封装这些任务,可以更好地进行并发编程和任务管理。

2024-06-13 21:12:29 422 2

原创 学习分享-FutureTask和消息队列的区别

上篇回顾了一下FutureTask 的相关原理,现在分享一下它和消息队列的区别。FutureTask定义FutureTask是一个实现了接口的类,用于封装异步任务,并且能够获取任务的执行结果。用途:用于管理单个任务的异步执行,可以在任务完成后获取结果或取消任务,适合处理需要返回结果的任务。消息队列定义:消息队列是一种用于在分布式系统中传递消息的数据结构,通常用于解耦生产者和消费者。用途:用于在不同系统或不同模块之间传递消息,适合处理异步通信、大规模并发请求、任务队列、事件驱动架构等场景。

2024-06-13 21:11:12 496

原创 学习分享-FutureTask

今天再改简历的时候回顾了之前实习用到的FutureTask,借此来回顾一下相关知识。FutureTask是 Java 并发包()中的一个类,用于封装异步任务。它实现了接口,而接口继承了Runnable和Future接口。因此,FutureTask既可以作为Runnable执行任务,也可以作为Future获取任务的结果。

2024-06-13 20:54:24 716

原创 学习分享-tryLock和 lock的区别

阻塞行为lock方法是阻塞的,如果锁不可用,调用线程会一直等待直到获得锁。tryLock方法是非阻塞的,如果锁不可用,它会立即返回一个布尔值,指示锁是否获取成功。灵活性lock方法适合在必须获取锁的情况下使用,不考虑获取锁的时间长短。tryLock方法提供了更大的灵活性,可以立即返回结果,也可以指定超时时间,适合在需要非阻塞获取锁的情况下使用。使用场景lock适用于需要确保访问共享资源,并且能够容忍阻塞的情况。tryLock。

2024-06-11 18:33:18 417

原创 学习分享-Tomcat 的线程池在工作方式上与普通的 Java 线程池的区别

最近在学习过程中遇到在某个场景下:修改某条数据时,给该线程上分布式写锁,然后引入延迟队列处理其他请求;这个方案有一定的缺点,因为在用到消息队列时,不存在占用过多线程从而导致OOM的问题,消费者组只会安排固定的几个线程去拉取消息,如果碰到上面那种拿不到锁的情况,阻塞等待就好。上面这个场景设计到了Tomcat 的线程池,因此做一些分享。Tomcat 的线程池在工作方式上有一些不同于普通的 Java 线程池 (如) 的地方,尤其是在处理线程的创建和任务的排队方面。普通线程池。

2024-06-11 18:13:03 897

原创 学习分享-为什么把后台的用户验证和认证逻辑放到网关

将用户验证逻辑移到网关,不仅可以集中管理安全策略,简化微服务的实现,还能有效减少线程占用,利用响应式编程模型提高系统的资源利用率和响应速度。这种设计方式有助于提升系统的整体性能和用户体验,特别是在高并发场景下表现更加突出。

2024-06-08 17:23:29 897

原创 学习分享-断路器Hystrix与Sentinel的区别

断路器(Circuit Breaker)是一种用于保护分布式系统的服务稳定性和容错性的设计模式。它的主要作用是在检测到某个服务的调用出现故障(如超时、异常等)时,快速失败并中断后续对该服务的调用,以防止故障传播和系统资源耗尽。断路器模式是一种用于检测和处理服务调用故障的设计模式。当调用某个服务时,如果该服务连续出现故障,断路器会打开,阻止进一步的调用,以防止故障扩散和资源耗尽。Sentinel 是阿里巴巴开源的一个面向分布式系统的流量防卫组件,用于保护服务的稳定性。

2024-06-08 16:56:18 972

原创 学习分享-注册中心Naocs的优雅上下线

学习微服务-分享一下Naocs的优雅上下线优雅上下线是 Nacos 提供的一项重要特性,旨在确保服务实例在上线和下线过程中的平稳过渡,减少对系统的冲击。通过优雅上下线,服务可以在维护和更新过程中保持系统的稳定性和可靠性,确保服务的高可用性。

2024-06-08 16:33:43 1180 1

原创 学习分享-声明式的 HTTP 客户端OpenFeign

最近在学习中有用到OpenFeign,也在网上查找了相关资料,做下分享。OpenFeign 是一个声明式的 HTTP 客户端,它使得调用 REST API 变得更加简单和直观。通过 OpenFeign,开发者只需定义接口并添加注解,就可以自动生成 HTTP 请求代码,大大简化了与其他服务的通信过程。OpenFeign 最早是由 Netflix 开发的,后来成为了 Spring Cloud 的一部分,被广泛用于微服务架构中。

2024-06-08 15:20:24 740

原创 学习分享-分布式 NoSQL 数据库管理系统Cassandra以及它和redis的区别

最近在学习的过程中遇到如何应对海量幂等 Key 所消耗的内存的问题,在网上查找资料了解到Cassandra或许是解决方式之一,所以就去来了解了一下Cassandra,还有它和redis的区别。Cassandra 是一个开源的分布式 NoSQL 数据库管理系统,由 Apache 软件基金会开发。它专为处理大量数据而设计,具有高可用性、无单点故障、可横向扩展等特点,非常适合用于大规模、高并发的应用场景。Cassandra 和 Redis 各有优势,适用于不同的应用场景。

2024-06-07 21:31:27 1126

原创 学习分享-微服务的相关概念

微服务是一种软件架构风格,通过将单一应用程序拆分为一组小的、自治的服务,每个服务运行在自己的进程中,并通过轻量级机制(通常是HTTP API)进行通信。这种架构使得应用程序更加模块化和灵活,便于独立开发、部署和扩展。

2024-06-05 18:54:24 548

原创 学习分享-面向分布式服务架构的流量管理工具Apache Sentinel

最近学习过程中有接触到Apache Sentinel这个工具,所以就分享一下相关的资料和知识。Apache Sentinel是阿里巴巴开源的一款面向分布式服务架构的流量管理工具,主要用于流量控制、熔断降级和系统负载保护。Sentinel提供了一整套完善的流量管理方案,可以帮助开发者保障微服务的稳定性和高可用性。Sentinel是一个强大且灵活的流量管理工具,特别适用于分布式服务架构。

2024-06-05 18:50:05 1416

原创 学习分享-如何避免 Apache ShardingSphere 中的笛卡尔积现象

Apache ShardingSphere 是一个开源的分布式数据库中间件,旨在通过数据分片、分布式事务、分布式治理等技术,提升数据库系统的性能和可扩展性。然而,最近在使用 ShardingSphere 进行分库分表并多表查询时,出现了笛卡尔积现象。本文将和大家分享介绍我遇到的问题,并提供避免该现象的方法。笛卡尔积是指在没有适当的连接条件下,将两个或多个表中的所有行进行组合,生成一个包含所有可能行组合的结果集。

2024-06-04 17:40:23 1576

原创 学习分享-数据库中间件ShardingSphere及其绑定表概念

ShardingSphere是一款开源的分布式数据库中间件,旨在解决分布式数据库的各种挑战。它为开发者提供了一个透明的分片和读写分离解决方案,支持多种数据库(如MySQL、PostgreSQL、SQL Server等),并且可以无缝地集成到现有的应用程序中。:作为JDBC驱动程序层面的数据库分片和读写分离解决方案,适用于Java应用。:一个独立的数据库代理层,提供与数据库服务器兼容的协议,适用于各种语言和平台。Sharding-Sidecar(现已重命名为ShardingSphere-Agent)

2024-06-04 16:16:24 459

原创 Optional-远离Null指针异常

是一个容器对象,用来包含非null值。Optional对象要么包含一个类型为T的对象,要么不包含任何对象;换句话说,Optional对象要么是非空的,要么是空的。引入Optional的主要目的是为了代码层面上的改进,避免直接返回null或直接处理可能为null的对象。

2024-05-17 16:29:21 626

原创 软删除和硬删除的区别及实际应用

软删除是一种数据删除技术,它并不真正从数据库中移除记录,而是通过修改记录的状态来标记该记录为已删除。这通常通过增加一个如is_deleted的布尔字段或者deleted_at的时间戳字段实现。当is_first标记为true或者deleted_at填充了具体删除时间,该记录在应用逻辑上被视为已删除,但物理上仍保留在数据库中。

2024-05-13 14:54:57 816 2

原创 Nacos 安装教程(史上最详细保姆级教程)

Nacos的全称是Dynamic Naming and ConfigurationService,Na为naming/nameServer即注册中心,co为configuration即注册中心,service是指该注册/配置中心都是以服务为核心。Nacos 致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。本文将详细介绍 Nacos 的安装及使用。

2024-04-22 22:06:57 5120

原创 API网关:微服务架构的关键组件

API网关是一个服务器,它是所有客户端和应用服务间交互的中介。它的主要职责是处理接口调用请求,并将其路由到内部服务。此外,它还处理非业务功能,如安全认证、监控、负载均衡、缓存、请求分裂与聚合等。

2024-04-21 22:32:46 968

原创 ✅技术社区--布隆过滤器在项目中怎么用的?不用可以吗?

快速判断该用户名是否已经被使用了,系统可以容忍一定的误判率,对于布隆过滤器无法删除元素这个缺点,添加一层 Redis 缓存,将已经注销的用户名放在这个 Redis 中的 set 里,这样就可以解决布隆过滤器无法删除元素的缺点了,不过如果注销用户名多了,可能会存在大 key 的问题,因此要考虑。,用户注册用户名重复的话,大不了就换一个用户名就好了,这种情况是可以容忍的,之后用户注册成功之后,再将注册成功的用户名也放入的布隆过滤器中,这样在。,可能将不在集合中的元素判断为在集合中,可以通过。

2024-04-17 23:30:17 1022

原创 Java—拆箱和封箱

在Java中,拆箱(Unboxing)和封箱(Boxing)是自动化的过程,用于在基本数据类型和它们对应的引用类型(包装类)之间进行转换。这两个概念在处理基本数据类型与对象之间的转换时尤其重要,因为集合框架(如ArrayListHashMap等)仅能存储对象类型,不能直接存储基本数据类型(如intdouble等)。

2024-03-23 14:01:13 432

原创 ✅技术社区—使用Redis BitMap实现签到与查询历史签到以及签到统计功能

签到是一个很常见的功能,如果使用数据库实现,那么用户一次签到,就是一条记录,假如有100万用户,平均每个用户每年签到次数为30次,则这张表一年的数据量为 3000 万条,一般签到记录字段不会太多一条数据按照30字节算,一年就是858.3MB左右,但是对于签到信息查询是比较频繁的,如查询当天是否签到、查询用户近7天签到记录、查询用户近30天签到记录、统计用户签到次数,如果这些查询都要去签到表查询那么数据库压力是非常大的,而且考虑到数据量会不断增长,这里使用Redis BitMap 实现高效的签到与统计。

2024-03-19 19:04:36 1373

原创 消息队列—如何保证 RabbitMQ 消息的顺序性?

比如数据库对一条数据依次进行了 插入->更新->删除操作,这个顺序必须是这样,如果在同步过程中,消息的顺序变成了 删除->插入->更新,那么原本应该被删除的数据,就没有被删除,造成数据的不一致问题。①一个queue,有多个consumer去消费,这样就会造成顺序的错误,consumer从MQ里面读取数据是有序的,但是每个consumer的执行时间是不固定的,无法保证先读到消息的consumer一定先完成操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。一个queue对应一个consumer。

2024-03-19 12:56:52 1198

原创 消息队列—RabbitMQ如何保证消息可靠性?

我们的生产者发送消息之后可能由于网络闪断等各种原因导致我们的消息并没有发送到MQ之中,但是这个时候我们生产端又不知道我们的消息没有发出去,这就会造成消息的丢失。到这一步基本都是一些很小概率的问题了,比如MQ突然宕机了或者被关闭了,这种问题就必须要对消息做持久化,以便MQ重新启动之后消息还能重新恢复过来。最后一步会出问题的地方就在消费者端了,不过这个解决问题的方法我们之前的文章已经说过了,就是消费者的消息确认。消息的持久化要做,但是不能只做消息的持久化,还要做队列的持久化和Exchange的持久化。

2024-03-19 12:54:36 1527

原创 ✅技术社区—跨域问题及解决方案

跨域问题及解决方案

2024-03-17 11:41:11 960

原创 ✅技术社区—利用SpringBoot Actuator集成 Prometheus和Grafana搭建完整的服务监控体系

在系统中,我们需要一个系统监控的东西。它就像我们的眼睛,有了这双眼睛我们知道系统到底发生了什么服务器当前运行状态压力等等。因此系统监控是非常关键和重要。接下来我就分享下技术社区项目中利用Actuator+Prometheus+Grafana搭建的监控系统.利用Spring Boot Actuator集成Prometheus和Grafana搭建一套完整的服务监控体系是一个非常实用的方法,以确保社区平台等应用的稳定运行。下面是一个详细的解释和步骤指南。

2024-03-15 10:42:24 1685

原创 ✅技术社区—集成xxl-job实现定时任务的管理和执行

在你的应用中定义任务执行逻辑。使用@XxlJob注解标记方法,方法名即为任务的标识。@Component// 这里写任务执行逻辑。

2024-03-14 21:13:53 1028

原创 ✅技术社区—MySQL和ES的数据同步策略

在实现选择性同步之前,明确你想要同步哪些数据。这可能基于表、字段或数据的特定条件。例如,你可能只想同步某些表,或者表中满足特定条件的行。

2024-03-14 19:23:26 1377

原创 ✅技术社区—通过Canal框架实现MySQL与ElasticSearch的数据同步

部署 Canal Server:首先需要在本地安装并启动 Canal Server,使其连接到你的 MySQL 数据库,并开始监听 Binlog 日志。配置 Elasticsearch:确保本地已经安装并启动 Elasticsearch。使用 Canal Adapter:Canal 提供了官方的 Adapter,用于将数据同步到 Elasticsearch。需要配置 Adapter 以连接到你的 Elasticsearch 实例。

2024-03-14 16:35:37 826

原创 MySQL—InnoDB在RC隔离级别下如何处理事务读取操作

本文将探讨InnoDB在(Read Committed)隔离级别下如何处理事务读取操作的原理。这个过程是InnoDB多版本并发控制(MVCC)机制的一个关键组成部分,旨在提供高效的事务隔离,同时减少锁的需求,允许更高的并发性。

2024-03-12 15:37:37 483

原创 MySQL—主从复制机制

MySQL主从复制是一种异步复制方式,其中一个数据库服务器(主服务器)的数据变动会被复制到一个或多个数据库服务器(从服务器)。主服务器负责处理所有写操作,而从服务器则复制主服务器上的数据变更,以此来实现数据的一致性。在主从复制中,主服务器负责处理写操作(如INSERT、UPDATE、DELETE),而所有的这些更改都会被记录在主服务器的二进制日志(Binary Log)中。从服务器通过读取这些二进制日志文件,并在本地执行相同的数据修改操作,从而实现与主服务器的数据同步。

2024-03-11 19:51:34 1185

原创 MySQL—数据页的结构和原理

在现代关系型数据库管理系统(RDBMS)中,数据页是核心的数据存储结构,它是数据文件中用于存储和管理数据的基本单位。以MySQL的InnoDB存储引擎为例,数据页通常是磁盘上I/O操作的最小单位,这意味着数据库在读取或写入数据时都是按页进行的。现在,我们将详细探讨数据页的结构和原理。在数据库系统中,数据页(Data Page)是数据存储的基本单位。InnoDB存储引擎将数据存储在磁盘上的页面(pages)中,每页通常是一个固定大小的块,如16KB。这样的设计允许数据库系统有效地读写大量数据。

2024-03-11 19:11:09 650

原创 设计模式—单例模式

单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心思想是确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。单例模式主要用于控制资源的访问,比如配置文件的读取,数据库的连接等,通过确保这类资源全局只有一个实例,既可以避免对资源的多重占用,又可以减少系统的性能开销。

2024-03-05 15:37:23 538

原创 Java中的强引用、弱引用

在Java中,引用(Reference)是指在程序中使用对象的方式。强引用(Strong Reference)和弱引用(Weak Reference)是Java中不同类型的引用,它们在垃圾回收过程中起着不同的作用。

2024-02-27 19:22:12 664

原创 技术社区项目—采用自旋锁策略优化缓存架构,针对热key的并发访问进行同步,防止其失效时导致的缓存击穿

采用自旋锁策略优化缓存架构,针对热key的并发访问进行同步,防止其失效时导致的缓存击穿

2024-02-26 21:18:39 774

原创 技术社区项目—借助Logback 的扩展机制实现异常感知并进行邮件推送异常信息

✅借助Logback 的扩展机制实现异常感知并进行邮件推送异常信息

2024-02-26 19:45:06 774

原创 内容交付网络—CDN(简)

CDN是一种分布式网络架构,旨在提高网站内容的传输速度、可用性和安全性。它通过在全球范围内部署大量的服务器节点,将网站的静态资源(如图片、视频、CSS、JavaScript等)缓存到离用户最近的节点上,并根据用户的地理位置和网络状况选择最佳的节点来提供内容。

2024-02-25 16:32:22 426

原创 内容交付网络—CDN

CDN 主机是服务提供商,负责帮助内容和应用程序所有者实现对内容交付网络的访问。对于网络运营商来说,他们一直在努力满足用户对在线视频无止境的需求,而 CDN 托管平台可谓是一种效果斐然、经济高效的方案,可以替代 Web 托管提供商。内容交付网络让运营商能够提供快速、安全、可靠的在线体验,并且不管最终用户使用哪种上网设备,始终提供他们所期望的一致优质体验。

2024-02-25 16:28:48 1071

原创 ✅技术社区项目—JWT身份验证

JWT鉴权流程及遇到的安全问题

2024-02-25 15:08:39 705

空空如也

空空如也

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

TA关注的人

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