自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_39939541的博客

别犹豫,就现在

  • 博客(216)
  • 资源 (5)
  • 收藏
  • 关注

原创 JAVA并发之对AQS的一点理解

JAVA并发之谈谈你对AQS的理解

2022-11-27 00:20:43 759

原创 接口压测指南

在做接口压测之前,需要定义清楚本次压测希望达到什么效果,符合什么样的预期,只有清晰的量化指标,才可以有效指导接口压测。例如:在100个并发的情况下,该接口响应时间P95百分位在200ms。压测工具一般有开源和自研,本文档主要罗列有哪些开源的接口压测工具。

2023-12-04 22:43:27 316

原创 Redis底层核心数据结构详解

redis底层核心数据结构分析

2023-10-23 22:18:00 764 3

原创 Spirng Cloud Alibaba Nacos注册中心的使用 (环境隔离、服务分级存储模型、权重配置、临时实例与持久实例)

关于nacos注册中心的一些功能使用(环境隔离+服务分级存储模型+权重配置+临时实例与持久实例)

2023-10-02 07:52:22 383

原创 Spring Cloud Alibaba Nacos 配置中心 (配置持久化与动态刷新) 实战

当使用@RefreshScope注解修饰一个Bean时,该Bean的属性值可以在运行时动态刷新,而不需要重新启动应用程序。RefreshScope注解的作用是告诉Spring容器,在配置信息发生变化时,需要重新创建或刷新被注解修饰的Bean。这样,我们就可以在不重启应用程序的情况下,获取最新的配置信息。但是如果想要在管理台修改配置属性,是不生效的,需要引入动态刷新配置。使用RefreshScope注解的方式非常简单,只需要在需要刷新的Bean上加上该注解即可。生成对应的nacos数据库,以及相关的表。

2023-10-02 07:49:43 715 1

原创 SpringCloud Alibaba 整合Sentinel的基本使用

