自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沉梦听雨的博客

时间是最好的浸渍剂,而沉淀是最好的提纯器✈️

  • 博客(98)
  • 收藏
  • 关注

原创 力扣题解24. 两两交换链表中的节点(图解递归和双指针)

通过递归调用,该函数会逐层向下处理链表,直到到达链表末尾。在每一层递归中,都会交换相邻的两个节点,并将结果传递给下一层递归。最终,当递归到最底层时,所有相邻节点都被成功交换,然后逐层向上返回,最终得到交换后的链表。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。这个函数的作用是将链表中的每两个相邻节点进行交换,并返回新的头节点。算法通过维护一个虚拟头节点,利用两个指针。在链表中遍历,不断交换相邻的节点。

2024-01-11 17:00:10 472

原创 项目初始化脚手架搭建

这是一个枚举类,用于定义系统中可能出现的错误码和对应的错误信息。枚举值必须是私有且不可变PARAMS_ERROR(40000, "请求参数错误"),NOT_LOGIN_ERROR(40100, "未登录"),NO_AUTH_ERROR(40101, "无权限"),NOT_FOUND_ERROR(40400, "请求的数据不存在"),FORBIDDEN_EEOR(40300, "禁止访问"),SYSTEM_ERROR(50000, "系统内部异常"),

2024-01-04 17:18:56 1124

原创 Stream流技巧总结

我们可以将一个自定义的。

2024-01-04 16:54:52 1050

原创 Mybatis-Plus使用小记

本篇文章是对 MP 一些日常开发学习中不常见但实用的使用小技巧总结,内容将持续更新,希望能对小伙伴们有所帮助。

2023-12-30 21:53:53 604

原创 集合使用注意事项

isEmpty()size()==0这是因为isEmpty()方法的可读性更好,并且时间复杂度为 O(1)。

2023-12-30 21:47:10 733

原创 深入解析常见数据校验注解:@NotNull、@NotEmpty、@NotBlank、@Valid 使用示例

通过深入了解这些常见的数据校验注解,我们能够更好地保障程序接收到的数据的合法性。这些注解的使用不仅简单而且强大,为我们构建稳健的应用提供了有力的支持。在实际应用中,根据具体场景和需求选择合适的注解,结合异常处理,能够有效地提高程序的健壮性和安全性。

2023-12-29 10:15:55 413

原创 Apifox使用小记

cURL是一个用于发送 HTTP、HTTPS、FTP、SCP、SFTP 等请求的命令行工具和库。它支持多种协议和数据传输方式,可以在命令行中直接使用,也可以被集成到脚本和程序中,用于执行网络请求和数据传输操作。**发送 HTTP 请求:**通过 cURL,你可以发送 HTTP GET、POST、PUT、DELETE 等请求,并在命令行中查看响应结果。**文件上传和下载:**cURL 可以用来上传和下载文件,支持多种协议,如 FTP、SFTP 等。

2023-12-29 10:02:41 890

原创 nvm 常用命令小记

cmd

2023-12-28 09:38:29 435

原创 Git 知识梳理

版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。关键时刻,可以回退版本。除了项目源代码,你可以对任何类型的文件进行版本控制。Git Flow 是一种基于 Git 版本控制工具的分支管理工作流程,它定义了一套完整的分支模型,包括主分支、开发分支、功能分支、修复分支等,旨在优化团队协作、版本发布和代码质量等方面的工作流程。

2023-12-28 09:33:29 1482

原创 断墨寻径摘录

信息对单,知识对群。重现信息是记忆,生成新信息是学习。指令就是纯靠背、听、看知识。归纳就是实践总结,大脑自动产生意识。一个是由材料所带来的瓶颈,解决这种瓶颈的办法就是去搜集新材料。一些应试生容易犯的误区是不断去背诵已掌握的旧材料。另一个是由脑中的旧认识对新材料的抗拒所带来的瓶颈,解决这种瓶颈的方法是,先至少用一个实例性材料来让大脑意识到自己已有的认识是不足的,然后再继续学习。

