
Java
文章平均质量分 87
小电玩
闲着无聊就学习
展开
-
Docker安装nacos 2.3.1以及配置数据库
在本指南中,我们将介绍如何使用Docker安装Nacos,并对必要的文件进行配置。以下是详细的步骤和命令解释。原创 2025-02-17 15:24:29 · 601 阅读 · 3 评论 -
欢迎来到我们的开源项目!
我坚信,开源的力量在于社区的协作与共同成长。一个人的努力是有限的,而团队的合作可以激发出无限可能。因此,我们诚挚地邀请您加入我们的行列,一起讨论、学习,共同进步,将这个项目打造得更加出色。如果你渴望在一个充满活力和技术挑战的环境中贡献自己的力量,欢迎随时联系我,了解更多详情或提交您的贡献。在未来的开发中,我们将继续以Java作为主要的后端开发语言,并探索使用Rust来编写需要高性能表现的关键组件,为系统性能提升注入新的活力。期待你的加入,一起开启这段激动人心的旅程吧!原创 2025-01-02 01:06:40 · 454 阅读 · 3 评论 -
纯大白话告诉您什么是23种设计模式
观察者模式定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。它将所有与特定状态相关的逻辑放在一个类中,避免了大量的条件判断语句(if-else),从而让代码更加清晰易读。抽象工厂模式不仅定义了创建对象的接口,还提供了创建一系列相关或相互依赖对象的能力,而不指定它们的具体类。它属于行为型设计模式,关注的是算法的结构,而不是像抽象工厂那样专注于对象的创建。建造者模式将复杂对象的构建与它的表示分离,允许相同的构建过程创建不同的表示。它是实现回调的一种替代方案。原创 2024-12-30 23:29:35 · 923 阅读 · 0 评论 -
基于JDK 17 编写的Java常用工具类
【代码】基于JDK 17 编写的Java常用工具类。原创 2024-12-30 23:10:34 · 380 阅读 · 0 评论 -
Java poi 实现二级关联工具类 粘贴直接可以使用
【代码】Java poi 实现二级关联工具类 粘贴直接可以使用。原创 2024-11-13 13:42:35 · 239 阅读 · 0 评论 -
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 · 1403 阅读 · 0 评论 -
JAVA SE 11
超链接[HTTP1.1升级HTTP2.0]JDK 11 进一步完善了 JDK 9 引入的模块化系统。模块化系统允许开发人员将代码和依赖项组织成模块,以提高可维护性、安全性和性能。开发人员可以使用module关键字定义模块,并使用requires和exports语句来声明模块之间的依赖关系和对外暴露的 API。模块化系统还提供了更细粒度的访问控制,可以限制对模块中的内部 API 的访问。模块化系统的核心概念是模块(Module)。原创 2024-09-20 18:35:18 · 1415 阅读 · 0 评论 -
23种设计模式,纯简单理解,面试必备
这意味着无论是处理一个单独的对象还是处理由多个对象组成的复合对象,客户端代码都不需要知道具体的细节,只需要调用同一个接口即可。它们可以独立的变化。具体的实现在代码中也很常见,定义接口类,抽象类进行实现接口类,装饰器类进行继承抽象类进行装饰,这才是完美的符合装饰器设计模式。中介者设计模式的思想就是它能够减少对象之间的依赖关系,使得对象不需要显示地相互引用,从而使耦合性降低,系统易于扩展。在责任链模式中,通常将每个处理者看作一个链表中的节点,每个节点都包含了处理请求的方法以及后继节点的引用。原创 2024-09-20 16:52:43 · 4326 阅读 · 1 评论 -
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 · 655 阅读 · 0 评论 -
HashMap的put流程原理详细讲解
我最近在面试找Java岗位开发,最近也是面了几家,有一家问我给我讲一下什么HashMap的put流程,实话我是真的这个是背的,面试官上来就直接打断了我的诉说。讲重点,说真的,咱们背的面试题,都是东一道西一道的,他们这些提供文章的都是讲的一些皮毛,甚至都不知道是在哪里copy的 ,好的文章确实有,但很少。问的我哑口无言,就纯背面试题,真的是能把人害死,所以我要做一份文章,彻底弥补一下理论知识的情况。原创 2024-09-14 09:54:10 · 426 阅读 · 0 评论 -
CAS(比较并交换)
CAS是"Compare and Swap"(比较并交换)的缩写,是一种多线程同步的原子操作。它基于硬件的原子性保证,用于解决并发环境下的数据竞争和线程安全问题。CAS操作包括三个参数:内存地址V、旧的预期值A和新的值B。从内存中读取V的当前值;比较当前值与预期值A是否相等;如果相等,则将V的值更新为B;如果不相等,则不做任何操作。CAS操作是原子的,不会被其他线程中断,因此可以保证数据的一致性和线程安全性。如果CAS操作失败(即当前值与预期值不相等),可以进行重试,直到操作成功为止。原创 2024-08-27 22:03:04 · 1005 阅读 · 0 评论 -
堆和栈的概念和区别
此外,Java中的引用变量是由垃圾回收器管理的,而C或C++中的指针需要手动管理内存。局部变量表用于存储方法的参数和局部变量,操作数栈用于执行方法中的操作,动态链接用于确定方法调用的目标,方法出口信息用于处理方法的返回和异常。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。Java中的引用变量是类型安全的,由垃圾回收器管理,而C或C++中的指针需要显式地进行类型转换和手动管理内存。那么堆和栈是怎么联系起来的呢?原创 2024-08-27 21:49:39 · 957 阅读 · 0 评论 -
Java 多线程技术详解
多线程编程的核心优势在于它能够实现任务的并行处理,即在同一时间处理多个任务,这对于处理I/O密集型或计算密集型的工作负载特别有效。原创 2024-07-28 15:59:36 · 919 阅读 · 0 评论 -
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 · 1172 阅读 · 0 评论 -
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 · 1367 阅读 · 0 评论 -
Java标签提高for循环运行效率,减少资源开销
再看这段代码以及执行结果。原创 2024-03-25 12:34:18 · 759 阅读 · 0 评论 -
23 种设计模式详解(3.7万字带你了解设计模式)
设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。原创 2024-04-10 08:45:00 · 1863 阅读 · 6 评论 -
Java Lambda 表达式(详细)
Java Lambda 表达式是在 Java 8 版本中引入的重要特性,它描述了一种更简洁、更灵活的方式来处理函数式编程。在 Java 8 之前,要实现函数式编程,需要通过匿名类实现接口的方式。这样的代码通常比较冗长,可读性也较差。为了改善这种情况,Java 8 引入了 Lambda 表达式。Lambda 表达式的核心思想是:将函数作为参数传递给其他方法,或者将函数作为结果返回。通过 Lambda 表达式,我们可以使用更紧凑和清晰的语法来定义匿名函数。Java 8 中首次引入了 Lambda 表达式。原创 2024-04-08 08:00:00 · 883 阅读 · 0 评论 -
Java synchronized(详细)
在Java中,`synchronized`关键字用于解决多线程并发访问共享资源时可能出现的线程安全问题。原创 2024-04-07 19:00:00 · 1726 阅读 · 0 评论 -
Java 进程状态
线程是调度的基本单位,进程作为拥有资源的基本单位原创 2024-04-06 10:30:00 · 1304 阅读 · 0 评论 -
Java线程状态(超详细)
当我们在编写多线程程序时,了解线程状态是非常重要的,因为它能够帮助我们理解线程在执行过程中的行为,从而更好地控制和管理线程。原创 2024-04-06 09:00:00 · 1097 阅读 · 0 评论 -
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 · 1170 阅读 · 1 评论 -
主流MQ [Kafka、RabbitMQ、ZeroMQ、RocketMQ 和 ActiveMQ]
下面是关于主流的 Kafka、RabbitMQ、ZeroMQ、RocketMQ 和 ActiveMQ 的一些介绍:Kafka 是一个分布式流处理平台,设计用于处理高吞吐量的实时数据流。它具有高可靠性、可扩展性和持久性,适用于构建实时数据管道和流式处理应用程序。Kafka 使用发布-订阅模型,消息以主题(topic)的形式进行发布和订阅。RabbitMQ 是一个功能丰富且易于使用的开源消息队列系统,实现了高级消息队列协议(AMQP)。原创 2023-12-10 16:54:42 · 2495 阅读 · 0 评论 -
Java红黑树保姆级带你了解,让面试官哑口无言
首先,红黑树是一种自平衡的二叉搜索树,它通过颜色标记和旋转操作来维持树的平衡。红黑树将节点分为红色和黑色两种颜色,其中红色表示当前节点,而黑色表示子节点。在下面图片中,我们可以使用以下代码来描述一个红黑树的基本结构:表示了一个红黑树的根节点A,以及其左右子节点B和C。每个节点都可能拥有一个或两个子节点。对于每个节点,我们可以根据其颜色将其标记为红色或黑色。在Mermaid格式中,我们可以通过在节点标签中添加颜色后缀来表示节点的颜色。例如,红色节点可以表示为,而黑色节点可以表示为。原创 2023-12-08 06:45:00 · 1026 阅读 · 0 评论 -
Spring如何处理线程并发问题,保姆级带你认识,让面试管对你刮目相看
Spring框架需要处理线程并发问题,主要是因为并发是现代应用程序和系统的一个关键特性。在多线程环境下,应用程序同时处理多个任务,而这些任务可能同时访问和修改共享资源。如果不加以控制,这Spring作为一个流行的Java开发框架,旨在帮助开发者构建高质量的、可扩展的应用程序。在处理并发问题方面,Spring提供了多种工具和机制,以帮助开发者更好地管理和控制线程并发。通过使用Spring的线程池、异步任务执行、事务管理等功能,开发者可以更轻松地处理多线程环境下的并发问题,提高应用程序的性能和可靠性。原创 2023-12-06 18:00:00 · 2015 阅读 · 0 评论 -
HTTP1.1升级HTTP2.0
HTTP2.0相比于HTTP1.x有以下几个优点:二进制分帧:HTTP2.0将所有传输的信息分割为更小的消息和帧,并采用二进制格式对它们进行编码,这样可以更好地对数据进行压缩和解压缩,提高传输效率。多路复用:HTTP2.0可以在一个连接上同时传输多个请求和响应,而HTTP1.x需要多个连接才能实现并发传输,这样可以减少TCP连接的数量,提高性能。首部压缩:HTTP2.0使用HPACK算法对首部进行压缩,减少了首部的大小,提高了传输效率。原创 2023-11-20 10:44:03 · 960 阅读 · 0 评论 -
@Autowired和@Resource的区别
Autowired是Spring框架中的注解之一,用于自动装配(Autowired)依赖关系。在Java中,类与类之间常常存在依赖关系,而这些依赖关系需要通过实例化对象来进行连接。传统的方式是在代码中手动创建对象并进行依赖注入,但这种方式繁琐且容易出错。而使用@Autowired注解,可以由Spring框架自动扫描和装配相应的依赖关系,使得开发者无需手动管理对象的创建和注入。原创 2023-10-28 01:11:47 · 321 阅读 · 0 评论 -
Java NIO 开发
Java NIO(New IO)是 JDK 1.4 引入的一组新的 I/O API,用于支持非阻塞式 I/O 操作。相比传统的 JavaIO API,NIO 提供了更快、更灵活的 I/O 操作方式,可以用于构建高性能网络应用程序。Java NIO 的主要组成部分包括:Channel:通道是一个在应用程序和文件、网络套接字之间的连接。可以通过通道来进行数据的读取和写入。Buffer:缓冲区是一个容器,用于存储数据。在 NIO 中,所有的数据读取和写入都是通过缓冲区进行的。原创 2023-10-26 21:23:51 · 325 阅读 · 1 评论 -
Synchronized同步锁
Java中的synchronized关键字用于实现线程同步,可以修饰方法或代码块。1. 修饰方法:当一个方法被synchronized修饰时,只有获得该方法的锁的线程才能执行该方法。其他线程需要等待锁的释放才能执行该方法。2. 修饰代码块:当某个对象被synchronized修饰时,任何线程在执行该对象中被synchronized修饰的代码块时,必须先获得该对象的锁。其他线程需要等待锁的释放才能执行同步代码块。原创 2023-10-23 22:50:32 · 152 阅读 · 0 评论 -
Java NIO
Java NIO(New IO)是 JDK 1.4 引入的一组新的 I/O API,用于支持非阻塞式 I/O 操作。相比传统的 Java IO API,NIO 提供了更快、更灵活的 I/O 操作方式,可以用于构建高性能网络应用程序。总之,Java NIO 提高了网络编程的效率和性能,使得程序可以处理更多并发请求。但同时需要注意 NIO 的复杂性和学习难度,需要仔细理解其原理和使用规范。原创 2023-10-23 22:37:28 · 582 阅读 · 0 评论 -
Java IO流
Java I/O(Input/Output)流是Java中处理输入和输出的机制。它提供了一种统一的方式来读取和写入各种类型的数据,包括字节、字符、对象等。I/O流是Java程序与外部世界进行交互的关键组件之一。Java I/O流分为两类:字节流(Byte Streams)和字符流(Character Streams)。此外,Java还提供了一系列其他类型的流,如对象流(ObjectStreams)、管道流(PipeStreams)等,用于处理特定的数据类型或应用场景。原创 2023-10-23 22:32:55 · 197 阅读 · 0 评论 -
# 开发趋势 Java Lambda 表达式 第三篇
Java Lambda 表达式可以与List,Map,Set集合和常规操作进行整合,以提供一种更简洁、更可读的代码编写方式。原创 2023-10-23 22:10:08 · 291 阅读 · 0 评论 -
Java的八种基本数据类型+封装类+示例代码
在Java中,基本数据类型是构建和操作程序的基础。:在Java中,八大基本数据类型是原始类型,它们的值直接存储在内存中,因此在访问和操作这些类型的值时,它们比引用类型(比如对象)有更高的效率。:每一种基本数据类型都有特定的用途和精度范围。例如,如果你要处理小数点后的数值,你可以使用float或double类型;如果你要处理大范围的整数,你可以使用int或long类型。这些基本数据类型可以帮助你以最准确的方式表示和处理数据。:每种基本数据类型都有固定的内存大小,它能以更有效率的方式使用系统资源。原创 2023-10-23 21:50:59 · 592 阅读 · 0 评论 -
开发趋势 Java Lambda 表达式 第一篇
Java Lambda 表达式是自 Java 8以后引入的一种新的编程特性,它使得 Java 也能使用函数式编程的部分特性。Lambda 表达式提供了一种清晰且简洁的方式来代表一个方法接口(single method interface)也称为函数式接口(functional interface)的实例。原创 2023-10-23 20:57:36 · 129 阅读 · 0 评论