自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 Two-Factor Authentication (2FA) 深度解读及在JavaWeb的实现

Two-Factor Authentication (2FA) 作为当前身份验证中的重要安全保障手段,已广泛应用于各类系统和应用中。通过结合不同的验证因素,如 TOTP、SMS OTP、推送通知和生物识别技术,2FA 显著提高了用户账户的安全性。在 JavaWeb 项目中实现 2FA 可以通过 Google Authenticator、SMS OTP 或推送通知等方式实现,具体选择取决于系统的安全需求和用户体验要求。

2024-09-24 10:15:00 951

原创 Java 8+时间处理:LocalDateTime、LocalDate、LocalTime 深度解析

在 Java 8 之前,时间和日期的处理主要依赖于和。DateCalendarDateCalendar为了解决这些问题,Java 8 引入了新的时间日期 API(java.time包),该包采用了更现代的设计并且线程安全。LocalDate和LocalTime,并结合具体实例说明它们的使用方法和最佳实践。

2024-09-23 10:15:00 1552

原创 Java 的 java.time 包详解

java.time包提供了一组全新的类,用于处理日期、时间、时区和时间间隔。与旧的和类相比,java.time包中的类是不可变且线程安全的,基于ISO-8601日历系统。

2024-09-20 10:15:00 848

原创 解决 TortoiseGitPlink Fatal Error:深入解析

Pageant 是 PuTTY 的身份认证代理程序,它可以帮助用户管理和加载 SSH 密钥。TortoiseGit 依赖 Pageant 来加载.ppk格式的 SSH 密钥,并自动在需要时提供给服务器。Pageant 的主要优势在于,它可以常驻后台,避免每次连接时手动加载密钥。替换 SSH 客户端为 Git 自带的 OpenSSH 以简化密钥管理。使用 Pageant 或ssh-agent来加载并缓存 SSH 私钥,避免手动操作。确保远程仓库的 URL 正确,且网络连接没有受到防火墙或代理的影响。

2024-09-19 10:15:00 844

原创 Java 单例设计模式

以下是对单例设计模式的详细介绍,包括其实现方式、存在的问题、优化方法以及相应的测试用例。这种方式在类加载时就创建实例,避免了多线程同步问题,但如果实例创建过程比较耗时,可能会影响类加载速度。方法防止反序列化破坏单例模式,可以在保证线程安全和性能的同时,增强代码的可测试性和可维护性。这种方式结合了懒汉式和饿汉式的优点,既实现了延迟加载,又保证了线程安全,同时减少了同步开销。关键字,可以确保线程安全,但会导致性能下降,因为每次调用该方法时都需要进行同步。关键字,可能会导致一个线程看到一个未完全初始化的实例。

2024-09-18 10:15:00 721

原创 使用 docker update 命令动态更新容器配置

命令为我们提供了一种无需停止容器的灵活方式来动态调整容器的资源配置。通过合理使用这些选项,我们可以确保容器在高效运行的同时不会影响主机系统的稳定性。无论是 CPU、内存、I/O 还是网络和安全配置,都提供了丰富的功能来满足不同场景下的需求。

2024-09-13 10:15:00 1785

原创 MyBatis-Plus 与 Mockito:解决 Lambda 缓存初始化问题

异常在 MyBatis-Plus 中较常见,尤其是在单元测试环境中通过 Mockito 模拟 DAO 操作时。通过手动初始化,可以确保 MyBatis-Plus 的缓存机制正常工作,从而解决这一问题。在单测框架中,保持 MyBatis 的元数据完整性是确保测试顺利进行的关键。

2024-09-12 10:15:00 648

原创 深入了解单元测试框架:JUnit 5、Mockito和 AssertJ

JUnit 5 是 Java 平台上最流行的单元测试框架之一。它由三个子项目组成:JUnit Platform、JUnit Jupiter 和 JUnit Vintage。:提供启动测试框架的基础设施,支持不同的测试引擎。:包含新的编程模型和扩展模型,用于编写测试和扩展。:支持运行基于 JUnit 3 和 JUnit 4 的测试,确保旧版测试的兼容性。

