自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小电玩

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

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

原创 Java 多线程技术详解

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

2024-07-28 15:59:36 680

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

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

2024-07-28 14:23:21 1209

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

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

2024-04-10 08:45:00 1196 3

原创 Rust语言

Rust 是一种系统级编程语言,由 Mozilla 开发。它的设计注重安全性、并发性和性能。Rust 最初发布于 2010年,其目标是成为一种能够替代 C 和 C++ 的编程语言,同时提供更好的内存安全性和并发支持。Rust 的编译器是在 MIT License 和 Apache License 2.0 双重协议声明下的免费开源软件。截至目前( 2024 年 4 月)最新的编译器版本是 1.77.1。Rust 是一种系统级编程语言,旨在提供内存安全、并发性和高性能,同时保持高度的可控性。

2024-04-06 16:45:26 1104

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

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

2024-09-20 20:28:02 1141 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 1304

原创 JAVA SE 11

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

2024-09-20 18:35:18 1336

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

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

2024-09-20 16:52:43 1595

原创 谈谈你对Spring的理解

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

2024-09-19 14:49:15 1954

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

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

2024-09-19 14:31:03 831

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

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

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

2024-09-14 09:54:10 357

原创 软件设计原则

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

2024-09-11 16:33:07 1021

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

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

2024-09-11 16:11:08 840

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

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

2024-09-08 10:40:56 595 1

原创 CAS(比较并交换)

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

2024-08-27 22:03:04 934

原创 堆和栈的概念和区别

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

2024-08-27 21:49:39 893

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

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

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

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

2024-04-16 23:23:00 1204

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

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

2024-04-16 06:45:00 828

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

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

2024-04-13 08:00:00 772

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

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

2024-04-12 12:00:00 1311

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

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

2024-04-12 07:00:00 1496

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

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

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

原创 Java Lambda 表达式(详细)

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

2024-04-08 08:00:00 842

原创 Java synchronized(详细)

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

2024-04-07 19:00:00 1526

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

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

2024-04-07 10:08:06 1037

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

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

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

原创 Spring的事务详解

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

2024-04-07 08:00:00 714

原创 MYSQL索引优化

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

2024-04-07 06:46:22 701

原创 MySQL索引优化

选择合适的索引类型

2024-04-06 17:00:00 938

原创 单一职责原则

单一职责原则(Single Responsibility Principle,SRP)是面向对象设计中的一个重要原则,提倡将一个类或模块只负责一个职责或功能。它最早由Robert C. Martin在其《敏捷软件开发:原则、模式与实践》一书中提出。单一职责原则的核心思想是:一个类或模块应该只有一个引起它变化的原因。也就是说,每个类或模块都应该只有一个职责或功能,并且该职责或功能应该在该类或模块内部封装起来,而不是分散到多个类或模块中。

2024-04-06 15:00:00 943

原创 Java Iterable类(详细)

Iterable是爸爸或者妈妈都行,但是它得孩子是真的不少啊ArrayList要叫Iterable老祖宗,哈哈哈开玩笑了!

2024-04-06 13:30:00 1760

原创 Java Number类(详细)

`java.lang.Number` 类是抽象类,用于表示各种数值类型的对象。它是 Java 中所有数值类型的包装类的超类。

2024-04-06 11:30:00 2763 2

原创 Java 进程状态

线程是调度的基本单位,进程作为拥有资源的基本单位

2024-04-06 10:30:00 1207

原创 Java线程状态(超详细)

当我们在编写多线程程序时,了解线程状态是非常重要的,因为它能够帮助我们理解线程在执行过程中的行为,从而更好地控制和管理线程。

2024-04-06 09:00:00 982

原创 Java String类深入了解JDK各个版本进阶版本

在jdk11中 String value 存储字符串值 是byte[] 数组 ,String中存储字节码的是coder 也是byte类型,因此String的底层数据存储类型成为了byte类型而在jdk8中String 的String value 存储字符串值 是char[] 数组,因此 因此可以看出在jdk8中String底层数据存储类型成为了char类型。

2024-03-25 17:55:06 1069

原创 Java标签提高for循环运行效率,减少资源开销

再看这段代码以及执行结果。

2024-03-25 12:34:18 662

原创 Java入门 第五篇 String,StringBuilder和StringBuffer

在Java中,String和都是用于处理字符串的类,但它们在性能和可变性方面有所不同。StringString是Java中预定义的不可变字符串类。一旦创建了一个String对象,它的值就不能被修改。任何对String对象的操作都会返回一个新的String对象。这是因为String对象在内存中是不可变的,这种设计可以提供字符串的安全性和线程安全性。在上面的例子中,将"Hello"和" World"连接起来会创建一个新的String对象,原始的str对象不会被修改。是可变的字符串类,用于处理可变的字符序列。

2023-12-13 21:42:27 855 2

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

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

2023-10-21

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

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

2023-10-18

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

TA关注的人

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