2023-12-27 09:38:45 1022

原创 Redis 核心知识总结

RDB 快照就是记录某一个瞬间的内存数据,记录的是实际数据,而 AOF 文件记录的是命令操作的日志,而不是实际的数据。因此在 Redis 恢复数据时, RDB 恢复数据的效率会比 AOF 高些,因为直接将 RDB 文件读入内存就可以,不需要像 AOF 那样还需要额外执行操作命令的步骤才能恢复数据。哨兵(Sentinel)机制是 Redis 在 2.8 版本以后提供的。它的作用是实现主从节点故障转移。

2023-12-27 09:33:47 1341

原创 缓存背后的智慧:旁路、读写穿透和写回三种策略全面解析

问题:1、在写数据的过程中,可以先删除 cache,后更新 db 么?答:不可以,因为这样会导致数据库和缓存数据不一致的问题。举例:请求 1 先写数据 A,请求 2 随后读数据 A 的情况。db 的是新数据,cache 的是旧数据。2、在写数据的过程中,先更新 db,后删除 cache 就没有问题了吗?答:可能会有问题,但出现的概率非常小,因为【缓存】的写入速度比【数据库】的写入速度快很多。举例:请求 A 更新完数据库,但还未删除缓存,此时请求 B 命中了缓存并返回,就导致了数据不一致。

2023-12-26 09:59:29 1057

原创 实战指南:使用 Spring Cloud Stream 集成 Kafka 构建高效消息驱动微服务

SCS 是一个用于构建消息驱动微服务的框架,它基于 Spring Boot,提供了一种简化的方式来处理消息和事件的传递。它旨在为不同消息代理(如 Kafka、RabbitMQ、Apache Kafka 等)提供统一的编程模型,使开发者能够更轻松地在微服务架构中使用消息通信。Binder(绑定器):Binder 是 Spring Cloud Stream 的核心概念之一,它提供了与底层消息代理之间的连接和交互。

2023-12-26 09:43:26 1556

原创 Kafka入门及可视化界面推荐

*死信队列(Dead Letter Queue,简称 DLQ)**是消息中间件中的一种特殊队列。它主要用于处理无法被消费者正确处理的消息,通常是因为消息格式错误、处理失败、消费超时等情况导致的消息被"丢弃"或"死亡"的情况。当消息进入队列后,消费者会尝试处理它。如果处理失败,或者超过一定的重试次数仍无法被成功处理,消息可以发送到死信队列中,而不是被永久性地丢弃。在死信队列中,可以进一步分析、处理这些无法正常消费的消息,以便定位问题、修复错误,并采取适当的措施。

2023-12-25 09:42:10 1444

原创 SpringBoot 整合 RocketMQ 简单入门

SpringBoot 提供了快捷操作 RocketMQ 的对象。

2023-12-25 09:39:33 956

原创 RocketMQ 入门:MQ 基础概念、集群搭建与高可用配置,消息示例详解

Message Queue(消息 队列),从字面上理解:首先它是一个队列。FIFO 先进先出的数据结构 —— 队列。消息队列就是所谓的存放消息的队列。消息队列解决的不是存放消息的队列的目的,解决的是通信问题。1、同步通信情况下比如以电商订单系统为例,如果各服务之间使用同步通信,不仅耗时较久,且过程中受到网络波动的影响,不能保证高成功率。因此,使用异步的通信方式对架构进行改造。2、使用消息队列后。异步通信的情况下使⽤异步的通信方式对模块间的调⽤进行解耦,可以快速的提升系统的吞吐量。

2023-12-23 12:31:44 860

原创 Spring Cloud Gateway官方文档学习笔记