2024-09-11 10:15:00 845

原创 解决 Mockito when().thenReturn() 不符合预期的行为

当使用时,需注意避免与重复初始化 Mock 对象。两者的功能相似,二者只需保留一个即可避免因final字段无法重新注入导致的错误。如果你选择使用,就不需要手动调用;如果你使用其他 Runner(如),则可以通过进行初始化,并确保在测试结束时关闭资源。通过理解和正确配置 Mock 对象的初始化方式,可以有效避免不符合预期的行为,确保单元测试的稳定性和可靠性。

2024-09-10 10:15:00 1273

原创 CentOS文件和目录命令

CentOS文件管理命令:pwd查看当前目录,ls列出内容,cd切换目录,mkdir创建目录,rm删除文件或目录,cp复制,mv移动或重命名,touch创建文件,cat和less查看文件内容,find搜索,du和df检查磁盘使用,chmod改权限,chown改所有者,ln创建链接,tar打包解压,scp远程传输。

2024-09-06 10:15:27 1170

原创 Java并发编程-Phaser解析

在并发编程中,协调多个线程之间的执行顺序是一个常见的需求。Java 提供了多种工具来处理线程同步问题,如和Semaphore。然而,这些工具在某些复杂的场景中显得有些笨拙或受限。为了提供一种更灵活、更强大的阶段性同步机制,Java 并发包引入了Phaser类。Phaser是 Java 7 引入的一个高级同步工具,它允许一组线程在多个阶段上进行同步,而不是像那样只在一个点上进行同步。这使得Phaser在处理多阶段并发任务时特别有用,尤其是在动态调整参与线程数量的情况下。通过Phaser。

2024-09-05 10:15:00 836

原创 Spring Boot 注解详解

Spring Boot 是一个基于 Spring 框架的轻量级解决方案,它通过简化配置和自动化注解的方式,极大地提高了应用程序的开发效率。在开发 Spring Boot 应用时,各类注解起到了至关重要的作用。注解不仅帮助开发者减少冗余配置,还能让代码更加直观和易于维护。本文将详细探讨 Spring Boot 中常见的注解,从原理、使用场景到最佳实践,帮助你更深入地理解这些注解的作用和使用方法。

2024-09-04 10:15:00 606

原创 深入解析 MapStruct Plus 的 @AutoMapper 注解及其对象映射机制

MapStruct Plus 的注解为 Java 开发者提供了一种简单、高效的对象映射解决方案。通过其编译期生成的映射代码,既保证了性能,又大大减少了手动编写代码的工作量。在现代 Java 应用开发中,特别是在涉及多个对象模型层次的项目中,这一工具将成为开发者不可或缺的利器。

2024-09-03 10:15:00 1981

原创 Hipp4J 动态线程池和nacos配合使用入门

在分布式系统中,合理管理线程池对于系统的性能和稳定性至关重要。Hipp4J结合Nacos,提供了动态线程池管理的能力,使得线程池能够根据系统负载的变化自动扩容和缩容,从而提高资源利用率和系统响应速度。本文将深入探讨Hipp4J与Nacos结合的工作原理和配置方法,并详细解释线程池扩容与缩容的具体实现过程。Hipp4J支持通过注解创建自定义线程池,并通过Nacos动态管理这些线程池的参数。

2024-09-02 10:15:00 686

原创 MyBatis-Plus MetaObjectHandler 深入解析

的主要功能是在数据库操作(如插入和更新)时自动填充实体类中的字段,特别是那些不需要用户手动赋值的字段。它的典型应用场景包括创建时间、更新时间、操作人等公共字段的自动填充。除了默认策略外,开发者还可以通过和方法自定义字段的填充逻辑。默认情况下,这些方法会在字段为空时才进行填充,避免覆盖已有值。是 MyBatis-Plus 提供的一个功能强大的接口,允许开发者在插入和更新操作中自动填充公共字段,从而减少代码重复,提升开发效率。

2024-08-30 10:15:00 1274 1

原创 CentOS 部署 RocketMQ 详细指南