Sentinel是由阿里巴巴开源的一款👽分布式系统的流量防卫兵👽,用于保护应用程序免受高并发、高负载和故障的影响。它主要用于实时监控应用程序的流量、熔断不可用的资源、降级服务以及提供实时的统计数据等功能。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性try {/*您的业务逻辑 - 开始*//*您的业务逻辑 - 结束*//*流控逻辑处理 - 开始*/");/*流控逻辑处理 - 结束*/if (entry!

2023-09-19 10:19:22 2749

原创 Jdk1.7之ConcurrentHashMap源码总结

ConcurrentHashMap是Java中的一个线程安全的哈希表实现,它在多线程环境下提供了高效的并发访问。

2023-09-09 14:56:48 231

原创 Jdk1.7之HashMap源码总结

发现ALTERNATIVE_HASHING_THRESHOLD = threshold,说明threshold变量赋的值,那threshold又是哪里来的,往上找会发现jdk.map.althashing.threshold,如果配置了该环境变量,就可以取到对应的值赋值给threshold ,如果没有配置该变量就取一个int 最大值 threshold = Integer.MAX_VALUE。尝试找几个数字测试后发现,可以看出与我们想要的结果相反,我们想要的是找到一个大于等于的。

2023-09-04 16:16:08 204

原创 Jvm之JIT优化详细解释

Jvm之JIT优化详细解释 标量替换、栈上分配、同步消除

2023-08-26 09:22:00 809

原创 JVM 之 垃圾收集算法详解

不会产生内存碎片。可以在有限的空间中进行垃圾回收。执行效率相对较低,因为需要遍历整个堆来标记和清除垃圾对象。可能会导致内存碎片问题,因为垃圾对象所占用的空间无法被重用。

2023-08-23 20:44:44 173

原创 Java反编译工具之javap介绍

Java反编译是指将已经编译成字节码的Java程序文件(.class文件)转换回源代码(.java文件)的过程。javap是一个Java反编译工具,用于查看Java类的字节码指令。它可以显示类的成员变量、方法、构造函数、注解和常量池等信息。使用javap命令的基本语法如下:其中,options是可选参数,用于指定一些选项,classes是要查看的Java类的名称。-c:显示类的字节码指令。-s:显示类的签名信息。-l:显示行号和本地变量表。

2023-08-22 21:12:06 434

原创 Java之线程的状态

进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态,而超时等待状态相当于在等待状态的基础上增加了超时限制,也就是超时时间到达时将会返回到运行状态。当线程调用同步方法时,在没有获取到锁的情况下,线程将会进入到阻塞状态。阻塞状态是线程阻塞在进入synchronized关键字修饰的方法或代码块(获取锁)时的状态,但是阻塞在java.concurrent包中Lock接口的线程状态却是等待状态,因为iava.concurrent包中Lock接口对于阻塞的实现均使用了LockSupport类中的相关方法。

2023-08-20 15:06:55 166

原创 Java中 notify/notifyAll、run/start、wait/sleep、有啥区别

wait()方法是Object类中定义的一个方法,它的作用是使当前线程进入等待状态,直到其他线程调用notify()或notifyAll()方法唤醒它。在消费者线程中,调用message.consume()方法消费消息,并通过notifyAll()方法唤醒等待中的生产者和消费者线程。在生产者线程中,调用message.produce()方法生产消息,并通过notify()方法唤醒等待中的消费者线程。在Java中,notify和notifyAll是用于线程间通信的方法,用于唤醒等待中的线程。

2023-08-19 19:01:06 248

原创 Redis中常见的缓存穿透、缓存击穿、缓存雪崩、缓存预热解决方案

缓存穿透是指用户请求的数据在缓存中不存在,同时在数据库中也不存在,导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据,会导致短时间内大量请求落在数据库上,造成数据库压力过大,甚至导致数据库承受不住而宕机崩溃。缓存穿透的关键在于在Redis中查不到指定的key值,与缓存击穿的根本区别在于传入的key在Redis中确实不存在。如果黑客传入大量不存在的key,那么大量的请求将直接打到数据库上,这是非常危险的情况。

2023-08-19 10:26:33 1460

原创 MySQL索引下推讲解

索引条件下推(Index Condition Pushdown,ICP)是MySQL 5.6版本后引入的一项新特性。它通过减少回表的次数来提高数据库的查询效率。在不使用ICP的情况下,当使用非主键索引(也称为普通索引或二级索引)进行查询时,存储引擎会通过索引检索到数据,然后将数据返回给MySQL服务器,服务器再判断数据是否符合查询条件。而在使用ICP的情况下,如果查询语句中存在某些索引列的判断条件,MySQL服务器将这部分条件传递给存储引擎。

2023-08-19 09:29:50 251

原创 JMM内存模型之happens-before阐述

如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,而且第一个操作的执行顺序排在第二个操作之前。两个操作之间存在happens-before关系,并不意味着Java平台的具体实现必须要按照 happens-before关系指定的顺序来执行。如果重排序之后的执行结果,与按happens-before关系来执行的结果一致,那么这种重排序并不非法。

2023-08-17 21:34:09 193

原创 常见的哈希函数的构造方法简介

其次,对于特定的关键字集合,可能会出现哈希冲突,即不同的关键字映射到了同一个索引位置。但需要注意的是,选择合适的除数对于哈希表的性能影响较大,不同的除数可能导致不同的哈希冲突情况。实际上,直接定址法可以看作是一种特殊的哈希函数,其哈希函数的计算过程非常简单,直接将关键字作为索引值。折叠法(Folding Method)是一种哈希函数的构造方法,用于将给定的关键字(Key)映射到哈希表的索引位置。在直接定址法中,关键字的取值范围通常需要与数组的大小相匹配,以便每个关键字都能被映射到数组中的一个位置。

2023-08-16 23:01:52 1012

原创 Integer中缓存池讲解

Integer缓存池是一种优化技术,用于提高整数对象的重用和性能。在Java中,对于整数值在-128 到 127之间的整数对象,会被放入缓存池中,以便重复使用。这是因为在这个范围内的整数值被频繁使用,因此重用这些对象可以节省内存和提高性能。当使用自动装箱机制创建整数对象时,如果对象的值在缓存池范围内,会直接返回缓存池中的对象,而不是创建新的对象。这个特性可以通过调用Integer.valueOf(int)方法来实现。

2023-08-15 23:28:19 1192

原创 Java8之Optional类的基本使用

Optional是一个容器对象,它可能包含某个值,也可能不包含。它的设计目的是为了解决空指针异常问题。使用Optional可以避免在代码中显式地检查null值,从而使代码更加简洁和可读。

2023-08-15 22:46:32 574

原创 Java反射相关类以及底层原理

在上面的示例中,我们创建了一个MyClass类的实例,并且使用getField()方法获取了name字段的Field对象,使用getDeclaredField()方法获取了age字段的Field对象。可以使用Class类的getField()方法或getDeclaredField()方法获取Field对象,然后使用get()方法获取字段的值,或者使用set()方法设置字段的值。通过Class对象的方法,可以获取类的构造器、字段、方法等成员信息,并可以动态地创建对象、调用方法、访问字段等。

2023-08-15 22:08:42 261

原创 Object 类的常见方法

【代码】Object 类的常见方法。

2023-08-15 20:55:35 275

原创 抽象类(abstract class)和接口(interface)的区别总结

当JDK 8引入了默认方法和静态方法功能后,接口不再是纯粹的抽象方法的集合,而是可以包含具体实现的方法。// 抽象方法// 默认方法// 静态方法@Override// 调用抽象方法// 调用默认方法// 调用静态方法可以看到,接口MyInterface包含了一个抽象方法abstractMethod、一个默认方法defaultMethod和一个静态方法staticMethod。在MyClass类中,实现了抽象方法abstractMethod,并继承了默认方法和静态方法。

2023-08-14 22:25:04 589

原创 MapStruct 中 Java Bean 映射代码生成器的基本使用

MapStruct是一个Java注解处理器,用于自动生成Java bean之间的映射代码。它可以大大简化数据转换的过程,减少手动编写转换代码的工作量。

2023-08-14 21:19:09 296

原创 为什么String要设计成不可变的

为什么要将String设计为不可变的呢?这个问题一直困扰着许多人,甚至有人直接向Java的创始人James Gosling提问过。🎃“只要有可能,我都会使用不可变变量”🎃。那么,他为什么会给出这样的回答呢?这背后的原因是什么?他是基于哪些思考做出的呢?实际上,将String设计为不可变的主要基于以下几个方面的考虑:缓存、安全性、线程安全和性能。首先,不可变性使得String对象可以被缓存。由于String是不可变的,它们的值在创建后就不能被修改。

2023-08-13 07:35:04 290

原创 Java中创建对象的方式

然后,重写了clone()方法,调用父类的clone()方法,并将返回的对象进行强制转换。在上面的示例中,我们首先使用 MyClass.class 获取了类的 Class 对象,然后通过 getConstructor() 方法获取了默认构造函数的 Constructor 对象。Class 类的 newInstance() 方法是一个方便的方法,它会调用类的默认构造函数来创建一个对象。在要克隆的类中,重写clone()方法,调用父类的clone()方法,并将返回的对象进行强制转换。

2023-08-11 07:04:01 146

原创 Redis scan命令 基本使用

需要注意的是,由于 SCAN 命令的不准确性,如果对于某些场景或应用来说,需要精确的键名列表,可以考虑使用 KEYS 命令。Redis 的 KEYS * 命令可以列出所有的键名,但它的执行方式是通过遍历整个键空间来匹配符合条件的键,这在数据量较大时会导致性能问题,因为遍历整个键空间的时间复杂度是 O(n),其中 n 是键的总数。总的来说,SCAN 命令的引入是为了解决 KEYS * 命令可能导致的性能问题,提供了一种更高效、可控的方式来遍历键空间。Redis的SCAN命令用于迭代遍历数据库中的key。

2023-08-10 07:23:34 2267

原创 分布式理论之CAP与BASE

CAP是分布式系统理论中的一个重要概念,它代表了一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。BASE理论是对分布式系统设计中一致性和可用性的权衡的理论。CAP理论和BASE理论都是分布式系统设计中的重要理论,它们都关注一致性和可用性的权衡。

2023-08-08 06:57:56 102

原创 如何在IDEA中启动多个SpringBoot服务实例

在IDEA中,"Allow parallel run"是一个配置选项,用于指定是否允许并行运行多个相同的启动配置。当您在IDEA中运行一个启动配置(例如一个Spring Boot实例)时,IDEA会默认阻止您同时运行另一个相同的启动配置。这是为了避免端口冲突等问题。然而,在某些情况下,您可能需要同时运行多个相同的启动配置,例如在进行集成测试时,需要同时启动多个相同的服务实例。这时,您可以打开"Allow parallel run"选项,以允许并行运行多个相同的启动配置。

2023-08-07 06:43:10 2173

原创 Mysql如何实现XA规范

XA是分布式事务处理中的一个标准接口,用于协调多个参与方(如数据库、消息队列等)的事务处理。XA全称为eXtended Architecture,它定义了一套标准的接口和协议,用于实现分布式事务的提交和回滚。XA规范通过定义事务管理器和资源管理器之间的接口协议,实现了分布式事务的数据一致性和可靠性,但也存在一定的性能开销和复杂性。在设计和实施分布式系统时,需要仔细权衡利弊,选择适合的事务处理方式。

2023-08-06 09:38:26 378

原创 单体架构和微服务架构的区别

单体架构是一种传统的软件架构模式,它将整个应用程序作为一个单一的、完整的单元来构建和部署。在单体架构中,所有的功能模块和组件都集中在一个代码库中,共享同一个数据库和资源。在单体架构中,应用程序通常由三个主要组件组成:用户界面(UI):用户界面负责与用户进行交互,接收输入和显示输出。它可以是一个网页、桌面应用程序或移动应用程序。业务逻辑层:业务逻辑层包含了应用程序的核心功能和业务规则。它处理用户请求,执行相应的操作,并返回结果。这一层通常包括各种服务、控制器、模型和业务逻辑。

2023-08-05 08:43:18 1220

原创 面向对象五大基本原则

简而言之,接口隔离原则要求将庞大的接口拆分成更小的、更具体的接口,以避免接口过于臃肿和不必要的依赖关系。它通过将不同的职责分离到不同的类中,提高了代码的可读性、可维护性和可扩展性,并降低了系统的耦合性。遵循开放封闭原则可以提高代码的可维护性和可扩展性,降低系统的耦合性,是构建高质量、可维护的软件系统的重要原则之一。同时,通过扩展现有的代码,可以实现新功能,而不会对已有的代码进行破坏性的修改。里氏替换原则的核心思想是,任何基类的实例都可以在程序中被其子类的实例替换,而不会影响程序的正确性。

2023-08-04 07:33:08 3383

原创 Unsafe类的简单介绍

Java中的Unsafe类是一个非常强大且危险的工具类,它提供了直接操作内存和执行低级别操作的方法,例如直接操作对象的属性和数组元素、分配和释放内存、执行CAS(Compare and Swap)操作等。Unsafe类通常被JDK内部使用,而且不建议在普通的应用程序中使用。由于Unsafe类的功能非常底层,它可以绕过Java语言的访问控制机制和安全检查,直接对内存进行操作。这也是为什么它被称为"Unsafe",因为它可以导致程序在运行过程中出现不安全的情况,例如内存泄漏、数组越界、数据竞争等。

2023-08-03 00:41:50 212

原创 Nacos 持久化实例 删不掉问题( Please unregister instance first )

请直接看第三部分。

2023-08-02 07:01:04 4717

原创 Spring事务传播机制详细讲解

事务传播机制允许开发者根据实际需求来控制事务的行为。通过合理选择事务传播机制,可以保证事务的一致性和可靠性,提高系统的稳定性和性能。需要注意的是,事务传播机制只对方法级别的事务起作用,对注解方式的事务不适用。在使用注解方式时,可以通过@Transactional注解的propagation属性来指定事务的传播行为。

2023-08-01 07:03:23 1452

原创 Java中static关键字的作用

static {} }分析总结:在这个示例中,我们使用静态代码块来输出"Static block"。静态代码块在类加载时执行,且只会执行一次。在main方法中,我们输出"Main method"。} }分析总结:在这个示例中,我们定义了一个静态内部类InnerClass。静态内部类可以直接通过外部类名来访问,无需创建外部类的对象。在main方法中,我们创建了InnerClass的对象inner,并通过inner.printX来调用InnerClass的printX方法,它会打印x的值。