请求转发到 “http://localhost:8080/flakey”,并在请求失败时进行最多 3 次的重试,重试的时间间隔为 10ms、20ms 和 40ms,最大不超过 50ms,仅对 GET 和 POST 方法的请求进行重试,并且仅在返回的 HTTP 状态码为 BAD_GATEWAY 时进行重试。该过滤器的作用是去重响应头,这个配置中定义了一个路由规则,它会将所有以 “/red/” 开头的请求转发到 “https://example.org”,并将 “/red/” 后面的路径。

2023-12-23 12:24:07 1490

原创 JWT 单点登录探析:原理、用途与安全实践

JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。通过数字签名的方式,以 JSON 对象为载体,在不同的服务终端之间安全的传输信息。JWT,因此,我们的。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。(JWT 存储在【客户端】)

2023-12-22 11:04:02 863

原创 MyBatis:简介、优势和常见问题解答

ORM说白了就是建立数据库字段和Java对象(POJO)的一种映射关系技术而Mybatis由于建立这种映射需要我们手动编写SQL, 所以说它是半自动的。

2023-12-22 10:49:16 861

原创 聊聊Spring Boot配置文件:优先级顺序、加载顺序、bootstrap.yml与application.yml区别详解

优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。

2023-12-21 11:52:58 1966 2

原创 深入理解 Spring Boot:核心知识与约定大于配置原则

Spring Boot Starters 是 Spring Boot 提供的一组依赖项,用于快速启动常见的应用程序功能。简单来说,就是一系列依赖关系的集合。例如,如果想要快速启动一个 Spring Boot Web 应用程序,只需在项目中引入这个依赖即可。

2023-12-21 11:41:42 1978

原创 解密Spring的@Cacheable:打造强大字典转换器

当这个方法被调用时,Spring 会先检查缓存中是否已经存在了相同键的缓存数据,如果存在就直接返回缓存的结果,而不执行方法体;如果不存在,就执行方法体,并将方法的结果缓存起来,以备后续相同参数的方法调用直接使用缓存数据,提高执行效率。这样,对于相同的 `dictionaryType` 参数,方法的执行结果只需要计算一次,之后就可以直接从缓存中获取,避免了重复计算。

2023-12-20 10:01:26 903

原创 解密Spring框架:深入理解IoC和AOP的工作原理

Spring 循环依赖:简单说就是自己依赖自己,或者和别的 Bean 相互依赖。只有单例的 Bean 才存在循环依赖的情况,原型(Prototype)情况下,Spring 会直接抛出异常。原因很简单,AB 循环依赖,A 实例化的时候,发现依赖 B,创建 B 实例,创建 B 的时候发现需要 A,创建 A1 实例······无限套娃,直接把系统干垮。简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。工作流程:在应用程序运行时。

2023-12-20 09:40:43 948

原创 Spring核心原理理解与总结

Spring Core 模块:提供了 Spring 框架的核心功能,包括 IoC(控制反转)和 AOP(面向切面编程)等,是整个 Spring 框架的基础。Spring Context 模块:建立在 Spring Core 模块之上,提供了一个框架式的上下文环境,用于管理 Bean 的生命周期和配置元数据等。提供了对 JDBC 的封装,简化了数据库访问的操作,包括了连接管理、事务管理、异常处理等。

2023-12-19 14:44:26 896

原创 Linux命令行实战指南:快速上手常用命令大全!

Linux常用指令包括文件和目录操作、系统信息和进程管理、网络操作、磁盘空间查看、部署时可能会用到的内存使用情况查看、后台运行程序以及作业控制等。这些指令可以帮助用户在Linux系统中进行各种操作和管理任务。

2023-12-19 14:36:03 857

原创 【网络篇】网络核心知识总结

HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?使用 Session 机制。Session 机制的存在就是为了解决这个问题,Session 的主要作用就是:通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。

2023-12-18 14:49:18 930

原创 【系统篇】硬件结构