Apache RocketMQ 是一个分布式消息中间件,最初由阿里巴巴开发并开源。它基于发布-订阅(Pub-Sub)模式,具有高性能、低延迟和高可靠性等特点。RocketMQ 支持大规模消息流处理,常用于电商交易、金融支付等场景。访问可以看到 RocketMQ 控制台的管理界面,提供对 Topic、Consumer、Broker 和消息流的全面监控。

2024-08-29 10:15:00 1879

原创 在 CentOS 上使用 ss 命令替代 lsof 和 netstat 查看端口信息和端口占用

在系统管理和网络运维中,了解网络端口的占用情况是一项至关重要的技能。无论是为了排查网络问题、确保服务绑定到正确的端口,还是为了检测潜在的安全风险,查看端口状态都不可避免。传统上,lsof和netstat是最常用的工具,但它们并不是所有系统的默认配置。特别是在 CentOS 的最小化安装中,系统通常不会自带这两个命令。在这样的环境下,ss命令提供了一个高效的替代方案。ss是iproute2工具包的一部分,不仅功能强大,性能优越,还可以满足大多数netstat和lsof的使用场景。本文将深入探讨ss。

2024-08-28 10:15:00 712

原创 Docker 部署 Nexus Maven私服

Nexus 是一个强大的仓库管理器,广泛用于管理和组织软件构建过程中的依赖项和构件。通过 Docker 部署 Nexus 私服,可以简化安装和管理过程,并提供更高的灵活性和可扩展性。

2024-08-27 10:15:00 813

原创 如何在Java Maven项目中使用JUnit 5进行测试

JUnit是Java编程语言中最流行的测试框架之一。JUnit 5是JUnit的最新版本,它引入了许多新特性和改进,使得编写和运行测试更加灵活和强大。文章从环境配置开始,逐步讲解了如何编写测试用例、运行测试以及使用JUnit 5的高级特性。JUnit 5为Java开发者提供了强大的测试工具,使得编写和运行测试变得更加灵活和高效。

2024-08-26 10:15:00 1089

原创 探讨CentOS系统net-tools与iproute2的使用

在现代网络管理中,iproute2显然比net-tools更为强大。虽然迁移过程可能带来一定挑战,但其带来的长期收益显而易见。

2024-08-23 10:15:00 550

原创 CentOS 硬链接与软链接详解

硬链接和软链接是Linux系统中非常重要的文件管理工具。硬链接通过共享相同的数据块提供数据冗余和一致性,而软链接则通过路径引用提供灵活性和快捷访问。在实际应用中,根据具体需求选择合适的链接类型,可以提高文件管理的效率和灵活性。

2024-08-22 10:15:00 1488

原创 多线程任务中设置MDC的实践

在Spring框架中,开发者可以自定义线程池,将MDC上下文传递给每个线程。通过重写的execute方法,可以在任务执行之前获取当前线程的MDC上下文,并将其传递给新线程。} }} }MDC;import org} }} }} }@Override这种方法的优势在于自动化程度高,适用于大规模的线程池管理,但其实现复杂度较高。通过自定义线程池,可以简化多线程任务中的MDC管理。以下示例展示了如何通过继承来自定义线程池,实现MDC上下文的自动传递。

2024-08-21 10:15:00 1048

原创 Spring Boot集成和使用RabbitMQ

RabbitMQ 支持集群模式,可以提升消息代理的可靠性和可用性。在集群模式下,多个 RabbitMQ 节点共同组成一个集群,每个节点都能够接收和发送消息,从而分担系统负载。通过 Docker Compose 或 Kubernetes,可以快速部署一个高可用的 RabbitMQ 集群。集群中的节点分为两种角色:RAM 节点和 Disk 节点。RAM 节点将数据存储在内存中,适合对性能要求较高但对数据持久化要求较低的场景;Disk 节点则会将数据持久化到磁盘,保证数据在节点重启或宕机后的恢复能力。

2024-08-20 10:15:00 1092

原创 使用 Docker 部署 RabbitMQ 的详细指南

