自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小电玩

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

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

原创 欢迎来到我们的开源项目!

我坚信,开源的力量在于社区的协作与共同成长。一个人的努力是有限的,而团队的合作可以激发出无限可能。因此,我们诚挚地邀请您加入我们的行列,一起讨论、学习,共同进步,将这个项目打造得更加出色。如果你渴望在一个充满活力和技术挑战的环境中贡献自己的力量,欢迎随时联系我,了解更多详情或提交您的贡献。在未来的开发中,我们将继续以Java作为主要的后端开发语言,并探索使用Rust来编写需要高性能表现的关键组件,为系统性能提升注入新的活力。期待你的加入,一起开启这段激动人心的旅程吧!

2025-01-02 01:06:40 447 4

原创 Java 多线程技术详解

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

2024-07-28 15:59:36 821

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

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

2024-07-28 14:23:21 2162

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

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

2025-03-07 11:42:09 360

原创 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 749

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

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

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

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

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

2024-12-31 00:08:31 996

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

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

2024-12-30 23:29:35 919

原创 基于JDK 17 编写的Java常用工具类

【代码】基于JDK 17 编写的Java常用工具类。

2024-12-30 23:10:34 369

原创 基于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 1074

原创 Java poi 实现二级关联工具类 粘贴直接可以使用

【代码】Java poi 实现二级关联工具类 粘贴直接可以使用。

2024-11-13 13:42:35 236

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

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

2024-09-20 20:28:02 1223 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 1387

原创 JAVA SE 11

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

2024-09-20 18:35:18 1405

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

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

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

原创 谈谈你对Spring的理解

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

2024-09-19 14:49:15 2121

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

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

2024-09-19 14:31:03 1450

原创 HashMap的put流程原理详细讲解

检查表是否为空或未初始化如果table为空(),或者table的长度为0(n == 0),则调用resize方法进行初始化或扩容。计算索引位置使用计算键值对应的索引位置i。检查索引位置是否有数据检查tab[i]位置是否有数据:如果tab[i]位置为空(p == null),则创建一个新的Node节点,并将其放置在tab[i]位置。如果tab[i]位置有数据,则继续进行冲突处理。处理哈希冲突如果tab[i]位置有数据,需要进一步处理:检查当前节点p的hash值是否与传入的hash。

2024-09-19 13:59:14 638

原创 HashMap的put流程原理详细讲解

我最近在面试找Java岗位开发,最近也是面了几家,有一家问我给我讲一下什么HashMap的put流程,实话我是真的这个是背的,面试官上来就直接打断了我的诉说。讲重点,说真的,咱们背的面试题,都是东一道西一道的,他们这些提供文章的都是讲的一些皮毛,甚至都不知道是在哪里copy的 ,好的文章确实有,但很少。问的我哑口无言,就纯背面试题,真的是能把人害死,所以我要做一份文章,彻底弥补一下理论知识的情况。

2024-09-14 09:54:10 417

原创 软件设计原则

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

2024-09-11 16:33:07 1169

原创 面试题 Spring bean 循环依赖解决方案以及三级缓存讲解

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

2024-09-11 16:11:08 1020

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

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

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

原创 CAS(比较并交换)

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

2024-08-27 22:03:04 1002

原创 堆和栈的概念和区别

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

2024-08-27 21:49:39 952

原创 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 1165

原创 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 1331

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

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

2024-04-16 23:23:00 1342

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

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

2024-04-16 06:45:00 974

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

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

2024-04-13 08:00:00 834

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

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

2024-04-12 12:00:00 1430

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

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

2024-04-12 07:00:00 2088

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

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

2024-04-10 08:45:00 1780 7

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

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

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

原创 Java Lambda 表达式(详细)

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

2024-04-08 08:00:00 882

原创 Java synchronized(详细)

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

2024-04-07 19:00:00 1703

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

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

2024-04-07 10:08:06 1919

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

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

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

原创 Spring的事务详解

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

2024-04-07 08:00:00 743

原创 MYSQL索引优化

​MySQL性能优化是一个持续的过程,需要不断尝试和调整。根据具体场景和需求,可能还会有其他针对性的优化策略。

2024-04-07 06:46:22 725

原创 MySQL索引优化

选择合适的索引类型

2024-04-06 17:00:00 962

基于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关注的人

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