冯诺依曼模型你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电脑上吗?64 位的操作系统可以运行在 32 位的电脑上吗?如果不行,原因是什么?如果 32 位指令在 64 位机器上执行,需要一套兼容机制,就可以做到兼容运行了。但是如果 64 位指令在 32 位机器上执行,就比较困难了,因为 32 位的寄存器存不下 64 位的指令;

2023-12-18 14:42:55 1324

原创 数据结构基础小结

数据结构,对应的英文单词是 data structure,是数据的组织、管理和存储格式,其使用目的是为了高效地访问和修改数据。数组是由有限个相同类型的变量所组成的有序集合,它的物理存储方式是顺序存储,访问方式是随机访问。利用下标查找数组元素的时间复杂度是 O(1),中间插入、删除数组元素的时间复杂度是 O(n)。链表是一种链式数据结构,由若干节点组成,每个节点包含指向下一节点的指针。链表的物理存储方式是随机存储,访问方式是顺序访问。(和数组相反)查找链表节点的时间复杂度是 O(n),

2023-12-17 14:21:04 1277

原创 JVM基础入门

所谓的 JVM 虚拟机,其实它本身是一个规范,是虚构出来的一台计算机。拥有自己的操作系统,是一个跨语言平台。为什么 JVM 虚拟机能够支持多种语言运行在上面呢?最关键的原因是就是因为 class 这个东西,我们可以说任何的语言,只要你能编译成 class,符合 class 文件的规范,你就可以扔在 Java 虚拟机上去执行。注意:JVM 只和 class 文件有关,与 java 无关。Java虚拟机 - 维基百科,自由的百科全书 (wikipedia.org)Java 软件 | Oracle 中国。

2023-12-17 14:17:52 174

原创 【并发篇】Java内存管理知识小结

Java 内存管理栈内存(Stack Memory)栈是线程私有的,每个线程都有自己的栈。用于存储局部变量、方法参数、返回地址以及一些基本数据类型。具有快速的分配和释放,因为采用"后进先出"(LIFO)的数据结构。栈内存的大小是有限的,一般由虚拟机预先定义。堆内存(Heap Memory):用于存储对象实例和数组等动态分配的对象。Java 中的垃圾回收(Garbage Collection)发生在堆内存,回收不再使用的对象。可以通过设置参数调整堆的大小,如 -Xmx(最大堆大小)和

2023-12-15 12:23:22 89

原创 【并发篇】深入理解Java线程池的运作原理

线程池就是管理一系列线程的资源池。当有任务要处理时,直接从线程池中获取线程来处理,处理完之后线程并不会立即被销毁,而是等待下一个任务。在 Java 5 之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免 this 逃逸问题。这是因为线程池的执行过程会等待构造完成后再进行任务的执行,从而避免了 this 逃逸问题的发生。什么是 this 逃逸问题?

2023-12-15 12:20:01 224

原创 【并发篇】Java关键字指南:Synchronized和Volatile的使用与区别

volatile 关键字是 Java 中用于保证变量可见性和禁止指令重排序优化的一种机制。只能保证单个变量的原子性,不能保证复合操作的原子性。

2023-12-14 10:03:27 111

原创 【并发篇】深入理解线程死锁、乐观锁与悲观锁

线程死锁是指:两个或多个线程互相持有对方所需要的资源而互相等待的状态,导致程序无法继续执行下去,进而陷入死循环,无法完成任务。乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源是否被其它线程修改了。优点不会造成线程阻塞缺点在并发更新的情况下,可能会出现 ABA 问题,需要使用版本号或时间戳等机制来解决。ABA 问题是: 在使用 CAS 算法时可能出现的一个问题。

2023-12-14 09:58:38 87

原创 【并发篇】Java并发基础小结

线程是一个比进程更小的执行单位,是 CPU 调度的基本单位。一个进程在其执行的过程中可以产生多个线程。所以在进行线程切换时的开销会远远小于进程,线程也常常被称为轻量级进程。与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器虚拟机栈和本地方法栈。CPU 从一个线程中断执行转而执行另一个线程的过程。在多线程编程中,线程上下文切换是非常常见的操作。这个过程需要耗费一定的时间和资源,因此线程上下文切换的频繁发生会导致系统的性能下降。1、什么是上下文。

