自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小电玩

在绝望中爬起,在美好生活跌入谷底,一步一步艰难前行,休想阻止我向前行

  • 博客(95)
  • 问答 (5)
  • 收藏
  • 关注

原创 spring cloud Alibaba 集成openfeign和resilience4j一起使用不够优雅,那么想法让它优雅起来

突然现在我Hystrix替换掉了,我就转头使用resilience4j宝宝了,我看网上的教程呀,就那个FailBack和接口实现在写同一类中,我的天,我都炸了,我想就这么难看吗?我是真的受不了,我就在网上看帖子,我看了又看,我一下子找了一个多小时,我是真的受不了, 我是真的烦!这一次是真的菜了很多个坑,我也是福了 有坑我就跳 很少见得坑我也往里面跳 哈哈哈,我今天我就把前段时间处理好 可以使用得架子进行发布到csdn 上面了, 后续架子会不断得更新加入新的元素和技术 搭建一个不输入一般好的开源架子。

2024-12-31 00:08:31 1249

原创 纯大白话告诉您什么是23种设计模式

观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。它将所有与特定状态相关的逻辑放在一个类中,避免了大量的条件判断语句(if-else),从而让代码更加清晰易读。抽象工厂模式不仅定义了创建对象的接口,还提供了创建一系列相关或相互依赖对象的能力,而不指定它们的具体类。它属于行为型设计模式,关注的是算法的结构,而不是像抽象工厂那样专注于对象的创建。建造者模式将复杂对象的构建与它的表示分离,允许相同的构建过程创建不同的表示。它是实现回调的一种替代方案。

2024-12-30 23:29:35 1064

原创 基于jdk17,mysql8,redis7,spring boot3,spring cloud Alibaba ,nacos,openfigen,resilience4j等搭建的微服务框架

本篇文章基于jdk17,mysql8,redis7,spring boot3,spring cloud Alibaba> 2023.0.1,nacos,openfigen,resilience4j,LoadBalance,gateway搭建的微服务框架,本章不会又太多的废话,直接上干活

2024-12-30 22:59:34 1390

原创 Spring Cloud Alibaba 最新五大核心组件

本文主要围绕微服务架构及其实现技术Spring Cloud展开,重点介绍了微服务的概念、核心价值及Spring Cloud的核心组件。微服务架构通过将单体应用拆分为独立的小型服务单元,解决了代码复杂度高、技术栈僵化、部署风险大等问题。Spring Cloud作为微服务的具体技术实现,整合了服务注册发现、配置中心、负载均衡等组件,为开发者提供了标准化的微服务解决方案。文章还详细介绍了Nacos作为服务注册与配置中心的应用场景和工作原理,包括服务注册、心跳检测等核心机制。整体内容聚焦于面试场景下的技术要点解析。

2025-10-09 16:30:58 1945 5

原创 Docker快速部署Nacos 3.1.0 配置中心

本文介绍了使用Docker安装Nacos 3.1.0 的完整流程,包括创建目录结构、启动容器、复制配置文件等操作。主要内容: 创建nacos的conf、logs、data目录 使用docker运行Nacos容器,并配置鉴权信息 将容器内的配置、数据、日志目录复制到宿主机 设置目录权限为777 提供Nacos核心表config_info的建表SQL 包含config_info_gray表的创建语句 文中详细说明了每个步骤的具体命令和操作,并配有相关截图,适合需要快速部署Nacos的开发人员参考。

2025-10-02 22:41:35 1381

原创 MySQL索引全面解析:类型作用与最佳实践

MySQL索引全面解析 索引是MySQL数据库性能 cores优化工具,通过有序数据结构减少磁盘IO,提升查询效率。文章系统梳理了索引的关键知识: 核心价值: 加速数据检索 - 避免全表扫描 减少数据读取量 - 仅需索引列数据 优化排序与分组 - 利用索引有序性 强制数据完整性 - 唯一约束 提升并发性能 - 缩短锁定时间 索引类型详解: 全文索引:支持文本分词搜索 主键索引:非空且唯一的聚集索引 唯一索引:允许NULL值的唯一约束 覆盖索引:避免回表查询 组合索引:遵循最左前缀原则 使用注意事项: 索引并

