- 博客(47)
- 收藏
- 关注
原创 内存泄漏产生原因
在 Java 中,equals()和hashCode()方法通常用于对象比较和哈希表(例如HashMapHashSet)中的对象查找与存储。如果这两个方法没有正确实现,它们可能导致内存泄漏或性能问题。主要的问题通常出现在哈希容器中,特别是HashMap和HashSet,因为它们依赖于这两个方法来存储和查找对象。
2025-02-17 17:59:58
1446
原创 jvm的垃圾回收
Java 虚拟机(JVM)的垃圾回收(GC)是自动管理内存的一种机制,它的目的是自动回收那些不再被使用的对象所占用的内存空间,以避免内存泄漏和提高系统的性能。JVM 的垃圾回收是由垃圾回收器(GC)实现的,它会定期回收堆内存中不再被引用的对象。
2025-02-15 21:21:56
654
原创 java运行时内存
在Java中,指的是JVM(Java虚拟机)在执行Java程序时分配和管理的内存区域。JVM的内存管理系统将内存分为多个区域,每个区域有不同的用途和管理方式。理解这些内存区域有助于我们优化Java应用的性能,避免内存泄漏、堆溢出等问题。
2025-02-14 22:52:15
469
原创 JVM运行时数据区
JVM 的运行时数据区分为多块内存区域,各自承担着不同的任务。方法区用于存储类信息、常量和静态变量;堆用于存储对象实例和数组;栈用于方法调用和局部变量的管理;本地方法栈用于支持 JNI 本地方法的执行;程序计数器记录每个线程的执行状态;直接内存则用于 NIO 等操作。这些内存区域共同支撑着 JVM 的执行过程,确保 Java 程序能够高效、安全地运行。
2025-02-12 21:58:02
562
原创 JVM类加载器
继承,重写loadClass方法,控制类的加载顺序和策略。在自定义加载器中,你可以决定是否调用方法,如果你不调用父类加载器的loadClass,就打破了双亲委派机制。自定义类加载器示例// 构造方法传入父加载器@Override// 1. 如果是需要自己加载的类,绕过父加载器// 自定义加载逻辑,可以从自定义位置加载类文件// 2. 否则,调用父加载器加载@Override// 通过自定义方式加载类,例如从文件系统或网络中读取字节码// 加载字节码的自定义实现。
2025-02-12 21:45:33
593
原创 java类的生命周期
在Java类的生命周期中,**加载阶段(Loading)**是类生命周期的第一个阶段,指的是JVM将类的字节码文件从外部(通常是硬盘或其他存储介质)加载到内存中的过程。加载阶段涉及到类加载器(ClassLoader)从类路径中找到相应的类文件,并将其加载到JVM内存中以便后续使用。请求加载:查找类文件:加载类字节码:创建类的对象:类加载器的作用非常重要,它负责从类路径中查找并加载类文件。在加载类时,JVM会根据类加载器的机制来决定如何加载不同的类。类加载器有几种类型,它们的职责如下:引导类加载器(Boots
2025-02-12 16:54:21
1457
原创 MySQL触发器
触发器是 MySQL 中一种非常强大的机制,能在特定操作(如插入、更新、删除)发生时自动执行预定义的 SQL 代码。它适用于自动化数据验证、维护数据完整性、审计日志等场景,但也需要注意其对性能的影响。触发器是作用于数据行的,特别是在语句的上下文中。这个关键字表示触发器会对每一行受影响的数据进行操作。
2025-02-10 18:10:56
622
原创 truncate和delete有什么区别
特性DELETETRUNCATE删除方式逐行删除整体删除表数据是否记录日志记录每一行的删除操作只记录数据页被清空是否触发触发器会触发触发器不会触发触发器是否可以使用 WHERE 子句可以不可以删除速度较慢,尤其在删除大量数据时快速,适合删除大量数据是否能回滚可以回滚(如果未提交)通常不可回滚是否影响表结构不影响表结构不影响表结构,但会重置自增计数器锁定粒度行级锁表级锁。
2025-02-10 18:07:19
388
原创 MySQL聚集索引和非聚集索引
聚集索引是数据表的物理存储顺序和索引顺序一致的索引。也就是说,表中的数据行会按照聚集索引的顺序存储。一个表只能有一个聚集索引,因为表中的数据行只能按一个顺序进行存储。非聚集索引是独立于数据行的索引,它在存储结构上不影响数据行的顺序。非聚集索引创建了一个额外的结构,它包含指向实际数据行的指针。一个表可以有多个非聚集索引。聚集索引直接决定了数据的存储顺序,因此表中只能有一个聚集索引,通常用于主键字段,适合范围查询。非聚集索引。
2025-02-10 17:47:48
768
原创 java面试题:HashMap使用时有哪些可以提升使用技巧
时,有一些技巧可以提升其性能和使用效率,主要涉及初始化、扩容、线程安全、遍历、避免哈希碰撞等方面。实现,避免哈希冲突过多导致链表过长(JDK 8 以后,当链表长度超过。,在并发环境下可能会导致数据不一致或死循环(JDK 7 以前的。设计不合理,可能会导致大量哈希冲突,影响查询性能。,但如果你能预估存储的数据量,最好提前指定合适的。,并重新计算哈希位置(rehash)。对于可能重复的字符串,可以考虑使用。可能变化,导致数据丢失或找不到。,避免频繁扩容带来的性能损耗。时,会转换成红黑树)。
2025-02-10 16:37:09
486
原创 Java 字节码文件(.class)的组成
1..class文件的基本结构Java 字节码文件采用严格的二进制格式u4 magic;// 魔数,标识该文件是一个 Java 字节码文件// 次版本号// 主版本号// 常量池大小// 常量池// 访问标志(如 public, abstract, final 等)// 当前类的索引// 父类的索引// 实现的接口数量// 接口表// 成员变量数量// 字段表(成员变量)// 方法数量// 方法表// 属性数量// 其他属性表u1(1 字节): 无符号 8 位整数。
2025-02-09 19:39:12
714
原创 数据库左连接、右连接、内连接、全连接、交叉连接、自连接、自然连接
用于连接多个表并返回符合条件的数据。以相同列名的字段连接(如。显示每个员工及其上级。
2025-02-09 14:17:19
285
原创 说说 Java 中的引用类型(强引用、软引用、弱引用、虚引用)及其应用场景。
在 Java 中,引用类型用于描述对象与其引用之间的关系,影响对象的生命周期和垃圾回收行为。Java 提供了四种引用类型:强引用、软引用、弱引用和虚引用。适用于需要在对象被回收时执行清理操作的场景,如文件句柄、数据库连接等资源的释放。无法通过虚引用获取对象的引用,主要用于在对象被垃圾回收时收到通知。适用于需要在垃圾回收时自动清理的对象,如监听器、回调等。当内存不足时,垃圾回收器会回收软引用指向的对象。只要垃圾回收器运行,弱引用指向的对象就会被回收。最常见的引用类型,直接通过变量引用对象。
2025-02-07 23:04:28
179
原创 Java 的 GC 机制是如何工作的?常见的垃圾回收算法有哪些?
Java 的垃圾回收机制(GC)是其内存管理的核心功能之一,负责自动回收不再使用的对象所占用的内存空间,从而避免内存泄漏和溢出等问题。在 Java 中,GC 机制主要采用分代收集算法,将堆内存划分为年轻代和老年代,并对不同代采用不同的回收策略,以提高回收效率。了解 GC 的工作原理和常见算法,有助于开发者优化 Java 应用的性能,避免内存泄漏和溢出等问题。需要注意的是,标记-清除算法可能会产生内存碎片,因此在实际应用中,通常会结合其他算法来优化性能。GC 的主要任务是识别和回收不再使用的对象。
2025-02-07 23:02:06
159
原创 java基础面试题:从final关键字到JVM内联优化
示例:2. 修饰方法防止方法被子类重写,但子类仍然可以继承该方法(只能使用,不能修改)。示例:3. 修饰类防止类被继承,即该类不能有子类。示例:4. 结合 (常量定义)通常用于定义不可变的全局常量:二、追问: 修饰的方法一定会被 (内联优化)吗?内联优化(Inlining Optimization) 是一种 方法调用优化技术,它的核心思想是: 用被调用方法的代码直接替换方法调用,避免方法调用的开销,提高运行效率。 修饰的方法不一定会被 inlin
2025-02-07 20:11:15
702
原创 SQL和NoSQL的区别
SQL 数据库以其结构化、标准化和强一致性著称,适合传统企业级应用;而 NoSQL 数据库则以灵活、可扩展和高性能见长,更适用于动态多变和海量数据处理的场景。选择哪种数据库主要取决于应用需求、数据结构和对性能与一致性的权衡。
2025-02-07 14:19:48
283
原创 Redis HyperLogLog
它的主要优势在于,即使在处理非常庞大的数据集时,也能以固定且极小的内存空间提供近似的基数统计结果。需要注意的是,HyperLogLog 提供的是基数的近似值,虽然误差率较低(约 0.81%),但在对精度要求极高的场景下,可能需要考虑其他数据结构。:每个 HyperLogLog 键在 Redis 中仅占用 12 KB 内存,无论添加多少不同的元素,内存占用都是固定的。:HyperLogLog 并不存储实际的元素,而是通过算法估计集合的基数,因此无法获取具体的元素列表。的 HyperLogLog 中。
2025-02-07 10:45:39
436
原创 Redis中键的命名规范
在 Redis 中,键名的命名规范对于数据的组织和管理至关重要。采用合理的命名约定可以提高数据的可读性和可维护性。)分隔不同的层次,形成类似命名空间的效果。这种方式有助于避免键名冲突,并使数据结构更加清晰。通过遵循上述命名规范,可以使 Redis 中的数据结构更加清晰,提升数据管理的效率。以下是Redis 中使用哈希(Hash)类型存储用户信息的示例。这种命名方式使得键名结构清晰,层次分明,便于管理和查找。为了更详细地描述数据,可以增加更多的层次。表示 ID 为 1 的用户。注意到这里键为user:1。
2025-02-07 10:12:34
334
原创 spring cloud gateway
创建一个“时间范围”断言工厂,控制请求只能在指定时间范围内访问(1)创建自定义 Predicate 工厂类在 Spring Cloud Gateway 中,自定义断言工厂必须继承,并且类名必须以结尾。@Component@Override// 获取当前时间// 检查当前时间是否在配置的时间范围内// 这个方法用于绑定 yml 配置中的参数@Override// 配置类📌解释继承这里的Config是一个内部类,用于接收YAML 配置中的参数。
2025-02-05 20:35:53
715
原创 网关Spring Cloud Gateway
Spring Cloud Gateway 是基于 Spring Boot 和 Spring WebFlux 构建的 API 网关,主要用于微服务架构中的流量管理和请求转发。它提供了动态路由、负载均衡、权限控制、限流等功能,能够替代传统的 Zuul 网关,并且性能更优。Spring Cloud Gateway 主要由 三大核心组件 组成:在 中定义路由规则:解释:可以创建自定义过滤器来处理请求,例如记录日志: Spring Cloud Gateway 的优势基于 WebFlux,性能更高
2025-02-05 19:41:31
523
原创 sentinel热点规则
参数索引设为0为了对第一个参数设置规则,单机阈值为1限定每秒同一个userId每秒只能请求一次,超过一次会被流控,这里如果不携带userId(required = false)则不会被流控。可以通过高级选项,添加例外项,给特定的userId设置一个很大的限流阈值,达到对某一特定userId不限流。@SentinelResource()设置热点资源,写好fallback函数。添加例外项,对特定值设置限流阈值为0,则可以实现禁止访问。
2025-02-04 21:46:01
130
原创 熔断降级如何理解
熔断降级是分布式系统中常用的服务保护机制,主要用于防止系统过载、保障核心服务的稳定性。它包括**熔断(Circuit Breaker)
2025-02-04 19:06:16
229
原创 Java反射
Java 反射是 Java 语言中一种强大而灵活的机制,它允许程序在运行时检查和操作类、接口、方法、字段等各种 Java 元素,而不需要在编译时就知道这些元素的具体信息。
2025-02-02 20:37:00
386
原创 Sentinel用法
使用sentinel设置了流控规则,当请求因为违背了流控规则而得不到正常响应出现异常时,我们希望能够自定义异常处理,可以自定义一个类继承BlockExceptionHandler。异常处理,使用@SentinelResource(),createOrderFallback()为自己定义定义的兜底函数,执行自定义的异常处理。OpenFeign方式的异常处理,ProductFeignClientFallback为自定义的兜底函数。
2025-02-02 20:36:05
149
原创 springCloud中Nacos配置中心发布的配置属性和application.properties中的配置属性谁的优先级更高?
在springCloud项目中,项目启动,会将导入的外部配置作为高优先级配置,自身配置视为低优先级配置,将二者合并,先扫描高优先级配置,合并时已经添加过的配置不会再添加,生成有效配置,存入环境变量,项目运行过程中配置属性都是从环境变量中获取。因此,Nacos配置中心发布的配置属性作为外部导入配置,优先级更高。
2025-02-01 18:53:31
157
原创 Nacos配置中心
在Nacos中的配置列表中创建配置,Data ID和spring.config.import一致,然后发布。@ConfigurationProperties批量绑定配置属性,使得配置的属性注入到一个类中。那么在springBoot项目中要使用配置中心,首先导入坐标。在application.properties中写以下配置。@RefreshScope激活配置属性的自动刷新。编码方式监听配置属性的变化,在启动类中加入以方法。
2025-02-01 18:44:08
209
原创 Nacos 配置中心:配置属性的命名规则
在 Nacos 配置中心中,配置属性的命名规则非常重要,它直接影响到配置的管理、读取和使用。通过合理的命名规则和最佳实践,可以更好地管理和使用 Nacos 配置中心。:Data ID 是配置的唯一标识符,通常与配置文件名称或应用名称相关。:Namespace 是配置的命名空间,用于隔离不同环境或租户的配置。:Group 是配置的分组,用于隔离不同环境、项目或模块的配置。)对配置属性进行分层命名,便于管理和读取。:使用分层命名,推荐使用 YAML 格式。中的版本号或时间戳管理配置的版本。
2025-02-01 18:30:26
570
原创 Nacos如果注册中心宕机了,那么远程调用微服务还能进行吗?
首次远程调用分为两步,第一步请求注册中心获取微服务地址列表,第二步,给对方服务的某个地址发送请求,RestTemplate用于远程调用,设有实例缓存,首次请求注册中心获取微服务地址列表后会将列表存储到实例缓存,实例缓存与注册中心保持实时更新。因此,注册中心宕机了,远程调用微服务是否能正常进行需要分情况讨论,如果是首次远程调用,那么这次远程调用不能进行,如果不是首次调用,并且所要调用的微服务没有变动,那么这次远程调用可以正常进行。
2025-02-01 18:03:42
267
原创 Nacos远程调用负载均衡实现
在restTemplate上加上@LoadBalanced的注解,那么在代码中使用restTemplate远程调用时,就会有负载均衡的功能。
2025-02-01 17:40:48
160
原创 Nacos远程调用
在订单微服务代码中调用商品微服务,通过discoveryClient获得订单微服务的instances,instances中包含了Nacos中所有的商品微服务,instances.get(0)即获取列表中第一个商品微服务,通过restTemplate发送请求并将放回的json格式数据转换成Product类的对象。所谓负载均衡,就是每次调用instances列表中的不同商品微服务,如第一次instances.get(0),第二次instances.get(1)...
2025-02-01 17:24:14
113
原创 Nacos
Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台,主要用于构建云原生应用。Nacos 可以作为服务注册中心,支持服务提供者注册服务和消费者发现服务。服务提供者将服务注册到 Nacos,消费者通过 Nacos 发现服务。通过 Nacos,可以显著提升微服务架构的可维护性和灵活性。使用 Nacos 配置中心管理应用的配置,支持动态更新。Nacos 支持集中管理应用的配置,并支持动态更新。支持多环境(如开发、测试、生产)的配置和服务管理。集中管理应用的配置,支持动态更新。
2025-02-01 15:05:36
1486
原创 HNSW(Hierarchical Navigable Small World)算法
HNSW 是一种高效的近似最近邻搜索算法,通过构建多层小世界图实现快速搜索。它的核心优势在于高效、动态和可调,适用于大规模高维数据的检索任务。通过调整参数(如。
2025-01-28 20:27:36
733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人