2023-07-30 18:48:03 490

原创 Java中动态代理的实现方式

动态代理(Dynamic Proxy)是一种在运行时创建代理对象的机制,它允许我们在不事先知道具体类型的情况下,通过代理对象来调用目标对象的方法。动态代理通常使用在面向对象编程中的AOP(面向切面编程)中,用于在目标对象的方法执行前后,添加一些额外的逻辑(如日志记录、性能监控、事务管理等),而不需要修改目标对象的源代码。

2023-07-29 08:26:22 650

原创 ElasticSearch之IK分词器安装以及使用介绍

elasticsearch 默认的内置分词器对中文的分词效果可能并不理想,因为它们主要是针对英文等拉丁语系的文本设计的。如果要在中文文本上获得更好的分词效果,我们可以考虑使用中文专用的分词器。IK 分词器是一个开源的中文分词器插件,特别为 Elasticsearch 设计和优化。它在中文文本的分词处理上表现出色,能够根据中文语言习惯进行精细的分词。IK 分词器允许用户自定义词典,可以添加新词、调整词频等,以便更好地适应特定的领域或需求。自定义词典可以提高分词的准确性和召回率。

2023-07-27 06:23:56 11171

原创 什么是死锁,如何解决

死锁是指在执行过程中,两个或两个以上的进程(或线程)由于竞争资源或彼此通信而阻塞,导致无法继续执行的情况。如果没有外部干预,这些进程将无法向前推进。这种状态被称为系统死锁或死锁产生。这些相互等待的进程被称为死锁进程。🕵️‍♀️面试官:🕵️‍♀️你给我将清楚死锁,我就录用你🐱‍🚀面试者:🐱‍🚀你录用我,我就给你将清楚。