2025-10-01 18:54:39 1495 1

原创 深入解析Java JVM内存结构

本文详细解析了Java JVM内存结构,重点区分了内存模型与内存区域的核心概念。主要内容包括: JVM运行流程:从.java文件编译到类加载(双亲委派机制),再到内存分配过程 内存模型组成:线程私有的程序计数器、虚拟机栈、本地方法栈,以及共享的堆和方法区 关键区别: 方法区是逻辑概念,永久代/元空间是其实现 虚拟机栈存储Java方法栈帧,本地方法栈服务native方法 重要修正:澄清JDK 1.7后常量池存放位置的变化(永久代→堆) 其他组件:JNI接口、JIT编译器、垃圾收集器的作用 文章特别强调要避免网

2025-09-25 10:21:20 1618 1

原创 HashMap源码解析:PUT流程详解

HashMap源码解析摘要 HashMap是基于哈希表的Map接口实现,采用数组+链表/红黑树结构存储键值对。默认初始容量16,负载因子0.75,当链表长度超过8且数组长度≥64时会转为红黑树。PUT操作核心流程:1)计算key哈希值;2)通过(n-1)&hash确定数组索引;3)处理哈希冲突(链表尾插/红黑树插入);4)必要时扩容。扩容时采用2倍扩容机制,将旧数组元素重新分配到新数组。迭代器采用fail-fast机制保证线程不安全时的快速失败。哈希计算通过key.hashCode()高16位异或运

2025-09-22 09:00:00 739 1

原创 Redis 5单线程 vs 6多线程性能解析

摘要: Redis 5采用单线程模型,主线程负责接收请求、解析命令、执行及响应网络IO,导致网络IO成为性能瓶颈。Redis 6引入多线程优化,主线程仅处理命令解析与执行,网络IO等耗时操作交由子线程处理,提升多核CPU利用率,性能提升可达2倍以上。默认未开启多线程,需手动配置io-threads-do-reads yes及合理设置线程数(如4核机器建议2-3线程)。多线程避免了管道或分片的需求,但需根据实际性能问题启用。

2025-09-10 16:32:27 1077

原创 深入解析Java HashCode计算原理 少看大错特错的面试题

本文深入解析了Java中HashCode的计算原理。首先指出常见误区:HashCode并非直接根据对象内存地址换算得出。重点分析了String类的HashCode计算过程,通过反射获取底层char数组,展示字符如何转换为Unicode码值,并详细推导了"1233"字符串的HashCode计算步骤(31*0+49 → 49 → 1569 → 48690 → 1509441)。同时讲解了Integer类直接返回自身数值作为HashCode的特性,通过示例代码验证相同数值的Integer对象H

2025-09-04 15:40:29 1255

原创 JAVA LocalDateTime.class,LocalDate.class,Date.class 工具类,来优化让人反感的项目

的支持,实现了诸如调整给定或当前时间、格式化日期时间、获取系统当前时间戳、计算两个时间之间的差异以及判断当前时间是否处于某个时间区间等常见功能。这些封装不仅减少了重复代码,还提高了代码的清晰度和健壮性,使得时间处理更加简便和直观。通过这样的封装,可以有效提升开发效率,并减少因手动编写时间操作代码而可能引发的错误。这种方式存在一个严重的问题:相同的代码被复制粘贴到项目的各个部分,导致代码冗余度增加且维护困难。显然,相同逻辑的代码应该封装起来以提高代码的复用性和可维护性。

2025-03-07 11:42:09 457

原创 docker 安装redis 7.4.2并挂载配置文件以及设置密码