2023-12-13 09:42:19 594

原创 《Spring Cloud Alibaba 从入门到实战》分布式事务

分布式一致性是分布式系统需解决的关键问题之一,在微服务的实践中分布式事务是用户遇到的最大痛点。Seata 在阿里经济体内部经过了漫长的孵化,承载了双 11洪荒流量,实践证明 Seata 是一款解决分布式数据一致性的的优秀组件。Seata 除了提供了独创的 AT 事务模式外,还扩展了 TCC、Saga 和 XA 事务模式,满足大家对于不同业务场景中的需求。上面提到了 4 种常用的分布式事务解决方案,Seata 集成了 TCC、Saga 和 XA 方 案。

2023-12-13 09:36:17 95

原创 《Spring Cloud Alibaba 从入门到实战》分布式消息(事件)驱动

事件驱动架构(Event-driven 架构,简称 EDA)是软件设计领域内的一套程序设计模型。这套模型的意义是。传统软件设计举个例子,比如一个订单的创建在传统软件设计中服务端暴露创建订单的动作,然后客户端访问创建订单。事件驱动设计在事件驱动设计里,订单的创建订单事件来完成,这个过程中有事件发送者和事件接受者这两个模块,事件发送者的作用是发送订单事件,事件接受者的作用的接收订单事件。

2023-12-12 09:42:52 180

原创 《Spring Cloud Alibaba 从入门到实战》服务熔断和限流

为什么需要流控降级?大促时瞬间洪峰流量导致系统超出最大负载,load 飙高,系统崩溃导致用户无法下单“黑马”热点商品击穿缓存,DB 被打垮,挤占正常流量调用端被不稳定服务拖垮,线程池被占满,导致整个调用链路卡死这些不稳定的场景可能会导致严重后果。如何做到均匀平滑的用户访问?如何预防流量过大或服务不稳定带来的影响?这时候我们就要请出微服务稳定性的法宝 ——高可用流量防护,其中重要的手段就是【流量控制】和【熔断降级】,它们是保障微服务稳 定性重要的一环。为什么需要流量控制?

2023-12-12 09:38:56 150

原创 《Spring Cloud Alibaba 从入门到实战》分布式服务调用

Spring Cloud Alibaba Nacos Discovery 能无缝整合 Spring Cloud OpenFeign。换言之,Spring Cloud Alibaba了 Spring Cloud 分布式服务调用的特性。除此之外,Spring Cloud Alibaba 引入了 Dubbo Spring Cloud,了分布式服务调用能力,不仅能使 Apache Dubbo 和 OpenFeign 共存,还允许 Spring Cloud 标准调用底层通过 Dubbo 支持的通讯协议传输。

2023-12-11 09:45:52 113

原创 《Spring Cloud Alibaba 从入门到实战》服务注册与发现

Nacos Discovery 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery 也将服务实例自身的一些元数据信息 - 例如 host,port,健康检查 URL,主页等内容注册到 Nacos。

2023-12-11 09:43:44 111

原创 《Spring Cloud Alibaba 从入门到实战》分布式配置

上述三个例子均围绕着 Nacos Config 实现 Bean 属性动态更新,不过它们是使用场景。如果读者的应用仅使用Spring 或者 Spring Boot,其中支持属性粒度的更新。注:该配置必须放在 bootstrap.properties 文件中# 1、Data Id 在默认的组 DEFAULT_GROUP,不支持配置的动态刷新# 2、Data Id 不在默认的组,不支持动态刷新# 3、Data Id 既不在默认的组,也支持动态刷新通过的配置方式来支持多个 Data Id 的配置。通过。

2023-12-09 15:33:50 136

空空如也

空空如也

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

TA关注的人

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