2023-07-26 07:00:17 10204 1

原创 synchronized是如何保证原子性、可见性、有序性的

在锁未释放之前,其他线程无法再次获取锁,因此通过monitorenter和monitorexit指令可以保证被synchronized修饰的代码在同一时间只能被一个线程访问,其他线程在锁未释放之前无法访问该代码块。例如,线程1获得时间片开始执行,但在执行过程中,CPU时间片耗尽,线程1需要让出CPU。因此,在多线程场景下,由于时间片切换的原因,原子性问题可能会出现。在Java内存模型中,所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中使用到的变量的主内存副本拷贝。

2023-07-25 06:41:46 1222

原创 实现线程同步的几种方法

线程同步是指在多线程环境下,通过协调和控制线程的执行顺序和访问共享资源的方式,确保线程之间能够按照一定的顺序合作和共享资源,以避免竞争条件和数据不一致的问题。在多线程环境中,由于多个线程同时访问共享资源,可能会导致数据不一致或者竞争条件的问题。线程同步的目的就是保证共享资源的一致性和正确性,避免出现数据错误或者程序异常的情况。线程同步的实现可以通过使用同步关键字、锁对象、条件变量等手段来实现。通过合理地使用线程同步机制,可以保证多线程程序的正确性和稳定性,避免出现数据错误和程序崩溃的情况。