在 /docker/redis/conf 目录下创建一个空的 redis.conf 文件。如果你想拉取Redis的特定版本(例如最新的稳定版本 7.4.2),可以使用以下命令。在 /docker/redis 目录下创建两个子目录:conf 和 data。切换到 /docker/redis/conf 目录,方便后续操作。如果你想使用Redis的最新稳定版本(由latest标签指向)拉取镜像后,你可以使用以下命令查看本地已下载的Docker镜像。使用 vim 编辑器打开 redis.conf 文件,进行配置。

2025-02-21 17:34:57 1815

原创 Docker安装nacos 2.3.1以及配置数据库

在本指南中,我们将介绍如何使用Docker安装Nacos,并对必要的文件进行配置。以下是详细的步骤和命令解释。

2025-02-17 15:24:29 1170 4

原创 Rust语言入门第七篇-控制流

Rust 的控制流是指程序执行过程中根据不同的条件选择不同的代码路径的能力。Rust 语言提供了一些关键的控制流构造,主要包括 if 表达式、match 表达式、loop、while、for 循环等。它的结构相对直接,但有几个特点需要注意,这些特点体现了 Rust 作为一门类型安全和表达式导向语言的特性。是 Rust 中的一种循环结构,它没有内置的终止条件,因此会一直执行循环体内的代码,直到遇到。语句,但是功能更加强大和灵活,可以匹配复杂的模式而不仅仅是整数或字符串值。来提供一个默认分支。

2024-09-20 20:28:02 1375 1

原创 JAVA SE8

JDK 1.8,即Java 8,是Oracle公司发布的Java平台的重要版本,其正式发布日期是2014年3月18日。这个版本包含了大量革新性的特性和改进,这些特性不仅增强了Java语言本身的表达力,同时也改善了开发者的编程体验。Lambda表达式Lambda表达式是一种轻量级的匿名函数,它们可以作为方法参数或者返回值,极大地简化了函数式编程模式在Java中的应用。Lambda表达式使得代码更加简洁和易于维护。Stream API。

2024-09-20 19:14:46 1509

原创 JAVA SE 11

超链接[HTTP1.1升级HTTP2.0]JDK 11 进一步完善了 JDK 9 引入的模块化系统。模块化系统允许开发人员将代码和依赖项组织成模块,以提高可维护性、安全性和性能。开发人员可以使用module关键字定义模块,并使用requires和exports语句来声明模块之间的依赖关系和对外暴露的 API。模块化系统还提供了更细粒度的访问控制,可以限制对模块中的内部 API 的访问。模块化系统的核心概念是模块(Module)。

2024-09-20 18:35:18 1504

原创 23种设计模式,纯简单理解,面试必备

这意味着无论是处理一个单独的对象还是处理由多个对象组成的复合对象,客户端代码都不需要知道具体的细节,只需要调用同一个接口即可。它们可以独立的变化。具体的实现在代码中也很常见,定义接口类,抽象类进行实现接口类,装饰器类进行继承抽象类进行装饰,这才是完美的符合装饰器设计模式。中介者设计模式的思想就是它能够减少对象之间的依赖关系,使得对象不需要显示地相互引用,从而使耦合性降低,系统易于扩展。在责任链模式中,通常将每个处理者看作一个链表中的节点,每个节点都包含了处理请求的方法以及后继节点的引用。

2024-09-20 16:52:43 4620 2

原创 谈谈你对Spring的理解

Spring是一个广泛使用的Java开发框架,主要用于构建企业级应用。

2024-09-19 14:49:15 2285

原创 @Autowired和@Resource的区别 详细讲解-包含面试题

Autowired是 Spring 框架提供的一个注解,它简化了依赖注入的过程。通常情况下,当我们需要让一个类使用另一个类的功能时,我们可以在前者中声明后者的一个实例。使用@Autowired注解后,Spring 容器会在运行时自动将合适的实例注入到声明了该注解的成员变量或构造函数中。