RabbitMQ 是一个流行的开源消息代理软件,它实现了高级消息队列协议(AMQP)。本文将详细介绍如何使用 Docker 部署 RabbitMQ,并提供一些配置和管理的技巧。为了确保 RabbitMQ 的数据在容器重启或删除后不会丢失,我们使用了 Docker 的卷(volume)功能。RabbitMQ 容器通过指定环境变量的方式进行配置,这比修改配置文件便捷得多。为了防止数据丢失,定期备份 RabbitMQ 的数据是非常重要的。如果尚未安装,可以参考。)登录,即可访问 RabbitMQ 的管理界面。

2024-08-19 10:15:00 2185

原创 Docker 部署 XXL-JOB

通过本文的介绍,我们完成了在 Docker 环境中部署 XXL-JOB 的全过程。从 MySQL 数据库用户的创建,到 Docker 容器的部署,再到最后的任务验证,XXL-JOB 的部署步骤清晰明确。借助 Docker,XXL-JOB 可以快速部署到任何支持 Docker 的环境中,极大简化了运维工作。

2024-08-16 10:15:00 1991

原创 Java 创建型设计模式详解

概念抽象工厂模式提供了一个接口,用于创建一系列相关或互相依赖的对象,而无需指定它们的具体类。它通常用于创建一组相关产品,如操作系统的不同界面风格。结构抽象工厂类(AbstractFactory):声明创建一组相关产品的方法。具体工厂类(ConcreteFactory):实现抽象工厂的方法,生成一系列具体产品。抽象产品类(AbstractProduct):定义产品的接口。具体产品类(ConcreteProduct):实现具体产品。示例代码// 抽象产品Avoid use();

2024-08-15 10:15:00 1933

原创 Java并发编程-synchronized 原理详解

关键字在Java中通过JVM字节码的和指令实现。无论是在正常执行流程还是异常处理流程中,Java编译器都会确保监视器锁的正确获取和释放。这种机制通过反编译和观察JVM指令可以得到清晰的理解。Java语言规范JVM指令集手册。

2024-08-14 10:15:00 944

原创 Docker 容器 IP 地址操作详解

Docker 默认使用桥接网络(bridge network)来管理容器的网络。如果你希望对 IP 地址进行更精细的控制,可以通过自定义网络来实现。Docker 允许用户根据需求自定义 IP 地址和网络配置。通过创建自定义网络并指定 IP 地址,可以精细控制容器的网络行为,而通过连接多个网络,一个容器可以拥有多个 IP 地址以应对复杂的场景。此外,不删除容器的情况下更改 IP 地址和网络提供了更高的灵活性。

2024-08-13 10:15:00 1258

原创 Docker 配置参数详解

docker run:运行一个新的容器。docker ps:列出当前运行的容器。:停止一个运行中的容器。docker rm:删除一个容器。:列出本地镜像。docker rmi:删除一个镜像。:在运行的容器中执行命令。:查看容器的日志。:查看容器或镜像的详细信息。

2024-08-12 10:15:00 1021

原创 深入解析 CentOS 中的 ifcfg-eth0 配置文件

ifcfg-eth0文件中的每个属性都在控制网络接口的不同方面。通过这些配置选项,根据网络环境的不同需求进行精确配置,确保网络接口的最佳性能和稳定性。扩展阅读。

2024-08-10 11:15:00 1077

原创 Docker 网络代理配置及防火墙设置指南

在某些环境中,服务器无法直接访问外网,需要通过网络代理进行连接。虽然我们通常会在或等系统配置文件中直接配置代理,但 Docker 命令无法使用这些配置。例如,在使用。

2024-08-10 10:30:00 1372

原创 CentOS 上安装 Docker 的详细指南

在中国大陆,直接访问 Docker 官方镜像库的速度较慢。可以使用国内的镜像加速服务。首先检查并卸载系统中可能存在的旧版本 Docker,旧版本的 Docker 称为。的域名,可能是网络连接问题或 DNS 配置问题。为了能够安装 Docker,首先需要设置 Docker 的官方仓库。如果无法使用默认的镜像列表,可以直接指定可用的仓库 URL。为了验证 Docker 安装是否成功,可以运行一个简单的。配置完成后,重启 Docker 服务即可生效。系统会自动下载并安装所有的依赖包。保存并退出文件后,再试一次。

