- 博客(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
原创 @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
原创 Spring的事务详解
Spring 事务是 Spring 框架提供的一种对事务进行管理的机制。在使用 Spring 事务时,可以通过注解或编程方式将需要进行事务管理的方法和代码块标记为事务性操作,当这些操作被执行时,Spring 会负责开启、提交或回滚数据库事务,以保证在多个操作之间的一致性。
2024-04-07 08:00:00 714
原创 单一职责原则
单一职责原则(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 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入门 第五篇 String,StringBuilder和StringBuffer
在Java中,String和都是用于处理字符串的类,但它们在性能和可变性方面有所不同。StringString是Java中预定义的不可变字符串类。一旦创建了一个String对象,它的值就不能被修改。任何对String对象的操作都会返回一个新的String对象。这是因为String对象在内存中是不可变的,这种设计可以提供字符串的安全性和线程安全性。在上面的例子中,将"Hello"和" World"连接起来会创建一个新的String对象,原始的str对象不会被修改。是可变的字符串类,用于处理可变的字符序列。
2023-12-13 21:42:27 855 2
MySQL索引面试题+索引优化+索引失效
2023-10-21
设计模式:单例设计模式(全部实现方式)工厂设计模式,抽象工厂模式
2023-10-18
excel导出有问题
2023-06-16
No provider available for the service
2022-01-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人