2024-09-19 14:31:03 1881

原创 软件设计原则

软件设计原则是指导软件开发人员构建高质量、可维护、可扩展和可复用软件系统的一系列准则。遵循这些原则有助于提高软件的质量,减少bug,简化维护工作,并使系统更容易扩展和适应变化。开闭原则(Open-Closed Principle,OCP)是面向对象设计中的一条重要原则,它由Bertrand Meyer在其著作《面向对象软件构造》中提出,并成为SOLID原则之一。开闭原则的核心思想是:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。

2024-09-11 16:33:07 1289

原创 Spring循环依赖的终极解析

当面试官问到你给我讲一下什么是循环依赖吧,该如何回答可以参考一下话术spring的循环依赖就是在代码中接口互相调用产生的情况列入接口a引用接口b 接口b引用接口a 形成一种闭环的引用关系,而不是指循环调用循环调用循环调用是指方法之间的互相调用,形成一个闭环。如果没有适当的终止条件,这种调用会导致无限循环,最终可能导致栈溢出(StackOverflowError)或其他运行时错误。

2024-09-11 16:11:08 1280

原创 spring事务详细讲解-深入浅出

Spring 事务是本身就是对数据库的事务的支持,没有数据库的事务 Spring 是本身无法实现事务的。Spring只提供了统一事务管理接口,具体的实现还是由各数据库自己实现。在使用 Spring 事务时,可以通过注解或编程方式将需要进行事务管理的方法和代码块标记为事务性操作,当这些操作被执行时,Spring 会负责开启时根据当前环境中设置的隔离级别,调整数据库隔离级别。

2024-09-08 10:40:56 762 2

原创 CAS(比较并交换)

CAS是"Compare and Swap"(比较并交换)的缩写,是一种多线程同步的原子操作。它基于硬件的原子性保证,用于解决并发环境下的数据竞争和线程安全问题。CAS操作包括三个参数:内存地址V、旧的预期值A和新的值B。从内存中读取V的当前值;比较当前值与预期值A是否相等;如果相等,则将V的值更新为B;如果不相等,则不做任何操作。CAS操作是原子的,不会被其他线程中断,因此可以保证数据的一致性和线程安全性。如果CAS操作失败(即当前值与预期值不相等),可以进行重试,直到操作成功为止。

2024-08-27 22:03:04 1101

原创 堆和栈的概念和区别

此外,Java中的引用变量是由垃圾回收器管理的,而C或C++中的指针需要手动管理内存。局部变量表用于存储方法的参数和局部变量,操作数栈用于执行方法中的操作,动态链接用于确定方法调用的目标,方法出口信息用于处理方法的返回和异常。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。Java中的引用变量是类型安全的,由垃圾回收器管理,而C或C++中的指针需要显式地进行类型转换和手动管理内存。那么堆和栈是怎么联系起来的呢?

2024-08-27 21:49:39 1038

原创 Java 多线程技术详解

多线程编程的核心优势在于它能够实现任务的并行处理,即在同一时间处理多个任务,这对于处理I/O密集型或计算密集型的工作负载特别有效。

2024-07-28 15:59:36 1946

原创 Java中Synchronized锁升级机制详解

当第一个线程尝试获取`synchronized`锁时,对象头将被标记为偏向锁状态。这意味着只有当前线程可以访问该对象,而不需要额外的同步开销。

2024-07-28 14:23:21 2891

原创 Java SE 9模块化系统。

这是Oracle Corp在Java SE 9版本中非常重要的项目。最初,他们作为Java SE 7 Release的一部分启动了该项目。但是,由于进行了很大的更改,它被推迟到Java SE 8,然后又被推迟了。现在它将与Java SE 9一起在2017年9月发布问世。

2024-07-08 10:54:05 1263