2024-08-10 10:15:00 1274

原创 CentOS 7设置静态IP地址的详细指南

配置静态IP地址是服务器或虚拟机管理的重要步骤之一,特别是在需要稳定、可预测的网络环境时。本文将详细介绍如何在CentOS 7上设置静态IP地址,帮助确保你的系统网络配置符合需求。

2024-08-10 09:15:00 3184

原创 CentOS系统的Docker从低版本升级到新版本

在CentOS系统上,升级Docker涉及一系列步骤,从备份数据到安装最新版本。为了安装最新版本的Docker,我们需要添加Docker官方的Yum仓库。:在升级完成后,建议运行几个测试容器,以验证Docker的正常运行。安装完成后,Docker的新版本已经成功部署到你的系统上。在升级之前,建议先查看当前的Docker版本。这可以帮助你在升级完成后,确认Docker是否成功更新到了新版本。完成安装后,需要启动Docker服务并配置为开机自启动,以保证在系统重启后Docker服务能够自动启动。

2024-08-09 15:15:00 1223

原创 Docker 部署 SkyWalking 的指南

通过 Docker 部署 SkyWalking,可以大大简化安装和配置过程。只需几个简单的命令,就可以快速搭建一个强大的应用性能监控系统。对于更复杂的需求,可以根据官方文档进行相应的配置和调整。Apache SkyWalking 官方文档。

2024-08-09 10:15:00 2026

原创 Nacos及其使用

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

2024-08-08 10:15:00 1685

原创 Java线程-深入理解线程start方法的实现原理和逻辑

通过上述分析,我们可以看到,从的调用到最终创建和启动操作系统线程,涉及多个步骤和层次的调用。调用方法。JVM 检查线程状态,并调用本地方法start0()。start0()方法调用 JVM 内部的方法创建 Java 线程对象。调用方法,通过创建操作系统级别的线程。新线程执行函数,最终调用 Java 线程的run方法。这种机制确保了 Java 线程能够高效地利用操作系统的多线程功能,同时提供了便捷的高层抽象,使开发者可以专注于业务逻辑,而无需关心底层实现细节。

2024-08-07 10:15:00 1337

原创 Java线程详细解读

Java线程与操作系统线程的关系是1:1映射,每个Java线程对应一个操作系统线程。线程优先级范围为1到10,默认5。高优先级线程更可能获得CPU时间片,但这取决于操作系统的调度机制。Java线程的优先级设置通过Thread类的setPriority方法传递给操作系统。Java线程调度依赖于操作系统的调度器,通常采用抢占式调度和时间片轮转策略。虚拟线程(JDK 19引入)是JVM管理的轻量级线程,适合高并发场景。虚拟线程的设计减少了线程上下文切换的开销,提高了并发性能。

2024-08-06 19:06:22 628

原创 Java并发编程-CountDownLatch使用与原理解析

CountDownLatch是一个同步工具类,它允许一个或多个线程等待其他线程完成操作。它通过一个计数器来实现,其初始值为线程数量。每当一个线程完成任务后,计数器值减一。当计数器的值变为零时,所有等待的线程可以继续执行。

2024-07-31 14:32:40 439

原创 Java并发编程-AbstractQueuedSynchronizer (AQS) 解读

AQS是 Java 并发包中的一个核心类,用于构建锁和其他同步器(如信号量、倒计时闩锁等)的基础框架,是实现 ReentrantLock、ReadWriteLock、CountDownLatch、Semaphore 等同步器的基础。AQS 通过一个内置的 FIFO 队列来管理线程的排队和同步状态。// 等待队列的头节点// 等待队列的尾节点// 同步状态// 获取同步状态// 设置同步状态// 使用 CAS 设置同步状态// 其他属性和方法...

2024-07-31 11:11:14 739

空空如也

空空如也

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

TA关注的人

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