2023-07-24 11:57:58 1451

JAVA+Redis+哨兵架构搭建+供参考学习使用

JAVA+Redis+哨兵架构搭建+供参考学习使用

2022-11-18

JAVA+搜索引擎+ElasticSearch+供参考学习使用

JAVA+搜索引擎+ElasticSearch+供参考学习使用

2022-11-18

Linux环境+脚本+jar包启动脚本+供参考学习使用

Linux环境,jar包启动脚本,生产环境可以使用的,欢迎尝试

2022-11-18

Java+软件开发+反编译工具+学习使用

解压直接使用即可

2022-11-18

JAVA+SSM+网上订餐系统+学习使用

JAVA+SSM+网上订餐系统+学习使用

2022-11-18

消息中间件+RocketMq+入门文档+用于学习

帮助初学者掌握消息队列

2022-11-16

审批流程图详细制作通俗易懂

审批流程图制作

2022-11-16

审批流程图在线编辑步骤

审批流程图在线编辑步骤

2022-11-16

中间件+RocketMq+集群部署

中间件+RocketMq+集群部署

2022-11-12

wrcyyxk_v2020.09.11.exe

wrcyyxk_v2020.09.11.exe

2021-03-07

springboot之yml配置文件信息加密.docx

springboot之yml配置文件信息加密.docx

2021-03-01

基于springboot实现表单重复提交.docx

基于springboot实现表单重复提交.docx

2021-03-01

IDEA远程调试SpringBoot项目.pdf

IDEA远程调试SpringBoot项目.pdf

2021-03-01

空空如也

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

TA关注的人

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