原创 Java中String类在JDK 8与JDK 11,JDK 17的底层实现变迁

JDK 8中,`String`对象基于`char[]`数组存储,每个字符占2个字节,支持完整的Unicode编码。到了JDK 11,为了优化内存使用,对于仅包含ASCII或类似单字节编码字符的字符串,`String`类改用`byte[]`数组存储,并引入了`coder`属性标识编码类型,节省了内存。而在JDK 17中,进一步引入了`hashIsZero`字段来优化哈希码的计算与存储,使得哈希码可以在创建时立即计算并标记是否为零,从而提升性能。

2024-06-27 16:51:25 1722

原创 Rust语言入门第六篇-函数

在 Rust 中,函数被也可以称为方法(methods),它们是 Rust 程序中的基本构建块之一。方法是一段被命名并可重复调用的代码块,用于执行特定的任务。方法可以接受参数并返回值,它们通常用于执行特定的操作或完成特定的计算。

2024-04-16 23:23:00 1515

原创 Rust语言入门第五篇-数据类型

在Rust中,每个值都有一个明确的数据类型,这告诉Rust如何处理这个值。数据类型分为两类子集:标量(scalar)和复合(compound)。需要记住的是,Rust是一种静态类型语言,这意味着在编译时必须知道所有变量的类型。通常情况下,根据值及其使用方式,编译器可以推断出我们想要的类型。

2024-04-16 06:45:00 1179

原创 Rust语言入门第四篇-变量与可变性以及隐藏(Shadowing)

在 Rust 中,尽管是强类型语言,但编译器拥有类型推断的能力。这意味着你可以在不显式指定变量类型的情况下声明变量,`编译器会根据上下文推断出变量的类型`。这样的设计在一定程度上使代码更加简洁,`但不会牺牲类型安全性。`

2024-04-13 08:00:00 939

原创 Rust语言入门第三篇-输出到命令行+占位符

在学习 Rust 语言之前,掌握如何将文字输出到命令行几乎是必不可少的。这是因为在学习阶段,向命令行输出结果几乎是唯一的方式。

2024-04-12 12:00:00 1571

原创 Rust语言入门第二篇-Cargo教程

Rust语言入门第二篇-Cargo教程本节提供对cargo命令行工具的快速了解。我们演示了它为我们生成新包的能力,它在包内编译crate的能力,以及它运行生成的程序的能力。

2024-04-12 07:00:00 2366

原创 23 种设计模式详解(3.7万字带你了解设计模式)

设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

2024-04-10 08:45:00 2555 10

原创 【Mybatis】Mybatis 二级缓存全详解教程

MyBatis-Plus(简称MP)是一个基于 MyBatis 的增强工具,它简化了 MyBatis 的开发,并且提供了许多便利的功能,帮助开发者更高效地进行持久层的开发。

2024-04-08 18:00:00 4266 2

原创 Java Lambda 表达式(详细)

Java Lambda 表达式是在 Java 8 版本中引入的重要特性,它描述了一种更简洁、更灵活的方式来处理函数式编程。在 Java 8 之前,要实现函数式编程,需要通过匿名类实现接口的方式。这样的代码通常比较冗长,可读性也较差。为了改善这种情况,Java 8 引入了 Lambda 表达式。Lambda 表达式的核心思想是:将函数作为参数传递给其他方法,或者将函数作为结果返回。通过 Lambda 表达式,我们可以使用更紧凑和清晰的语法来定义匿名函数。Java 8 中首次引入了 Lambda 表达式。

2024-04-08 08:00:00 1021

原创 Java synchronized(详细)

在Java中,`synchronized`关键字用于解决多线程并发访问共享资源时可能出现的线程安全问题。

2024-04-07 19:00:00 1969

原创 error: linker `link.exe` not found

报错信息表明编译目标依赖于MSVC(Microsoft Visual C++)链接器,但系统找不到link.exe。1.第一种情况如果cmd rustc -version 显示rust版本,只需要一条命令。以及配置环境变量 参考这个教程里面有讲解配置 环境变量。2.如果没有安装则需要。

2024-04-07 10:08:06 2352

原创 Rust语言入门第一篇-环境搭建

希望这篇关于Rust语言的文章能帮到你

2024-04-07 09:42:25 1950 3

原创 Spring的事务详解

Spring 事务是 Spring 框架提供的一种对事务进行管理的机制。在使用 Spring 事务时,可以通过注解或编程方式将需要进行事务管理的方法和代码块标记为事务性操作,当这些操作被执行时,Spring 会负责开启、提交或回滚数据库事务,以保证在多个操作之间的一致性。

2024-04-07 08:00:00 788

基于jdk17,mysql8,redis7,spring boot3,spring cloud Alibaba ,nacos,openfigen,resilience4j等搭建的微服务框架

基于jdk17,mysql8,redis7,spring boot3,spring cloud Alibaba ,nacos,openfigen,resilience4j等搭建的微服务框架

2024-12-30

MySQL索引面试题+索引优化+索引失效

MySQL索引是数据库中用于提高查询效率的重要组成部分。在面试过程中,常常会涉及到MySQL索引的相关问题,包括索引的原理、优化技巧以及索引失效的原因等。 首先,MySQL索引是一种数据结构,用于快速定位和访问数据库中的数据。它通过创建索引列和索引对象来实现,可以加快WHERE子句中涉及索引的查询速度。 在进行索引优化时,有几个关键点需要注意。首先是选择合适的索引列,通常选择经常用于查询的列作为索引列,尽量避免使用长文本或二进制类型的列作为索引列。其次是合理设置索引的顺序,根据查询的频率和字段选择合适的索引顺序。此外,还可以考虑使用覆盖索引,即索引包含了查询所需的所有列,避免了回表操作。 索引失效可能是由于多种原因造成的。其中一个常见的原因是使用了函数或者表达式对索引列进行操作,例如使用了字符串函数或者使用了算术运算。此外,对索引列进行了隐式转换也可能导致索引失效。另外,索引失效还可能与查询的条件有关,例如在进行范围查询时,MySQL可能无法使用索引。 针对这些问题,可以通过优化查询语句来解决。避免对索引列进行函数操作或者表达式计算,尽量保持查询条件与索引列的数据类型一致。同时

2023-10-21

设计模式:单例设计模式(全部实现方式)工厂设计模式,抽象工厂模式

单例设计模式、工厂设计模式和抽象工厂模式是常见的软件开发设计模式。这些设计模式提供了一些有用的思想和实现方式,可以帮助开发人员在设计和实现复杂的软件系统时,更加灵活和高效地进行编程。 单例设计模式是一种创建型设计模式,它的主要目标是确保一个类在任何情况下都只有一个实例,并且提供全局访问点。这种模式在一些需要共享状态的场景下非常有用,比如数据库连接池等。单例模式有多种实现方式,其中比较常见的有饿汉式、懒汉式、双重检查锁定等。 工厂设计模式是一种创建型设计模式,它的主要目标是将对象的创建和使用分离,使得代码更具有可维护性和可扩展性。该模式通常会定义一个工厂接口或抽象类,由具体的工厂类实现该接口或抽象类来创建相应的产品。工厂模式的常见实现方式包括简单工厂、工厂方法、抽象工厂等。 抽象工厂模式是一种创建型设计模式,它的主要目标是提供一个接口或抽象类,用于创建一系列相关或依赖的对象。该模式的主要优点在于,它可以为客户端代码提供一个统一的接口,使得客户端无需关心具体实现细节。抽象工厂模式常用于开发复杂的软件系统,比如操作系统、数据库管理系统等。 总之,单例设计模式、工厂设计模式和抽象工厂模

2023-10-18

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

TA关注的人

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